From 84254862f22919fc01bafc8e9c06c015681f38d4 Mon Sep 17 00:00:00 2001 From: Cizz22 Date: Sun, 5 Oct 2025 10:55:28 +0700 Subject: [PATCH] fantt --- src/overhaul_gantt/model.py | 17 ++++++++ src/overhaul_gantt/router.py | 82 ++++++++++++++++++++++++++++++++++-- src/overhaul_gantt/schema.py | 8 +++- 3 files changed, 102 insertions(+), 5 deletions(-) diff --git a/src/overhaul_gantt/model.py b/src/overhaul_gantt/model.py index e69de29..77fc2ed 100644 --- a/src/overhaul_gantt/model.py +++ b/src/overhaul_gantt/model.py @@ -0,0 +1,17 @@ + + + + + + +from sqlalchemy import Column, String +from src.database.core import Base +from src.models import DefaultMixin + + +class OverhaulGantt(Base, DefaultMixin): + __tablename__ = "oh_ms_monitoring_spreadsheet" + + spreadsheet_id = Column(String, nullable=True) + spreadsheet_link = Column(String, nullable=True) + \ No newline at end of file diff --git a/src/overhaul_gantt/router.py b/src/overhaul_gantt/router.py index 8967895..966e6b1 100644 --- a/src/overhaul_gantt/router.py +++ b/src/overhaul_gantt/router.py @@ -1,11 +1,15 @@ +import re from typing import List, Optional from fastapi import APIRouter, HTTPException, status +from sqlalchemy import select from src.auth.service import CurrentUser from src.database.core import DbSession from src.database.service import CommonParameters from src.models import StandardResponse +from src.overhaul_gantt.model import OverhaulGantt +from src.overhaul_gantt.schema import OverhaulGanttIn # from .schema import (OverhaulScheduleCreate, OverhaulSchedulePagination, OverhaulScheduleUpdate) from .service import get_gantt_performance_chart @@ -16,11 +20,14 @@ router = APIRouter() @router.get( "", response_model=StandardResponse[dict] ) -async def get_gantt_performance(): +async def get_gantt_performance(db_session: DbSession): """Get all scope pagination.""" # return - results, gantt_data = await get_gantt_performance_chart() - + query = select(OverhaulGantt).limit(1) + + data = (await db_session.execute(query)).scalar_one_or_none() + + results, gantt_data = await get_gantt_performance_chart(spreadsheet_id=data.spreadsheet_id) return StandardResponse( data={ @@ -30,6 +37,75 @@ async def get_gantt_performance(): message="Data retrieved successfully", ) +@router.get( + "/spreadsheet", response_model=StandardResponse[dict] +) +async def get_gantt_spreadsheet(db_session: DbSession): + """Get all scope pagination.""" + # return + query = select(OverhaulGantt).limit(1) + + data = (await db_session.execute(query)).scalar_one_or_none() + result = { + "spreadsheet_id": None, + "spreadsheet_link": None + } + + if data: + result = { + "spreadsheet_id": data.spreadsheet_id, + "spreadsheet_link": data.spreadsheet_link + } + + + return StandardResponse( + data=result, + message="Data retrieved successfully", + ) + +@router.post( + "/spreadsheet", response_model=StandardResponse[dict] +) +async def update_gantt_spreadsheet(db_session: DbSession, spreadsheet_in: OverhaulGanttIn): + """Get all scope pagination.""" + # return + + match = re.search(r"/d/([a-zA-Z0-9-_]+)", spreadsheet_in.spreadsheet_link) + if not match: + raise ValueError("Invalid Google Sheets URL") + + spreadsheet_id = match.group(1) + + query = select(OverhaulGantt).limit(1) + + data = (await db_session.execute(query)).scalar_one_or_none() + if data: + data.spreadsheet_link = spreadsheet_in.spreadsheet_link + data.spreadsheet_id = spreadsheet_id + else: + spreadsheet = OverhaulGantt( + spreadsheet_id=spreadsheet_id, + spreadsheet_link=spreadsheet_in.spreadsheet_link + ) + db_session.add(spreadsheet) + + + await db_session.commit() + + if data: + result = { + "spreadsheet_id": spreadsheet_id + } + + + return StandardResponse( + data=result, + message="Data retrieved successfully", + ) + + + + # @router.post("", response_model=StandardResponse[None]) # async def create_overhaul_equipment_jobs( diff --git a/src/overhaul_gantt/schema.py b/src/overhaul_gantt/schema.py index d6867b7..178e239 100644 --- a/src/overhaul_gantt/schema.py +++ b/src/overhaul_gantt/schema.py @@ -9,8 +9,12 @@ # from src.scope_equipment_job.schema import ScopeEquipmentJobRead # from src.job.schema import ActivityMasterRead -# class OverhaulScheduleBase(DefultBase): -# pass +from pydantic import Field +from src.models import DefultBase + + +class OverhaulGanttIn(DefultBase): + spreadsheet_link: str = Field(...) # class OverhaulScheduleCreate(OverhaulScheduleBase):