{"version":3,"file":"sync-owned-visibility.mjs","names":["constants","processedImageServices.clearSingle","mediaServices.strategies.rename","formatter"],"sources":["../../../../src/services/media/helpers/sync-owned-visibility.ts"],"sourcesContent":["import constants from \"../../../constants/constants.js\";\nimport formatter from \"../../../libs/formatters/index.js\";\nimport { MediaRepository } from \"../../../libs/repositories/index.js\";\nimport changeKeyVisibility from \"../../../utils/media/change-key-visibility.js\";\nimport type { ServiceFn } from \"../../../utils/services/types.js\";\nimport { mediaServices, processedImageServices } from \"../../index.js\";\n\n/** Synchronizes visibility and storage keys across all owned descendants. */\nconst syncOwnedVisibility: ServiceFn<\n\t[{ parentId: number; public: boolean; userId: number }],\n\tundefined\n> = async (context, data) => {\n\tconst Media = new MediaRepository(context.db.client, context.config.db);\n\tconst childrenRes = await Media.selectMultiple({\n\t\tselect: [\"id\", \"key\", \"public\"],\n\t\twhere: [{ key: \"parent_media_id\", operator: \"=\", value: data.parentId }],\n\t\tvalidation: { enabled: true },\n\t});\n\tif (childrenRes.error) return childrenRes;\n\n\tconst childResults = await Promise.all(\n\t\tchildrenRes.data.map(async (child) => {\n\t\t\tconst targetKey = changeKeyVisibility({\n\t\t\t\tkey: child.key,\n\t\t\t\tvisibility: data.public\n\t\t\t\t\t? constants.media.visibilityKeys.public\n\t\t\t\t\t: constants.media.visibilityKeys.private,\n\t\t\t});\n\n\t\t\tif (targetKey !== child.key) {\n\t\t\t\tconst clearProcessedRes = await processedImageServices.clearSingle(\n\t\t\t\t\tcontext,\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: child.key,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tif (clearProcessedRes.error) return clearProcessedRes;\n\n\t\t\t\tconst renameRes = await mediaServices.strategies.rename(context, {\n\t\t\t\t\tfrom: child.key,\n\t\t\t\t\tto: targetKey,\n\t\t\t\t});\n\t\t\t\tif (renameRes.error) return renameRes;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\ttargetKey !== child.key ||\n\t\t\t\tformatter.formatBoolean(child.public) !== data.public\n\t\t\t) {\n\t\t\t\tconst updateRes = await Media.updateSingle({\n\t\t\t\t\twhere: [{ key: \"id\", operator: \"=\", value: child.id }],\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tkey: targetKey,\n\t\t\t\t\t\tpublic: data.public,\n\t\t\t\t\t\tupdated_at: new Date().toISOString(),\n\t\t\t\t\t\tupdated_by: data.userId,\n\t\t\t\t\t},\n\t\t\t\t\treturning: [\"id\"],\n\t\t\t\t});\n\t\t\t\tif (updateRes.error) return updateRes;\n\t\t\t}\n\n\t\t\treturn syncOwnedVisibility(context, {\n\t\t\t\tparentId: child.id,\n\t\t\t\tpublic: data.public,\n\t\t\t\tuserId: data.userId,\n\t\t\t});\n\t\t}),\n\t);\n\tconst failedChild = childResults.find((result) => result.error);\n\tif (failedChild) return failedChild;\n\n\treturn { error: undefined, data: undefined };\n};\n\nexport default syncOwnedVisibility;\n"],"mappings":"mTAQA,MAAM,EAGF,MAAO,EAAS,IAAS,CAC5B,IAAM,EAAQ,IAAI,EAAgB,EAAQ,GAAG,OAAQ,EAAQ,OAAO,EAAE,EAChE,EAAc,MAAM,EAAM,eAAe,CAC9C,OAAQ,CAAC,KAAM,MAAO,QAAQ,EAC9B,MAAO,CAAC,CAAE,IAAK,kBAAmB,SAAU,IAAK,MAAO,EAAK,QAAS,CAAC,EACvE,WAAY,CAAE,QAAS,EAAK,CAC7B,CAAC,EAuDD,OAtDI,EAAY,MAAc,GAmDV,MAjDO,QAAQ,IAClC,EAAY,KAAK,IAAI,KAAO,IAAU,CACrC,IAAM,EAAY,EAAoB,CACrC,IAAK,EAAM,IACX,WAAY,EAAK,OACdA,EAAU,MAAM,eAAe,OAC/BA,EAAU,MAAM,eAAe,OACnC,CAAC,EAED,GAAI,IAAc,EAAM,IAAK,CAC5B,IAAM,EAAoB,MAAMC,EAC/B,EACA,CACC,IAAK,EAAM,GACZ,CACD,EACA,GAAI,EAAkB,MAAO,OAAO,EAEpC,IAAM,EAAY,MAAMC,EAAgC,EAAS,CAChE,KAAM,EAAM,IACZ,GAAI,CACL,CAAC,EACD,GAAI,EAAU,MAAO,OAAO,CAC7B,CAEA,GACC,IAAc,EAAM,KACpBC,EAAU,cAAc,EAAM,MAAM,IAAM,EAAK,OAC9C,CACD,IAAM,EAAY,MAAM,EAAM,aAAa,CAC1C,MAAO,CAAC,CAAE,IAAK,KAAM,SAAU,IAAK,MAAO,EAAM,EAAG,CAAC,EACrD,KAAM,CACL,IAAK,EACL,OAAQ,EAAK,OACb,WAAY,IAAI,KAAK,CAAA,CAAE,YAAY,EACnC,WAAY,EAAK,MAClB,EACA,UAAW,CAAC,IAAI,CACjB,CAAC,EACD,GAAI,EAAU,MAAO,OAAO,CAC7B,CAEA,OAAO,EAAoB,EAAS,CACnC,SAAU,EAAM,GAChB,OAAQ,EAAK,OACb,OAAQ,EAAK,MACd,CAAC,CACF,CAAC,CACF,EAAA,CACiC,KAAM,GAAW,EAAO,KACrD,GAEG,CAAE,MAAO,IAAA,GAAW,KAAM,IAAA,EAAU,CAC5C"}