feat: manage waitlist and remove group members
- Add group-waitlist module (list/promote/remove entries) - Remove attendee with optional atomic promotion from waitlist - Block removal when attendee has payments (attendee_has_payments) - Waitlist detail modal matching members UI; optimistic add-to-waitlist - Responsive tweaks for the members/waitlist tabs
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { z } from 'zod';
|
||||
import { createPageSchema, createPageSizeSchema, createPaginationSchema } from './pagination.js';
|
||||
import { GroupWaitlistEntryDtoSchema } from './waitlist.js';
|
||||
|
||||
const isoDateTimeSchema = z.string().datetime();
|
||||
const pageSchema = createPageSchema();
|
||||
@@ -92,4 +93,20 @@ export const BulkCreateAttendeesResultSchema = z.object({
|
||||
message: z.string(),
|
||||
created: z.array(AttendeeDtoSchema),
|
||||
});
|
||||
export type BulkCreateAttendeesResult = z.output<typeof BulkCreateAttendeesResultSchema>;
|
||||
export type BulkCreateAttendeesResult = z.output<typeof BulkCreateAttendeesResultSchema>;
|
||||
|
||||
export const PromoteGroupWaitlistEntryResultSchema = z.object({
|
||||
attendee: AttendeeDtoSchema,
|
||||
});
|
||||
export type PromoteGroupWaitlistEntryResult = z.output<typeof PromoteGroupWaitlistEntryResultSchema>;
|
||||
|
||||
export const RemoveAttendeeQuerySchema = z.object({
|
||||
promoteFromWaitlist: z.coerce.boolean().optional(),
|
||||
});
|
||||
export type RemoveAttendeeQuery = z.output<typeof RemoveAttendeeQuerySchema>;
|
||||
|
||||
export const RemoveAttendeeResultSchema = z.object({
|
||||
removedAttendeeId: z.string(),
|
||||
promoted: GroupWaitlistEntryDtoSchema.nullable(),
|
||||
});
|
||||
export type RemoveAttendeeResult = z.output<typeof RemoveAttendeeResultSchema>;
|
||||
@@ -50,4 +50,21 @@ export const CreateGroupWaitlistEntrySchema = z.object({
|
||||
email: z.string().trim().email('Email inválido').optional().or(z.literal('')),
|
||||
notes: z.string().trim().optional(),
|
||||
});
|
||||
export type CreateGroupWaitlistEntry = z.output<typeof CreateGroupWaitlistEntrySchema>;
|
||||
export type CreateGroupWaitlistEntry = z.output<typeof CreateGroupWaitlistEntrySchema>;
|
||||
|
||||
export const GroupWaitlistQuerySchema = z.object({
|
||||
page: pageSchema,
|
||||
pageSize: pageSizeSchema,
|
||||
});
|
||||
export type GroupWaitlistQuery = z.output<typeof GroupWaitlistQuerySchema>;
|
||||
|
||||
export const GroupWaitlistListSchema = z.object({
|
||||
data: z.array(GroupWaitlistEntryDtoSchema),
|
||||
pagination: paginationSchema,
|
||||
});
|
||||
export type GroupWaitlistList = z.output<typeof GroupWaitlistListSchema>;
|
||||
|
||||
export const RemoveGroupWaitlistEntryResultSchema = z.object({
|
||||
deleted: z.boolean(),
|
||||
});
|
||||
export type RemoveGroupWaitlistEntryResult = z.output<typeof RemoveGroupWaitlistEntryResultSchema>;
|
||||
Reference in New Issue
Block a user