feat: pref for default filter showUnread
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user