add schedules api
parent
d6f0a4816b
commit
fea0b6d5bd
@ -0,0 +1,16 @@
|
||||
|
||||
from sqlalchemy import UUID, Column, DateTime, Float, ForeignKey, Integer, String
|
||||
from sqlalchemy.orm import relationship
|
||||
from src.database.core import Base
|
||||
from src.models import DefaultMixin
|
||||
|
||||
|
||||
class OverhaulSchedule(Base, DefaultMixin):
|
||||
__tablename__ = "oh_tr_overhaul_schedule"
|
||||
|
||||
scope_id = Column(UUID(as_uuid=True), ForeignKey(
|
||||
"oh_scope.id"), nullable=True)
|
||||
start_date = Column(DateTime(timezone=True))
|
||||
end_date = Column(DateTime(timezone=True))
|
||||
|
||||
scope = relationship("Scope", backref="overhaul_schedules", lazy="raise")
|
||||
@ -0,0 +1,37 @@
|
||||
|
||||
from typing import List
|
||||
from fastapi import APIRouter, HTTPException, status
|
||||
|
||||
from src.maximo.service import MaximoService
|
||||
|
||||
from .schema import OverhaulScheduleCreate, OverhaulScheduleRead
|
||||
from .service import get, get_all, create
|
||||
|
||||
from src.database.service import CommonParameters, search_filter_sort_paginate
|
||||
from src.database.core import DbSession
|
||||
from src.auth.service import CurrentUser
|
||||
from src.models import StandardResponse
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("", response_model=StandardResponse[List[OverhaulScheduleRead]])
|
||||
async def get_schedules(db_session: DbSession):
|
||||
"""Get all scope pagination."""
|
||||
schedules = await get_all(db_session=db_session)
|
||||
# return
|
||||
return StandardResponse(
|
||||
data=schedules,
|
||||
message="Data retrieved successfully",
|
||||
)
|
||||
|
||||
|
||||
|
||||
@router.post("", response_model=StandardResponse[OverhaulScheduleRead])
|
||||
async def create_schedule(db_session: DbSession, overhaul_schedule_in: OverhaulScheduleCreate):
|
||||
|
||||
schedule = await create(db_session=db_session, overhaul_schedule_in=overhaul_schedule_in)
|
||||
|
||||
# raise Exception(schedule.scope)
|
||||
|
||||
return StandardResponse(data=schedule, message="Data created successfully")
|
||||
@ -0,0 +1,33 @@
|
||||
from datetime import datetime
|
||||
from typing import List, Optional, Union
|
||||
from uuid import UUID
|
||||
|
||||
|
||||
from pydantic import Field
|
||||
from src.models import DefultBase, Pagination
|
||||
from src.scope.schema import ScopeRead
|
||||
|
||||
|
||||
class OverhaulScheduleBase(DefultBase):
|
||||
pass
|
||||
|
||||
|
||||
class OverhaulScheduleCreate(OverhaulScheduleBase):
|
||||
scope_id: Union[UUID, str]
|
||||
start_date: datetime
|
||||
end_date: Optional[datetime] = Field(None)
|
||||
|
||||
|
||||
class OverhaulScheduleUpdate(OverhaulScheduleBase):
|
||||
pass
|
||||
|
||||
|
||||
class OverhaulScheduleRead(OverhaulScheduleBase):
|
||||
id: UUID
|
||||
scope: Optional[ScopeRead] = Field(None)
|
||||
start_date: datetime
|
||||
end_date: Optional[datetime]
|
||||
|
||||
|
||||
class OverhaulSchedulePagination(Pagination):
|
||||
items: List[OverhaulScheduleRead] = []
|
||||
@ -0,0 +1,68 @@
|
||||
|
||||
|
||||
from fastapi import HTTPException
|
||||
from sqlalchemy import Select, Delete, and_
|
||||
from sqlalchemy.orm import selectinload
|
||||
|
||||
from .model import OverhaulSchedule
|
||||
from .schema import OverhaulScheduleCreate, OverhaulScheduleUpdate
|
||||
from typing import Optional
|
||||
|
||||
from src.database.core import DbSession
|
||||
from src.scope.service import get_by_scope_name
|
||||
|
||||
|
||||
async def get(*, db_session: DbSession, overhaul_history_id: str) -> Optional[OverhaulSchedule]:
|
||||
"""Returns a document based on the given document id."""
|
||||
result = await db_session.get(OverhaulSchedule, overhaul_history_id)
|
||||
return result.scalars().one_or_none()
|
||||
|
||||
|
||||
async def get_all(*, db_session: DbSession):
|
||||
"""Returns all documents."""
|
||||
query = Select(OverhaulSchedule).options(
|
||||
selectinload(OverhaulSchedule.scope))
|
||||
result = await db_session.execute(query)
|
||||
return result.scalars().all()
|
||||
|
||||
|
||||
async def create(*, db_session: DbSession, overhaul_schedule_in: OverhaulScheduleCreate):
|
||||
"""Creates a new document."""
|
||||
scope = await get_by_scope_name(db_session=db_session, scope_name=overhaul_schedule_in.scope_id)
|
||||
|
||||
if not scope:
|
||||
raise HTTPException(
|
||||
status_code=404,
|
||||
detail="Not Found"
|
||||
)
|
||||
overhaul_schedule_in.scope_id = scope.id
|
||||
|
||||
overhaul_schedule = OverhaulSchedule(**overhaul_schedule_in.model_dump())
|
||||
|
||||
db_session.add(overhaul_schedule)
|
||||
await db_session.commit()
|
||||
results = Select(OverhaulSchedule).options(selectinload(OverhaulSchedule.scope)).filter(OverhaulSchedule.id == overhaul_schedule.id)
|
||||
return await db_session.scalar(results)
|
||||
|
||||
|
||||
async def update(*, db_session: DbSession, overhaul_schedule: OverhaulSchedule, overhaul_schedule_in: OverhaulScheduleUpdate):
|
||||
"""Updates a document."""
|
||||
data = overhaul_schedule_in.model_dump()
|
||||
|
||||
update_data = overhaul_schedule_in.model_dump(exclude_defaults=True)
|
||||
|
||||
for field in data:
|
||||
if field in update_data:
|
||||
setattr(overhaul_schedule, field, update_data[field])
|
||||
|
||||
await db_session.commit()
|
||||
|
||||
return overhaul_schedule
|
||||
|
||||
|
||||
async def delete(*, db_session: DbSession, overhaul_schedule_id: str):
|
||||
"""Deletes a document."""
|
||||
query = Delete(OverhaulSchedule).where(
|
||||
overhaul_schedule_id == overhaul_schedule_id)
|
||||
await db_session.execute(query)
|
||||
await db_session.commit()
|
||||
Loading…
Reference in New Issue