From 7eead949512eb19e3ba89fd3619859e6cd02df6e Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 29 Aug 2025 07:07:08 +0200 Subject: [PATCH] selektion von Chars nach UserID and public --- backend/character/handlers.go | 32 +++++++++++------------ backend/models/model_character.go | 13 +++++++++ frontend/src/components/CharacterList.vue | 2 +- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/backend/character/handlers.go b/backend/character/handlers.go index 4cb080a..d1bf102 100644 --- a/backend/character/handlers.go +++ b/backend/character/handlers.go @@ -32,8 +32,11 @@ func respondWithError(c *gin.Context, status int, message string) { func ListCharacters(c *gin.Context) { logger.Debug("ListCharacters aufgerufen") - //var characters []models.Char - //var listOfChars []models.CharList + type AllCharacters struct { + SelfOwned []models.CharList `json:"self_owned"` + Others []models.CharList `json:"others"` + } + allCharacters := AllCharacters{} logger.Debug("Lade Charaktere aus der Datenbank...") //if err := database.DB.Find(&characters).Error; err != nil { @@ -46,24 +49,19 @@ func ListCharacters(c *gin.Context) { } logger.Debug("Gefundene Charaktere: %d", len(listOfChars)) + allCharacters.SelfOwned = listOfChars - /* - for i := range characters { - listOfChars = append(listOfChars, models.CharList{ - BamortBase: models.BamortBase{ - ID: characters[i].ID, - Name: characters[i].Name, - }, - Rasse: characters[i].Rasse, - Typ: characters[i].Typ, - Grad: characters[i].Grad, - Owner: characters[i].User.Username, - }) - } - */ + listPublic, err := models.FindPublicCharList() + + if err != nil { + logger.Error("Fehler beim Laden der öffentlichen Charaktere: %s", err.Error()) + respondWithError(c, http.StatusInternalServerError, "Failed to retrieve public characters") + return + } + allCharacters.Others = listPublic logger.Info("Charakterliste erfolgreich geladen: %d Charaktere", len(listOfChars)) - c.JSON(http.StatusOK, listOfChars) + c.JSON(http.StatusOK, allCharacters) } func CreateCharacter(c *gin.Context) { diff --git a/backend/models/model_character.go b/backend/models/model_character.go index 1f0d6e5..19d90bf 100644 --- a/backend/models/model_character.go +++ b/backend/models/model_character.go @@ -210,6 +210,19 @@ func (object *Char) FindByUserID(userID uint) ([]Char, error) { return chars, nil } +func FindPublicCharList() ([]CharList, error) { + var chars []CharList + err := database.DB.Table("char_chars"). + Select("char_chars.id, char_chars.name, char_chars.user_id, char_chars.rasse, char_chars.typ, char_chars.grad, char_chars.public, users.username as owner"). + Joins("LEFT JOIN users ON char_chars.user_id = users.user_id"). + Where("char_chars.public = ?", true). + Find(&chars).Error + if err != nil { + return nil, err + } + return chars, nil +} + // FindCharListByUserID finds all characters belonging to a specific user for listing (minimal data) func FindCharListByUserID(userID uint) ([]CharList, error) { var chars []CharList diff --git a/frontend/src/components/CharacterList.vue b/frontend/src/components/CharacterList.vue index a38ca35..b741f4e 100644 --- a/frontend/src/components/CharacterList.vue +++ b/frontend/src/components/CharacterList.vue @@ -64,7 +64,7 @@ export default { const response = await API.get('/api/characters', { headers: { Authorization: `Bearer ${token}` }, }) - this.characters = response.data + this.characters = response.data.self_owned } catch (error) { console.error('Error loading characters:', error) }