feat: new pref for debug

This commit is contained in:
Julien Froidefond
2025-02-23 13:05:16 +01:00
parent 0bbb5e1aaa
commit 1cffe6913a
5 changed files with 65 additions and 18 deletions

View File

@@ -111,7 +111,13 @@
### GET /api/preferences ### GET /api/preferences
- **Description** : Récupération des préférences utilisateur - **Description** : Récupération des préférences utilisateur
- **Réponse** : `Preferences` - **Réponse** : `{ showThumbnails: boolean, cacheMode: "memory" | "file", showOnlyUnread: boolean, debug: boolean }`
### PUT /api/preferences
- **Description** : Mise à jour des préférences utilisateur
- **Body** : `{ showThumbnails?: boolean, cacheMode?: "memory" | "file", showOnlyUnread?: boolean, debug?: boolean }`
- **Réponse** : `{ showThumbnails: boolean, cacheMode: "memory" | "file", showOnlyUnread: boolean, debug: boolean }`
## 🧪 Test ## 🧪 Test

View File

@@ -339,6 +339,39 @@ export function ClientSettings({ initialConfig, initialTTLConfig }: ClientSettin
}} }}
/> />
</div> </div>
<div className="flex items-center justify-between">
<div className="space-y-0.5">
<Label htmlFor="debug-mode">Mode debug</Label>
<p className="text-sm text-muted-foreground">
Afficher les informations de debug dans l'interface
</p>
</div>
<Switch
id="debug-mode"
checked={preferences.debug}
onCheckedChange={async (checked) => {
try {
await updatePreferences({ debug: checked });
toast({
title: "Préférences sauvegardées",
description: `Le mode debug est maintenant ${
checked ? "activé" : "désactivé"
}`,
});
} catch (error) {
console.error("Erreur détaillée:", error);
toast({
variant: "destructive",
title: "Erreur",
description:
error instanceof Error
? error.message
: "Une erreur est survenue lors de la mise à jour des préférences",
});
}
}}
/>
</div>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -6,12 +6,14 @@ export interface UserPreferences {
showThumbnails: boolean; showThumbnails: boolean;
cacheMode: "memory" | "file"; cacheMode: "memory" | "file";
showOnlyUnread: boolean; showOnlyUnread: boolean;
debug: boolean;
} }
const defaultPreferences: UserPreferences = { const defaultPreferences: UserPreferences = {
showThumbnails: true, showThumbnails: true,
cacheMode: "memory", cacheMode: "memory",
showOnlyUnread: false, showOnlyUnread: false,
debug: false,
}; };
interface PreferencesContextType { interface PreferencesContextType {
@@ -67,11 +69,9 @@ export function PreferencesProvider({ children }: { children: React.ReactNode })
...prev, ...prev,
...updatedPreferences, ...updatedPreferences,
}; };
console.log("Nouvel état des préférences:", newState);
return newState; return newState;
}); });
} catch (error) { } catch (error) {
console.error("Erreur lors de la mise à jour des préférences:", error);
throw error; throw error;
} }
}; };

View File

@@ -21,39 +21,48 @@ const preferencesSchema = new mongoose.Schema(
default: false, default: false,
required: false, required: false,
}, },
debug: {
type: Boolean,
default: false,
required: false,
},
}, },
{ {
timestamps: true, timestamps: true,
strict: true, strict: true,
toObject: { toObject: {
transform: function (doc, ret) { transform: function (doc, ret) {
// Assurez-vous que showOnlyUnread est toujours un booléen // Force la conversion en booléen
ret.showOnlyUnread = ret.showOnlyUnread === true; ret.showOnlyUnread = Boolean(ret.showOnlyUnread);
ret.debug = Boolean(ret.debug);
return ret; return ret;
}, },
}, },
} }
); );
// Middleware pour s'assurer que showOnlyUnread est toujours un booléen // Middleware pour s'assurer que les booléens sont toujours des booléens
preferencesSchema.pre("save", function (next) { preferencesSchema.pre("save", function (next) {
if (this.showOnlyUnread === undefined) { if (this.showOnlyUnread === undefined) {
this.showOnlyUnread = false; this.showOnlyUnread = false;
} }
this.showOnlyUnread = this.showOnlyUnread === true; if (this.debug === undefined) {
this.debug = false;
}
this.showOnlyUnread = Boolean(this.showOnlyUnread);
this.debug = Boolean(this.debug);
next(); next();
}); });
preferencesSchema.pre("findOneAndUpdate", function (next) { preferencesSchema.pre("findOneAndUpdate", function (next) {
const update = this.getUpdate() as mongoose.UpdateQuery<any>; const update = this.getUpdate() as mongoose.UpdateQuery<any>;
if ( if (update && "$set" in update && update.$set && typeof update.$set === "object") {
update && if ("showOnlyUnread" in update.$set) {
"$set" in update && update.$set.showOnlyUnread = Boolean(update.$set.showOnlyUnread);
update.$set && }
typeof update.$set === "object" && if ("debug" in update.$set) {
"showOnlyUnread" in update.$set update.$set.debug = Boolean(update.$set.debug);
) { }
update.$set.showOnlyUnread = update.$set.showOnlyUnread === true;
} }
next(); next();
}); });

View File

@@ -10,12 +10,14 @@ export interface UserPreferences {
showThumbnails: boolean; showThumbnails: boolean;
cacheMode: "memory" | "file"; cacheMode: "memory" | "file";
showOnlyUnread: boolean; showOnlyUnread: boolean;
debug: boolean;
} }
const defaultPreferences: UserPreferences = { const defaultPreferences: UserPreferences = {
showThumbnails: true, showThumbnails: true,
cacheMode: "memory", cacheMode: "memory",
showOnlyUnread: false, showOnlyUnread: false,
debug: false,
}; };
export class PreferencesService { export class PreferencesService {
@@ -53,7 +55,6 @@ export class PreferencesService {
static async updatePreferences(preferences: Partial<UserPreferences>): Promise<UserPreferences> { static async updatePreferences(preferences: Partial<UserPreferences>): Promise<UserPreferences> {
try { try {
console.log("Service - Préférences reçues pour mise à jour:", preferences);
const user = await this.getCurrentUser(); const user = await this.getCurrentUser();
const updatedPreferences = await PreferencesModel.findOneAndUpdate( const updatedPreferences = await PreferencesModel.findOneAndUpdate(
{ userId: user.id }, { userId: user.id },
@@ -61,12 +62,10 @@ export class PreferencesService {
{ new: true, upsert: true } { new: true, upsert: true }
); );
console.log("Service - Document MongoDB après mise à jour:", updatedPreferences);
const result = { const result = {
...defaultPreferences, ...defaultPreferences,
...updatedPreferences.toObject(), ...updatedPreferences.toObject(),
}; };
console.log("Service - Résultat final:", result);
return result; return result;
} catch (error) { } catch (error) {
console.error("Error updating preferences:", error); console.error("Error updating preferences:", error);