Finished server talk

This commit is contained in:
Dultus 2024-12-07 21:17:47 +01:00
parent 0fbf4cd919
commit ea3d1906da
45 changed files with 963 additions and 209 deletions

View file

@ -1,19 +1,16 @@
const url = 'http://127.0.0.1:5180/api/';
async function ping(){
fetch ('http://127.0.0.1:5180/api/ping')
.then(data => {
console.log(data);
});
const data = await fetch ('http://127.0.0.1:5180/api/ping');
console.log(data);
}
async function setBaseDataHorseAPI(id, basedata) {
try {
console.log("Setting horse data");
console.log("ID:", id); // Log ID to ensure it's received correctly
console.log("Basedata:", basedata); // Log the entire horse data to check
console.log("ID:", id);
console.log("Basedata:", basedata);
const apiUrl = url+`setHorseBasicData/id=${id}`;
// Wait for the API call to complete
const apiUrl = url+`updateHorse/${id}/BasicData`;
const response = await fetch(apiUrl, {
method: 'POST',
body: JSON.stringify(basedata),
@ -21,26 +18,16 @@ async function setBaseDataHorseAPI(id, basedata) {
'Content-Type': 'application/json'
}
});
console.log("API Response:", response); // Log the response from the API
console.log("API Response:", response);
} catch (error) {
console.error("Error setting horse data: " + error.message);
}
}
async function getHorseAPI(id) {
let horseData;
const apiUrl = url+`getHorse/id=${id}`;
await fetch(apiUrl)
.then(response => response.json())
.then(data => {
horseData = data;
});
return horseData;
}
async function getHorseLoadStateAPIAsync(id)
{
let horseData;
const apiUrl = url+`getHorseLoadState/id=${id}`;
const apiUrl = url+`getHorse/${id}/LoadState`;
await fetch(apiUrl)
.then(response => response.json())
.then(data => {
@ -48,32 +35,37 @@ async function getHorseLoadStateAPIAsync(id)
});
return horseData;
}
async function setHorsePedigreeAPIAsync(id, pedigreeData)
{
const apiUrl = url+`setHorsePedigree/id=${id}`;
const apiUrl = url+`updateHorse/${id}/Pedigree`;
const response = await fetch(apiUrl, {
method: 'POST',
body: JSON.stringify(pedigreeData),
body: JSON.stringify({RelatedIds:pedigreeData}),
headers: {
'Content-Type': 'application/json'
}
});
return response;
}
async function setHorseTrainingAPIAsync(id, training)
{
const apiUrl = url+`setHorseTraining/id=${id}`;
const apiUrl = url+`updateHorse/${id}/Training`;
const response = await fetch(apiUrl, {
method: 'POST',
body: JSON.stringify(training),
body: JSON.stringify({ TrainingText: training }),
headers: {
'Content-Type': 'application/json'
}
});
return response;
}
async function setHorseGeneticsAPIAsync(id, genetics)
{
const apiUrl = url+`setHorseGenetics/id=${id}`;
const apiUrl = url+`updateHorse/${id}/Genetics`;
console.log("Accessing API at:", apiUrl);
const response = await fetch(apiUrl, {
method: 'POST',
body: JSON.stringify(genetics),
@ -81,15 +73,32 @@ async function setHorseGeneticsAPIAsync(id, genetics)
'Content-Type': 'application/json'
}
});
return response;
}
async function setHorseHealthAPIAsync(id, health)
{
const apiUrl = url+`setHorseHealth/id=${id}`;
const apiUrl = url+`updateHorse/${id}/Health`;
const response = await fetch(apiUrl, {
method: 'POST',
body: JSON.stringify(health),
body: JSON.stringify({ HealthData: health }),
headers: {
'Content-Type': 'application/json'
}
});
}
return response;
}
// Neue Funktion für Achievements
async function setHorseAchievementsAPIAsync(id, achievements)
{
const apiUrl = url+`updateHorse/${id}/Achievements`;
const response = await fetch(apiUrl, {
method: 'POST',
body: JSON.stringify({ Achievements: achievements }),
headers: {
'Content-Type': 'application/json'
}
});
return response;
}

View file

@ -2,57 +2,83 @@ importScripts("./API.js");
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.action === "updateHorseData") {
updateHorseButton(); // Call the function
// Kein async/await mehr in diesem Aufruf
updateHorseButton();
}
// Kein return true erforderlich, da wir kein asynchrones sendResponse nutzen
});
async function updateHorseButton() {
function sendMessageAsync(tabId, message) {
return new Promise((resolve, reject) => {
chrome.tabs.sendMessage(tabId, message, (response) => {
if (chrome.runtime.lastError) {
reject(new Error(chrome.runtime.lastError.message));
} else {
resolve(response);
}
});
});
}
function updateHorseButton() {
console.log("Updating horse data");
// Query the active tab
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
if (tabs.length === 0) {
// Aktiven Tab ermitteln
new Promise((resolve) => {
chrome.tabs.query({ active: true, currentWindow: true }, resolve);
})
.then((tabs) => {
if (!tabs || tabs.length === 0) {
console.error("No active tab found.");
return;
return; // Beende die Kette
}
const activeTabId = tabs[0].id;
// First: Get horse basic data
chrome.tabs.sendMessage(
activeTabId,
{ action: "getHorseBasicData" },
async function (response) {
if (!response || !response.success) {
console.error("Failed to get horse data from content script.");
return;
// Schritt 1: Basisdaten des Pferdes holen
return sendMessageAsync(activeTabId, { action: "getHorseBasicData" })
.then((basicDataResponse) => {
if (!basicDataResponse || !basicDataResponse.success) {
console.error("Failed to get horse basic data:", basicDataResponse ? basicDataResponse.message : "No response");
return; // Beende die Kette
}
console.log("Horse data received:", response.data);
const horseData = response.data;
console.log("Horse data received:", basicDataResponse.data);
const horseData = basicDataResponse.data;
// Check if horse exists via API
const existingHorse = await getHorseAPI(horseData.id);
if (!existingHorse || existingHorse.message === "Horse not found") {
console.warn("Horse not found in the API.");
return;
}
// Update horse data in the API
await setBaseDataHorseAPI(horseData.id, horseData);
// Second: Get horse current data
chrome.tabs.sendMessage(activeTabId, { action: "getHorseCurrentData", data: { id: horseData.id } }, function (currentDataResponse)
{
if (!currentDataResponse) {
console.error("Failed to get current horse data.");
return;
// Pferd beim Backend prüfen
return getHorseLoadStateAPIAsync(horseData.id)
.then((existingHorse) => {
if (!existingHorse || existingHorse.message === "Horse not found") {
console.warn("Horse not found in the API.");
return; // Beende die Kette
}
console.log("Current horse data received:", currentDataResponse);
}
);
}
);
// Basisdaten an die API senden
return setBaseDataHorseAPI(horseData.id, horseData)
.then(() => {
console.log("Base data updated in API for horse ID:", horseData.id);
// Schritt 2: Aktuelle Horse-Daten holen (abhängig vom aktiven Tab)
return sendMessageAsync(activeTabId, { action: "getHorseCurrentData", data: { id: horseData.id } })
.then((currentDataResponse) => {
if (!currentDataResponse) {
console.error("Failed to get current horse data: No response");
return;
}
if (!currentDataResponse.success) {
console.error("Failed to get current horse data. Error:", currentDataResponse.message);
return;
}
console.log("Current horse data received:", currentDataResponse.data);
});
});
});
});
})
.catch((error) => {
console.error("Error in updateHorseButton:", error);
});
}

View file

@ -1,89 +1,237 @@
chrome.runtime.onMessage.addListener(async (request, sender, sendResponse) => {
if (request.action === "getHorseBasicData") {
try {
try {
if (request.action === "getHorseBasicData") {
console.log("Getting horse data");
const idString = document.querySelector('.right:nth-child(2)').innerText.replace('#', '');
// Convert the ID to BigInt
const id = BigInt(idString); // Converts to BigInt, equivalent to ulong in C#
const idEl = document.querySelector('.right:nth-child(2)');
const ageEl = document.querySelector('.right:nth-child(6)');
const genderEl = document.querySelector('img.icon16');
const breedEl = document.querySelector('.right:nth-child(4)');
if (!idEl || !ageEl || !genderEl || !breedEl) {
console.error("Some required elements for basic horse data not found on the page.");
sendResponse({ success: false, message: "Required elements not found." });
return true;
}
const idString = idEl.innerText.replace('#', '');
const id = BigInt(idString).toString();
// Convert BigInt to string before sending
const idStringForResponse = id.toString(); // Convert to string to prevent serialization issues
const horseData = {
id: idStringForResponse || "", // Stelle sicher, dass die ID vorhanden ist
age: parseInt(document.querySelector('.right:nth-child(6)').innerText, 10) || 0, // Alter muss eine Zahl sein
name: document.title.replace(/ - Horse Reality.*$/, '') || "Unknown", // Name darf nicht leer sein
gender: document.querySelector('img.icon16')?.alt || "Unknown", // Geschlecht prüfen
breed: document.querySelector('.right:nth-child(4)')?.innerText || "Unknown", // Rasse prüfen
link: window.location.href || "" // Link sicherstellen
id: id,
age: parseInt(ageEl.innerText, 10) || 0,
name: (document.title.replace(/ - Horse Reality.*$/, '') || "Unknown").trim(),
gender: genderEl.alt || "Unknown",
breed: breedEl.innerText || "Unknown",
link: window.location.href || ""
};
console.log("Horse data gathered:", horseData);
// Sending response back to background script
sendResponse({ success: true, data: horseData });
} catch (error) {
console.error("Error gathering horse data: " + error.message);
sendResponse({ success: false, message: "Error gathering horse data: " + error.message });
} else if (request.action === "getHorseCurrentData") {
console.log("Getting current horse selected tab data");
const selectedTab = getTabselText();
console.log("Selected tab:", selectedTab);
if (selectedTab === "Summary") {
const pedigreeLinks = document.querySelectorAll('.pedigree a');
if (!pedigreeLinks) {
console.error("No pedigree links found for Summary tab.");
sendResponse({ success: false, message: "No pedigree links found." });
return true;
}
const relatedHorses = Array.from(pedigreeLinks).map(link => link.href);
console.log("Related horses:", relatedHorses);
try {
const response = await setHorsePedigreeAPIAsync(request.data.id, relatedHorses);
if (!response.ok) {
console.error("API returned an error:", response.statusText);
sendResponse({ success: false, message: "API error: " + response.statusText });
return true;
}
const jsonData = await response.json();
console.log("API Response:", jsonData);
sendResponse({ success: true, data: jsonData });
} catch (error) {
console.error("Error in Summary tab:", error);
sendResponse({ success: false, message: error.message });
}
} else if (selectedTab === "Training") {
const trainingEl8 = document.querySelector('.top:nth-child(8)');
const trainingEl6 = document.querySelector('.top:nth-child(6)');
const training = (trainingEl8 && trainingEl8.innerText)
|| (trainingEl6 && trainingEl6.innerText)
|| "Unknown";
try {
const response = await setHorseTrainingAPIAsync(request.data.id, training);
if (!response.ok) {
console.error("API returned an error:", response.statusText);
sendResponse({ success: false, message: "API error: " + response.statusText });
return true;
}
const jsonData = await response.json();
console.log("API Response:", jsonData);
sendResponse({ success: true, data: jsonData });
} catch (error) {
console.error("Error in Training tab:", error);
sendResponse({ success: false, message: error.message });
}
} else if (selectedTab === "Genetics") {
try {
const gpDiv = Array.from(document.querySelectorAll('.top div')).find(el => el.innerText.includes('GP'));
if (!gpDiv) {
console.error("No GP element found.");
sendResponse({ success: false, message: "No GP element found." });
return true;
}
const totalGeneticPotentialStr = gpDiv.innerText.replace("GP total: ", "").trim();
const totalGeneticPotential = parseInt(totalGeneticPotentialStr, 10) || 0;
const geneticElems = Array.from(document.querySelectorAll('.genetic_name , .genetic_result'));
if (geneticElems.length === 0) {
console.error("No genetic elements found.");
sendResponse({ success: false, message: "No genetic elements found." });
return true;
}
const geneticDictionary = Object.fromEntries(
geneticElems.map(x => x.innerText)
.reduce((acc, cur, i, arr) => (i % 2 === 0 ? acc.push([cur, arr[i + 1]]) : null, acc), [])
);
const geneticsStats = Array.from(document.querySelectorAll('.genetic_stats'));
if (geneticsStats.length < 10) {
console.error("Not enough genetic stats found.");
sendResponse({ success: false, message: "Not enough genetic stats found for genetics calculation." });
return true;
}
const geneticPotentialList = geneticsStats
.map(x => x.innerText.trim())
.filter(value => !isNaN(value) && value !== "")
.map(value => parseFloat(value));
const GeneticPotential = {
GP: totalGeneticPotential,
GeneticPotential: {
"Acceleration": geneticPotentialList[0],
"Agility": geneticPotentialList[1],
"Balance": geneticPotentialList[2],
"Bascule": geneticPotentialList[3],
"Pulling power": geneticPotentialList[4],
"Speed": geneticPotentialList[5],
"Sprint": geneticPotentialList[6],
"Stamina": geneticPotentialList[7],
"Strength": geneticPotentialList[8],
"Surefootedness": geneticPotentialList[9]
},
Disciplines: {
"Dressage": geneticPotentialList[1] + geneticPotentialList[2] + geneticPotentialList[8],
"Driving": geneticPotentialList[1] + geneticPotentialList[4] + geneticPotentialList[5] + geneticPotentialList[7] + geneticPotentialList[8],
"Endurance": geneticPotentialList[5] + geneticPotentialList[7] + geneticPotentialList[8] + geneticPotentialList[9],
"Eventing": geneticPotentialList[2] + geneticPotentialList[3] + geneticPotentialList[5] + geneticPotentialList[8] + geneticPotentialList[9],
"Flat Racing": geneticPotentialList[5] + geneticPotentialList[0] + geneticPotentialList[7] + geneticPotentialList[6],
"Show Jumping": geneticPotentialList[0] + geneticPotentialList[1] + geneticPotentialList[3] + geneticPotentialList[6] + geneticPotentialList[8],
"Western Reining": geneticPotentialList[0] + geneticPotentialList[1] + geneticPotentialList[2] + geneticPotentialList[9]
},
Colors: geneticDictionary
};
console.log("Genetic Potential:", GeneticPotential);
const response = await setHorseGeneticsAPIAsync(request.data.id, GeneticPotential);
if (!response.ok) {
console.error("API returned an error:", response.statusText);
sendResponse({ success: false, message: "API error: " + response.statusText });
return true;
}
const jsonData = await response.json();
console.log("API Response:", jsonData);
sendResponse({ success: true, data: jsonData });
} catch (error) {
console.error("Error while processing Genetics tab:", error);
sendResponse({ success: false, message: error.message });
}
} else if (selectedTab === "Achievements") {
const geneticStatsEls = document.querySelectorAll('.genetic_stats');
if (!geneticStatsEls || geneticStatsEls.length === 0) {
console.error("No genetic_stats elements found for Achievements.");
sendResponse({ success: false, message: "No genetic_stats found for Achievements." });
return true;
}
const achievements = Array.from(geneticStatsEls)
.map(x => x.innerText)
.filter(text => /poor|below average|average|good|very good/i.test(text));
console.log("Achievements data:", achievements);
try {
const response = await setHorseAchievementsAPIAsync(request.data.id, achievements);
if (!response.ok) {
console.error("API returned an error:", response.statusText);
sendResponse({ success: false, message: "API error: " + response.statusText });
return true;
}
const jsonData = await response.json();
console.log("API Response:", jsonData);
sendResponse({ success: true, data: jsonData });
} catch (error) {
console.error("Error in Achievements tab:", error);
sendResponse({ success: false, message: error.message });
}
} else if (selectedTab === "Health") {
const healthEl = document.querySelector("#tab_health2 p");
if (!healthEl) {
console.error("Health element not found.");
sendResponse({ success: false, message: "Health element not found." });
return true;
}
const matches = [...healthEl.innerText.matchAll(/:\s*(\w+)/g)];
const health = matches.map(match => match[1]);
console.log("Health data:", health);
try {
const response = await setHorseHealthAPIAsync(request.data.id, health);
if (!response.ok) {
console.error("API returned an error:", response.statusText);
sendResponse({ success: false, message: "API error: " + response.statusText });
return true;
}
const jsonData = await response.json();
console.log("API Response:", jsonData);
sendResponse({ success: true, data: jsonData });
} catch (error) {
console.error("Error in Health tab:", error);
sendResponse({ success: false, message: error.message });
}
} else {
console.error("Unknown or no tab selected.");
sendResponse({ success: false, message: "Unknown or no tab selected." });
}
} else {
console.error("Unsupported action:", request.action);
sendResponse({ success: false, message: "Unsupported action." });
}
} catch (error) {
console.error("Unexpected error occurred:", error);
sendResponse({ success: false, message: error.message });
}
else if (request.action === "getHorseCurrentData")
{
console.log("Getting current horse selected tab data");
const selectedTab = getTabselText();
console.log("Selected tab:", selectedTab);
if (selectedTab === "Summary")
{
let relatedHorses = Array.from(document.querySelectorAll('.pedigree a')).map(link => link.href);
let response = await setHorsePedigreeAPIAsync(request.data.id, relatedHorses);
console.log("Response from API:", response);
sendResponse({ success: true, data: response });
}
else if (selectedTab === "Training")
{
let training = document.querySelector('.top:nth-child(8)') ? document.querySelector('.top:nth-child(8)').innerText : document.querySelector('.top:nth-child(6)').innerText;
let response = await setHorseTrainingAPIAsync(request.data.id, training);
console.log("Response from API:", response);
sendResponse({ success: true, data: response });
}
else if (selectedTab === "Genetics")
{
const colorGenetics = Array.from(document.querySelectorAll('.genetic_result')).map(x => x.innerText);
const geneticPotential = Array.from(document.querySelectorAll('.genetic_stats'))
.map(x => x.innerText.trim())
.filter(value => !isNaN(value) && value !== "")
.map(value => parseFloat(value));
const totalGeneticPotential = (Array.from(document.querySelectorAll('.top div')).find(el => el.innerText.includes('GP'))?.innerText || "").replace("GP total: ", "").trim();
let response = setHorseGeneticsAPI(request.data.id, colorGenetics);
console.log("Response from API:", response);
sendResponse({ success: true, data: response });
}
else if (selectedTab === "Achievements")
{
let genetics = Array.from(document.querySelectorAll('.genetic_stats')).map(x => x.innerText).filter(text => /poor|below average|average|good|very good/i.test(text)); // Walk, Trot, Canter, Gallop, Posture...
let response = setHorseAchievementsAPI(request.data.id, genetics);
// Second part of the achievements tab needed for show results
// Placeholder
let response2 = setHorseConformationAPI(request.data.id, { });
console.log("Response from API:", response);
}
else if (selectedTab === "Health")
{
let health = [...document.querySelector("#tab_health2 p").innerText.matchAll(/:\s*(\w+)/g)].map(match => match[1]);
let response = setHorseHealthAPI(request.data.id, health);
console.log("Response from API:", response);
}
else
{
console.error("Unknown or no tab selected.");
}
}
return true; // This is necessary to allow asynchronous response
return true; // Wichtig, um asynchrone Antworten zu ermöglichen
});
function getTabselText() {
const tabElement = document.querySelector('div.tabsel').textContent?.trim();
return tabElement;
}
return document.querySelector('div.tabsel')?.textContent?.trim() || "Unknown";
}

View file

@ -1,7 +1,24 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\SvenK\\source\\repos\\HRServer-Exporter\\",
"Documents": [],
"WorkspaceRootPath": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\controllers\\horsecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\controllers\\horsecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
},
{
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
@ -9,11 +26,63 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": -1,
"SelectedChildIndex": 1,
"Children": [
{
"$type": "Bookmark",
"Name": "ST:0:0:{1c4feeaa-4718-4aa9-859d-94ce25d182ba}"
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "Horse.cs",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs",
"RelativeDocumentMoniker": "HRServer\\Models\\Horse.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs",
"RelativeToolTip": "HRServer\\Models\\Horse.cs",
"ViewState": "AgIAAE0AAAAAAAAAAAAIwAcAAABIAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T17:50:21.836Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "launchSettings.json",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Properties\\launchSettings.json",
"RelativeDocumentMoniker": "HRServer\\Properties\\launchSettings.json",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Properties\\launchSettings.json",
"RelativeToolTip": "HRServer\\Properties\\launchSettings.json",
"ViewState": "AgIAAAUAAAAAAAAAAAAkwA0AAAAgAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2024-12-07T15:18:38.498Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "Program.cs",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Program.cs",
"RelativeDocumentMoniker": "HRServer\\Program.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Program.cs",
"RelativeToolTip": "HRServer\\Program.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABcAAAANAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T13:05:31.847Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "HorseController.cs",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs",
"RelativeDocumentMoniker": "HRServer\\Controllers\\HorseController.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs",
"RelativeToolTip": "HRServer\\Controllers\\HorseController.cs",
"ViewState": "AgIAAE8AAAAAAAAAAAAUwHEAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T13:05:14.341Z",
"EditorCaption": ""
}
]
}

View file

@ -1,18 +1,22 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\SvenK\\source\\repos\\HRServer-Exporter\\",
"WorkspaceRootPath": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|c:\\users\\svenk\\source\\repos\\hrserver-exporter\\hrserver\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|c:\\users\\svenk\\source\\repos\\hrserver-exporter\\hrserver\\controllers\\horsecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\controllers\\horsecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\controllers\\horsecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|c:\\users\\svenk\\source\\repos\\hrserver-exporter\\hrserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\properties\\launchsettings.json||{90A6B3A7-C1A3-4009-A288-E2FF89E96FA0}"
},
{
"AbsoluteMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|z:\\[01] kribitz development\\[02] projekte\\hr-collector\\hrserver-exporter\\hrserver\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{86A245AC-2CD6-4303-97B9-8463B6B6B8D6}|HRServer\\HRServer.csproj|solutionrelative:hrserver\\models\\horse.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
@ -22,7 +26,7 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 1,
"SelectedChildIndex": 3,
"Children": [
{
"$type": "Bookmark",
@ -30,26 +34,39 @@
},
{
"$type": "Document",
"DocumentIndex": 0,
"DocumentIndex": 3,
"Title": "Horse.cs",
"DocumentMoniker": "C:\\Users\\SvenK\\source\\repos\\HRServer-Exporter\\HRServer\\Models\\Horse.cs",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs",
"RelativeDocumentMoniker": "HRServer\\Models\\Horse.cs",
"ToolTip": "C:\\Users\\SvenK\\source\\repos\\HRServer-Exporter\\HRServer\\Models\\Horse.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Models\\Horse.cs",
"RelativeToolTip": "HRServer\\Models\\Horse.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAA==",
"ViewState": "AgIAAE0AAAAAAAAAAAAIwAcAAABIAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T13:10:32.994Z",
"WhenOpened": "2024-12-07T17:50:21.836Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "launchSettings.json",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Properties\\launchSettings.json",
"RelativeDocumentMoniker": "HRServer\\Properties\\launchSettings.json",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Properties\\launchSettings.json",
"RelativeToolTip": "HRServer\\Properties\\launchSettings.json",
"ViewState": "AgIAAAUAAAAAAAAAAAAkwA0AAAAgAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001642|",
"WhenOpened": "2024-12-07T15:18:38.498Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "Program.cs",
"DocumentMoniker": "C:\\Users\\SvenK\\source\\repos\\HRServer-Exporter\\HRServer\\Program.cs",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Program.cs",
"RelativeDocumentMoniker": "HRServer\\Program.cs",
"ToolTip": "C:\\Users\\SvenK\\source\\repos\\HRServer-Exporter\\HRServer\\Program.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Program.cs",
"RelativeToolTip": "HRServer\\Program.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"ViewState": "AgIAAA0AAAAAAAAAAAAgwBcAAAAqAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T13:05:31.847Z",
"EditorCaption": ""
@ -58,11 +75,11 @@
"$type": "Document",
"DocumentIndex": 1,
"Title": "HorseController.cs",
"DocumentMoniker": "C:\\Users\\SvenK\\source\\repos\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs",
"DocumentMoniker": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs",
"RelativeDocumentMoniker": "HRServer\\Controllers\\HorseController.cs",
"ToolTip": "C:\\Users\\SvenK\\source\\repos\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs",
"ToolTip": "Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\HRServer-Exporter\\HRServer\\Controllers\\HorseController.cs",
"RelativeToolTip": "HRServer\\Controllers\\HorseController.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAJAAAAAAAAAA==",
"ViewState": "AgIAAE8AAAAAAAAAAAAUwGYAAAAMAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-07T13:05:14.341Z",
"EditorCaption": ""

View file

@ -1,10 +1,10 @@
using HRServer.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Hosting;
namespace HRServer.Controllers
{
[ApiController]
[Route("[controller]")]
public class HorseController : ControllerBase
{
private readonly ILogger<HorseController> _logger;
@ -13,30 +13,101 @@ namespace HRServer.Controllers
{
_logger = logger;
}
[HttpGet("/api/ping")]
public IActionResult Ping()
{
return Ok("pong");
}
[HttpGet("/api/getHorse/{id}")]
public IActionResult GetHorse ([FromRoute] int id)
public IActionResult GetHorse (int id)
{
var horse = HorseFactory.GetHorse((ulong)id);
if (horse == null)
return NotFound(new { Message = "Horse not found." });
{
horse = new Horse { Id = (ulong)id };
HorseFactory.AddOrUpdateHorse(horse);
}
return Ok(horse);
}
[HttpGet("/api/getHorseLoadState/{id}")]
public IActionResult GetHorseLoadState ([FromRoute] int id)
[HttpGet("/api/getHorse/{id}/LoadState")]
public IActionResult GetHorseLoadState (ulong id)
{
// Hole das Pferd aus der Factory
var horse = HorseFactory.GetHorse((ulong)id);
// Überprüfe, ob das Pferd existiert
if (horse == null)
return NotFound(new { Message = "Horse not found." });
{
horse = new Horse { Id = (ulong)id };
HorseFactory.AddOrUpdateHorse(horse);
}
// Gib den Ladezustand des Pferdes zurück
return Ok(horse.LoadState);
}
/*[HttpGet("/api/setHorseBasicData/{id}")]
public IActionResult GetHorsesAsync([FromRoute] int id)
[HttpPost("/api/updateHorse/{id}/BasicData")]
public IActionResult UpdateHorseBasicData(ulong id, [FromBody] Horse websiteHorse)
{
}*/
var localHorse = HorseFactory.GetHorse((ulong)id);
if (localHorse == null)
{
localHorse = new Horse { Id = (ulong)id };
HorseFactory.AddOrUpdateHorse(localHorse);
}
localHorse.Age = localHorse.Age;
localHorse.Breed = localHorse.Breed;
localHorse.HorseName = localHorse.HorseName;
localHorse.Gender = localHorse.Gender;
localHorse.Link = localHorse.Link;
return Ok(localHorse);
}
[HttpPost("/api/updateHorse/{id}/Pedigree")]
public IActionResult UpdateHorsePedigree(ulong id, [FromBody] HorseSummary websiteHorseSummary)
{
var localHorse = HorseFactory.GetHorse((ulong)id);
if (localHorse == null)
{
localHorse = new Horse { Id = (ulong)id };
HorseFactory.AddOrUpdateHorse(localHorse);
}
localHorse.Summary = websiteHorseSummary;
return Ok(localHorse);
}
[HttpPost("/api/updateHorse/{id}/Training")]
public IActionResult UpdateHorseTraining(ulong id, [FromBody] HorseTraining websiteHorseTraining)
{
var localHorse = HorseFactory.GetHorse((ulong)id);
if (localHorse == null)
{
localHorse = new Horse { Id = (ulong)id };
HorseFactory.AddOrUpdateHorse(localHorse);
}
localHorse.Training = websiteHorseTraining;
return Ok(localHorse);
}
[HttpPost("/api/updateHorse/{id}/Health")]
public IActionResult UpdateHorseHealth(ulong id, [FromBody] HorseHealth websiteHorseHealth)
{
var localHorse = HorseFactory.GetHorse((ulong)id);
if (localHorse == null)
{
localHorse = new Horse { Id = (ulong)id };
HorseFactory.AddOrUpdateHorse(localHorse);
}
localHorse.Health = websiteHorseHealth;
return Ok(localHorse);
}
[HttpPost("/api/updateHorse/{id}/Genetics")]
public IActionResult UpdateHorseGenetics(ulong id, [FromBody] HorseGenetics websiteHorseGenetics)
{
var localHorse = HorseFactory.GetHorse((ulong)id);
if (localHorse == null)
{
localHorse = new Horse { Id = (ulong)id };
HorseFactory.AddOrUpdateHorse(localHorse);
}
localHorse.Genetics = websiteHorseGenetics;
return Ok(localHorse);
}
}
}

View file

@ -1,6 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ActiveDebugProfile>https</ActiveDebugProfile>
<ActiveDebugProfile>http</ActiveDebugProfile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebuggerFlavor>ProjectDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>

View file

@ -1,23 +1,15 @@
namespace HRServer.Models
using System.Text.Json.Serialization;
namespace HRServer.Models
{
public enum Gender
{
Male,
Female
}
public static class HorseFactory
{
// Thread-safe Dictionary, um gleichzeitigen Zugriff zu ermöglichen
// Thread-safe Dictionary
private static readonly Dictionary<ulong, Horse> Horses = new();
// Methode, um ein Pferd nach ID zu suchen
public static Horse? GetHorse(ulong id)
{
// Verwende Dictionary.TryGetValue für bessere Performance und Lesbarkeit
return Horses.TryGetValue(id, out var horse) ? horse : null;
}
// Methode, um ein Pferd hinzuzufügen oder zu aktualisieren
public static void AddOrUpdateHorse(Horse horse)
{
if (horse == null || horse.Id == null)
@ -26,7 +18,6 @@
Horses[horse.Id.Value] = horse;
}
// Methode, um alle Pferde zu holen (z. B. für Debugging oder Verarbeitung)
public static IReadOnlyDictionary<ulong, Horse> GetAllHorses()
{
return Horses;
@ -36,11 +27,17 @@
public class Horse
{
// Basic Information
[JsonPropertyName("id")]
private ulong? _id;
[JsonPropertyName("age")]
private int? _age;
[JsonPropertyName("name")]
private string _horseName = string.Empty;
[JsonPropertyName("gender")]
private string _gender = string.Empty;
[JsonPropertyName("breed")]
private string _breed = string.Empty;
[JsonPropertyName("link")]
private string _link = string.Empty;
public ulong? Id
@ -103,7 +100,6 @@
}
}
// Other Sections
private HorseSummary _summary = new();
public HorseSummary Summary
{
@ -159,10 +155,8 @@
}
}
// Load State
public DataLoadState LoadState { get; set; } = new();
// Helper Methods
public bool IsAllDataLoaded()
{
return LoadState.IsAllDataLoaded();
@ -180,7 +174,6 @@
}
}
// Class to track the loading state of data
public class DataLoadState
{
public bool BasicInfoLoaded { get; set; } = false;
@ -190,14 +183,12 @@
public bool AchievementsLoaded { get; set; } = false;
public bool HealthLoaded { get; set; } = false;
// Method to check if all data is loaded
public bool IsAllDataLoaded()
{
return BasicInfoLoaded && SummaryLoaded && TrainingLoaded && GeneticsLoaded && AchievementsLoaded && HealthLoaded;
}
}
// Other classes
public class HorseSummary
{
public List<ulong> RelatedIds { get; set; } = new();
@ -210,19 +201,54 @@
public class HorseGenetics
{
[JsonPropertyName("GP")]
public int GP { get; set; }
public Dictionary<string, int> Features { get; set; } = new();
public string Extension { get; set; } = string.Empty;
[JsonPropertyName("GeneticPotential")]
public Dictionary<string, float> GeneticPotential { get; set; } = new();
[JsonPropertyName("Disciplines")]
public Dictionary<string, float> Disciplines { get; set; } = new() {
{ "Dressage", 0 },
{ "Driving", 0 },
{ "Endurance", 0 },
{ "Eventing", 0 },
{ "Flat Racing", 0 },
{ "Show Jumping", 0 },
{"Western Reining", 0 }
};
[JsonPropertyName("Colors")]
public Dictionary<string, string> Colors { get; set; } = new() {
{ "extension", string.Empty },
{ "agouti", string.Empty },
{ "grey", string.Empty},
{ "cream", string.Empty },
{ "dun", string.Empty },
{ "champagne", string.Empty },
{ "silver", string.Empty },
{ "mushroom", string.Empty },
{ "frame", string.Empty},
{ "appaloosa", string.Empty },
{ "patn1", string.Empty },
{ "mitf", string.Empty },
{ "sw2", string.Empty },
{ "kit", string.Empty },
{ "rab", string.Empty},
{ "seal", string.Empty },
{ "flaxen", string.Empty }
};
}
public class HorseAchievements
{
public Dictionary<string, int> Conformation { get; set; } = new();
public string ShortConformation { get; set; } = string.Empty;
// Anpassung: Nun wird ein Array an Achievements verarbeitet,
// wie es vom Content Script gesendet wird.
public List<string> Achievements { get; set; } = new();
}
public class HorseHealth
{
public string Fertility { get; set; } = string.Empty;
}
}
}

View file

@ -1,4 +1,3 @@
namespace HRServer
{
public class Program
@ -7,27 +6,40 @@ namespace HRServer
{
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
// Dienste hinzufügen
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
// CORS-Konfiguration hinzufügen
builder.Services.AddCors(options =>
{
// Beispiel: Erlaube alle Ursprünge, Methoden und Header
options.AddPolicy("AllowAllOrigins", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
});
});
// Swagger / OpenAPI hinzufügen
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
// Falls Entwicklungsumgebung, Swagger UI verwenden
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
// CORS anwenden
app.UseCors("AllowAllOrigins");
app.UseAuthorization();
// Controller-Routen festlegen
app.MapControllers();
app.Run();

View file

@ -4,7 +4,7 @@
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:28708",
"applicationUrl": "http://127.0.0.1:28708",
"sslPort": 44327
}
},
@ -14,7 +14,7 @@
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "http://localhost:5005",
"applicationUrl": "http://127.0.0.1:5180",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
@ -24,7 +24,7 @@
"dotnetRunMessages": true,
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:7110;http://localhost:5005",
"applicationUrl": "http://127.0.0.1:5180",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}

View file

@ -0,0 +1,115 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v8.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v8.0": {
"HRServer/1.0.0": {
"dependencies": {
"Swashbuckle.AspNetCore": "6.4.0"
},
"runtime": {
"HRServer.dll": {}
}
},
"Microsoft.Extensions.ApiDescription.Server/6.0.5": {},
"Microsoft.OpenApi/1.2.3": {
"runtime": {
"lib/netstandard2.0/Microsoft.OpenApi.dll": {
"assemblyVersion": "1.2.3.0",
"fileVersion": "1.2.3.0"
}
}
},
"Swashbuckle.AspNetCore/6.4.0": {
"dependencies": {
"Microsoft.Extensions.ApiDescription.Server": "6.0.5",
"Swashbuckle.AspNetCore.Swagger": "6.4.0",
"Swashbuckle.AspNetCore.SwaggerGen": "6.4.0",
"Swashbuckle.AspNetCore.SwaggerUI": "6.4.0"
}
},
"Swashbuckle.AspNetCore.Swagger/6.4.0": {
"dependencies": {
"Microsoft.OpenApi": "1.2.3"
},
"runtime": {
"lib/net6.0/Swashbuckle.AspNetCore.Swagger.dll": {
"assemblyVersion": "6.4.0.0",
"fileVersion": "6.4.0.0"
}
}
},
"Swashbuckle.AspNetCore.SwaggerGen/6.4.0": {
"dependencies": {
"Swashbuckle.AspNetCore.Swagger": "6.4.0"
},
"runtime": {
"lib/net6.0/Swashbuckle.AspNetCore.SwaggerGen.dll": {
"assemblyVersion": "6.4.0.0",
"fileVersion": "6.4.0.0"
}
}
},
"Swashbuckle.AspNetCore.SwaggerUI/6.4.0": {
"runtime": {
"lib/net6.0/Swashbuckle.AspNetCore.SwaggerUI.dll": {
"assemblyVersion": "6.4.0.0",
"fileVersion": "6.4.0.0"
}
}
}
}
},
"libraries": {
"HRServer/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Microsoft.Extensions.ApiDescription.Server/6.0.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==",
"path": "microsoft.extensions.apidescription.server/6.0.5",
"hashPath": "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512"
},
"Microsoft.OpenApi/1.2.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Nug3rO+7Kl5/SBAadzSMAVgqDlfGjJZ0GenQrLywJ84XGKO0uRqkunz5Wyl0SDwcR71bAATXvSdbdzPrYRYKGw==",
"path": "microsoft.openapi/1.2.3",
"hashPath": "microsoft.openapi.1.2.3.nupkg.sha512"
},
"Swashbuckle.AspNetCore/6.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-eUBr4TW0up6oKDA5Xwkul289uqSMgY0xGN4pnbOIBqCcN9VKGGaPvHX3vWaG/hvocfGDP+MGzMA0bBBKz2fkmQ==",
"path": "swashbuckle.aspnetcore/6.4.0",
"hashPath": "swashbuckle.aspnetcore.6.4.0.nupkg.sha512"
},
"Swashbuckle.AspNetCore.Swagger/6.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-nl4SBgGM+cmthUcpwO/w1lUjevdDHAqRvfUoe4Xp/Uvuzt9mzGUwyFCqa3ODBAcZYBiFoKvrYwz0rabslJvSmQ==",
"path": "swashbuckle.aspnetcore.swagger/6.4.0",
"hashPath": "swashbuckle.aspnetcore.swagger.6.4.0.nupkg.sha512"
},
"Swashbuckle.AspNetCore.SwaggerGen/6.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-lXhcUBVqKrPFAQF7e/ZeDfb5PMgE8n5t6L5B6/BQSpiwxgHzmBcx8Msu42zLYFTvR5PIqE9Q9lZvSQAcwCxJjw==",
"path": "swashbuckle.aspnetcore.swaggergen/6.4.0",
"hashPath": "swashbuckle.aspnetcore.swaggergen.6.4.0.nupkg.sha512"
},
"Swashbuckle.AspNetCore.SwaggerUI/6.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-1Hh3atb3pi8c+v7n4/3N80Jj8RvLOXgWxzix6w3OZhB7zBGRwsy7FWr4e3hwgPweSBpwfElqj4V4nkjYabH9nQ==",
"path": "swashbuckle.aspnetcore.swaggerui/6.4.0",
"hashPath": "swashbuckle.aspnetcore.swaggerui.6.4.0.nupkg.sha512"
}
}
}

View file

@ -0,0 +1,19 @@
{
"runtimeOptions": {
"tfm": "net8.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "8.0.0"
},
{
"name": "Microsoft.AspNetCore.App",
"version": "8.0.0"
}
],
"configProperties": {
"System.GC.Server": true,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

View file

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View file

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View file

@ -0,0 +1,149 @@
[
{
"ContainingType": "HRServer.Controllers.HorseController",
"Method": "GetHorse",
"RelativePath": "api/getHorse/{id}",
"HttpMethod": "GET",
"IsController": true,
"Order": 0,
"Parameters": [
{
"Name": "id",
"Type": "System.Int32",
"IsRequired": true
}
],
"ReturnTypes": []
},
{
"ContainingType": "HRServer.Controllers.HorseController",
"Method": "GetHorseLoadState",
"RelativePath": "api/getHorse/{id}/LoadState",
"HttpMethod": "GET",
"IsController": true,
"Order": 0,
"Parameters": [
{
"Name": "id",
"Type": "System.UInt64",
"IsRequired": true
}
],
"ReturnTypes": []
},
{
"ContainingType": "HRServer.Controllers.HorseController",
"Method": "Ping",
"RelativePath": "api/ping",
"HttpMethod": "GET",
"IsController": true,
"Order": 0,
"Parameters": [],
"ReturnTypes": []
},
{
"ContainingType": "HRServer.Controllers.HorseController",
"Method": "UpdateHorseBasicData",
"RelativePath": "api/updateHorse/{id}/BasicData",
"HttpMethod": "POST",
"IsController": true,
"Order": 0,
"Parameters": [
{
"Name": "id",
"Type": "System.UInt64",
"IsRequired": true
},
{
"Name": "websiteHorse",
"Type": "HRServer.Models.Horse",
"IsRequired": true
}
],
"ReturnTypes": []
},
{
"ContainingType": "HRServer.Controllers.HorseController",
"Method": "UpdateHorseGenetics",
"RelativePath": "api/updateHorse/{id}/Genetics",
"HttpMethod": "POST",
"IsController": true,
"Order": 0,
"Parameters": [
{
"Name": "id",
"Type": "System.UInt64",
"IsRequired": true
},
{
"Name": "websiteHorseGenetics",
"Type": "HRServer.Models.HorseGenetics",
"IsRequired": true
}
],
"ReturnTypes": []
},
{
"ContainingType": "HRServer.Controllers.HorseController",
"Method": "UpdateHorseHealth",
"RelativePath": "api/updateHorse/{id}/Health",
"HttpMethod": "POST",
"IsController": true,
"Order": 0,
"Parameters": [
{
"Name": "id",
"Type": "System.UInt64",
"IsRequired": true
},
{
"Name": "websiteHorseHealth",
"Type": "HRServer.Models.HorseHealth",
"IsRequired": true
}
],
"ReturnTypes": []
},
{
"ContainingType": "HRServer.Controllers.HorseController",
"Method": "UpdateHorsePedigree",
"RelativePath": "api/updateHorse/{id}/Pedigree",
"HttpMethod": "POST",
"IsController": true,
"Order": 0,
"Parameters": [
{
"Name": "id",
"Type": "System.UInt64",
"IsRequired": true
},
{
"Name": "websiteHorseSummary",
"Type": "HRServer.Models.HorseSummary",
"IsRequired": true
}
],
"ReturnTypes": []
},
{
"ContainingType": "HRServer.Controllers.HorseController",
"Method": "UpdateHorseTraining",
"RelativePath": "api/updateHorse/{id}/Training",
"HttpMethod": "POST",
"IsController": true,
"Order": 0,
"Parameters": [
{
"Name": "id",
"Type": "System.UInt64",
"IsRequired": true
},
{
"Name": "websiteHorseTraining",
"Type": "HRServer.Models.HorseTraining",
"IsRequired": true
}
],
"ReturnTypes": []
}
]

View file

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("HRServer")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6e5ae3f9b3254f84dca052d06f64382fc35cc6d4")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+0fbf4cd919af15895685c01cbc5691fb764e943d")]
[assembly: System.Reflection.AssemblyProductAttribute("HRServer")]
[assembly: System.Reflection.AssemblyTitleAttribute("HRServer")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View file

@ -1 +1 @@
c249390f111095a716c75dcba28e2f2d1acdc90eb5e2495d35cb08b47c8606be
171fa089b33980e5d8781f5a6c5109af77f174bd128feb6daff86d1e12aec2a4

View file

@ -0,0 +1,17 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Dieser Code wurde von einem Tool generiert.
// Laufzeitversion:4.0.30319.42000
//
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
// der Code erneut generiert wird.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Swashbuckle.AspNetCore.SwaggerGen")]
// Von der MSBuild WriteCodeFragment-Klasse generiert.

View file

@ -0,0 +1 @@
ff96cd7ef93b2db74847767b8c9a51c9c59f88f1abf5b21e24fad37106dcb370

View file

@ -0,0 +1,33 @@
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\bin\Debug\net8.0\appsettings.Development.json
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\bin\Debug\net8.0\appsettings.json
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\bin\Debug\net8.0\HRServer.exe
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\bin\Debug\net8.0\HRServer.deps.json
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\bin\Debug\net8.0\HRServer.runtimeconfig.json
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\bin\Debug\net8.0\HRServer.dll
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\bin\Debug\net8.0\HRServer.pdb
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\bin\Debug\net8.0\Microsoft.OpenApi.dll
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\bin\Debug\net8.0\Swashbuckle.AspNetCore.Swagger.dll
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\bin\Debug\net8.0\Swashbuckle.AspNetCore.SwaggerGen.dll
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\bin\Debug\net8.0\Swashbuckle.AspNetCore.SwaggerUI.dll
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\HRServer.csproj.AssemblyReference.cache
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\HRServer.GeneratedMSBuildEditorConfig.editorconfig
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\HRServer.AssemblyInfoInputs.cache
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\HRServer.AssemblyInfo.cs
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\HRServer.csproj.CoreCompileInputs.cache
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\HRServer.MvcApplicationPartsAssemblyInfo.cs
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\HRServer.MvcApplicationPartsAssemblyInfo.cache
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\HRServer.sourcelink.json
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\staticwebassets.build.json
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\staticwebassets.development.json
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\staticwebassets\msbuild.HRServer.Microsoft.AspNetCore.StaticWebAssets.props
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\staticwebassets\msbuild.build.HRServer.props
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\staticwebassets\msbuild.buildMultiTargeting.HRServer.props
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\staticwebassets\msbuild.buildTransitive.HRServer.props
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\staticwebassets.pack.json
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\scopedcss\bundle\HRServer.styles.css
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\HRServer.csproj.Up2Date
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\HRServer.dll
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\refint\HRServer.dll
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\HRServer.pdb
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\HRServer.genruntimeconfig.cache
Z:\[01] Kribitz Development\[02] Projekte\HR-Collector\HRServer-Exporter\HRServer\obj\Debug\net8.0\ref\HRServer.dll

View file

@ -0,0 +1 @@
26f7f665be436c490f4e93167ca6d37226eef0c271c017fa4bc11d7c98da76ca

View file

@ -0,0 +1 @@
{"documents":{"Z:\\[01] Kribitz Development\\[02] Projekte\\HR-Collector\\*":"https://raw.githubusercontent.com/SvenKribitz/HR-Collector/0fbf4cd919af15895685c01cbc5691fb764e943d/*"}}

View file

@ -0,0 +1,11 @@
{
"Version": 1,
"Hash": "JAdl2ax+iEaEpM2QjX7DlmN0wnleiYGhGkNb8PzNm50=",
"Source": "HRServer",
"BasePath": "_content/HRServer",
"Mode": "Default",
"ManifestType": "Build",
"ReferencedProjectsConfiguration": [],
"DiscoveryPatterns": [],
"Assets": []
}

View file

@ -0,0 +1,3 @@
<Project>
<Import Project="Microsoft.AspNetCore.StaticWebAssets.props" />
</Project>

View file

@ -0,0 +1,3 @@
<Project>
<Import Project="..\build\HRServer.props" />
</Project>

View file

@ -0,0 +1,3 @@
<Project>
<Import Project="..\buildMultiTargeting\HRServer.props" />
</Project>