feat: add complex user invitation and management features
- Implemented complex member and invitation schemas using Zod for validation. - Created new API endpoints for inviting, accepting, revoking, and canceling complex user invitations. - Developed handlers for managing complex users, including listing, inviting, revoking, and canceling invitations. - Added frontend components for displaying and managing complex users and invitations. - Introduced session storage management for pending invitations. - Integrated Gravatar for user avatars based on email. - Created database migration for complex invitations table.
This commit is contained in:
@@ -1,14 +1,25 @@
|
||||
import { requireAuth } from '@/middlewares/require-auth.middleware';
|
||||
import { acceptComplexInvitationsHandler } from '@/modules/complex/handlers/accept-complex-invitations.handler';
|
||||
import { cancelComplexInvitationHandler } from '@/modules/complex/handlers/cancel-complex-invitation.handler';
|
||||
import { createComplexHandler } from '@/modules/complex/handlers/create-complex.handler';
|
||||
import { getComplexByIdHandler } from '@/modules/complex/handlers/get-complex-by-id.handler';
|
||||
import { getComplexBySlugHandler } from '@/modules/complex/handlers/get-complex-by-slug.handler';
|
||||
import { getCurrentComplexHandler } from '@/modules/complex/handlers/get-current-complex.handler';
|
||||
import { inviteComplexUserHandler } from '@/modules/complex/handlers/invite-complex-user.handler';
|
||||
import { listComplexUsersHandler } from '@/modules/complex/handlers/list-complex-users.handler';
|
||||
import { listMyComplexesHandler } from '@/modules/complex/handlers/list-my-complexes.handler';
|
||||
import { resendComplexInvitationHandler } from '@/modules/complex/handlers/resend-complex-invitation.handler';
|
||||
import { revokeComplexUserHandler } from '@/modules/complex/handlers/revoke-complex-user.handler';
|
||||
import { selectComplexHandler } from '@/modules/complex/handlers/select-complex.handler';
|
||||
import { updateComplexHandler } from '@/modules/complex/handlers/update-complex.handler';
|
||||
import type { AppEnv } from '@/types/hono';
|
||||
import { zValidator } from '@hono/zod-validator';
|
||||
import { createComplexSchema, updateComplexSchema } from '@repo/api-contract';
|
||||
import {
|
||||
acceptComplexInvitationsSchema,
|
||||
createComplexSchema,
|
||||
inviteComplexUserSchema,
|
||||
updateComplexSchema,
|
||||
} from '@repo/api-contract';
|
||||
import { Hono } from 'hono';
|
||||
import { z } from 'zod';
|
||||
|
||||
@@ -21,6 +32,11 @@ complexRoutes.use('*', requireAuth);
|
||||
complexRoutes.post('/', zValidator('json', createComplexSchema), createComplexHandler);
|
||||
complexRoutes.get('/me', getCurrentComplexHandler);
|
||||
complexRoutes.post('/select', selectComplexHandler);
|
||||
complexRoutes.post(
|
||||
'/accept-pending',
|
||||
zValidator('json', acceptComplexInvitationsSchema),
|
||||
acceptComplexInvitationsHandler
|
||||
);
|
||||
complexRoutes.get('/mine', listMyComplexesHandler);
|
||||
complexRoutes.get(
|
||||
'/slug/:slug',
|
||||
@@ -28,6 +44,33 @@ complexRoutes.get(
|
||||
getComplexBySlugHandler
|
||||
);
|
||||
|
||||
complexRoutes.get(
|
||||
'/:id/users',
|
||||
zValidator('param', complexIdParamsSchema),
|
||||
listComplexUsersHandler
|
||||
);
|
||||
complexRoutes.post(
|
||||
'/:id/users',
|
||||
zValidator('param', complexIdParamsSchema),
|
||||
zValidator('json', inviteComplexUserSchema),
|
||||
inviteComplexUserHandler
|
||||
);
|
||||
complexRoutes.post(
|
||||
'/:id/invitations/:invitationId/resend',
|
||||
zValidator('param', z.object({ id: z.uuid(), invitationId: z.uuid() })),
|
||||
resendComplexInvitationHandler
|
||||
);
|
||||
complexRoutes.delete(
|
||||
'/:id/invitations/:invitationId',
|
||||
zValidator('param', z.object({ id: z.uuid(), invitationId: z.uuid() })),
|
||||
cancelComplexInvitationHandler
|
||||
);
|
||||
complexRoutes.delete(
|
||||
'/:id/users/:userId',
|
||||
zValidator('param', z.object({ id: z.uuid(), userId: z.string().min(1) })),
|
||||
revokeComplexUserHandler
|
||||
);
|
||||
|
||||
complexRoutes.get('/:id', zValidator('param', complexIdParamsSchema), getComplexByIdHandler);
|
||||
complexRoutes.patch(
|
||||
'/:id',
|
||||
|
||||
Reference in New Issue
Block a user