summaryrefslogtreecommitdiff
path: root/nexus/api/characters
diff options
context:
space:
mode:
Diffstat (limited to 'nexus/api/characters')
-rw-r--r--nexus/api/characters/characters.go66
-rw-r--r--nexus/api/characters/messages.go3
2 files changed, 69 insertions, 0 deletions
diff --git a/nexus/api/characters/characters.go b/nexus/api/characters/characters.go
new file mode 100644
index 0000000..4443212
--- /dev/null
+++ b/nexus/api/characters/characters.go
@@ -0,0 +1,66 @@
+package characters
+
+import (
+ "nexus/services/character"
+ characterTypes "nexus/types/character"
+ "nexus/utils/meta"
+ "nexus/utils/shortcuts"
+
+ "github.com/gofiber/fiber/v2"
+ "github.com/google/uuid"
+)
+
+func Index(context *fiber.Ctx) error {
+ characters, serviceErr := character.GetAllForAccount(meta.Account(context).ID)
+ if serviceErr != nil {
+ return serviceErr
+ }
+
+ response := make([]characterTypes.Response, len(characters))
+ for i, c := range characters {
+ response[i] = c.ToResponse()
+ }
+
+ return shortcuts.JSON(context, response)
+}
+
+func Show(context *fiber.Ctx) error {
+ id, err := uuid.Parse(meta.Request(context).Param("id"))
+ if err != nil {
+ return shortcuts.ServiceError(fiber.StatusBadRequest, InvalidCharacterID)
+ }
+
+ c, serviceErr := character.GetByID(id, meta.Account(context).ID)
+ if serviceErr != nil {
+ return serviceErr
+ }
+
+ return shortcuts.JSON(context, c.ToResponse())
+}
+
+func Create(context *fiber.Ctx) error {
+ body, err := meta.Body[characterTypes.CreateRequest](context)
+ if err != nil {
+ return shortcuts.ServiceError(fiber.StatusBadRequest, err.Error())
+ }
+
+ c, serviceErr := character.Create(meta.Account(context).ID, body)
+ if serviceErr != nil {
+ return serviceErr
+ }
+
+ return shortcuts.Created(context, c.ToResponse())
+}
+
+func Delete(context *fiber.Ctx) error {
+ id, err := uuid.Parse(meta.Request(context).Param("id"))
+ if err != nil {
+ return shortcuts.ServiceError(fiber.StatusBadRequest, InvalidCharacterID)
+ }
+
+ if serviceErr := character.Delete(id, meta.Account(context).ID); serviceErr != nil {
+ return serviceErr
+ }
+
+ return shortcuts.NoContent(context)
+}
diff --git a/nexus/api/characters/messages.go b/nexus/api/characters/messages.go
new file mode 100644
index 0000000..f8bdb02
--- /dev/null
+++ b/nexus/api/characters/messages.go
@@ -0,0 +1,3 @@
+package characters
+
+const InvalidCharacterID = "invalid character id"