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:
Jose Selesan
2026-04-22 15:30:04 -03:00
parent 5f2a7fd494
commit 6ad4fc9ee9
37 changed files with 1935 additions and 78 deletions

View File

@@ -13,6 +13,7 @@ import { Route as SelectComplexRouteImport } from './routes/select-complex'
import { Route as ResetPasswordRouteImport } from './routes/reset-password'
import { Route as OnboardRouteImport } from './routes/onboard'
import { Route as LoginRouteImport } from './routes/login'
import { Route as InviteRouteImport } from './routes/invite'
import { Route as AuthCallbackRouteImport } from './routes/auth-callback'
import { Route as AppRouteRouteImport } from './routes/_app/route'
import { Route as OnboardIndexRouteImport } from './routes/onboard/index'
@@ -49,6 +50,11 @@ const LoginRoute = LoginRouteImport.update({
path: '/login',
getParentRoute: () => rootRouteImport,
} as any)
const InviteRoute = InviteRouteImport.update({
id: '/invite',
path: '/invite',
getParentRoute: () => rootRouteImport,
} as any)
const AuthCallbackRoute = AuthCallbackRouteImport.update({
id: '/auth-callback',
path: '/auth-callback',
@@ -128,6 +134,7 @@ const AppAuthenticatedComplexSlugEditRoute =
export interface FileRoutesByFullPath {
'/': typeof AppAuthenticatedIndexRoute
'/auth-callback': typeof AuthCallbackRoute
'/invite': typeof InviteRoute
'/login': typeof LoginRoute
'/onboard': typeof OnboardRouteWithChildren
'/reset-password': typeof ResetPasswordRoute
@@ -147,6 +154,7 @@ export interface FileRoutesByFullPath {
export interface FileRoutesByTo {
'/': typeof AppAuthenticatedIndexRoute
'/auth-callback': typeof AuthCallbackRoute
'/invite': typeof InviteRoute
'/login': typeof LoginRoute
'/reset-password': typeof ResetPasswordRoute
'/select-complex': typeof SelectComplexRoute
@@ -165,6 +173,7 @@ export interface FileRoutesById {
__root__: typeof rootRouteImport
'/_app': typeof AppRouteRouteWithChildren
'/auth-callback': typeof AuthCallbackRoute
'/invite': typeof InviteRoute
'/login': typeof LoginRoute
'/onboard': typeof OnboardRouteWithChildren
'/reset-password': typeof ResetPasswordRoute
@@ -188,6 +197,7 @@ export interface FileRouteTypes {
fullPaths:
| '/'
| '/auth-callback'
| '/invite'
| '/login'
| '/onboard'
| '/reset-password'
@@ -207,6 +217,7 @@ export interface FileRouteTypes {
to:
| '/'
| '/auth-callback'
| '/invite'
| '/login'
| '/reset-password'
| '/select-complex'
@@ -224,6 +235,7 @@ export interface FileRouteTypes {
| '__root__'
| '/_app'
| '/auth-callback'
| '/invite'
| '/login'
| '/onboard'
| '/reset-password'
@@ -246,6 +258,7 @@ export interface FileRouteTypes {
export interface RootRouteChildren {
AppRouteRoute: typeof AppRouteRouteWithChildren
AuthCallbackRoute: typeof AuthCallbackRoute
InviteRoute: typeof InviteRoute
LoginRoute: typeof LoginRoute
OnboardRoute: typeof OnboardRouteWithChildren
ResetPasswordRoute: typeof ResetPasswordRoute
@@ -283,6 +296,13 @@ declare module '@tanstack/react-router' {
preLoaderRoute: typeof LoginRouteImport
parentRoute: typeof rootRouteImport
}
'/invite': {
id: '/invite'
path: '/invite'
fullPath: '/invite'
preLoaderRoute: typeof InviteRouteImport
parentRoute: typeof rootRouteImport
}
'/auth-callback': {
id: '/auth-callback'
path: '/auth-callback'
@@ -458,6 +478,7 @@ const ComplexSlugBookingRouteWithChildren =
const rootRouteChildren: RootRouteChildren = {
AppRouteRoute: AppRouteRouteWithChildren,
AuthCallbackRoute: AuthCallbackRoute,
InviteRoute: InviteRoute,
LoginRoute: LoginRoute,
OnboardRoute: OnboardRouteWithChildren,
ResetPasswordRoute: ResetPasswordRoute,