1+ import { invariantResponse } from '@epic-web/invariant'
12import { getImgResponse } from 'openimg/node'
3+ import { prisma } from '#app/utils/db.server.ts'
24import { getDomainUrl } from '#app/utils/misc.tsx'
5+ import { getSignedGetRequestInfo } from '#app/utils/storage.server.ts'
36import { type Route } from './+types/images.ts'
47
58export async function loader ( { request } : Route . LoaderArgs ) {
@@ -17,6 +20,16 @@ export async function loader({ request }: Route.LoaderArgs) {
1720 : './tests/fixtures/openimg' ,
1821 getImgSource : ( { params } ) => {
1922 if ( params . src . startsWith ( '/resources' ) ) {
23+ const searchParams = new URLSearchParams ( params . src . split ( '?' ) [ 1 ] )
24+ const userImageId = searchParams . get ( 'userImageId' )
25+ if ( userImageId ) {
26+ return handleUserImage ( userImageId )
27+ }
28+ const noteImageId = searchParams . get ( 'noteImageId' )
29+ if ( noteImageId ) {
30+ return handleNoteImage ( noteImageId )
31+ }
32+
2033 // Fetch image from resource endpoint
2134 return {
2235 type : 'fetch' ,
@@ -46,3 +59,33 @@ export async function loader({ request }: Route.LoaderArgs) {
4659 } ,
4760 } )
4861}
62+
63+ async function handleUserImage ( userImageId : string ) {
64+ const userImage = await prisma . userImage . findUnique ( {
65+ where : { id : userImageId } ,
66+ select : { objectKey : true } ,
67+ } )
68+ invariantResponse ( userImage , 'User image not found' , { status : 404 } )
69+
70+ const { url, headers } = getSignedGetRequestInfo ( userImage . objectKey )
71+ return {
72+ type : 'fetch' ,
73+ url,
74+ headers,
75+ }
76+ }
77+
78+ async function handleNoteImage ( noteImageId : string ) {
79+ const noteImage = await prisma . noteImage . findUnique ( {
80+ where : { id : noteImageId } ,
81+ select : { objectKey : true } ,
82+ } )
83+ invariantResponse ( noteImage , 'Note image not found' , { status : 404 } )
84+
85+ const { url, headers } = getSignedGetRequestInfo ( noteImage . objectKey )
86+ return {
87+ type : 'fetch' ,
88+ url,
89+ headers,
90+ }
91+ }
0 commit comments