Adding routes for API endpoints

This commit is contained in:
2025-01-03 00:03:31 +01:00
parent 00fbe2660c
commit d7766d2c1a
4 changed files with 112 additions and 6 deletions
+52 -1
View File
@@ -20,7 +20,7 @@ Character Handlers
Add CRUD operations for characters:
*/
func GetCharacters(c *gin.Context) {
func ListCharacters(c *gin.Context) {
var characters []Char
if err := database.DB.Find(&characters).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to retrieve characters"})
@@ -43,6 +43,57 @@ func CreateCharacter(c *gin.Context) {
c.JSON(http.StatusCreated, character)
}
func GetCharacter(c *gin.Context) {
id := c.Param("id")
var character Char
err := character.FirstID(id)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to retrieve character"})
return
}
c.JSON(http.StatusOK, character)
}
func UpdateCharacter(c *gin.Context) {
var character Char
/*
if err := c.ShouldBindJSON(&character.ID); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
if err := database.DB.Create(&character).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create character"})
return
}
*/
c.JSON(http.StatusCreated, character)
}
func DeleteCharacter(c *gin.Context) {
id := c.Param("id")
var character Char
err := character.FirstID(id)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to retrieve character"})
return
}
err = character.Delete()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to delete character"})
return
}
/*
if err := c.ShouldBindJSON(&character.ID); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
if err := database.DB.Create(&character).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to create character"})
return
}
*/
c.JSON(http.StatusCreated, character)
}
// Upload files
func UploadFiles(c *gin.Context) {
+34 -1
View File
@@ -124,7 +124,29 @@ func (object *Char) First(name string) error {
}
return nil
}
func (object *Char) FirstID(name string) error {
err := database.DB.
Preload("Lp").
Preload("Ap").
Preload("B").
Preload("Merkmale").
Preload("Eigenschaften").
Preload("Fertigkeiten").
Preload("Waffenfertigkeiten").
Preload("Zauber").
Preload("Bennies").
Preload("Erfahrungsschatz").
Preload("Waffen").
Preload("Behaeltnisse").
Preload("Transportmittel").
Preload("Ausruestung").
First(&object, " id = ?", name).Error
if err != nil {
// Char not found
return err
}
return nil
}
func (object *Char) Create() error {
err := database.DB.Transaction(func(tx *gorm.DB) error {
// Save the main character record
@@ -136,7 +158,18 @@ func (object *Char) Create() error {
return err
}
func (object *Char) Delete() error {
err := database.DB.Transaction(func(tx *gorm.DB) error {
// delete the main character record
//should cascade for all elements
if err := tx.Delete(&object).Error; err != nil {
return fmt.Errorf("failed to delete char: %w", err)
}
return nil
})
return err
}
func (object *Eigenschaft) TableName() string {
return dbPrefix + "_" + "eigenschaften"
}
+1 -1
View File
@@ -29,7 +29,7 @@ func CreateAusruestung(c *gin.Context) {
c.JSON(http.StatusCreated, ausruestung)
}
func GetAusruestung(c *gin.Context) {
func ListAusruestung(c *gin.Context) {
characterID := c.Param("character_id")
var ausruestung []Ausruestung
+25 -3
View File
@@ -31,10 +31,32 @@ func main() {
r.POST("/login", user.LoginUser)
protected := r.Group("/api")
protected.Use(user.AuthMiddleware())
protected.GET("/characters", character.GetCharacters)
protected.POST("/characters", character.CreateCharacter)
// Character routes
rCharGrp := protected.Group("/characters")
rCharGrp.GET("", character.ListCharacters)
rCharGrp.POST("", character.CreateCharacter)
rCharGrp.GET("/:id", character.GetCharacter)
rCharGrp.PUT("/:id", character.UpdateCharacter)
rCharGrp.DELETE("/:id", character.DeleteCharacter)
//rCharGrp.GET("/{id}/skills", character.ListSkills) // List skills for a character
//rCharGrp.GET("/{id}/skills/{id}", character.GetSkill) // get a skill for a character
//rCharGrp.PUT("/{id}/skills/{id}", character.UpdateSkill) // Update skill for a character
//rCharGrp.POST("/{id}/skills", character.AddSkill) //Add a skill to a character
//rCharGrp.DELETE("/{id}/skills/{id}", character.DeleteSkill) //ADEletedd a skill to a character
rCharGrp.GET("/{id}/equipment", equipment.ListAusruestung) // List equipment for a character
//rCharGrp.POST("/{id}/equipment", equipment.AddAusruestung) // Add equipment to a character
rCharGrp.PUT("/{id}/equipment/{id}", equipment.UpdateAusruestung) // List equipment for a character
rCharGrp.DELETE("/{id}/equipment/{id}", equipment.DeleteAusruestung) // List equipment for a character
//rCharGrp.GET("/{id}/spells", spells.ListAusruestung) // List equipment for a character
//rCharGrp.POST("/{id}/spells", equipment.AddAusruestung) // Add equipment to a character
rCharGrp.PUT("/{id}/spells/{id}", equipment.UpdateAusruestung) // List equipment for a character
rCharGrp.DELETE("/{id}/spells/{id}", equipment.DeleteAusruestung) // List equipment for a character
rCharGrp.POST("/{id}/spells", character.DeleteCharacter) // Add a spell to a character
rCharGrp.GET("/{id}/spells", character.DeleteCharacter) // List spells for a character
// Equipment routes
protected.POST("/ausruestung", equipment.CreateAusruestung)
protected.GET("/ausruestung/:character_id", equipment.GetAusruestung)
//protected.GET("/ausruestung/:character_id", equipment.GetAusruestung)
protected.PUT("/ausruestung/:ausruestung_id", equipment.UpdateAusruestung)
protected.DELETE("/ausruestung/:ausruestung_id", equipment.DeleteAusruestung)
protected.POST("/upload", character.UploadFiles)