77 lines
1.7 KiB
TypeScript
77 lines
1.7 KiB
TypeScript
import { PrismaClient } from '@prisma/client';
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
export interface ThemeData {
|
|
name: string;
|
|
primaryColor: string;
|
|
secondaryColor: string;
|
|
backgroundColor: string;
|
|
textColor: string;
|
|
}
|
|
|
|
export class ThemeService {
|
|
// Créer un nouveau thème
|
|
static async createTheme(data: ThemeData) {
|
|
return prisma.theme.create({
|
|
data: {
|
|
...data,
|
|
isActive: false,
|
|
},
|
|
});
|
|
}
|
|
|
|
// Récupérer tous les thèmes
|
|
static async getAllThemes() {
|
|
return prisma.theme.findMany();
|
|
}
|
|
|
|
// Récupérer le thème actif
|
|
static async getActiveTheme() {
|
|
const settings = await prisma.appSettings.findFirst({
|
|
include: {
|
|
currentTheme: true,
|
|
},
|
|
});
|
|
return settings?.currentTheme;
|
|
}
|
|
|
|
// Activer un thème
|
|
static async activateTheme(themeId: string) {
|
|
// Désactiver tous les thèmes
|
|
await prisma.theme.updateMany({
|
|
where: { isActive: true },
|
|
data: { isActive: false },
|
|
});
|
|
|
|
// Activer le thème sélectionné
|
|
const updatedTheme = await prisma.theme.update({
|
|
where: { id: themeId },
|
|
data: { isActive: true },
|
|
});
|
|
|
|
// Mettre à jour les paramètres de l'application
|
|
await prisma.appSettings.upsert({
|
|
where: { id: '1' },
|
|
update: { currentThemeId: themeId },
|
|
create: { id: '1', currentThemeId: themeId },
|
|
});
|
|
|
|
return updatedTheme;
|
|
}
|
|
|
|
// Mettre à jour un thème
|
|
static async updateTheme(themeId: string, data: Partial<ThemeData>) {
|
|
return prisma.theme.update({
|
|
where: { id: themeId },
|
|
data,
|
|
});
|
|
}
|
|
|
|
// Supprimer un thème
|
|
static async deleteTheme(themeId: string) {
|
|
return prisma.theme.delete({
|
|
where: { id: themeId },
|
|
});
|
|
}
|
|
}
|