feat(storage): complete phase 3 branding foundation

This commit is contained in:
poyrazavsever
2026-07-16 17:05:59 +03:00
parent b155132acf
commit 5d863280bf
31 changed files with 5302 additions and 57 deletions
+13
View File
@@ -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(),
};
}
+38
View File
@@ -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>;