diff --git a/backend/bmrt/character/practice_points_handler.go b/backend/bmrt/character/practice_points_handler.go index 69d79f8..be384f0 100644 --- a/backend/bmrt/character/practice_points_handler.go +++ b/backend/bmrt/character/practice_points_handler.go @@ -1,8 +1,8 @@ package character import ( - "bamort/database" "bamort/bmrt/models" + "bamort/database" "fmt" "net/http" @@ -160,28 +160,49 @@ func AddPracticePoint(c *gin.Context) { } // Praxispunkt zur entsprechenden Fertigkeit hinzufügen - found := false + foundSkill := false for i := range character.Fertigkeiten { if character.Fertigkeiten[i].Name == targetSkillName { character.Fertigkeiten[i].Pp += request.Amount - found = true + foundSkill = true + break + } + } + foundWeaponSkill := false + for i := range character.Waffenfertigkeiten { + if character.Waffenfertigkeiten[i].Name == targetSkillName { + character.Waffenfertigkeiten[i].Pp += request.Amount + foundWeaponSkill = true break } } - if !found { + if !foundSkill && !foundWeaponSkill { respondWithError(c, http.StatusBadRequest, "Fertigkeit nicht gefunden: "+targetSkillName) return } // Fertigkeiten explizit speichern - for i := range character.Fertigkeiten { - if character.Fertigkeiten[i].Name == targetSkillName { - if err := database.DB.Save(&character.Fertigkeiten[i]).Error; err != nil { - respondWithError(c, http.StatusInternalServerError, "Fehler beim Speichern der Fertigkeit: "+err.Error()) - return + if foundSkill { + for i := range character.Fertigkeiten { + if character.Fertigkeiten[i].Name == targetSkillName { + if err := database.DB.Save(&character.Fertigkeiten[i]).Error; err != nil { + respondWithError(c, http.StatusInternalServerError, "Fehler beim Speichern der Fertigkeit: "+err.Error()) + return + } + break + } + } + } + if foundWeaponSkill { + for i := range character.Waffenfertigkeiten { + if character.Waffenfertigkeiten[i].Name == targetSkillName { + if err := database.DB.Save(&character.Waffenfertigkeiten[i]).Error; err != nil { + respondWithError(c, http.StatusInternalServerError, "Fehler beim Speichern der Waffenfertigkeit: "+err.Error()) + return + } + break } - break } } @@ -196,12 +217,23 @@ func AddPracticePoint(c *gin.Context) { } } + for _, skill := range character.Waffenfertigkeiten { + if skill.Pp > 0 { + practicePoints = append(practicePoints, PracticePointResponse{ + SkillName: skill.Name, + Amount: skill.Pp, + }) + } + } + // Erfolgreiche Response mit Details zurückgeben var message string if isSpellFlag { message = "Praxispunkt für Zauber '" + request.SkillName + "' wurde der Zaubergruppe '" + targetSkillName + "' hinzugefügt" - } else { + } else if foundSkill { message = "Praxispunkt für Fertigkeit '" + targetSkillName + "' hinzugefügt" + } else if foundWeaponSkill { + message = "Praxispunkt für Waffenfertigkeit '" + targetSkillName + "' hinzugefügt" } response := PracticePointActionResponse{ @@ -263,12 +295,25 @@ func UsePracticePoint(c *gin.Context) { } // Praxispunkt von der entsprechenden Fertigkeit abziehen - found := false + foundSkill := false for i := range character.Fertigkeiten { if character.Fertigkeiten[i].Name == targetSkillName { if character.Fertigkeiten[i].Pp >= request.Amount { character.Fertigkeiten[i].Pp -= request.Amount - found = true + foundSkill = true + } else { + respondWithError(c, http.StatusBadRequest, "Nicht genügend Praxispunkte verfügbar") + return + } + break + } + } + foundWeaponSkill := false + for i := range character.Waffenfertigkeiten { + if character.Waffenfertigkeiten[i].Name == targetSkillName { + if character.Waffenfertigkeiten[i].Pp >= request.Amount { + character.Waffenfertigkeiten[i].Pp -= request.Amount + foundWeaponSkill = true } else { respondWithError(c, http.StatusBadRequest, "Nicht genügend Praxispunkte verfügbar") return @@ -277,19 +322,32 @@ func UsePracticePoint(c *gin.Context) { } } - if !found { + if !foundSkill && !foundWeaponSkill { respondWithError(c, http.StatusBadRequest, "Fertigkeit nicht gefunden: "+targetSkillName) return } // Fertigkeiten explizit speichern - for i := range character.Fertigkeiten { - if character.Fertigkeiten[i].Name == targetSkillName { - if err := database.DB.Save(&character.Fertigkeiten[i]).Error; err != nil { - respondWithError(c, http.StatusInternalServerError, "Fehler beim Speichern der Fertigkeit: "+err.Error()) - return + if foundSkill { + for i := range character.Fertigkeiten { + if character.Fertigkeiten[i].Name == targetSkillName { + if err := database.DB.Save(&character.Fertigkeiten[i]).Error; err != nil { + respondWithError(c, http.StatusInternalServerError, "Fehler beim Speichern der Fertigkeit: "+err.Error()) + return + } + break + } + } + } + if foundWeaponSkill { + for i := range character.Waffenfertigkeiten { + if character.Waffenfertigkeiten[i].Name == targetSkillName { + if err := database.DB.Save(&character.Waffenfertigkeiten[i]).Error; err != nil { + respondWithError(c, http.StatusInternalServerError, "Fehler beim Speichern der Waffenfertigkeit: "+err.Error()) + return + } + break } - break } } @@ -304,9 +362,18 @@ func UsePracticePoint(c *gin.Context) { } } + for _, skill := range character.Waffenfertigkeiten { + if skill.Pp > 0 { + practicePoints = append(practicePoints, PracticePointResponse{ + SkillName: skill.Name, + Amount: skill.Pp, + }) + } + } + response := PracticePointActionResponse{ Success: true, - Message: fmt.Sprintf("%d Übungspunkte erfolgreich von %s verwendet", request.Amount, targetSkillName), + Message: fmt.Sprintf("%d Praxispunkte erfolgreich von %s verwendet/reduziert", request.Amount, targetSkillName), RequestedSkill: request.SkillName, TargetSkill: targetSkillName, IsSpell: isSpellFlag,