import { db } from '../../db/db_index' import { storeInfo, productInfo } from '../../db/schema' import { eq, inArray } from 'drizzle-orm' import { IStoreDbService, Store, NewStore } from '../../../../backend/src/trpc/apis/admin-apis/dataAccessors/interfaces/store-db-service.interface' export class StoreDbService implements IStoreDbService { async getAllStores(): Promise { return db.query.storeInfo.findMany({ with: { owner: true }, }) } async getStoreById(id: number): Promise { return db.query.storeInfo.findFirst({ where: eq(storeInfo.id, id), with: { owner: true }, }) } async createStore(data: NewStore): Promise { const [store] = await db.insert(storeInfo).values(data).returning() return store } async updateStore(id: number, data: Partial): Promise { const [store] = await db .update(storeInfo) .set(data) .where(eq(storeInfo.id, id)) .returning() return store } async deleteStore(id: number): Promise { await db.delete(storeInfo).where(eq(storeInfo.id, id)) } async assignProductsToStore(storeId: number, productIds: number[]): Promise { await db .update(productInfo) .set({ storeId }) .where(inArray(productInfo.id, productIds)) } async removeProductsFromStore(storeId: number): Promise { await db .update(productInfo) .set({ storeId: null }) .where(eq(productInfo.storeId, storeId)) } } export const storeDbService: IStoreDbService = new StoreDbService()