feat: Initial commit - Base application with Next.js - Configuration, Auth, Library navigation, CBZ/CBR reader, Cache, Responsive design

This commit is contained in:
Julien Froidefond
2025-02-11 21:04:40 +01:00
commit 33bdc43442
48 changed files with 9813 additions and 0 deletions

View File

@@ -0,0 +1,75 @@
import { AuthError } from "@/types/auth";
import { storageService } from "./storage.service";
import { KomgaUser } from "@/types/komga";
interface AuthUser {
id: string;
email: string;
roles: string[];
authenticated: boolean;
}
// Utilisateur de développement
const DEV_USER = {
email: "demo@paniels.local",
password: "demo123",
userData: {
id: "1",
email: "demo@paniels.local",
roles: ["ROLE_USER"],
authenticated: true,
} as AuthUser,
};
class AuthService {
private static instance: AuthService;
private constructor() {}
public static getInstance(): AuthService {
if (!AuthService.instance) {
AuthService.instance = new AuthService();
}
return AuthService.instance;
}
/**
* Authentifie un utilisateur
*/
async login(email: string, password: string, remember: boolean = false): Promise<void> {
// En développement, on vérifie juste l'utilisateur de démo
if (email === DEV_USER.email && password === DEV_USER.password) {
storageService.setUserData(DEV_USER.userData, remember);
return;
}
throw {
code: "INVALID_CREDENTIALS",
message: "Email ou mot de passe incorrect",
} as AuthError;
}
/**
* Déconnecte l'utilisateur
*/
logout(): void {
storageService.clear();
}
/**
* Vérifie si l'utilisateur est connecté
*/
isAuthenticated(): boolean {
const user = storageService.getUserData<AuthUser>();
return !!user?.authenticated;
}
/**
* Récupère l'utilisateur connecté
*/
getCurrentUser(): AuthUser | null {
return storageService.getUserData<AuthUser>();
}
}
export const authService = AuthService.getInstance();