From 530931764d7622da75bf998f383f24e0bb01620a Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 28 Dec 2025 14:48:59 +0100 Subject: [PATCH] We can add weapons and equipment --- backend/cmd/main.go | 2 + backend/equipment/handlers.go | 63 +++ backend/equipment/routes.go | 21 + frontend/src/components/EquipmentView.vue | 476 +++++++++++++++- frontend/src/components/WeaponView.vue | 658 +++++++++++++++++++++- frontend/src/locales/de | 47 ++ frontend/src/locales/en | 49 +- 7 files changed, 1294 insertions(+), 22 deletions(-) create mode 100644 backend/equipment/routes.go diff --git a/backend/cmd/main.go b/backend/cmd/main.go index 914fae8..a412913 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -4,6 +4,7 @@ import ( "bamort/character" "bamort/config" "bamort/database" + "bamort/equipment" "bamort/gsmaster" "bamort/importer" "bamort/logger" @@ -73,6 +74,7 @@ func main() { // Register your module routes gsmaster.RegisterRoutes(protected) character.RegisterRoutes(protected) + equipment.RegisterRoutes(protected) maintenance.RegisterRoutes(protected) importer.RegisterRoutes(protected) pdfrender.RegisterRoutes(protected) diff --git a/backend/equipment/handlers.go b/backend/equipment/handlers.go index bbcff2e..be68e2f 100644 --- a/backend/equipment/handlers.go +++ b/backend/equipment/handlers.go @@ -77,3 +77,66 @@ func DeleteAusruestung(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"message": "Ausruestung deleted successfully"}) } + +/* +Endpoints for Managing Weapons (Waffen) +*/ + +func CreateWaffe(c *gin.Context) { + var waffe models.EqWaffe + if err := c.ShouldBindJSON(&waffe); err != nil { + respondWithError(c, http.StatusBadRequest, err.Error()) + return + } + + if err := database.DB.Create(&waffe).Error; err != nil { + respondWithError(c, http.StatusInternalServerError, "Failed to create Waffe") + return + } + + c.JSON(http.StatusCreated, waffe) +} + +func ListWaffen(c *gin.Context) { + characterID := c.Param("character_id") + + var waffen []models.EqWaffe + if err := database.DB.Where("character_id = ?", characterID).Find(&waffen).Error; err != nil { + respondWithError(c, http.StatusInternalServerError, "Failed to retrieve Waffen") + return + } + + c.JSON(http.StatusOK, waffen) +} + +func UpdateWaffe(c *gin.Context) { + waffeID := c.Param("waffe_id") + var waffe models.EqWaffe + + if err := database.DB.First(&waffe, waffeID).Error; err != nil { + respondWithError(c, http.StatusNotFound, "Waffe not found") + return + } + + if err := c.ShouldBindJSON(&waffe); err != nil { + respondWithError(c, http.StatusBadRequest, err.Error()) + return + } + + if err := database.DB.Save(&waffe).Error; err != nil { + respondWithError(c, http.StatusInternalServerError, "Failed to update Waffe") + return + } + + c.JSON(http.StatusOK, waffe) +} + +func DeleteWaffe(c *gin.Context) { + waffeID := c.Param("waffe_id") + if err := database.DB.Delete(&models.EqWaffe{}, waffeID).Error; err != nil { + respondWithError(c, http.StatusInternalServerError, "Failed to delete Waffe") + return + } + + c.JSON(http.StatusOK, gin.H{"message": "Waffe deleted successfully"}) +} diff --git a/backend/equipment/routes.go b/backend/equipment/routes.go new file mode 100644 index 0000000..3fcf31f --- /dev/null +++ b/backend/equipment/routes.go @@ -0,0 +1,21 @@ +package equipment + +import ( + "github.com/gin-gonic/gin" +) + +func RegisterRoutes(r *gin.RouterGroup) { + // Equipment (Ausrüstung) routes + equipGrp := r.Group("/equipment") + equipGrp.POST("", CreateAusruestung) + equipGrp.GET("/character/:character_id", ListAusruestung) + equipGrp.PUT("/:ausruestung_id", UpdateAusruestung) + equipGrp.DELETE("/:ausruestung_id", DeleteAusruestung) + + // Weapon (Waffen) routes + weaponGrp := r.Group("/weapons") + weaponGrp.POST("", CreateWaffe) + weaponGrp.GET("/character/:character_id", ListWaffen) + weaponGrp.PUT("/:waffe_id", UpdateWaffe) + weaponGrp.DELETE("/:waffe_id", DeleteWaffe) +} diff --git a/frontend/src/components/EquipmentView.vue b/frontend/src/components/EquipmentView.vue index f06c232..0785770 100644 --- a/frontend/src/components/EquipmentView.vue +++ b/frontend/src/components/EquipmentView.vue @@ -1,5 +1,12 @@