from sqlalchemy import select from sqlalchemy.dialects.postgresql import insert as pg_insert from common.database.db_session_manager import DB_SESSION_MNG from common.database.model.models import place_itineraries from common.utils.gtime import GTime class PlaceItineraryCRUD: async def list_by_place(self, db, place_id): """업장의 일정 전부(기간별 한 행).""" return await DB_SESSION_MNG.execute( db, select(place_itineraries).where( place_itineraries.place_id == place_id, place_itineraries.deleted == False, # noqa: E712 ), ) async def upsert(self, db, values: dict): """업장 × 기간 한 행의 삽입/갱신.""" stmt = pg_insert(place_itineraries).values(**values) stmt = stmt.on_conflict_do_update( index_elements=[place_itineraries.place_id, place_itineraries.duration], index_where=(place_itineraries.deleted == False), # noqa: E712 set_={ "body": stmt.excluded.body, "generated_by": stmt.excluded.generated_by, "model": stmt.excluded.model, "generated_at": stmt.excluded.generated_at, "updated_at": GTime.UTC(), }, ) return await DB_SESSION_MNG.add(db, stmt)