feat: implement authentication system with email verification, user management dashboard, and administrative business controls
Some checks failed
Build and Push App / build (push) Failing after 1m9s
Some checks failed
Build and Push App / build (push) Failing after 1m9s
This commit is contained in:
@@ -14,13 +14,14 @@ export async function getCountries() {
|
||||
}
|
||||
}
|
||||
|
||||
export async function addCountry(data: { name: string, code: string, flag?: string }) {
|
||||
export async function addCountry(data: { name: string, code: string, flag?: string, description?: string }) {
|
||||
try {
|
||||
const country = await prisma.country.create({
|
||||
data: {
|
||||
name: data.name,
|
||||
code: data.code.toUpperCase(),
|
||||
flag: data.flag || null,
|
||||
description: data.description || null,
|
||||
isActive: true
|
||||
}
|
||||
});
|
||||
@@ -58,3 +59,17 @@ export async function toggleCountryStatus(id: string, isActive: boolean) {
|
||||
return { success: false };
|
||||
}
|
||||
}
|
||||
|
||||
export async function updateCountryDescription(id: string, description: string) {
|
||||
try {
|
||||
await prisma.country.update({
|
||||
where: { id },
|
||||
data: { description }
|
||||
});
|
||||
revalidatePath('/countries');
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
console.error('Error updating country description:', error);
|
||||
return { success: false, error: 'Erreur lors de la mise à jour.' };
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,31 @@ export async function getSiteSettings() {
|
||||
homeBlogSelection: "latest",
|
||||
homeBlogIds: [],
|
||||
homeBlogCategories: [],
|
||||
homeCategories: ["Technologie & IT", "Agriculture & Agrobusiness", "Mode & Textile", "Cosmétique & Beauté"]
|
||||
homeCategories: ["Technologie & IT", "Agriculture & Agrobusiness", "Mode & Textile", "Cosmétique & Beauté"],
|
||||
resetPasswordSubject: "Réinitialisation de votre mot de passe - Afrohub",
|
||||
resetPasswordTemplate: `<div style="font-family: sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #e5e7eb; border-radius: 8px;">
|
||||
<h2 style="color: #0d9488; text-align: center;">{siteName}</h2>
|
||||
<p>Bonjour {name},</p>
|
||||
<p>Vous avez demandé la réinitialisation de votre mot de passe. Cliquez sur le bouton ci-dessous pour choisir un nouveau mot de passe :</p>
|
||||
<div style="text-align: center; margin: 30px 0;">
|
||||
<a href="{resetUrl}" style="background-color: #0d9488; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px; font-weight: bold;">Réinitialiser mon mot de passe</a>
|
||||
</div>
|
||||
<p>Ce lien expirera dans 1 heure. Si vous n'avez pas demandé cette réinitialisation, vous pouvez ignorer cet email.</p>
|
||||
<hr style="border: 0; border-top: 1px solid #e5e7eb; margin: 20px 0;">
|
||||
<p style="font-size: 12px; color: #6b7280; text-align: center;">© 2025 {siteName}. Tous droits réservés.</p>
|
||||
</div>`,
|
||||
verifyEmailSubject: "Vérification de votre compte - Afrohub",
|
||||
verifyEmailTemplate: `<div style="font-family: sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #e5e7eb; border-radius: 8px;">
|
||||
<h2 style="color: #0d9488; text-align: center;">{siteName}</h2>
|
||||
<p>Bonjour {name},</p>
|
||||
<p>Merci de vous être inscrit sur {siteName}. Pour finaliser la création de votre compte, merci de vérifier votre adresse email en cliquant sur le bouton ci-dessous :</p>
|
||||
<div style="text-align: center; margin: 30px 0;">
|
||||
<a href="{verifyUrl}" style="background-color: #0d9488; color: white; padding: 12px 24px; text-decoration: none; border-radius: 6px; font-weight: bold;">Vérifier mon compte</a>
|
||||
</div>
|
||||
<p>Si vous n'avez pas créé de compte sur notre plateforme, vous pouvez ignorer cet email.</p>
|
||||
<hr style="border: 0; border-top: 1px solid #e5e7eb; margin: 20px 0;">
|
||||
<p style="font-size: 12px; color: #6b7280; text-align: center;">© 2025 {siteName}. Tous droits réservés.</p>
|
||||
</div>`
|
||||
};
|
||||
|
||||
if (!settings) return defaultSettings;
|
||||
|
||||
@@ -25,3 +25,19 @@ export async function getClients() {
|
||||
return { success: false, error: "Erreur lors de la récupération des clients" };
|
||||
}
|
||||
}
|
||||
|
||||
export async function verifyUserEmail(userId: string) {
|
||||
try {
|
||||
await prisma.user.update({
|
||||
where: { id: userId },
|
||||
data: {
|
||||
emailVerified: true,
|
||||
verificationToken: null
|
||||
}
|
||||
});
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
console.error("Failed to verify user email:", error);
|
||||
return { success: false, error: "Erreur lors de la vérification de l'email" };
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user