fix: prevent overwriting settings with defaults

This commit is contained in:
Aykhan 2025-10-23 18:55:56 +04:00 committed by Pas
parent 62e0b545be
commit 955578c429

View file

@ -114,11 +114,11 @@ export default defineEventHandler(async event => {
const validatedBody = userSettingsSchema.parse(body); const validatedBody = userSettingsSchema.parse(body);
const data = { const createData = {
application_theme: validatedBody.applicationTheme ?? null, application_theme: validatedBody.applicationTheme ?? null,
application_language: validatedBody.applicationLanguage, application_language: validatedBody.applicationLanguage,
default_subtitle_language: validatedBody.defaultSubtitleLanguage ?? null, default_subtitle_language: validatedBody.defaultSubtitleLanguage ?? null,
proxy_urls: validatedBody.proxyUrls === null ? [] : validatedBody.proxyUrls || [], proxy_urls: validatedBody.proxyUrls === null ? [] : (validatedBody.proxyUrls || []),
trakt_key: validatedBody.traktKey ?? null, trakt_key: validatedBody.traktKey ?? null,
febbox_key: validatedBody.febboxKey ?? null, febbox_key: validatedBody.febboxKey ?? null,
enable_thumbnails: validatedBody.enableThumbnails, enable_thumbnails: validatedBody.enableThumbnails,
@ -134,14 +134,33 @@ export default defineEventHandler(async event => {
proxy_tmdb: validatedBody.proxyTmdb, proxy_tmdb: validatedBody.proxyTmdb,
}; };
log.info('Preparing to upsert settings', { userId, data }); const updateData: Partial<typeof createData> = {};
if (Object.prototype.hasOwnProperty.call(body, 'applicationTheme')) updateData.application_theme = createData.application_theme;
if (Object.prototype.hasOwnProperty.call(body, 'applicationLanguage')) updateData.application_language = createData.application_language;
if (Object.prototype.hasOwnProperty.call(body, 'defaultSubtitleLanguage')) updateData.default_subtitle_language = createData.default_subtitle_language;
if (Object.prototype.hasOwnProperty.call(body, 'proxyUrls')) updateData.proxy_urls = createData.proxy_urls;
if (Object.prototype.hasOwnProperty.call(body, 'traktKey')) updateData.trakt_key = createData.trakt_key;
if (Object.prototype.hasOwnProperty.call(body, 'febboxKey')) updateData.febbox_key = createData.febbox_key;
if (Object.prototype.hasOwnProperty.call(body, 'enableThumbnails')) updateData.enable_thumbnails = createData.enable_thumbnails;
if (Object.prototype.hasOwnProperty.call(body, 'enableAutoplay')) updateData.enable_autoplay = createData.enable_autoplay;
if (Object.prototype.hasOwnProperty.call(body, 'enableSkipCredits')) updateData.enable_skip_credits = createData.enable_skip_credits;
if (Object.prototype.hasOwnProperty.call(body, 'enableDiscover')) updateData.enable_discover = createData.enable_discover;
if (Object.prototype.hasOwnProperty.call(body, 'enableFeatured')) updateData.enable_featured = createData.enable_featured;
if (Object.prototype.hasOwnProperty.call(body, 'enableDetailsModal')) updateData.enable_details_modal = createData.enable_details_modal;
if (Object.prototype.hasOwnProperty.call(body, 'enableImageLogos')) updateData.enable_image_logos = createData.enable_image_logos;
if (Object.prototype.hasOwnProperty.call(body, 'enableCarouselView')) updateData.enable_carousel_view = createData.enable_carousel_view;
if (Object.prototype.hasOwnProperty.call(body, 'sourceOrder')) updateData.source_order = createData.source_order;
if (Object.prototype.hasOwnProperty.call(body, 'enableSourceOrder')) updateData.enable_source_order = createData.enable_source_order;
if (Object.prototype.hasOwnProperty.call(body, 'proxyTmdb')) updateData.proxy_tmdb = createData.proxy_tmdb;
log.info('Preparing to upsert settings', { userId, updateData, createData: { id: userId, ...createData } });
const settings = await prisma.user_settings.upsert({ const settings = await prisma.user_settings.upsert({
where: { id: userId }, where: { id: userId },
update: data, update: updateData,
create: { create: {
id: userId, id: userId,
...data, ...createData,
}, },
}) as unknown as UserSettings; }) as unknown as UserSettings;