fix endpoint for overhaul overviwe

feature/reliability_stat
Cizz22 1 year ago
parent 93158c0055
commit d8350530f9

@ -5,7 +5,7 @@ from fastapi import APIRouter, HTTPException, status
from src.overhaul.service import get_overhaul_critical_parts, get_overhaul_overview, get_overhaul_schedules, get_overhaul_system_components from src.overhaul.service import get_overhaul_critical_parts, get_overhaul_overview, get_overhaul_schedules, get_overhaul_system_components
from src.overhaul_scope.schema import ScopeRead from src.overhaul_scope.schema import ScopeRead
from .schema import OverhaulRead, OverhaulSchedules, OverhaulCriticalParts, OverhaulSystemComponents from .schema import OverhaulRead, OverhaulCriticalParts, OverhaulSystemComponents
from src.models import StandardResponse from src.models import StandardResponse
from src.database.core import DbSession from src.database.core import DbSession
@ -15,7 +15,7 @@ router = APIRouter()
@router.get("", response_model=StandardResponse[OverhaulRead]) @router.get("", response_model=StandardResponse[OverhaulRead])
async def get_overhaul(db_session: DbSession): async def get_overhaul(db_session: DbSession):
"""Get all scope pagination.""" """Get all scope pagination."""
overview = get_overhaul_overview() overview = await get_overhaul_overview(db_session=db_session)
schedules = await get_overhaul_schedules(db_session=db_session) schedules = await get_overhaul_schedules(db_session=db_session)
criticalParts = get_overhaul_critical_parts() criticalParts = get_overhaul_critical_parts()
systemComponents = get_overhaul_system_components() systemComponents = get_overhaul_system_components()

@ -5,7 +5,7 @@ from uuid import UUID
from pydantic import Field, BaseModel from pydantic import Field, BaseModel
from src.models import DefultBase, Pagination from src.models import DefultBase, Pagination
from src.overhaul_schedule.schema import OverhaulScheduleRead from src.overhaul_scope.schema import ScopeRead
class OverhaulBase(BaseModel): class OverhaulBase(BaseModel):
@ -29,7 +29,7 @@ class OverhaulSystemComponents(OverhaulBase):
class OverhaulRead(OverhaulBase): class OverhaulRead(OverhaulBase):
overview: Dict[str, Any] overview: Dict[str, Any]
criticalParts: List[str] criticalParts: List[str]
schedules: List[OverhaulScheduleRead] schedules: List[ScopeRead]
systemComponents: Dict[str, Any] systemComponents: Dict[str, Any]

@ -5,21 +5,15 @@ from typing import Optional
from src.database.core import DbSession from src.database.core import DbSession
from src.auth.service import CurrentUser from src.auth.service import CurrentUser
from src.overhaul_scope.service import get_all as get_all_session from src.overhaul_scope.model import OverhaulScope
from src.overhaul_scope.service import get_all as get_all_session, get_overview_overhaul
def get_overhaul_overview(): async def get_overhaul_overview(db_session: DbSession):
"""Get all overhaul overview.""" """Get all overhaul overview."""
return { results = await get_overview_overhaul(db_session=db_session)
"totalEquipment": 30,
"nextSchedule": { return results
"start_date": "2025-01-12",
"end_date": "2025-01-15",
"duration": 3,
"Overhaul": "B",
"equipmentCount": 30
}
}
def get_overhaul_critical_parts(): def get_overhaul_critical_parts():
@ -35,8 +29,11 @@ def get_overhaul_critical_parts():
async def get_overhaul_schedules(*, db_session: DbSession): async def get_overhaul_schedules(*, db_session: DbSession):
"""Get all overhaul schedules.""" """Get all overhaul schedules."""
schedules = await get_all_session(db_session=db_session) query = Select(OverhaulScope)
return schedules
results = await db_session.execute(query)
return results.scalars().all()
def get_overhaul_system_components(): def get_overhaul_system_components():

@ -3,8 +3,7 @@ from datetime import datetime
from typing import Any, Dict, List, Optional from typing import Any, Dict, List, Optional
from uuid import UUID from uuid import UUID
from pydantic import Field, BaseModel from pydantic import Field
from src.master_activity.schema import ActivityMaster
from src.models import DefultBase, Pagination from src.models import DefultBase, Pagination
from src.scope_equipment.schema import MasterEquipmentRead from src.scope_equipment.schema import MasterEquipmentRead

@ -2,6 +2,7 @@
from sqlalchemy import Column, DateTime, Float, Integer, String from sqlalchemy import Column, DateTime, Float, Integer, String
from src.database.core import Base from src.database.core import Base
from src.models import DefaultMixin, IdentityMixin, TimeStampMixin from src.models import DefaultMixin, IdentityMixin, TimeStampMixin
from sqlalchemy.orm import relationship
class OverhaulScope(Base, DefaultMixin): class OverhaulScope(Base, DefaultMixin):
@ -14,4 +15,7 @@ class OverhaulScope(Base, DefaultMixin):
crew_number = Column(Integer, nullable=True, default=1) crew_number = Column(Integer, nullable=True, default=1)
status = Column(String, nullable=False, default="upcoming") status = Column(String, nullable=False, default="upcoming")
activity_equipments = relationship(
"OverhaulActivity",
lazy="selectin"
)

@ -1,10 +1,11 @@
from sqlalchemy import Select, Delete from sqlalchemy import Select, Delete, func
from src.database.service import search_filter_sort_paginate from src.database.service import search_filter_sort_paginate
from src.overhaul_activity.model import OverhaulActivity from src.overhaul_activity.model import OverhaulActivity
from src.scope_equipment.service import get_by_scope_name from src.scope_equipment.service import get_by_scope_name
from src.utils import time_now
from .model import OverhaulScope from .model import OverhaulScope
from .schema import ScopeCreate, ScopeUpdate from .schema import ScopeCreate, ScopeUpdate
from typing import Optional from typing import Optional
@ -86,8 +87,84 @@ async def delete(*, db_session: DbSession, scope_id: str):
await db_session.commit() await db_session.commit()
# async def get_by_scope_name(*, db_session: DbSession, scope_name: str) -> Optional[OverhaulScope]: async def get_overview_overhaul(*, db_session: DbSession):
# """Returns a document based on the given document id."""
# query = Select(OverhaulScope).filter(OverhaulScope.tyoe == scope_name) current_date = time_now().date()
# result = await db_session.execute(query)
# return result.scalars().one_or_none()
# For ongoing overhaul with count
ongoing_query = Select(
OverhaulScope,
func.count(OverhaulActivity.id).label('equipment_count')
).outerjoin(
OverhaulScope.activity_equipments
).where(
OverhaulScope.start_date <= current_date,
OverhaulScope.end_date >= current_date,
OverhaulScope.status != 'Completed'
).group_by(
OverhaulScope.id
)
ongoing_result = await db_session.execute(ongoing_query)
# Use first() instead of scalar_one_or_none()
ongoing_result = ongoing_result.first()
if ongoing_result:
ongoing_overhaul, equipment_count = ongoing_result # Unpack the result tuple
return {
"status": "Ongoing",
"overhaul": {
"type": ongoing_overhaul.type,
"start_date": ongoing_overhaul.start_date,
"end_date": ongoing_overhaul.end_date,
"duration_oh": ongoing_overhaul.duration_oh,
"crew_number": ongoing_overhaul.crew_number,
"remaining_days": (ongoing_overhaul.end_date - current_date).days,
"equipment_count": equipment_count
}
}
# For upcoming overhaul with count
upcoming_query = Select(
OverhaulScope,
func.count(OverhaulActivity.id).label('equipment_count')
).outerjoin(
OverhaulScope.activity_equipments
).where(
OverhaulScope.start_date > current_date,
OverhaulScope.status == 'Upcoming'
).group_by(
OverhaulScope.id
).order_by(
OverhaulScope.start_date
)
upcoming_result = await db_session.execute(upcoming_query)
upcoming_result = upcoming_result.first()
if upcoming_result:
upcoming_overhaul, equipment_count = upcoming_result # Unpack the result tuple
days_until = (upcoming_overhaul.start_date - current_date).days
return {
"status": "Upcoming",
"overhaul": {
"type": upcoming_overhaul.type,
"start_date": upcoming_overhaul.start_date,
"end_date": upcoming_overhaul.end_date,
"duration_oh": upcoming_overhaul.duration_oh,
"crew_number": upcoming_overhaul.crew_number,
"remaining_days": days_until,
"equipment_count": equipment_count
}
}
return {
"status": "no_overhaul",
"overhaul": None
}

@ -4,6 +4,9 @@ from datetime import datetime, timedelta, timezone
import re import re
from typing import Optional from typing import Optional
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
import pytz
from src.config import TIMEZONE
def parse_relative_expression(date_str: str) -> Optional[datetime]: def parse_relative_expression(date_str: str) -> Optional[datetime]:
@ -78,3 +81,7 @@ def parse_date_string(date_str: str) -> Optional[datetime]:
"- YYYY.MM.DD\n" "- YYYY.MM.DD\n"
"- DD.MM.YYYY" "- DD.MM.YYYY"
) )
def time_now():
return datetime.now(pytz.timezone(TIMEZONE))

Loading…
Cancel
Save