refactor: migrate authentication to NextAuth and clean up related services

This commit is contained in:
Julien Froidefond
2025-10-12 15:45:09 +02:00
parent 117ac243f5
commit 7d12a66c12
25 changed files with 558 additions and 353 deletions

View File

@@ -0,0 +1,3 @@
import { handlers } from "@/auth";
export const { GET, POST } = handlers;

View File

@@ -1,54 +0,0 @@
import { NextRequest, NextResponse } from "next/server";
import { AuthService, UserService } from "@/services";
export async function POST(request: NextRequest) {
try {
const { email, password } = await request.json();
// Validation des données
if (!email || !password) {
return NextResponse.json(
{ error: "Email et mot de passe requis" },
{ status: 400 }
);
}
// Vérifier les identifiants
const userService = new UserService();
const user = await userService.verifyCredentials(email, password);
if (!user) {
return NextResponse.json(
{ error: "Email ou mot de passe incorrect" },
{ status: 401 }
);
}
// Créer la réponse avec le cookie de session
const response = NextResponse.json(
{
message: "Connexion réussie",
user: {
id: user.uuid_id,
firstName: user.first_name,
lastName: user.last_name,
email: user.email,
teamId: user.team_id,
},
},
{ status: 200 }
);
// Créer la session et définir le cookie
await AuthService.createSession(user.uuid_id, response);
return response;
} catch (error) {
console.error("Login error:", error);
return NextResponse.json(
{ error: "Erreur interne du serveur" },
{ status: 500 }
);
}
}

View File

@@ -1,25 +0,0 @@
import { NextResponse } from "next/server";
import { AuthService } from "@/services";
export async function POST() {
try {
// Créer la réponse
const response = NextResponse.json(
{ message: "Déconnexion réussie" },
{ status: 200 }
);
// Supprimer la session et le cookie
AuthService.removeSession(response);
return response;
} catch (error) {
console.error("Logout error:", error);
return NextResponse.json(
{ error: "Erreur interne du serveur" },
{ status: 500 }
);
}
}

View File

@@ -1,46 +0,0 @@
import { NextRequest, NextResponse } from "next/server";
import { AuthService, userService } from "@/services";
export async function PUT(request: NextRequest) {
try {
// Vérifier si l'utilisateur est connecté
const userUuid = await AuthService.getUserUuidFromCookie();
if (!userUuid) {
return NextResponse.json({ error: "Non authentifié" }, { status: 401 });
}
// Récupérer les données de mise à jour
const { firstName, lastName, teamId } = await request.json();
// Validation des données
if (!firstName || !lastName || !teamId) {
return NextResponse.json(
{ error: "Tous les champs sont requis" },
{ status: 400 }
);
}
// Mettre à jour l'utilisateur
await userService.updateUserByUuid(userUuid, {
firstName,
lastName,
teamId,
});
return NextResponse.json({
message: "Profil mis à jour avec succès",
user: {
firstName,
lastName,
teamId,
},
});
} catch (error: any) {
console.error("Profile update error:", error);
return NextResponse.json(
{ error: error.message || "Erreur lors de la mise à jour du profil" },
{ status: 500 }
);
}
}

View File

@@ -1,6 +1,5 @@
import { NextRequest, NextResponse } from "next/server";
import { AuthService, userService } from "@/services";
import { userService } from "@/services";
import bcrypt from "bcryptjs";
export async function POST(request: NextRequest) {
@@ -45,8 +44,9 @@ export async function POST(request: NextRequest) {
);
}
// Créer la réponse avec le cookie de session
const response = NextResponse.json(
// Retourner les informations de l'utilisateur créé
// Le client devra appeler signIn() pour créer la session
return NextResponse.json(
{
message: "Compte créé avec succès",
user: {
@@ -59,11 +59,6 @@ export async function POST(request: NextRequest) {
},
{ status: 201 }
);
// Créer la session et définir le cookie
await AuthService.createSession(newUser.uuid_id, response);
return response;
} catch (error) {
console.error("Register error:", error);
return NextResponse.json(