import { Zone, ZoneObject } from '@prisma/client' import prisma from '../utilities/Prisma'; // Import the global Prisma instance class ZoneRepository { async getFirst(): Promise { try { return await prisma.zone.findFirst(); } catch (error: any) { // Handle error throw new Error(`Failed to get first zone: ${error.message}`); } } async getAll(): Promise { try { return await prisma.zone.findMany(); } catch (error: any) { // Handle error throw new Error(`Failed to get all zone: ${error.message}`); } } async getById(id: number): Promise { try { return await prisma.zone.findUnique({ where: { id: id }, include: { zoneObjects: { include: { object: true } } } }); } catch (error: any) { // Handle error throw new Error(`Failed to get zone by id: ${error.message}`); } } async create(name: string, width: number, height: number, tiles: string[][]): Promise { try { return await prisma.zone.create({ data: { name: name, width: width, height: height, tiles: tiles } }); } catch (error: any) { // Handle error throw new Error(`Failed to create zone: ${error.message}`); } } async update(id: number, name: string, width: number, height: number, tiles: string[][], objects: ZoneObject[]): Promise { try { console.log(tiles); return await prisma.zone.update({ where: { id: id }, data: { name, width, height, tiles, zoneObjects: { deleteMany: { zoneId: id // Ensure only objects related to the zone are deleted }, create: objects.map(obj => ({ objectId: obj.objectId, position_x: obj.position_x, position_y: obj.position_y })) } } }); } catch (error: any) { // Handle error throw new Error(`Failed to update zone: ${error.message}`); } } async delete(id: number): Promise { try { return await prisma.zone.delete({ where: { id: id } }); } catch (error: any) { // Handle error throw new Error(`Failed to delete zone: ${error.message}`); } } } export default new ZoneRepository;