import { db } from '../db/db_index' import { storeInfo, productInfo } from '../db/schema' import { eq, inArray } from 'drizzle-orm' export interface Store { id: number name: string description: string | null imageUrl: string | null owner: number createdAt: Date // updatedAt: Date } export async function getAllStores(): Promise { const stores = await db.query.storeInfo.findMany({ with: { owner: true, }, }) return stores } export async function getStoreById(id: number): Promise { const store = await db.query.storeInfo.findFirst({ where: eq(storeInfo.id, id), with: { owner: true, }, }) return store || null } export interface CreateStoreInput { name: string description?: string imageUrl?: string owner: number } export async function createStore( input: CreateStoreInput, products?: number[] ): Promise { const [newStore] = await db .insert(storeInfo) .values({ name: input.name, description: input.description, imageUrl: input.imageUrl, owner: input.owner, }) .returning() if (products && products.length > 0) { await db .update(productInfo) .set({ storeId: newStore.id }) .where(inArray(productInfo.id, products)) } return { id: newStore.id, name: newStore.name, description: newStore.description, imageUrl: newStore.imageUrl, owner: newStore.owner, createdAt: newStore.createdAt, // updatedAt: newStore.updatedAt, } } export interface UpdateStoreInput { name?: string description?: string imageUrl?: string owner?: number } export async function updateStore( id: number, input: UpdateStoreInput, products?: number[] ): Promise { const [updatedStore] = await db .update(storeInfo) .set({ ...input, // updatedAt: new Date(), }) .where(eq(storeInfo.id, id)) .returning() if (!updatedStore) { throw new Error('Store not found') } if (products !== undefined) { await db .update(productInfo) .set({ storeId: null }) .where(eq(productInfo.storeId, id)) if (products.length > 0) { await db .update(productInfo) .set({ storeId: id }) .where(inArray(productInfo.id, products)) } } return { id: updatedStore.id, name: updatedStore.name, description: updatedStore.description, imageUrl: updatedStore.imageUrl, owner: updatedStore.owner, createdAt: updatedStore.createdAt, // updatedAt: updatedStore.updatedAt, } } export async function deleteStore(id: number): Promise<{ message: string }> { return await db.transaction(async (tx) => { await tx .update(productInfo) .set({ storeId: null }) .where(eq(productInfo.storeId, id)) const [deletedStore] = await tx .delete(storeInfo) .where(eq(storeInfo.id, id)) .returning() if (!deletedStore) { throw new Error('Store not found') } return { message: 'Store deleted successfully', } }) }