From dc55f9c0097e1c36b85d7666071b840b902920e9 Mon Sep 17 00:00:00 2001 From: Leonardo Bishop Date: Mon, 20 Jan 2025 02:56:25 +0000 Subject: Add calendar support --- api/handlers/calendar.go | 81 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 api/handlers/calendar.go (limited to 'api/handlers/calendar.go') diff --git a/api/handlers/calendar.go b/api/handlers/calendar.go new file mode 100644 index 0000000..85a9b00 --- /dev/null +++ b/api/handlers/calendar.go @@ -0,0 +1,81 @@ +package handlers + +import ( + "errors" + + "github.com/LMBishop/confplanner/api/dto" + "github.com/LMBishop/confplanner/pkg/calendar" + "github.com/gofiber/fiber/v2" +) + +func GetCalendar(calendarService calendar.Service, baseURL string) fiber.Handler { + // TODO create config service + return func(c *fiber.Ctx) error { + uid := c.Locals("uid").(int32) + + cal, err := calendarService.GetCalendarForUser(uid) + if err != nil { + if errors.Is(err, calendar.ErrCalendarNotFound) { + return &dto.ErrorResponse{ + Code: fiber.StatusNotFound, + Message: "Calendar not found", + } + } + + return err + } + + return &dto.OkResponse{ + Code: fiber.StatusOK, + Data: &dto.GetCalendarResponse{ + ID: cal.ID, + Name: cal.Name, + Key: cal.Key, + URL: baseURL + "/calendar/ical?name=" + cal.Name + "&key=" + cal.Key, + }, + } + } +} + +func CreateCalendar(calendarService calendar.Service, baseURL string) fiber.Handler { + return func(c *fiber.Ctx) error { + uid := c.Locals("uid").(int32) + + cal, err := calendarService.CreateCalendarForUser(uid) + if err != nil { + return err + } + + return &dto.OkResponse{ + Code: fiber.StatusCreated, + Data: &dto.CreateCalendarResponse{ + ID: cal.ID, + Name: cal.Name, + Key: cal.Key, + URL: baseURL + "/calendar/ical?name=" + cal.Name + "&key=" + cal.Key, + }, + } + } +} + +func DeleteCalendar(calendarService calendar.Service) fiber.Handler { + return func(c *fiber.Ctx) error { + uid := c.Locals("uid").(int32) + + err := calendarService.DeleteCalendarForUser(uid) + if err != nil { + if errors.Is(err, calendar.ErrCalendarNotFound) { + return &dto.ErrorResponse{ + Code: fiber.StatusNotFound, + Message: "Calendar not found", + } + } + + return err + } + + return &dto.OkResponse{ + Code: fiber.StatusOK, + } + } +} -- cgit v1.2.3-70-g09d2