Commit 60521a09 by Ooh-Ao

equirment

parent e475300c
# myproject/controllers/equipment_controller.py
from uuid import UUID
from fastapi import HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
from ..models.equipments import Equipment
from ..schemas.equipment_schema import EquipmentCreate, EquipmentUpdate
async def get_all_equipment(db: AsyncSession):
result = await db.execute(select(Equipment))
return result.scalars().all()
async def get_equipment_by_id(equipmentId: UUID, db: AsyncSession):
result = await db.execute(select(Equipment).where(Equipment.equipmentId == equipmentId))
return result.scalar_one_or_none()
async def create_equipment(equipment_data: EquipmentCreate, db: AsyncSession):
# แปลง pydantic เป็น dict ถ้าต้องการ
# หรือจะสร้าง object ตรง ๆ ก็ได้
equipment = Equipment(
equipmentName=equipment_data.equipmentName,
description=equipment_data.description,
quantityTotal=equipment_data.quantityTotal,
location=equipment_data.location
)
db.add(equipment)
await db.commit()
await db.refresh(equipment)
return equipment
async def update_equipment(equipmentId: UUID, equipment_data: EquipmentUpdate, db: AsyncSession):
# หาอุปกรณ์ตาม PK
result = await db.execute(select(Equipment).where(Equipment.equipmentId == equipmentId))
eq_db = result.scalar_one_or_none()
if not eq_db:
raise HTTPException(status_code=404, detail="Equipment not found")
# อัปเดตเฉพาะฟิลด์ที่ส่งมา
if equipment_data.equipmentName is not None:
eq_db.equipmentName = equipment_data.equipmentName
if equipment_data.description is not None:
eq_db.description = equipment_data.description
if equipment_data.quantityTotal is not None:
eq_db.quantityTotal = equipment_data.quantityTotal
if equipment_data.location is not None:
eq_db.location = equipment_data.location
await db.commit()
await db.refresh(eq_db)
return eq_db
async def delete_equipment(equipmentId: UUID, db: AsyncSession):
eq_db = await db.get(Equipment, equipmentId)
if not eq_db:
raise HTTPException(status_code=404, detail="Equipment not found")
await db.delete(eq_db)
await db.commit()
return {"message": "Equipment deleted successfully"}
...@@ -5,6 +5,8 @@ import os ...@@ -5,6 +5,8 @@ import os
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
import logging import logging
from .routes import member_routes,auth_routes,file_upload_router from .routes import member_routes,auth_routes,file_upload_router
from .routes.equipment_routes import router as equipment_router
from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.cors import CORSMiddleware
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
app = FastAPI() app = FastAPI()
...@@ -33,6 +35,7 @@ app.mount("/images", StaticFiles(directory=UPLOAD_DIR), name="images") ...@@ -33,6 +35,7 @@ app.mount("/images", StaticFiles(directory=UPLOAD_DIR), name="images")
# รวม routes # รวม routes
app.include_router(auth_routes.router, prefix="/auth", tags=["Authentication"]) app.include_router(auth_routes.router, prefix="/auth", tags=["Authentication"])
app.include_router(member_routes.router, prefix="/members", tags=["Members"]) app.include_router(member_routes.router, prefix="/members", tags=["Members"])
app.include_router(equipment_router, prefix="/equipments", tags=["Equipments"])
app.include_router(file_upload_router.router, prefix="/api", tags=["File Upload"]) app.include_router(file_upload_router.router, prefix="/api", tags=["File Upload"])
@app.get("/") @app.get("/")
async def root(): async def root():
......
from sqlalchemy import Column, String, ForeignKey , DateTime
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from ..config.database import Base
import uuid
class Department(Base):
__tablename__ = 'department'
departmentId = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
thName = Column(String, nullable=False)
engName = Column(String, nullable=False)
companyId = Column(UUID(as_uuid=True), ForeignKey('company.companyId', ondelete="CASCADE"), nullable=False)
createdAt = Column(DateTime(timezone=True), server_default=func.now())
updatedAt = Column(DateTime(timezone=True), onupdate=func.now())
# ความสัมพันธ์กับ Company
company = relationship("Company", back_populates="departments")
ProjectEmployees = relationship("ProjectEmployee", back_populates="department")
# myproject/models/equipment.py
import uuid
from sqlalchemy import Column, String, Integer
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.sql import func
from datetime import datetime
from ..config.database import Base
class Equipment(Base):
__tablename__ = 'equipment' # หรือ 'equipments' ตามที่คุณตั้ง
equipmentId = Column(
UUID(as_uuid=True),
primary_key=True,
default=uuid.uuid4
)
equipmentName = Column(String(255), nullable=False)
description = Column(String, nullable=True)
quantityTotal = Column(Integer, nullable=False, default=0)
location = Column(String(255), nullable=True)
# ถ้าต้องการวันเวลาสร้าง/แก้ไข สามารถเพิ่มได้
# createdAt = Column(DateTime, nullable=False, server_default=func.now())
# updatedAt = Column(DateTime, nullable=False, server_default=func.now(), onupdate=func.now())
# myproject/routes/equipment_routes.py
from fastapi import APIRouter, Depends, HTTPException, status
from typing import List
from uuid import UUID
from sqlalchemy.ext.asyncio import AsyncSession
from ..config.database import get_db
from ..controllers.equipment_controller import (
get_all_equipment,
get_equipment_by_id,
create_equipment,
update_equipment,
delete_equipment
)
from ..schemas.equipment_schema import (
EquipmentCreate,
EquipmentUpdate,
EquipmentResponse
)
router = APIRouter()
# GET ALL
@router.get("/", response_model=List[EquipmentResponse])
async def read_equipments(db: AsyncSession = Depends(get_db)):
return await get_all_equipment(db)
# GET ONE
@router.get("/{equipmentId}", response_model=EquipmentResponse)
async def read_equipment(equipmentId: UUID, db: AsyncSession = Depends(get_db)):
eq_db = await get_equipment_by_id(equipmentId, db)
if not eq_db:
raise HTTPException(status_code=404, detail="Equipment not found")
return eq_db
# CREATE
@router.post("/", response_model=EquipmentResponse, status_code=status.HTTP_201_CREATED)
async def create_new_equipment(
equipment_in: EquipmentCreate,
db: AsyncSession = Depends(get_db)
):
return await create_equipment(equipment_in, db)
# UPDATE
@router.put("/{equipmentId}", response_model=EquipmentResponse)
async def update_existing_equipment(
equipmentId: UUID,
equipment_in: EquipmentUpdate,
db: AsyncSession = Depends(get_db)
):
return await update_equipment(equipmentId, equipment_in, db)
# DELETE
@router.delete("/{equipmentId}")
async def delete_existing_equipment(
equipmentId: UUID,
db: AsyncSession = Depends(get_db)
):
return await delete_equipment(equipmentId, db)
# myproject/schemas/equipment_schema.py
from pydantic import BaseModel
from typing import Optional
from uuid import UUID
class EquipmentBase(BaseModel):
equipmentName: str
description: Optional[str] = None
quantityTotal: int = 0
location: Optional[str] = None
# รับค่าตอน Create
class EquipmentCreate(EquipmentBase):
pass
# รับค่าตอน Update
class EquipmentUpdate(BaseModel):
equipmentName: Optional[str] = None
description: Optional[str] = None
quantityTotal: Optional[int] = None
location: Optional[str] = None
# ส่งค่ากลับ (Response)
class EquipmentResponse(EquipmentBase):
equipmentId: UUID
class Config:
orm_mode = True
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment