feat(storage): complete phase 3 branding foundation
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
import { eq } from "drizzle-orm";
|
||||
import { instanceBranding } from "../db/schema/storage";
|
||||
import type { DomainDatabase } from "../domain/database";
|
||||
|
||||
export function createBrandingRepository(db: DomainDatabase) {
|
||||
return {
|
||||
get: () => db.select().from(instanceBranding).where(eq(instanceBranding.id, "default")).get(),
|
||||
create: (value: typeof instanceBranding.$inferInsert) =>
|
||||
db.insert(instanceBranding).values(value).returning().get(),
|
||||
update: (value: Partial<typeof instanceBranding.$inferInsert>) =>
|
||||
db.update(instanceBranding).set(value).where(eq(instanceBranding.id, "default")).returning().get(),
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
import { and, desc, eq, or } from "drizzle-orm";
|
||||
import { instanceBranding } from "../db/schema/storage";
|
||||
import { files } from "../db/schema/storage";
|
||||
import type { OwnerScope } from "../domain/actor";
|
||||
import type { DomainDatabase } from "../domain/database";
|
||||
|
||||
export function createFileRepository(db: DomainDatabase) {
|
||||
return {
|
||||
get: (id: string) => db.select().from(files).where(eq(files.id, id)).get(),
|
||||
getOwned: (scope: OwnerScope, id: string) =>
|
||||
db.select().from(files).where(and(eq(files.id, id), eq(files.ownerUserId, scope.ownerUserId))).get(),
|
||||
listOwned: (scope: OwnerScope) =>
|
||||
db.select().from(files).where(eq(files.ownerUserId, scope.ownerUserId)).orderBy(desc(files.createdAt)).all(),
|
||||
create: (value: typeof files.$inferInsert) => db.insert(files).values(value).returning().get(),
|
||||
remove: (id: string) => db.delete(files).where(eq(files.id, id)).returning().get(),
|
||||
getPublicBrandingAsset: (id: string) =>
|
||||
db
|
||||
.select({ file: files })
|
||||
.from(files)
|
||||
.innerJoin(
|
||||
instanceBranding,
|
||||
or(
|
||||
eq(instanceBranding.lightLogoFileId, files.id),
|
||||
eq(instanceBranding.darkLogoFileId, files.id),
|
||||
eq(instanceBranding.iconFileId, files.id),
|
||||
),
|
||||
)
|
||||
.where(
|
||||
and(
|
||||
eq(files.id, id),
|
||||
eq(files.visibility, "public_branding"),
|
||||
),
|
||||
)
|
||||
.get()?.file,
|
||||
};
|
||||
}
|
||||
|
||||
export type FileRepository = ReturnType<typeof createFileRepository>;
|
||||
Reference in New Issue
Block a user