feat: enhance member management features; add quick stats and search capabilities

This commit is contained in:
T. Zehetbauer
2026-04-02 22:56:04 +02:00
parent 0932c57fa1
commit f43770999f
35 changed files with 4370 additions and 159 deletions

View File

@@ -166,3 +166,57 @@ export const AssignDepartmentSchema = z.object({
memberId: z.string().uuid(),
departmentId: z.string().uuid(),
});
// --- Bulk operations & advanced search schemas ---
export const BulkStatusUpdateSchema = z.object({
memberIds: z.array(z.string().uuid()).min(1),
accountId: z.string().uuid(),
status: MembershipStatusEnum,
});
export const BulkDepartmentAssignSchema = z.object({
memberIds: z.array(z.string().uuid()).min(1),
accountId: z.string().uuid(),
departmentId: z.string().uuid(),
});
export const BulkArchiveSchema = z.object({
memberIds: z.array(z.string().uuid()).min(1),
accountId: z.string().uuid(),
});
export const MemberSearchFiltersSchema = z.object({
accountId: z.string().uuid(),
search: z.string().optional(),
status: z.array(MembershipStatusEnum).optional(),
departmentIds: z.array(z.string().uuid()).optional(),
duesCategoryId: z.string().uuid().optional(),
flags: z
.array(
z.enum([
'honorary',
'founding',
'youth',
'retiree',
'probationary',
'transferred',
]),
)
.optional(),
entryDateFrom: z.string().optional(),
entryDateTo: z.string().optional(),
hasEmail: z.boolean().optional(),
sortBy: z.string().default('last_name'),
sortDirection: z.enum(['asc', 'desc']).default('asc'),
page: z.number().int().min(1).default(1),
pageSize: z.number().int().min(1).max(100).default(25),
});
export type MemberSearchFilters = z.infer<typeof MemberSearchFiltersSchema>;
export const QuickSearchSchema = z.object({
accountId: z.string().uuid(),
query: z.string().min(1),
limit: z.number().int().min(1).max(20).default(8),
});