mirror of
https://github.com/immich-app/immich.git
synced 2025-01-04 02:46:47 +01:00
chore(server): time bucket sql (#6156)
This commit is contained in:
parent
317adc5c28
commit
7b40c20ea5
3 changed files with 151 additions and 0 deletions
|
@ -17,4 +17,5 @@ export const DummyValue = {
|
||||||
STRING: 'abcdefghi',
|
STRING: 'abcdefghi',
|
||||||
BUFFER: Buffer.from('abcdefghi'),
|
BUFFER: Buffer.from('abcdefghi'),
|
||||||
DATE: new Date(),
|
DATE: new Date(),
|
||||||
|
TIME_BUCKET: '2024-01-01T00:00:00.000Z',
|
||||||
};
|
};
|
||||||
|
|
|
@ -674,6 +674,7 @@ export class AssetRepository implements IAssetRepository {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GenerateSql({ params: [{ size: TimeBucketSize.MONTH }] })
|
||||||
getTimeBuckets(options: TimeBucketOptions): Promise<TimeBucketItem[]> {
|
getTimeBuckets(options: TimeBucketOptions): Promise<TimeBucketItem[]> {
|
||||||
const truncated = dateTrunc(options);
|
const truncated = dateTrunc(options);
|
||||||
return this.getBuilder(options)
|
return this.getBuilder(options)
|
||||||
|
@ -684,6 +685,7 @@ export class AssetRepository implements IAssetRepository {
|
||||||
.getRawMany();
|
.getRawMany();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GenerateSql({ params: [DummyValue.TIME_BUCKET, { size: TimeBucketSize.MONTH }] })
|
||||||
getTimeBucket(timeBucket: string, options: TimeBucketOptions): Promise<AssetEntity[]> {
|
getTimeBucket(timeBucket: string, options: TimeBucketOptions): Promise<AssetEntity[]> {
|
||||||
const truncated = dateTrunc(options);
|
const truncated = dateTrunc(options);
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -607,6 +607,154 @@ ORDER BY
|
||||||
LIMIT
|
LIMIT
|
||||||
11
|
11
|
||||||
|
|
||||||
|
-- AssetRepository.getTimeBuckets
|
||||||
|
SELECT
|
||||||
|
COUNT("asset"."id")::int AS "count",
|
||||||
|
(
|
||||||
|
date_trunc(
|
||||||
|
'month',
|
||||||
|
(asset."localDateTime" at time zone 'UTC')
|
||||||
|
) at time zone 'UTC'
|
||||||
|
)::timestamptz AS "timeBucket"
|
||||||
|
FROM
|
||||||
|
"assets" "asset"
|
||||||
|
LEFT JOIN "exif" "exifInfo" ON "exifInfo"."assetId" = "asset"."id"
|
||||||
|
LEFT JOIN "assets" "stack" ON "stack"."stackParentId" = "asset"."id"
|
||||||
|
AND ("stack"."deletedAt" IS NULL)
|
||||||
|
WHERE
|
||||||
|
(
|
||||||
|
"asset"."isVisible" = true
|
||||||
|
AND "asset"."fileCreatedAt" < NOW()
|
||||||
|
)
|
||||||
|
AND ("asset"."deletedAt" IS NULL)
|
||||||
|
GROUP BY
|
||||||
|
(
|
||||||
|
date_trunc(
|
||||||
|
'month',
|
||||||
|
(asset."localDateTime" at time zone 'UTC')
|
||||||
|
) at time zone 'UTC'
|
||||||
|
)::timestamptz
|
||||||
|
ORDER BY
|
||||||
|
(
|
||||||
|
date_trunc(
|
||||||
|
'month',
|
||||||
|
(asset."localDateTime" at time zone 'UTC')
|
||||||
|
) at time zone 'UTC'
|
||||||
|
)::timestamptz DESC
|
||||||
|
|
||||||
|
-- AssetRepository.getTimeBucket
|
||||||
|
SELECT
|
||||||
|
"asset"."id" AS "asset_id",
|
||||||
|
"asset"."deviceAssetId" AS "asset_deviceAssetId",
|
||||||
|
"asset"."ownerId" AS "asset_ownerId",
|
||||||
|
"asset"."libraryId" AS "asset_libraryId",
|
||||||
|
"asset"."deviceId" AS "asset_deviceId",
|
||||||
|
"asset"."type" AS "asset_type",
|
||||||
|
"asset"."originalPath" AS "asset_originalPath",
|
||||||
|
"asset"."resizePath" AS "asset_resizePath",
|
||||||
|
"asset"."webpPath" AS "asset_webpPath",
|
||||||
|
"asset"."thumbhash" AS "asset_thumbhash",
|
||||||
|
"asset"."encodedVideoPath" AS "asset_encodedVideoPath",
|
||||||
|
"asset"."createdAt" AS "asset_createdAt",
|
||||||
|
"asset"."updatedAt" AS "asset_updatedAt",
|
||||||
|
"asset"."deletedAt" AS "asset_deletedAt",
|
||||||
|
"asset"."fileCreatedAt" AS "asset_fileCreatedAt",
|
||||||
|
"asset"."localDateTime" AS "asset_localDateTime",
|
||||||
|
"asset"."fileModifiedAt" AS "asset_fileModifiedAt",
|
||||||
|
"asset"."isFavorite" AS "asset_isFavorite",
|
||||||
|
"asset"."isArchived" AS "asset_isArchived",
|
||||||
|
"asset"."isExternal" AS "asset_isExternal",
|
||||||
|
"asset"."isReadOnly" AS "asset_isReadOnly",
|
||||||
|
"asset"."isOffline" AS "asset_isOffline",
|
||||||
|
"asset"."checksum" AS "asset_checksum",
|
||||||
|
"asset"."duration" AS "asset_duration",
|
||||||
|
"asset"."isVisible" AS "asset_isVisible",
|
||||||
|
"asset"."livePhotoVideoId" AS "asset_livePhotoVideoId",
|
||||||
|
"asset"."originalFileName" AS "asset_originalFileName",
|
||||||
|
"asset"."sidecarPath" AS "asset_sidecarPath",
|
||||||
|
"asset"."stackParentId" AS "asset_stackParentId",
|
||||||
|
"exifInfo"."assetId" AS "exifInfo_assetId",
|
||||||
|
"exifInfo"."description" AS "exifInfo_description",
|
||||||
|
"exifInfo"."exifImageWidth" AS "exifInfo_exifImageWidth",
|
||||||
|
"exifInfo"."exifImageHeight" AS "exifInfo_exifImageHeight",
|
||||||
|
"exifInfo"."fileSizeInByte" AS "exifInfo_fileSizeInByte",
|
||||||
|
"exifInfo"."orientation" AS "exifInfo_orientation",
|
||||||
|
"exifInfo"."dateTimeOriginal" AS "exifInfo_dateTimeOriginal",
|
||||||
|
"exifInfo"."modifyDate" AS "exifInfo_modifyDate",
|
||||||
|
"exifInfo"."timeZone" AS "exifInfo_timeZone",
|
||||||
|
"exifInfo"."latitude" AS "exifInfo_latitude",
|
||||||
|
"exifInfo"."longitude" AS "exifInfo_longitude",
|
||||||
|
"exifInfo"."projectionType" AS "exifInfo_projectionType",
|
||||||
|
"exifInfo"."city" AS "exifInfo_city",
|
||||||
|
"exifInfo"."livePhotoCID" AS "exifInfo_livePhotoCID",
|
||||||
|
"exifInfo"."state" AS "exifInfo_state",
|
||||||
|
"exifInfo"."country" AS "exifInfo_country",
|
||||||
|
"exifInfo"."make" AS "exifInfo_make",
|
||||||
|
"exifInfo"."model" AS "exifInfo_model",
|
||||||
|
"exifInfo"."lensModel" AS "exifInfo_lensModel",
|
||||||
|
"exifInfo"."fNumber" AS "exifInfo_fNumber",
|
||||||
|
"exifInfo"."focalLength" AS "exifInfo_focalLength",
|
||||||
|
"exifInfo"."iso" AS "exifInfo_iso",
|
||||||
|
"exifInfo"."exposureTime" AS "exifInfo_exposureTime",
|
||||||
|
"exifInfo"."profileDescription" AS "exifInfo_profileDescription",
|
||||||
|
"exifInfo"."colorspace" AS "exifInfo_colorspace",
|
||||||
|
"exifInfo"."bitsPerSample" AS "exifInfo_bitsPerSample",
|
||||||
|
"exifInfo"."fps" AS "exifInfo_fps",
|
||||||
|
"stack"."id" AS "stack_id",
|
||||||
|
"stack"."deviceAssetId" AS "stack_deviceAssetId",
|
||||||
|
"stack"."ownerId" AS "stack_ownerId",
|
||||||
|
"stack"."libraryId" AS "stack_libraryId",
|
||||||
|
"stack"."deviceId" AS "stack_deviceId",
|
||||||
|
"stack"."type" AS "stack_type",
|
||||||
|
"stack"."originalPath" AS "stack_originalPath",
|
||||||
|
"stack"."resizePath" AS "stack_resizePath",
|
||||||
|
"stack"."webpPath" AS "stack_webpPath",
|
||||||
|
"stack"."thumbhash" AS "stack_thumbhash",
|
||||||
|
"stack"."encodedVideoPath" AS "stack_encodedVideoPath",
|
||||||
|
"stack"."createdAt" AS "stack_createdAt",
|
||||||
|
"stack"."updatedAt" AS "stack_updatedAt",
|
||||||
|
"stack"."deletedAt" AS "stack_deletedAt",
|
||||||
|
"stack"."fileCreatedAt" AS "stack_fileCreatedAt",
|
||||||
|
"stack"."localDateTime" AS "stack_localDateTime",
|
||||||
|
"stack"."fileModifiedAt" AS "stack_fileModifiedAt",
|
||||||
|
"stack"."isFavorite" AS "stack_isFavorite",
|
||||||
|
"stack"."isArchived" AS "stack_isArchived",
|
||||||
|
"stack"."isExternal" AS "stack_isExternal",
|
||||||
|
"stack"."isReadOnly" AS "stack_isReadOnly",
|
||||||
|
"stack"."isOffline" AS "stack_isOffline",
|
||||||
|
"stack"."checksum" AS "stack_checksum",
|
||||||
|
"stack"."duration" AS "stack_duration",
|
||||||
|
"stack"."isVisible" AS "stack_isVisible",
|
||||||
|
"stack"."livePhotoVideoId" AS "stack_livePhotoVideoId",
|
||||||
|
"stack"."originalFileName" AS "stack_originalFileName",
|
||||||
|
"stack"."sidecarPath" AS "stack_sidecarPath",
|
||||||
|
"stack"."stackParentId" AS "stack_stackParentId"
|
||||||
|
FROM
|
||||||
|
"assets" "asset"
|
||||||
|
LEFT JOIN "exif" "exifInfo" ON "exifInfo"."assetId" = "asset"."id"
|
||||||
|
LEFT JOIN "assets" "stack" ON "stack"."stackParentId" = "asset"."id"
|
||||||
|
AND ("stack"."deletedAt" IS NULL)
|
||||||
|
WHERE
|
||||||
|
(
|
||||||
|
"asset"."isVisible" = true
|
||||||
|
AND "asset"."fileCreatedAt" < NOW()
|
||||||
|
AND (
|
||||||
|
date_trunc(
|
||||||
|
'month',
|
||||||
|
(asset."localDateTime" at time zone 'UTC')
|
||||||
|
) at time zone 'UTC'
|
||||||
|
)::timestamptz = $1
|
||||||
|
)
|
||||||
|
AND ("asset"."deletedAt" IS NULL)
|
||||||
|
ORDER BY
|
||||||
|
(
|
||||||
|
date_trunc(
|
||||||
|
'month',
|
||||||
|
(asset."localDateTime" at time zone 'UTC')
|
||||||
|
) at time zone 'UTC'
|
||||||
|
)::timestamptz DESC,
|
||||||
|
"asset"."fileCreatedAt" DESC
|
||||||
|
|
||||||
-- AssetRepository.getAssetIdByCity
|
-- AssetRepository.getAssetIdByCity
|
||||||
WITH
|
WITH
|
||||||
"cities" AS (
|
"cities" AS (
|
||||||
|
|
Loading…
Reference in a new issue