From c0f3380dbe681d284569cfd8ac7c59cb7af55326 Mon Sep 17 00:00:00 2001 From: MrWaradana Date: Mon, 15 Dec 2025 15:04:32 +0700 Subject: [PATCH] add new fs table for plant transaction data --- src/__pycache__/api.cpython-311.pyc | Bin 5356 -> 5606 bytes src/api.py | 7 ++ src/plant_fs_transaction_data/__init__.py | 1 + src/plant_fs_transaction_data/model.py | 29 ++++++ src/plant_fs_transaction_data/router.py | 121 ++++++++++++++++++++++ src/plant_fs_transaction_data/schema.py | 86 +++++++++++++++ src/plant_fs_transaction_data/service.py | 118 +++++++++++++++++++++ 7 files changed, 362 insertions(+) create mode 100644 src/plant_fs_transaction_data/__init__.py create mode 100644 src/plant_fs_transaction_data/model.py create mode 100644 src/plant_fs_transaction_data/router.py create mode 100644 src/plant_fs_transaction_data/schema.py create mode 100644 src/plant_fs_transaction_data/service.py diff --git a/src/__pycache__/api.cpython-311.pyc b/src/__pycache__/api.cpython-311.pyc index b09f1094165753950c55ec4fd0d7570927c5f67f..dc55969c6178fe27322c40735f0f575b97b6f50a 100644 GIT binary patch delta 635 zcmaE(`AnN{IWI340}#aSx6eGnKao#@an3~bn_MXjDeO6_x%^RT6aUFFs!x_-l(yGk zVn}64Wl!Nr)yQPTN%GENUBkDGiGg7?5JNzeW~$}_t;vDR!jn50H5j!gZ(_7&)k)P^ zpbHXXXGm2^5lIo9T)-sC3>BMf&Ljh8XCm0l45@09=P^mb<<27HCjUob8!{vGCnMNE zyJS*SQ`C^{0*Wc6sHbQki%tHCqDLV`J4FX95A}yJLyB&Sz#2hRf2QcA>ZLKI=(n&e z1A2Tl%=-*c`au7K{VK_jsk1m%f(54~~Q8;-W&r?Q&$y0cP7%ewH=jCGLRVgk?)`OWcc|Ma#z&B;8B($T6+4DJjmTrCVK+^Jm4m>C#W z12F_dsWCC6vZS)7@T96`GU6n8=diBfTgC*`3B*vH>Z$4rG$tD|2~VENsKKZ?c^{)S zt5&Mk0&S2OJ432cib#s+&old6-(l%m_hvJB|a z)iCceMCk(k3-+5NL#oy?MxY!JLjWT~3TrTfrrzcgENYC55|iJvo@bPqyr1nKqt51i z> Optional[str]: + """Return the current user's identifier when available.""" + if user is None: + return None + # UserBase guarantees user_id + return getattr(user, "user_id", None) + + +async def get( + *, db_session: DbSession, fs_transaction_id: str +) -> Optional[PlantFSTransactionData]: + """Return a record by its primary key.""" + query = Select(PlantFSTransactionData).where( + PlantFSTransactionData.id == fs_transaction_id + ) + result = await db_session.execute(query) + return result.scalars().one_or_none() + + +def _apply_text_search(query: Select, search: Optional[str]): + if not search: + return query + + wildcard = f"%{search}%" + return query.where( + cast(PlantFSTransactionData.tahun, String).ilike(wildcard) + | cast(PlantFSTransactionData.seq, String).ilike(wildcard) + | PlantFSTransactionData.created_by.ilike(wildcard) + ) + + +async def get_all( + *, + db_session: DbSession, + items_per_page: Optional[int], + search: Optional[str] = None, + common, +): + """Return paginated FS transaction data.""" + query = ( + Select(PlantFSTransactionData) + .order_by( + PlantFSTransactionData.seq.asc(), + PlantFSTransactionData.tahun.asc(), + ) + ) + query = _apply_text_search(query, search) + + common["items_per_page"] = items_per_page + return await search_filter_sort_paginate(model=query, **common) + + +async def create( + *, + db_session: DbSession, + fs_transaction_in: PlantFSTransactionDataCreate, + current_user: Optional[CurrentUser] = None, +) -> PlantFSTransactionData: + """Create a new FS record.""" + payload = fs_transaction_in.model_dump() + user_id = _resolve_user_id(current_user) + + if user_id: + payload.setdefault("created_by", user_id) + payload.setdefault("updated_by", user_id) + + fs_transaction = PlantFSTransactionData(**payload) + db_session.add(fs_transaction) + await db_session.commit() + await db_session.refresh(fs_transaction) + return fs_transaction + + +async def update( + *, + db_session: DbSession, + fs_transaction: PlantFSTransactionData, + fs_transaction_in: PlantFSTransactionDataUpdate, + current_user: Optional[CurrentUser] = None, +) -> PlantFSTransactionData: + """Update an existing FS record.""" + update_data = fs_transaction_in.model_dump(exclude_defaults=True) + user_id = _resolve_user_id(current_user) + if user_id: + update_data.setdefault("updated_by", user_id) + + for field, value in update_data.items(): + setattr(fs_transaction, field, value) + + await db_session.commit() + await db_session.refresh(fs_transaction) + return fs_transaction + + +async def delete(*, db_session: DbSession, fs_transaction_id: str) -> None: + """Delete a record.""" + query = Delete(PlantFSTransactionData).where( + PlantFSTransactionData.id == fs_transaction_id + ) + await db_session.execute(query) + await db_session.commit()