1+ import { drizzle , NodePgDatabase } from "drizzle-orm/node-postgres" ;
2+ import * as schema from "@repo/rdb/schema" ;
13import { Queue , Worker , Job } from "bullmq" ;
24import Redis from "ioredis" ;
35import {
@@ -12,9 +14,31 @@ import { Client as PgClient } from "pg";
1214import sharp from "sharp" ;
1315import type { Readable } from "stream" ;
1416import exifr from "exifr" ;
17+ import { eq } from "drizzle-orm" ;
1518
1619type ImageMetadata = sharp . Metadata ;
1720
21+ export interface DatabaseClientOptions {
22+ databaseUrl ?: string ;
23+ max ?: number ;
24+ }
25+
26+ export type DatabaseInstance = NodePgDatabase < typeof schema > ;
27+
28+ export const createDb = ( opts ?: DatabaseClientOptions ) : DatabaseInstance => {
29+ return drizzle ( {
30+ logger : true ,
31+ schema,
32+ casing : "snake_case" ,
33+ connection : {
34+ connectionString : process . env . DATABASE_URL ! ,
35+ max : opts ?. max ,
36+ } ,
37+ } ) ;
38+ } ;
39+
40+ const db = createDb ( { databaseUrl : process . env . DATABASE_URL } )
41+
1842// Job contract
1943// Inputs:
2044// - spaceId, itemId, assetId: uuid strings
@@ -43,6 +67,7 @@ export type PreviewJob = {
4367 spaceId : string ;
4468 itemId : string ;
4569 assetId : string ;
70+ sha256 : Buffer < ArrayBuffer >
4671 sha24 ?: string ;
4772 contentType ?: string ;
4873 sourceKey ?: string ;
@@ -276,7 +301,7 @@ async function copyOrPutPreview(
276301export const previewWorker = new Worker < PreviewJob > (
277302 PREVIEW_QUEUE_NAME ,
278303 async ( job : Job < PreviewJob > ) => {
279- const { spaceId, itemId, assetId } = job . data ;
304+ const { spaceId, itemId, assetId, sha256 } = job . data ;
280305 const sha24 = job . data . sha24 ?? ( await ensureSha24 ( assetId ) ) ;
281306 const sourceKey = job . data . sourceKey ?? ( await ensureCanonKey ( assetId ) ) ;
282307 let { buf : src , contentType } = await getSourceObjectBufferAndCt ( sourceKey ) ;
@@ -330,6 +355,9 @@ export const previewWorker = new Worker<PreviewJob>(
330355 gpdDop : null ,
331356 gpsTimestamp : null ,
332357 } ;
358+ try {
359+ await db . update ( schema . storageSchema . fileAsset ) . set ( imgMetadataInsertObj ) . where ( eq ( schema . storageSchema . fileAsset . sha256 , sha256 ) )
360+ } catch { /* do nothing */ }
333361 /* const updateFileAssetQuery = await pg.query<{
334362 id: string;
335363 object_key: string;
0 commit comments