Commit e38f46f9 by Ooh-Ao

stock projectr

parent 0987f285
# myproject/controllers/project_equipment_controller.py
from fastapi import HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import selectinload
from uuid import UUID
from ..models.project_equipment import ProjectEquipment
from ..models.project import Project
from ..models.equipment import Equipment
from ..schemas.project_equipment_schema import (
ProjectEquipmentCreate
)
from ..schemas.project_equipment_schema import ProjectEquipmentCreate
# CREATE
async def create_project_equipment(db: AsyncSession, pe_in: ProjectEquipmentCreate):
# ถ้าต้องการตรวจสอบว่ามี project/equipment จริงหรือไม่
# project = await db.get(Project, pe_in.projectId)
# if not project:
# raise HTTPException(status_code=400, detail="Invalid projectId")
#
# equipment = await db.get(Equipment, pe_in.equipmentId)
# if not equipment:
# raise HTTPException(status_code=400, detail="Invalid equipmentId")
new_pe = ProjectEquipment(
projectId=pe_in.projectId,
equipmentId=pe_in.equipmentId,
quantity_in_project=pe_in.quantity_in_project
)
try:
db.add(new_pe)
await db.commit()
......@@ -39,15 +26,23 @@ async def create_project_equipment(db: AsyncSession, pe_in: ProjectEquipmentCrea
raise HTTPException(status_code=400, detail=str(e.orig))
return new_pe
# READ ALL
# READ ALL (แสดงข้อมูล Project และ Equipment แบบ nested)
async def get_all_project_equipments(db: AsyncSession):
result = await db.execute(select(ProjectEquipment))
stmt = select(ProjectEquipment).options(
selectinload(ProjectEquipment.project),
selectinload(ProjectEquipment.equipment)
)
result = await db.execute(stmt)
return result.scalars().all()
# READ ONE
# READ ONE (แสดงข้อมูล Project และ Equipment แบบ nested)
async def get_project_equipment_by_id(db: AsyncSession, pe_id: UUID):
pe_db = await db.get(ProjectEquipment, pe_id) # สั้นลง
return pe_db
stmt = select(ProjectEquipment).options(
selectinload(ProjectEquipment.project),
selectinload(ProjectEquipment.equipment)
).where(ProjectEquipment.peId == pe_id)
result = await db.execute(stmt)
return result.scalar_one_or_none()
# UPDATE
async def update_project_equipment(db: AsyncSession, pe_id: UUID, pe_in: ProjectEquipmentCreate):
......@@ -85,3 +80,11 @@ async def delete_project_equipment(db: AsyncSession, pe_id: UUID):
raise HTTPException(status_code=400, detail=str(e.orig))
return {"message": "ProjectEquipment deleted successfully"}
# GET Equipment by ProjectId
async def get_equipment_by_project_id(db: AsyncSession, project_id: UUID):
stmt = select(ProjectEquipment).options(
selectinload(ProjectEquipment.equipment)
).where(ProjectEquipment.projectId == project_id)
result = await db.execute(stmt)
return result.scalars().all()
......@@ -28,8 +28,8 @@ class ProjectEquipment(Base):
quantity_in_project = Column(Integer, nullable=False, default=0)
# Relationship กลับไปยัง Project และ Equipment
project = relationship("Project", back_populates="project_equipment")
equipment = relationship("Equipment", back_populates="project_equipment")
project = relationship("Project", back_populates="project_equipment", lazy="joined")
equipment = relationship("Equipment", lazy="joined")
# เชื่อมโยงกับ BorrowTransaction
borrow_transactions = relationship(
......
......@@ -11,7 +11,8 @@ from ..controllers.project_equipment_controller import (
get_all_project_equipments,
get_project_equipment_by_id,
update_project_equipment,
delete_project_equipment
delete_project_equipment,
get_equipment_by_project_id
)
from ..schemas.project_equipment_schema import (
ProjectEquipmentCreate,
......@@ -63,3 +64,12 @@ async def delete_pe_endpoint(
db: AsyncSession = Depends(get_db)
):
return await delete_project_equipment(db, peId)
@router.get("/project/{projectId}", response_model=List[ProjectEquipmentResponse])
async def get_equipment_for_project(
projectId: UUID,
db: AsyncSession = Depends(get_db)
):
pes = await get_equipment_by_project_id(db, projectId)
return pes
\ No newline at end of file
# myproject/schemas/project_equipment_schema.py
from pydantic import BaseModel
from typing import Optional
from uuid import UUID
from .project_schema import ProjectResponse
from .equipment_schema import EquipmentResponse
class ProjectEquipmentBase(BaseModel):
quantity_in_project: int = 0
......@@ -14,6 +16,8 @@ class ProjectEquipmentResponse(ProjectEquipmentBase):
peId: UUID
projectId: UUID
equipmentId: UUID
project: Optional[ProjectResponse] = None
equipment: Optional[EquipmentResponse] = None
class Config:
orm_mode = True
import { TranslateService } from "@ngx-translate/core";
import { BaseModel } from "./base.model";
import { ProjectModel } from "./project.model";
import { EquipmentModel } from "./equipments.model";
export class ProjectEquipmentModel extends BaseModel {
pe_id: string;
project_id: string;
equipment_id?: string;
quantity_in_project: number;
created_at: string;
updated_at: string;
peId: string;
projectId: string;
equipmentId: string;
project: ProjectModel;
equipment: EquipmentModel;
constructor(data?: Partial<ProjectEquipmentModel>, translateService?: TranslateService) {
super(data, translateService);
this.pe_id = data?.pe_id ?? '';
this.project_id = data?.project_id ?? '';
this.equipment_id = data?.equipment_id ?? '';
this.peId = data?.peId ?? '';
this.projectId = data?.projectId ?? '';
this.equipmentId = data?.equipmentId ?? '';
this.quantity_in_project = data?.quantity_in_project ?? 0;
this.created_at = data?.created_at ?? new Date().toISOString();
this.updated_at = data?.updated_at ?? new Date().toISOString();
this.project = data?.project || new ProjectModel();
this.equipment = data?.equipment ? new EquipmentModel(data.equipment) : new EquipmentModel();
}
}
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { environment } from 'src/environments/environment';
import { map, tap, switchMap, filter, reduce } from "rxjs/operators";
import { ProjectEquipmentModel } from '../models/project-equipments';
import { environment } from '../../../environments/environment';
@Injectable({
providedIn: 'root'
})
export class ProjectEquipmentService {
apiBaseUrl = environment.baseUrl + "/project-equipments";
apiBaseUrl = environment.baseUrl + "/project-equipments";
constructor(
private http: HttpClient
) { }
......@@ -19,34 +19,30 @@ apiBaseUrl = environment.baseUrl + "/project-equipments";
.get<ProjectEquipmentModel>(this.apiBaseUrl + "/" + id)
.pipe(map((e) => new ProjectEquipmentModel(e)));
}
getLists() {
getLists(projectId: string) {
return this.http
.get<ProjectEquipmentModel[]>(this.apiBaseUrl)
.get<ProjectEquipmentModel[]>(this.apiBaseUrl+ "/project/" +projectId)
.pipe(
map((e) => e.map((e) => new ProjectEquipmentModel(e)))
);
}
save(body: ProjectEquipmentModel) {
return this.http.post<{
"message": string,
"user": ProjectEquipmentModel
}>(this.apiBaseUrl, new ProjectEquipmentModel(body));
save(body: any) {
return this.http.post<ProjectEquipmentModel>(this.apiBaseUrl, body);
}
update(body: ProjectEquipmentModel) {
return this.http.put<{
"message": string,
"user": ProjectEquipmentModel
}>(this.apiBaseUrl + "/" + body.equipment_id, new ProjectEquipmentModel(body));
}>(this.apiBaseUrl + "/" + body.equipmentId, new ProjectEquipmentModel(body));
}
delete(body: ProjectEquipmentModel) {
return this.http.delete<{
"message": string,
"user": ProjectEquipmentModel
}>(this.apiBaseUrl + "/" + body.equipment_id);
}>(this.apiBaseUrl + "/" + body.equipmentId);
}
......
......@@ -21,7 +21,7 @@ export class ProjectMemberService {
getLists(projectId: string) {
return this.http
.get<ProjectMemberModel[]>(this.apiBaseUrl)
.get<ProjectMemberModel[]>(this.apiBaseUrl+ "/project/" +projectId)
.pipe(
map((e) => e.map((e) => new ProjectMemberModel(e)))
);
......
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