feat: enhance API response handling and add new components for module management
Some checks failed
Workflow / ʦ TypeScript (push) Failing after 4m50s
Workflow / ⚫️ Test (push) Has been skipped

This commit is contained in:
T. Zehetbauer
2026-04-01 15:18:24 +02:00
parent f82a366a52
commit 7b078f298b
58 changed files with 1845 additions and 398 deletions

View File

@@ -30,6 +30,26 @@ export const createMember = authActionClient
const api = createMemberManagementApi(client);
const userId = ctx.user.id;
// Check for duplicates before creating
const duplicates = await api.checkDuplicate(
input.accountId,
input.firstName,
input.lastName,
input.dateOfBirth,
);
if (duplicates.length > 0) {
return {
success: false,
error: 'Mögliche Duplikate gefunden',
validationErrors: duplicates.map((d: Record<string, unknown>) => ({
field: 'name',
message: `${d.first_name} ${d.last_name}${d.member_number ? ` (Nr. ${d.member_number})` : ''}`,
id: String(d.id),
})),
};
}
logger.info({ name: 'member.create' }, 'Creating member...');
const result = await api.createMember(input, userId);
logger.info({ name: 'member.create' }, 'Member created');
@@ -217,7 +237,14 @@ export const exportMembers = authActionClient
const csv = await api.exportMembersCsv(input.accountId, {
status: input.status,
});
return { success: true, csv };
return {
success: true,
data: {
content: csv,
filename: `mitglieder_${new Date().toISOString().split('T')[0]}.csv`,
mimeType: 'text/csv',
},
};
});
// Gap 5: Department assignments
@@ -248,11 +275,14 @@ export const exportMembersExcel = authActionClient
const buffer = await api.exportMembersExcel(input.accountId, {
status: input.status,
});
// Return base64 for client-side download
return {
success: true,
base64: buffer.toString('base64'),
filename: `mitglieder_${new Date().toISOString().split('T')[0]}.xlsx`,
data: {
content: buffer.toString('base64'),
filename: `mitglieder_${new Date().toISOString().split('T')[0]}.xlsx`,
mimeType:
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
},
};
});
@@ -295,8 +325,11 @@ export const generateMemberCards = authActionClient
return {
success: true,
base64: buffer.toString('base64'),
filename: `mitgliedsausweise_${new Date().toISOString().split('T')[0]}.pdf`,
data: {
content: buffer.toString('base64'),
filename: `mitgliedsausweise_${new Date().toISOString().split('T')[0]}.pdf`,
mimeType: 'application/pdf',
},
};
});