Add unique member ID generation to registration process
Build And Push Image / docker (push) Successful in 3m25s
Details
Build And Push Image / docker (push) Successful in 3m25s
Details
- Generate and store unique member IDs during user registration - Update email templates to include formatted member ID and registration date - Add member_id field mapping in NocoDB utility functions - Enhance email service with better logging and template data handling
This commit is contained in:
parent
f1a462094a
commit
f4044c4477
|
|
@ -116,7 +116,11 @@ export default defineEventHandler(async (event) => {
|
|||
membershipData
|
||||
});
|
||||
|
||||
// 6. Create member record
|
||||
// 6. Generate unique member ID and create member record
|
||||
console.log('[api/registration.post] Generating unique member ID...');
|
||||
const { generateMemberID } = await import('~/server/utils/member-id');
|
||||
const generatedMemberID = await generateMemberID();
|
||||
|
||||
console.log('[api/registration.post] Creating member record...');
|
||||
const memberData = {
|
||||
first_name: body.first_name,
|
||||
|
|
@ -131,6 +135,7 @@ export default defineEventHandler(async (event) => {
|
|||
membership_status: 'Active',
|
||||
registration_date: new Date().toISOString(),
|
||||
member_since: new Date().toISOString().split('T')[0], // YYYY-MM-DD format
|
||||
member_id: generatedMemberID, // Include the generated member ID
|
||||
membership_date_paid: '',
|
||||
payment_due_date: paymentDueDate.toISOString() // 1 month from registration
|
||||
};
|
||||
|
|
@ -154,7 +159,12 @@ export default defineEventHandler(async (event) => {
|
|||
firstName: body.first_name,
|
||||
lastName: body.last_name,
|
||||
verificationLink,
|
||||
memberId: createdMemberId
|
||||
memberId: member.member_id || `MUSA-${createdMemberId}`, // Use formatted member_id
|
||||
registrationDate: new Date().toLocaleDateString('en-US', {
|
||||
year: 'numeric',
|
||||
month: 'long',
|
||||
day: 'numeric'
|
||||
})
|
||||
});
|
||||
|
||||
console.log('[api/registration.post] Welcome email sent successfully');
|
||||
|
|
@ -163,13 +173,13 @@ export default defineEventHandler(async (event) => {
|
|||
// Don't fail the registration if email fails - user can resend verification email later
|
||||
}
|
||||
|
||||
console.log(`[api/registration.post] ✅ Registration successful - Member ID: ${createdMemberId}, Keycloak ID: ${createdKeycloakId}`);
|
||||
console.log(`[api/registration.post] ✅ Registration successful - Member ID: ${member.member_id || `MUSA-${createdMemberId}`}, Keycloak ID: ${createdKeycloakId}`);
|
||||
|
||||
return {
|
||||
success: true,
|
||||
message: 'Registration successful! Please check your email to verify your account and set your password.',
|
||||
data: {
|
||||
memberId: createdMemberId,
|
||||
memberId: member.member_id || `MUSA-${createdMemberId}`, // Return formatted member_id
|
||||
email: body.email
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ export interface WelcomeEmailData {
|
|||
memberId: string;
|
||||
registrationDate?: string;
|
||||
logoUrl?: string;
|
||||
email?: string;
|
||||
}
|
||||
|
||||
export interface VerificationEmailData {
|
||||
|
|
@ -230,15 +231,23 @@ export class EmailService {
|
|||
async sendWelcomeEmail(to: string, data: WelcomeEmailData): Promise<void> {
|
||||
const template = this.getTemplate('welcome');
|
||||
if (!template) {
|
||||
console.error('[EmailService] ❌ Welcome email template not found! Available templates:', Array.from(this.templates.keys()));
|
||||
throw new Error('Welcome email template not found');
|
||||
}
|
||||
|
||||
const config = useRuntimeConfig();
|
||||
const templateData = {
|
||||
...data,
|
||||
logoUrl: data.logoUrl || `${useRuntimeConfig().public.domain}/MONACOUSA-Flags_376x376.png`
|
||||
logoUrl: data.logoUrl || `${config.public.domain}/MONACOUSA-Flags_376x376.png`,
|
||||
baseUrl: config.public.domain || 'https://portal.monacousa.org',
|
||||
email: data.email || to
|
||||
};
|
||||
|
||||
console.log('[EmailService] Template data:', templateData);
|
||||
|
||||
const html = template(templateData);
|
||||
console.log('[EmailService] Generated HTML length:', html.length);
|
||||
console.log('[EmailService] HTML preview (first 200 chars):', html.substring(0, 200));
|
||||
|
||||
await this.sendEmail({
|
||||
to,
|
||||
|
|
|
|||
|
|
@ -117,6 +117,7 @@ export const normalizeFieldsFromNocoDB = (data: any): Member => {
|
|||
'Address': 'address',
|
||||
'Membership Status': 'membership_status',
|
||||
'Member Since': 'member_since',
|
||||
'Member ID': 'member_id', // Added field mapping for member_id
|
||||
'Current Year Dues Paid': 'current_year_dues_paid',
|
||||
'Membership Date Paid': 'membership_date_paid',
|
||||
'Payment Due Date': 'payment_due_date',
|
||||
|
|
@ -132,6 +133,7 @@ export const normalizeFieldsFromNocoDB = (data: any): Member => {
|
|||
'address': 'address',
|
||||
'membership_status': 'membership_status',
|
||||
'member_since': 'member_since',
|
||||
'member_id': 'member_id',
|
||||
'current_year_dues_paid': 'current_year_dues_paid',
|
||||
'membership_date_paid': 'membership_date_paid',
|
||||
'payment_due_date': 'payment_due_date'
|
||||
|
|
@ -171,6 +173,7 @@ export const normalizeFieldsForNocoDB = (data: any): Record<string, any> => {
|
|||
'address': 'Address',
|
||||
'membership_status': 'Membership Status',
|
||||
'member_since': 'Member Since',
|
||||
'member_id': 'Member ID', // Added field mapping for member_id
|
||||
'current_year_dues_paid': 'Current Year Dues Paid',
|
||||
'membership_date_paid': 'Membership Date Paid',
|
||||
'payment_due_date': 'Payment Due Date',
|
||||
|
|
@ -311,6 +314,7 @@ export const createMember = async (data: Partial<Member>): Promise<Member> => {
|
|||
"membership_status",
|
||||
"address",
|
||||
"member_since",
|
||||
"member_id",
|
||||
"keycloak_id"
|
||||
];
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue