@lucidcms/core
Version:
The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.
1 lines • 5.62 kB
Source Map (JSON)
{"version":3,"file":"get-storage-usage.mjs","names":[],"sources":["../../../src/services/media/get-storage-usage.ts"],"sourcesContent":["import {\n\tMediaRepository,\n\tProcessedImagesRepository,\n} from \"../../libs/repositories/index.js\";\nimport { multiTenancyEnabled } from \"../../utils/helpers/index.js\";\nimport type { ServiceFn } from \"../../utils/services/types.js\";\n\ntype StorageUsageBucket = {\n\ttenantKey: string | null;\n\tmedia: number;\n\tprocessedImages: number;\n\ttotal: number;\n};\n\nconst getStorageUsage: ServiceFn<\n\t[\n\t\t{\n\t\t\ttenantKey?: string | null;\n\t\t\tincludeAllBuckets?: boolean;\n\t\t\tgrouped?: boolean;\n\t\t}?,\n\t],\n\t{\n\t\tmedia: number;\n\t\tprocessedImages: number;\n\t\ttotal: number;\n\t\tbuckets?: StorageUsageBucket[];\n\t}\n> = async (context, data) => {\n\tconst Media = new MediaRepository(context.db.client, context.config.db);\n\tconst ProcessedImages = new ProcessedImagesRepository(\n\t\tcontext.db.client,\n\t\tcontext.config.db,\n\t);\n\n\tif (data?.grouped === true) {\n\t\tconst [mediaSizeRes, processedImagesSizeRes] = await Promise.all([\n\t\t\tMedia.sumFileSizeGroupedByTenant(),\n\t\t\tProcessedImages.sumFileSizeGroupedByMediaTenant(),\n\t\t]);\n\t\tif (mediaSizeRes.error) return mediaSizeRes;\n\t\tif (processedImagesSizeRes.error) return processedImagesSizeRes;\n\n\t\tconst bucketMap = new Map<string | null, StorageUsageBucket>();\n\t\tconst getBucket = (tenantKey: string | null) => {\n\t\t\tconst existing = bucketMap.get(tenantKey);\n\t\t\tif (existing) return existing;\n\n\t\t\tconst bucket = {\n\t\t\t\ttenantKey,\n\t\t\t\tmedia: 0,\n\t\t\t\tprocessedImages: 0,\n\t\t\t\ttotal: 0,\n\t\t\t};\n\t\t\tbucketMap.set(tenantKey, bucket);\n\t\t\treturn bucket;\n\t\t};\n\n\t\tgetBucket(null);\n\t\tfor (const row of mediaSizeRes.data) {\n\t\t\tconst bucket = getBucket(row.tenant_key);\n\t\t\tbucket.media = row.total;\n\t\t\tbucket.total = bucket.media + bucket.processedImages;\n\t\t}\n\t\tfor (const row of processedImagesSizeRes.data) {\n\t\t\tconst bucket = getBucket(row.tenant_key);\n\t\t\tbucket.processedImages = row.total;\n\t\t\tbucket.total = bucket.media + bucket.processedImages;\n\t\t}\n\n\t\tconst buckets = Array.from(bucketMap.values());\n\t\tconst media = buckets.reduce((acc, bucket) => acc + bucket.media, 0);\n\t\tconst processedImages = buckets.reduce(\n\t\t\t(acc, bucket) => acc + bucket.processedImages,\n\t\t\t0,\n\t\t);\n\n\t\treturn {\n\t\t\terror: undefined,\n\t\t\tdata: {\n\t\t\t\tmedia,\n\t\t\t\tprocessedImages,\n\t\t\t\ttotal: media + processedImages,\n\t\t\t\tbuckets,\n\t\t\t},\n\t\t};\n\t}\n\n\tif (data?.includeAllBuckets !== true && multiTenancyEnabled(context.config)) {\n\t\tconst tenantKey =\n\t\t\tdata !== undefined && \"tenantKey\" in data\n\t\t\t\t? (data.tenantKey ?? null)\n\t\t\t\t: (context.request.tenantKey ?? null);\n\n\t\tconst [mediaSizeRes, processedImagesSizeRes] = await Promise.all([\n\t\t\tMedia.sumFileSizeByTenant({ tenantKey }),\n\t\t\tProcessedImages.sumFileSizeByMediaTenant({ tenantKey }),\n\t\t]);\n\t\tif (mediaSizeRes.error) return mediaSizeRes;\n\t\tif (processedImagesSizeRes.error) return processedImagesSizeRes;\n\n\t\tconst media = mediaSizeRes.data;\n\t\tconst processedImages = processedImagesSizeRes.data;\n\n\t\treturn {\n\t\t\terror: undefined,\n\t\t\tdata: {\n\t\t\t\tmedia,\n\t\t\t\tprocessedImages,\n\t\t\t\ttotal: media + processedImages,\n\t\t\t},\n\t\t};\n\t}\n\n\tconst [mediaSizeRes, processedImagesSizeRes] = await Promise.all([\n\t\tMedia.sumFileSize(),\n\t\tProcessedImages.sumFileSize(),\n\t]);\n\tif (mediaSizeRes.error) return mediaSizeRes;\n\tif (processedImagesSizeRes.error) return processedImagesSizeRes;\n\n\tconst media = mediaSizeRes.data;\n\tconst processedImages = processedImagesSizeRes.data;\n\n\treturn {\n\t\terror: undefined,\n\t\tdata: {\n\t\t\tmedia,\n\t\t\tprocessedImages,\n\t\t\ttotal: media + processedImages,\n\t\t},\n\t};\n};\n\nexport default getStorageUsage;\n"],"mappings":"mLAcA,MAAM,EAcF,MAAO,EAAS,IAAS,CAC5B,IAAM,EAAQ,IAAI,EAAgB,EAAQ,GAAG,OAAQ,EAAQ,OAAO,EAAE,EAChE,EAAkB,IAAI,EAC3B,EAAQ,GAAG,OACX,EAAQ,OAAO,EAChB,EAEA,GAAI,GAAM,UAAY,GAAM,CAC3B,GAAM,CAAC,EAAc,GAA0B,MAAM,QAAQ,IAAI,CAChE,EAAM,2BAA2B,EACjC,EAAgB,gCAAgC,CACjD,CAAC,EACD,GAAI,EAAa,MAAO,OAAO,EAC/B,GAAI,EAAuB,MAAO,OAAO,EAEzC,IAAM,EAAY,IAAI,IAChB,EAAa,GAA6B,CAC/C,IAAM,EAAW,EAAU,IAAI,CAAS,EACxC,GAAI,EAAU,OAAO,EAErB,IAAM,EAAS,CACd,YACA,MAAO,EACP,gBAAiB,EACjB,MAAO,CACR,EAEA,OADA,EAAU,IAAI,EAAW,CAAM,EACxB,CACR,EAEA,EAAU,IAAI,EACd,IAAK,IAAM,KAAO,EAAa,KAAM,CACpC,IAAM,EAAS,EAAU,EAAI,UAAU,EACvC,EAAO,MAAQ,EAAI,MACnB,EAAO,MAAQ,EAAO,MAAQ,EAAO,eACtC,CACA,IAAK,IAAM,KAAO,EAAuB,KAAM,CAC9C,IAAM,EAAS,EAAU,EAAI,UAAU,EACvC,EAAO,gBAAkB,EAAI,MAC7B,EAAO,MAAQ,EAAO,MAAQ,EAAO,eACtC,CAEA,IAAM,EAAU,MAAM,KAAK,EAAU,OAAO,CAAC,EACvC,EAAQ,EAAQ,QAAQ,EAAK,IAAW,EAAM,EAAO,MAAO,CAAC,EAC7D,EAAkB,EAAQ,QAC9B,EAAK,IAAW,EAAM,EAAO,gBAC9B,CACD,EAEA,MAAO,CACN,MAAO,IAAA,GACP,KAAM,CACL,QACA,kBACA,MAAO,EAAQ,EACf,SACD,CACD,CACD,CAEA,GAAI,GAAM,oBAAsB,IAAQ,EAAoB,EAAQ,MAAM,EAAG,CAC5E,IAAM,EACL,IAAS,IAAA,IAAa,cAAe,EACjC,EAAK,WAAa,KAClB,EAAQ,QAAQ,WAAa,KAE5B,CAAC,EAAc,GAA0B,MAAM,QAAQ,IAAI,CAChE,EAAM,oBAAoB,CAAE,WAAU,CAAC,EACvC,EAAgB,yBAAyB,CAAE,WAAU,CAAC,CACvD,CAAC,EACD,GAAI,EAAa,MAAO,OAAO,EAC/B,GAAI,EAAuB,MAAO,OAAO,EAEzC,IAAM,EAAQ,EAAa,KACrB,EAAkB,EAAuB,KAE/C,MAAO,CACN,MAAO,IAAA,GACP,KAAM,CACL,QACA,kBACA,MAAO,EAAQ,CAChB,CACD,CACD,CAEA,GAAM,CAAC,EAAc,GAA0B,MAAM,QAAQ,IAAI,CAChE,EAAM,YAAY,EAClB,EAAgB,YAAY,CAC7B,CAAC,EACD,GAAI,EAAa,MAAO,OAAO,EAC/B,GAAI,EAAuB,MAAO,OAAO,EAEzC,IAAM,EAAQ,EAAa,KACrB,EAAkB,EAAuB,KAE/C,MAAO,CACN,MAAO,IAAA,GACP,KAAM,CACL,QACA,kBACA,MAAO,EAAQ,CAChB,CACD,CACD"}