From 2fbd9c8d19f05b63ae0769310b4ecf5a2f26c2e3 Mon Sep 17 00:00:00 2001 From: Alder Whiteford Date: Thu, 20 Jun 2024 09:45:15 -0400 Subject: [PATCH] Event RSVP endpoint creation for FE --- backend/entities/events/rsvps/routes.go | 11 +++---- .../oauth/soth/msft_web/msft_web.go | 2 +- frontend/lib/package.json | 2 +- frontend/lib/src/api/eventApi.ts | 33 ++++++++++++++++++- frontend/lib/src/types/event.ts | 6 ++++ frontend/mobile/src/app/auth/index.tsx | 1 + 6 files changed, 46 insertions(+), 9 deletions(-) diff --git a/backend/entities/events/rsvps/routes.go b/backend/entities/events/rsvps/routes.go index c36d5eca..d573a09f 100644 --- a/backend/entities/events/rsvps/routes.go +++ b/backend/entities/events/rsvps/routes.go @@ -3,16 +3,15 @@ package rsvps import ( "github.com/GenerateNU/sac/backend/permission" "github.com/GenerateNU/sac/backend/types" - "github.com/gofiber/fiber/v2" ) func EventsRSVPs(params types.RouteParams) { controller := NewController(NewHandler(params.ServiceParams)) // api/v1/events/:eventID/rsvps/* - params.Router.Route("/rsvps", func(r fiber.Router) { - r.Get("/", params.UtilityMiddleware.Paginator, controller.GetEventRSVPs) - r.Post("/:userID", controller.CreateEventRSVP) - r.Delete("/:userID", params.AuthMiddleware.UserAuthorizeById, params.AuthMiddleware.Authorize(permission.DeleteAll), controller.DeleteEventRSVP) - }) + eventRSVPS := params.Router.Group("/:eventID/rsvps") + + eventRSVPS.Get("/", params.UtilityMiddleware.Paginator, controller.GetEventRSVPs) + eventRSVPS.Post("/:userID", params.AuthMiddleware.UserAuthorizeById, controller.CreateEventRSVP) + eventRSVPS.Delete("/:userID", params.AuthMiddleware.UserAuthorizeById, params.AuthMiddleware.Authorize(permission.DeleteAll), controller.DeleteEventRSVP) } diff --git a/backend/integrations/oauth/soth/msft_web/msft_web.go b/backend/integrations/oauth/soth/msft_web/msft_web.go index dbc0c841..2188c7a9 100644 --- a/backend/integrations/oauth/soth/msft_web/msft_web.go +++ b/backend/integrations/oauth/soth/msft_web/msft_web.go @@ -34,7 +34,7 @@ var defaultScopes = []string{"openid", "offline_access", "user.read", "calendars func New(clientKey *m.Secret[string], secret *m.Secret[string], callbackURL string, tenant string, scopes ...string) *Provider { p := &Provider{ ClientKey: clientKey, - Secret: secret, + Secret: secret, CallbackURL: callbackURL, ProviderName: "microsoftonlineweb", tenant: tenant, diff --git a/frontend/lib/package.json b/frontend/lib/package.json index 350abf78..5bf5e6e3 100644 --- a/frontend/lib/package.json +++ b/frontend/lib/package.json @@ -1,6 +1,6 @@ { "name": "@generatesac/lib", - "version": "0.0.186", + "version": "0.0.187", "type": "module", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/frontend/lib/src/api/eventApi.ts b/frontend/lib/src/api/eventApi.ts index fc45474d..1f682955 100644 --- a/frontend/lib/src/api/eventApi.ts +++ b/frontend/lib/src/api/eventApi.ts @@ -5,13 +5,15 @@ import { CreateEventRequestBody, Event, EventPreview, + EventUserParams, UpdateEventRequestBody, eventPreviewSchema, eventSchema, } from "../types/event"; import { PaginationQueryParams } from "../types/root"; -import { Tag } from "../types/tag"; +import { Tag, tagSchema } from "../types/tag"; import { baseApi, handleQueryParams } from "./base"; +import { User, userSchema } from "../types"; const EVENT_API_BASE_URL = "/events"; @@ -102,6 +104,35 @@ export const eventApi = baseApi.injectEndpoints({ }), providesTags: (result) => result ? result.map((tag) => ({ type: "Tag", id: tag.id })) : ["Tag"], + transformResponse: (response) => { + return z.array(tagSchema).parse(response); + } + }), + createEventRegistration: builder.mutation({ + query: ({ user_id, event_id }) => ({ + url: `${EVENT_API_BASE_URL}/${event_id}/rsvps/${user_id}`, + method: "POST", + responseHandler: 'text' + }), + transformResponse: (response) => { + return z.array(userSchema).parse(response); + } + }), + deleteEventRegistration: builder.mutation({ + query: ({ user_id, event_id }) => ({ + url: `${EVENT_API_BASE_URL}/${event_id}/rsvps/${user_id}`, + method: "DELETE", + responseHandler: 'text', + }), + }), + eventRegistrations: builder.query({ + query: (id) => ({ + url: `${EVENT_API_BASE_URL}/${id}/rsvps`, + method: "GET", + }), + transformResponse: (response) => { + return z.array(userSchema).parse(response); + }, }), }), }); diff --git a/frontend/lib/src/types/event.ts b/frontend/lib/src/types/event.ts index 5618ecd5..62cc0e5b 100644 --- a/frontend/lib/src/types/event.ts +++ b/frontend/lib/src/types/event.ts @@ -64,6 +64,11 @@ const eventPreviewSchemaIntermediate = z.object({ host_logo: z.string().max(255).optional(), }); +const eventUserParams = z.object({ + event_id: z.string().uuid(), + user_id: z.string().uuid(), +}) + export const eventSchema = eventSchemaIntermediate.merge(rootModelSchema); export const eventPreviewSchema = eventPreviewSchemaIntermediate @@ -77,3 +82,4 @@ export type UpdateEventRequestBody = z.infer< export type Event = z.infer; export type EventPreview = z.infer; export type EventType = z.infer; +export type EventUserParams = z.infer; diff --git a/frontend/mobile/src/app/auth/index.tsx b/frontend/mobile/src/app/auth/index.tsx index afbd57a2..55c60a15 100644 --- a/frontend/mobile/src/app/auth/index.tsx +++ b/frontend/mobile/src/app/auth/index.tsx @@ -17,6 +17,7 @@ const WelcomePage = () => { const handleLogin = () => { login().then(async ({ data }) => { if (data) { + console.log(data.sac_session); await Linking.openURL(data.redirect_uri); dispatch(setAccessToken(data.sac_session)); }