summaryrefslogtreecommitdiff
path: root/shrine/controllers/letter.go
diff options
context:
space:
mode:
Diffstat (limited to 'shrine/controllers/letter.go')
-rw-r--r--shrine/controllers/letter.go165
1 files changed, 165 insertions, 0 deletions
diff --git a/shrine/controllers/letter.go b/shrine/controllers/letter.go
new file mode 100644
index 0000000..10696f1
--- /dev/null
+++ b/shrine/controllers/letter.go
@@ -0,0 +1,165 @@
+package controllers
+
+import (
+ "shrine/messages"
+ "shrine/services"
+ "shrine/types/letter"
+ "shrine/utils/auth"
+ "shrine/utils/meta"
+ "shrine/utils/shortcuts"
+
+ "github.com/gofiber/fiber/v2"
+)
+
+func ListLettersController(context *fiber.Ctx) error {
+ citizen := auth.GetUser(context)
+ pagination := meta.Paginate(context)
+
+ items, total := services.ListLetters(citizen.ID, pagination)
+ return shortcuts.Success(context, pagination.Response(items, total))
+}
+
+func GetLetterController(context *fiber.Ctx) error {
+ citizen := auth.GetUser(context)
+ ref := meta.Request(context).MustHave().Param("ref")
+ pagination := meta.Paginate(context)
+
+ result, serviceErr := services.GetLetter(ref, citizen.ID, pagination)
+ if serviceErr != nil {
+ return shortcuts.HandleError(context, serviceErr)
+ }
+
+ return shortcuts.Success(context, result)
+}
+
+func CreateLetterController(context *fiber.Ctx) error {
+ citizen := auth.GetUser(context)
+
+ body, err := meta.Body[letter.CreateRequest](context)
+ if err != nil {
+ return shortcuts.BadRequest(context, err)
+ }
+
+ result, serviceErr := services.CreateLetter(citizen.ID, body)
+ if serviceErr != nil {
+ return shortcuts.HandleError(context, serviceErr)
+ }
+
+ return shortcuts.Created(context, result)
+}
+
+func SendMessageController(context *fiber.Ctx) error {
+ citizen := auth.GetUser(context)
+ ref := meta.Request(context).MustHave().Param("ref")
+
+ body, err := meta.Body[letter.SendMessageRequest](context)
+ if err != nil {
+ return shortcuts.BadRequest(context, err)
+ }
+
+ result, serviceErr := services.SendLetterMessage(ref, citizen.ID, body)
+ if serviceErr != nil {
+ return shortcuts.HandleError(context, serviceErr)
+ }
+
+ return shortcuts.Created(context, result)
+}
+
+func EditMessageController(context *fiber.Ctx) error {
+ citizen := auth.GetUser(context)
+ ref := meta.Request(context).MustHave().Param("ref")
+ messageRef := meta.Request(context).MustHave().Param("messageRef")
+
+ body, err := meta.Body[letter.EditMessageRequest](context)
+ if err != nil {
+ return shortcuts.BadRequest(context, err)
+ }
+
+ result, serviceErr := services.EditLetterMessage(ref, messageRef, citizen.ID, body)
+ if serviceErr != nil {
+ return shortcuts.HandleError(context, serviceErr)
+ }
+
+ return shortcuts.Success(context, result)
+}
+
+func DeleteMessageController(context *fiber.Ctx) error {
+ citizen := auth.GetUser(context)
+ ref := meta.Request(context).MustHave().Param("ref")
+ messageRef := meta.Request(context).MustHave().Param("messageRef")
+
+ serviceErr := services.DeleteLetterMessage(ref, messageRef, citizen.ID)
+ if serviceErr != nil {
+ return shortcuts.HandleError(context, serviceErr)
+ }
+
+ return shortcuts.NoContent(context)
+}
+
+func RenameLetterController(context *fiber.Ctx) error {
+ citizen := auth.GetUser(context)
+ ref := meta.Request(context).MustHave().Param("ref")
+
+ body, err := meta.Body[letter.RenameRequest](context)
+ if err != nil {
+ return shortcuts.BadRequest(context, err)
+ }
+
+ result, serviceErr := services.RenameLetter(ref, citizen.ID, body)
+ if serviceErr != nil {
+ return shortcuts.HandleError(context, serviceErr)
+ }
+
+ return shortcuts.Success(context, result)
+}
+
+func LeaveLetterController(context *fiber.Ctx) error {
+ citizen := auth.GetUser(context)
+ ref := meta.Request(context).MustHave().Param("ref")
+
+ result, serviceErr := services.LeaveLetter(ref, citizen.ID)
+ if serviceErr != nil {
+ return shortcuts.HandleError(context, serviceErr)
+ }
+
+ return shortcuts.Success(context, result)
+}
+
+func RemoveParticipantController(context *fiber.Ctx) error {
+ citizen := auth.GetUser(context)
+ ref := meta.Request(context).MustHave().Param("ref")
+
+ body, err := meta.Body[letter.RemoveParticipantRequest](context)
+ if err != nil {
+ return shortcuts.BadRequest(context, err)
+ }
+
+ result, serviceErr := services.RemoveLetterParticipant(ref, citizen.ID, body)
+ if serviceErr != nil {
+ return shortcuts.HandleError(context, serviceErr)
+ }
+
+ return shortcuts.Success(context, result)
+}
+
+func UploadAttachmentController(context *fiber.Ctx) error {
+ citizen := auth.GetUser(context)
+
+ file, err := context.FormFile("file")
+ if err != nil {
+ return shortcuts.BadRequest(context, fiber.NewError(fiber.StatusBadRequest, messages.FileRequired))
+ }
+
+ source, err := file.Open()
+ if err != nil {
+ return shortcuts.InternalServerError(context, err)
+ }
+ defer source.Close()
+
+ result, serviceErr := services.UploadLetterAttachment(citizen.ID, file.Filename, file.Size, file.Header.Get("Content-Type"), source)
+ if serviceErr != nil {
+ return shortcuts.HandleError(context, serviceErr)
+ }
+
+ return shortcuts.Created(context, result)
+} \ No newline at end of file