feat: pref for default filter showUnread

This commit is contained in:
Julien Froidefond
2025-02-21 23:18:41 +01:00
parent c62cff07d2
commit 72e28ed27b
8 changed files with 188 additions and 44 deletions

View File

@@ -16,11 +16,47 @@ const preferencesSchema = new mongoose.Schema(
enum: ["memory", "file"],
default: "memory",
},
showOnlyUnread: {
type: Boolean,
default: false,
required: false,
},
},
{
timestamps: true,
strict: true,
toObject: {
transform: function (doc, ret) {
// Assurez-vous que showOnlyUnread est toujours un booléen
ret.showOnlyUnread = ret.showOnlyUnread === true;
return ret;
},
},
}
);
// Middleware pour s'assurer que showOnlyUnread est toujours un booléen
preferencesSchema.pre("save", function (next) {
if (this.showOnlyUnread === undefined) {
this.showOnlyUnread = false;
}
this.showOnlyUnread = this.showOnlyUnread === true;
next();
});
preferencesSchema.pre("findOneAndUpdate", function (next) {
const update = this.getUpdate() as mongoose.UpdateQuery<any>;
if (
update &&
"$set" in update &&
update.$set &&
typeof update.$set === "object" &&
"showOnlyUnread" in update.$set
) {
update.$set.showOnlyUnread = update.$set.showOnlyUnread === true;
}
next();
});
export const PreferencesModel =
mongoose.models.Preferences || mongoose.model("Preferences", preferencesSchema);

View File

@@ -9,8 +9,15 @@ interface User {
export interface UserPreferences {
showThumbnails: boolean;
cacheMode: "memory" | "file";
showOnlyUnread: boolean;
}
const defaultPreferences: UserPreferences = {
showThumbnails: true,
cacheMode: "memory",
showOnlyUnread: false,
};
export class PreferencesService {
static async getCurrentUser(): Promise<User> {
const userCookie = cookies().get("stripUser");
@@ -32,26 +39,21 @@ export class PreferencesService {
const user = await this.getCurrentUser();
const preferences = await PreferencesModel.findOne({ userId: user.id });
if (!preferences) {
return {
showThumbnails: true,
cacheMode: "memory",
};
return defaultPreferences;
}
return {
showThumbnails: preferences.showThumbnails,
cacheMode: preferences.cacheMode || "memory",
...defaultPreferences,
...preferences.toObject(),
};
} catch (error) {
console.error("Error getting preferences:", error);
return {
showThumbnails: true,
cacheMode: "memory",
};
return defaultPreferences;
}
}
static async updatePreferences(preferences: Partial<UserPreferences>): Promise<UserPreferences> {
try {
console.log("Service - Préférences reçues pour mise à jour:", preferences);
const user = await this.getCurrentUser();
const updatedPreferences = await PreferencesModel.findOneAndUpdate(
{ userId: user.id },
@@ -59,10 +61,13 @@ export class PreferencesService {
{ new: true, upsert: true }
);
return {
showThumbnails: updatedPreferences.showThumbnails,
cacheMode: updatedPreferences.cacheMode || "memory",
console.log("Service - Document MongoDB après mise à jour:", updatedPreferences);
const result = {
...defaultPreferences,
...updatedPreferences.toObject(),
};
console.log("Service - Résultat final:", result);
return result;
} catch (error) {
console.error("Error updating preferences:", error);
throw error;