Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
BookingMyHrManagement
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Registry
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Chanachai
BookingMyHrManagement
Commits
98040cff
Commit
98040cff
authored
Mar 15, 2025
by
Ooh-Ao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
api
parent
e7d7b98c
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
124 additions
and
120 deletions
+124
-120
borrow_controller.cpython-312.pyc
...controllers/__pycache__/borrow_controller.cpython-312.pyc
+0
-0
borrow_controller.py
API-Fast/src/controllers/borrow_controller.py
+39
-31
project_controller.py
API-Fast/src/controllers/project_controller.py
+6
-6
project_equipment_controller.py
API-Fast/src/controllers/project_equipment_controller.py
+13
-13
project_member_controller.py
API-Fast/src/controllers/project_member_controller.py
+13
-13
equipments.cpython-312.pyc
API-Fast/src/models/__pycache__/equipments.cpython-312.pyc
+0
-0
borrow_transaction.py
API-Fast/src/models/borrow_transaction.py
+3
-3
project.py
API-Fast/src/models/project.py
+1
-1
project_equipment.py
API-Fast/src/models/project_equipment.py
+3
-3
project_member.py
API-Fast/src/models/project_member.py
+3
-3
borrow_routes.py
API-Fast/src/routes/borrow_routes.py
+9
-9
project_equipment_routes.py
API-Fast/src/routes/project_equipment_routes.py
+9
-9
project_member_routes.py
API-Fast/src/routes/project_member_routes.py
+9
-9
borrow_schema.cpython-312.pyc
...ast/src/schemas/__pycache__/borrow_schema.cpython-312.pyc
+0
-0
borrow_schema.py
API-Fast/src/schemas/borrow_schema.py
+5
-9
project_equipment_schema.py
API-Fast/src/schemas/project_equipment_schema.py
+5
-5
project_member_schema.py
API-Fast/src/schemas/project_member_schema.py
+5
-5
project_schema.py
API-Fast/src/schemas/project_schema.py
+1
-1
No files found.
API-Fast/src/controllers/__pycache__/borrow_controller.cpython-312.pyc
View file @
98040cff
No preview for this file type
API-Fast/src/controllers/borrow_controller.py
View file @
98040cff
...
@@ -5,33 +5,43 @@ from datetime import datetime
...
@@ -5,33 +5,43 @@ from datetime import datetime
from
fastapi
import
HTTPException
from
fastapi
import
HTTPException
from
sqlalchemy.ext.asyncio
import
AsyncSession
from
sqlalchemy.ext.asyncio
import
AsyncSession
from
sqlalchemy
import
select
from
sqlalchemy
import
select
from
..models.project_equipment
import
ProjectEquipment
from
..models.project_member
import
ProjectMember
from
..models.borrow_transaction
import
BorrowTransaction
from
..models.borrow_transaction
import
BorrowTransaction
from
..models.project_equipment
import
ProjectEquipment
from
..models.project_equipment
import
ProjectEquipment
from
..models.equipment
import
Equipment
from
..models.equipment
s
import
Equipment
from
..models.member
import
Member
# ถ้าต้องเช็คว่ามี member นี้จริงไหม
from
..models.member
import
Member
# ถ้าต้องเช็คว่ามี member นี้จริงไหม
from
..schemas.borrow_schema
import
BorrowCreate
,
BorrowUpdate
from
..schemas.borrow_schema
import
BorrowCreate
,
BorrowUpdate
# CREATE
# CREATE
# - ตรวจสอบ member
_i
d มีจริงไหม (ถ้าต้องการ)
# - ตรวจสอบ member
I
d มีจริงไหม (ถ้าต้องการ)
# - ตรวจสอบ project_equipment (pe
_i
d) มีจริง + พอไหม
# - ตรวจสอบ project_equipment (pe
I
d) มีจริง + พอไหม
# - ลดจำนวนใน project_equipment
# - ลดจำนวนใน project_equipment
# - สร้าง record borrow_transaction
# - สร้าง record borrow_transaction
async
def
create_borrow_transaction
(
db
:
AsyncSession
,
borrow_in
:
BorrowCreate
):
async
def
create_borrow_transaction
(
db
:
AsyncSession
,
borrow_in
:
BorrowCreate
):
# (ถ้าต้องการตรวจสอบว่ามี member_id นี้ไหม)
# 1) หา projectEquipment จาก peId
# result_member = await db.execute(select(Member).where(Member.memberId == borrow_in.member_id))
# member_db = result_member.scalar_one_or_none()
# if not member_db:
# raise HTTPException(status_code=404, detail="Member not found")
# 1) หา project_equipments จาก pe_id
result_pe
=
await
db
.
execute
(
result_pe
=
await
db
.
execute
(
select
(
ProjectEquipment
)
.
where
(
ProjectEquipment
.
pe
_id
==
borrow_in
.
pe_i
d
)
select
(
ProjectEquipment
)
.
where
(
ProjectEquipment
.
pe
Id
==
borrow_in
.
peI
d
)
)
)
projectEquipment
=
result_pe
.
scalar_one_or_none
()
projectEquipment
=
result_pe
.
scalar_one_or_none
()
if
not
projectEquipment
:
if
not
projectEquipment
:
raise
HTTPException
(
status_code
=
404
,
detail
=
"ProjectEquipment not found"
)
raise
HTTPException
(
status_code
=
404
,
detail
=
"ProjectEquipment not found"
)
# 1.1) ตรวจสอบว่า memberId อยู่ใน projectId นี้หรือไม่
# (projectEquipment.projectId) + (borrow_in.memberId)
check_pm
=
await
db
.
execute
(
select
(
ProjectMember
)
.
where
(
ProjectMember
.
memberId
==
borrow_in
.
memberId
,
ProjectMember
.
projectId
==
projectEquipment
.
projectId
)
)
pm_record
=
check_pm
.
scalar_one_or_none
()
if
not
pm_record
:
raise
HTTPException
(
status_code
=
403
,
detail
=
"Member is not in this project, cannot borrow."
)
# 2) ตรวจสอบจำนวน
# 2) ตรวจสอบจำนวน
if
projectEquipment
.
quantity_in_project
<
borrow_in
.
quantity_borrowed
:
if
projectEquipment
.
quantity_in_project
<
borrow_in
.
quantity_borrowed
:
raise
HTTPException
(
status_code
=
400
,
detail
=
"Not enough equipment in project"
)
raise
HTTPException
(
status_code
=
400
,
detail
=
"Not enough equipment in project"
)
...
@@ -42,8 +52,8 @@ async def create_borrow_transaction(db: AsyncSession, borrow_in: BorrowCreate):
...
@@ -42,8 +52,8 @@ async def create_borrow_transaction(db: AsyncSession, borrow_in: BorrowCreate):
# 4) สร้าง BorrowTransaction
# 4) สร้าง BorrowTransaction
new_borrow
=
BorrowTransaction
(
new_borrow
=
BorrowTransaction
(
member
_id
=
borrow_in
.
member_i
d
,
member
Id
=
borrow_in
.
memberI
d
,
pe
_id
=
borrow_in
.
pe_i
d
,
pe
Id
=
borrow_in
.
peI
d
,
quantity_borrowed
=
borrow_in
.
quantity_borrowed
,
quantity_borrowed
=
borrow_in
.
quantity_borrowed
,
status
=
borrow_in
.
status
or
"borrowed"
status
=
borrow_in
.
status
or
"borrowed"
)
)
...
@@ -53,46 +63,44 @@ async def create_borrow_transaction(db: AsyncSession, borrow_in: BorrowCreate):
...
@@ -53,46 +63,44 @@ async def create_borrow_transaction(db: AsyncSession, borrow_in: BorrowCreate):
await
db
.
refresh
(
new_borrow
)
await
db
.
refresh
(
new_borrow
)
return
new_borrow
return
new_borrow
# UPDATE
# UPDATE (คืนอุปกรณ์, เปลี่ยนสถานะ)
# - ถ้าเปลี่ยน status เป็น "returned" => เช็ค equipment.is_returnable => บวกจำนวนคืน
async
def
update_borrow_transaction
(
db
:
AsyncSession
,
borrowId
:
UUID
,
borrow_up
:
BorrowUpdate
):
async
def
update_borrow_transaction
(
db
:
AsyncSession
,
borrow_id
:
UUID
,
borrow_up
:
BorrowUpdate
):
# 1) หา borrow เดิม
# 1) หา borrowTransaction เดิม
result_bt
=
await
db
.
execute
(
result_bt
=
await
db
.
execute
(
select
(
BorrowTransaction
)
.
where
(
BorrowTransaction
.
borrow
_id
==
borrow_i
d
)
select
(
BorrowTransaction
)
.
where
(
BorrowTransaction
.
borrow
Id
==
borrowI
d
)
)
)
borrowTx
=
result_bt
.
scalar_one_or_none
()
borrowTx
=
result_bt
.
scalar_one_or_none
()
if
not
borrowTx
:
if
not
borrowTx
:
raise
HTTPException
(
status_code
=
404
,
detail
=
"BorrowTransaction not found"
)
raise
HTTPException
(
status_code
=
404
,
detail
=
"BorrowTransaction not found"
)
# ถ้า user ส่ง status มา
if
borrow_up
.
status
:
if
borrow_up
.
status
:
# 2) ถ้าเปลี่ยนเป็น 'returned'
if
borrow_up
.
status
==
"returned"
:
if
borrow_up
.
status
==
"returned"
:
#
หา p
rojectEquipment
#
2.1) หา P
rojectEquipment
result_pe
=
await
db
.
execute
(
result_pe
=
await
db
.
execute
(
select
(
ProjectEquipment
)
.
where
(
ProjectEquipment
.
pe
_id
==
borrowTx
.
pe_i
d
)
select
(
ProjectEquipment
)
.
where
(
ProjectEquipment
.
pe
Id
==
borrowTx
.
peI
d
)
)
)
projectEquipment
=
result_pe
.
scalar_one_or_none
()
projectEquipment
=
result_pe
.
scalar_one_or_none
()
if
not
projectEquipment
:
if
not
projectEquipment
:
raise
HTTPException
(
status_code
=
404
,
detail
=
"ProjectEquipment not found"
)
raise
HTTPException
(
status_code
=
404
,
detail
=
"ProjectEquipment not found"
)
#
หา e
quipment
#
2.2) หา E
quipment
result_eq
=
await
db
.
execute
(
result_eq
=
await
db
.
execute
(
select
(
Equipment
)
.
where
(
Equipment
.
equipment
_id
==
projectEquipment
.
equipment_i
d
)
select
(
Equipment
)
.
where
(
Equipment
.
equipment
Id
==
projectEquipment
.
equipmentI
d
)
)
)
equipment
=
result_eq
.
scalar_one_or_none
()
equipment
=
result_eq
.
scalar_one_or_none
()
if
not
equipment
:
if
not
equipment
:
raise
HTTPException
(
status_code
=
404
,
detail
=
"Equipment not found"
)
raise
HTTPException
(
status_code
=
404
,
detail
=
"Equipment not found"
)
# ถ้า
is_returnable => บวกจำนว
น
# ถ้า
เป็นอุปกรณ์ต้องคืน => บวกจำนวนคื
น
if
equipment
.
is_returnable
:
if
equipment
.
is_returnable
:
projectEquipment
.
quantity_in_project
+=
borrowTx
.
quantity_borrowed
projectEquipment
.
quantity_in_project
+=
borrowTx
.
quantity_borrowed
db
.
add
(
projectEquipment
)
db
.
add
(
projectEquipment
)
borrowTx
.
status
=
"returned"
borrowTx
.
status
=
"returned"
borrowTx
.
returned_date
=
datetime
.
utcnow
()
borrowTx
.
returned_date
=
datetime
.
utcnow
()
else
:
else
:
#
เปลี่ยน
เป็นสถานะอื่น
#
อัปเดต
เป็นสถานะอื่น
borrowTx
.
status
=
borrow_up
.
status
borrowTx
.
status
=
borrow_up
.
status
db
.
add
(
borrowTx
)
db
.
add
(
borrowTx
)
...
@@ -106,15 +114,15 @@ async def get_all_borrow_transactions(db: AsyncSession):
...
@@ -106,15 +114,15 @@ async def get_all_borrow_transactions(db: AsyncSession):
return
result
.
scalars
()
.
all
()
return
result
.
scalars
()
.
all
()
# GET BY ID
# GET BY ID
async
def
get_borrow_transaction_by_id
(
db
:
AsyncSession
,
borrow
_i
d
:
UUID
):
async
def
get_borrow_transaction_by_id
(
db
:
AsyncSession
,
borrow
I
d
:
UUID
):
result
=
await
db
.
execute
(
result
=
await
db
.
execute
(
select
(
BorrowTransaction
)
.
where
(
BorrowTransaction
.
borrow
_id
==
borrow_i
d
)
select
(
BorrowTransaction
)
.
where
(
BorrowTransaction
.
borrow
Id
==
borrowI
d
)
)
)
return
result
.
scalar_one_or_none
()
return
result
.
scalar_one_or_none
()
# DELETE
# DELETE
async
def
delete_borrow_transaction
(
db
:
AsyncSession
,
borrow
_i
d
:
UUID
):
async
def
delete_borrow_transaction
(
db
:
AsyncSession
,
borrow
I
d
:
UUID
):
borrowTx
=
await
db
.
get
(
BorrowTransaction
,
borrow
_i
d
)
borrowTx
=
await
db
.
get
(
BorrowTransaction
,
borrow
I
d
)
if
not
borrowTx
:
if
not
borrowTx
:
raise
HTTPException
(
status_code
=
404
,
detail
=
"BorrowTransaction not found"
)
raise
HTTPException
(
status_code
=
404
,
detail
=
"BorrowTransaction not found"
)
...
...
API-Fast/src/controllers/project_controller.py
View file @
98040cff
...
@@ -35,21 +35,21 @@ async def get_all_projects(db: AsyncSession):
...
@@ -35,21 +35,21 @@ async def get_all_projects(db: AsyncSession):
# READ ONE
# READ ONE
async
def
get_project_by_id
(
async
def
get_project_by_id
(
db
:
AsyncSession
,
db
:
AsyncSession
,
project
_i
d
:
UUID
project
I
d
:
UUID
):
):
result
=
await
db
.
execute
(
result
=
await
db
.
execute
(
select
(
Project
)
.
where
(
Project
.
project
_id
==
project_i
d
)
select
(
Project
)
.
where
(
Project
.
project
Id
==
projectI
d
)
)
)
return
result
.
scalar_one_or_none
()
return
result
.
scalar_one_or_none
()
# UPDATE
# UPDATE
async
def
update_project
(
async
def
update_project
(
db
:
AsyncSession
,
db
:
AsyncSession
,
project
_i
d
:
UUID
,
project
I
d
:
UUID
,
project_in
:
ProjectUpdate
project_in
:
ProjectUpdate
):
):
result
=
await
db
.
execute
(
result
=
await
db
.
execute
(
select
(
Project
)
.
where
(
Project
.
project
_id
==
project_i
d
)
select
(
Project
)
.
where
(
Project
.
project
Id
==
projectI
d
)
)
)
project_db
=
result
.
scalar_one_or_none
()
project_db
=
result
.
scalar_one_or_none
()
...
@@ -72,8 +72,8 @@ async def update_project(
...
@@ -72,8 +72,8 @@ async def update_project(
return
project_db
return
project_db
# DELETE
# DELETE
async
def
delete_project
(
db
:
AsyncSession
,
project
_i
d
:
UUID
):
async
def
delete_project
(
db
:
AsyncSession
,
project
I
d
:
UUID
):
project_db
=
await
db
.
get
(
Project
,
project
_i
d
)
project_db
=
await
db
.
get
(
Project
,
project
I
d
)
if
not
project_db
:
if
not
project_db
:
raise
HTTPException
(
raise
HTTPException
(
status_code
=
404
,
detail
=
"Project not found"
status_code
=
404
,
detail
=
"Project not found"
...
...
API-Fast/src/controllers/project_equipment_controller.py
View file @
98040cff
...
@@ -17,8 +17,8 @@ async def create_project_equipment(
...
@@ -17,8 +17,8 @@ async def create_project_equipment(
pe_in
:
ProjectEquipmentCreate
pe_in
:
ProjectEquipmentCreate
):
):
new_pe
=
ProjectEquipment
(
new_pe
=
ProjectEquipment
(
project
_id
=
pe_in
.
project_i
d
,
project
Id
=
pe_in
.
projectI
d
,
equipment
_id
=
pe_in
.
equipment_i
d
,
equipment
Id
=
pe_in
.
equipmentI
d
,
quantity_in_project
=
pe_in
.
quantity_in_project
quantity_in_project
=
pe_in
.
quantity_in_project
)
)
db
.
add
(
new_pe
)
db
.
add
(
new_pe
)
...
@@ -34,22 +34,22 @@ async def get_all_project_equipments(db: AsyncSession):
...
@@ -34,22 +34,22 @@ async def get_all_project_equipments(db: AsyncSession):
# READ ONE
# READ ONE
async
def
get_project_equipment_by_id
(
async
def
get_project_equipment_by_id
(
db
:
AsyncSession
,
db
:
AsyncSession
,
pe
_i
d
:
UUID
pe
I
d
:
UUID
):
):
result
=
await
db
.
execute
(
result
=
await
db
.
execute
(
select
(
ProjectEquipment
)
.
where
(
ProjectEquipment
.
pe
_id
==
pe_i
d
)
select
(
ProjectEquipment
)
.
where
(
ProjectEquipment
.
pe
Id
==
peI
d
)
)
)
return
result
.
scalar_one_or_none
()
return
result
.
scalar_one_or_none
()
# UPDATE
# UPDATE
async
def
update_project_equipment
(
async
def
update_project_equipment
(
db
:
AsyncSession
,
db
:
AsyncSession
,
pe
_i
d
:
UUID
,
pe
I
d
:
UUID
,
pe_in
:
ProjectEquipmentUpdate
pe_in
:
ProjectEquipmentUpdate
):
):
# หา record ตาม pe
_i
d
# หา record ตาม pe
I
d
result
=
await
db
.
execute
(
result
=
await
db
.
execute
(
select
(
ProjectEquipment
)
.
where
(
ProjectEquipment
.
pe
_id
==
pe_i
d
)
select
(
ProjectEquipment
)
.
where
(
ProjectEquipment
.
pe
Id
==
peI
d
)
)
)
pe_db
=
result
.
scalar_one_or_none
()
pe_db
=
result
.
scalar_one_or_none
()
if
not
pe_db
:
if
not
pe_db
:
...
@@ -58,10 +58,10 @@ async def update_project_equipment(
...
@@ -58,10 +58,10 @@ async def update_project_equipment(
)
)
# อัปเดตฟิลด์
# อัปเดตฟิลด์
if
pe_in
.
project
_i
d
is
not
None
:
if
pe_in
.
project
I
d
is
not
None
:
pe_db
.
project
_id
=
pe_in
.
project_i
d
pe_db
.
project
Id
=
pe_in
.
projectI
d
if
pe_in
.
equipment
_i
d
is
not
None
:
if
pe_in
.
equipment
I
d
is
not
None
:
pe_db
.
equipment
_id
=
pe_in
.
equipment_i
d
pe_db
.
equipment
Id
=
pe_in
.
equipmentI
d
if
pe_in
.
quantity_in_project
is
not
None
:
if
pe_in
.
quantity_in_project
is
not
None
:
pe_db
.
quantity_in_project
=
pe_in
.
quantity_in_project
pe_db
.
quantity_in_project
=
pe_in
.
quantity_in_project
...
@@ -72,9 +72,9 @@ async def update_project_equipment(
...
@@ -72,9 +72,9 @@ async def update_project_equipment(
# DELETE
# DELETE
async
def
delete_project_equipment
(
async
def
delete_project_equipment
(
db
:
AsyncSession
,
db
:
AsyncSession
,
pe
_i
d
:
UUID
pe
I
d
:
UUID
):
):
pe_db
=
await
db
.
get
(
ProjectEquipment
,
pe
_i
d
)
pe_db
=
await
db
.
get
(
ProjectEquipment
,
pe
I
d
)
if
not
pe_db
:
if
not
pe_db
:
raise
HTTPException
(
raise
HTTPException
(
status_code
=
404
,
detail
=
"ProjectEquipment not found"
status_code
=
404
,
detail
=
"ProjectEquipment not found"
...
...
API-Fast/src/controllers/project_member_controller.py
View file @
98040cff
...
@@ -17,8 +17,8 @@ async def create_project_member(
...
@@ -17,8 +17,8 @@ async def create_project_member(
pm_in
:
ProjectMemberCreate
pm_in
:
ProjectMemberCreate
):
):
new_pm
=
ProjectMember
(
new_pm
=
ProjectMember
(
user_id
=
pm_in
.
user_i
d
,
memberId
=
pm_in
.
memberI
d
,
project
_id
=
pm_in
.
project_i
d
,
project
Id
=
pm_in
.
projectI
d
,
role_in_project
=
pm_in
.
role_in_project
role_in_project
=
pm_in
.
role_in_project
)
)
db
.
add
(
new_pm
)
db
.
add
(
new_pm
)
...
@@ -32,28 +32,28 @@ async def get_all_project_members(db: AsyncSession):
...
@@ -32,28 +32,28 @@ async def get_all_project_members(db: AsyncSession):
return
result
.
scalars
()
.
all
()
return
result
.
scalars
()
.
all
()
# READ ONE
# READ ONE
async
def
get_project_member_by_id
(
db
:
AsyncSession
,
pm
_i
d
:
UUID
):
async
def
get_project_member_by_id
(
db
:
AsyncSession
,
pm
I
d
:
UUID
):
result
=
await
db
.
execute
(
select
(
ProjectMember
)
.
where
(
ProjectMember
.
pm
_id
==
pm_i
d
))
result
=
await
db
.
execute
(
select
(
ProjectMember
)
.
where
(
ProjectMember
.
pm
Id
==
pmI
d
))
return
result
.
scalar_one_or_none
()
return
result
.
scalar_one_or_none
()
# UPDATE
# UPDATE
async
def
update_project_member
(
async
def
update_project_member
(
db
:
AsyncSession
,
db
:
AsyncSession
,
pm
_i
d
:
UUID
,
pm
I
d
:
UUID
,
pm_in
:
ProjectMemberUpdate
pm_in
:
ProjectMemberUpdate
):
):
# ค้นหาจาก pm
_i
d
# ค้นหาจาก pm
I
d
result
=
await
db
.
execute
(
select
(
ProjectMember
)
.
where
(
ProjectMember
.
pm
_id
==
pm_i
d
))
result
=
await
db
.
execute
(
select
(
ProjectMember
)
.
where
(
ProjectMember
.
pm
Id
==
pmI
d
))
pm_db
=
result
.
scalar_one_or_none
()
pm_db
=
result
.
scalar_one_or_none
()
if
not
pm_db
:
if
not
pm_db
:
raise
HTTPException
(
status_code
=
404
,
detail
=
"ProjectMember not found"
)
raise
HTTPException
(
status_code
=
404
,
detail
=
"ProjectMember not found"
)
# อัปเดตฟิลด์
# อัปเดตฟิลด์
if
pm_in
.
user_i
d
is
not
None
:
if
pm_in
.
memberI
d
is
not
None
:
pm_db
.
user_id
=
pm_in
.
user_i
d
pm_db
.
memberId
=
pm_in
.
memberI
d
if
pm_in
.
project
_i
d
is
not
None
:
if
pm_in
.
project
I
d
is
not
None
:
pm_db
.
project
_id
=
pm_in
.
project_i
d
pm_db
.
project
Id
=
pm_in
.
projectI
d
if
pm_in
.
role_in_project
is
not
None
:
if
pm_in
.
role_in_project
is
not
None
:
pm_db
.
role_in_project
=
pm_in
.
role_in_project
pm_db
.
role_in_project
=
pm_in
.
role_in_project
...
@@ -62,8 +62,8 @@ async def update_project_member(
...
@@ -62,8 +62,8 @@ async def update_project_member(
return
pm_db
return
pm_db
# DELETE
# DELETE
async
def
delete_project_member
(
db
:
AsyncSession
,
pm
_i
d
:
UUID
):
async
def
delete_project_member
(
db
:
AsyncSession
,
pm
I
d
:
UUID
):
pm_db
=
await
db
.
get
(
ProjectMember
,
pm
_i
d
)
pm_db
=
await
db
.
get
(
ProjectMember
,
pm
I
d
)
if
not
pm_db
:
if
not
pm_db
:
raise
HTTPException
(
status_code
=
404
,
detail
=
"ProjectMember not found"
)
raise
HTTPException
(
status_code
=
404
,
detail
=
"ProjectMember not found"
)
...
...
API-Fast/src/models/__pycache__/equipments.cpython-312.pyc
View file @
98040cff
No preview for this file type
API-Fast/src/models/borrow_transaction.py
View file @
98040cff
...
@@ -9,13 +9,13 @@ from ..config.database import Base
...
@@ -9,13 +9,13 @@ from ..config.database import Base
class
BorrowTransaction
(
Base
):
class
BorrowTransaction
(
Base
):
__tablename__
=
"borrow_transactions"
__tablename__
=
"borrow_transactions"
borrow
_i
d
=
Column
(
borrow
I
d
=
Column
(
UUID
(
as_uuid
=
True
),
UUID
(
as_uuid
=
True
),
primary_key
=
True
,
primary_key
=
True
,
default
=
uuid
.
uuid4
default
=
uuid
.
uuid4
)
)
pe
_id
=
Column
(
UUID
(
as_uuid
=
True
),
nullable
=
False
)
# FK -> project_equipments.pe_i
d
pe
Id
=
Column
(
UUID
(
as_uuid
=
True
),
nullable
=
False
)
# FK -> project_equipments.peI
d
member
_i
d
=
Column
(
UUID
(
as_uuid
=
True
),
nullable
=
False
)
# FK -> member.memberId (ตาม Model Member)
member
I
d
=
Column
(
UUID
(
as_uuid
=
True
),
nullable
=
False
)
# FK -> member.memberId (ตาม Model Member)
quantity_borrowed
=
Column
(
Integer
,
nullable
=
False
,
default
=
1
)
quantity_borrowed
=
Column
(
Integer
,
nullable
=
False
,
default
=
1
)
status
=
Column
(
String
(
50
),
nullable
=
False
,
default
=
"borrowed"
)
status
=
Column
(
String
(
50
),
nullable
=
False
,
default
=
"borrowed"
)
returned_date
=
Column
(
DateTime
,
nullable
=
True
)
returned_date
=
Column
(
DateTime
,
nullable
=
True
)
...
...
API-Fast/src/models/project.py
View file @
98040cff
...
@@ -8,7 +8,7 @@ from ..config.database import Base
...
@@ -8,7 +8,7 @@ from ..config.database import Base
class
Project
(
Base
):
class
Project
(
Base
):
__tablename__
=
'projects'
# ชื่อตารางใน DB
__tablename__
=
'projects'
# ชื่อตารางใน DB
project
_i
d
=
Column
(
project
I
d
=
Column
(
UUID
(
as_uuid
=
True
),
UUID
(
as_uuid
=
True
),
primary_key
=
True
,
primary_key
=
True
,
default
=
uuid
.
uuid4
default
=
uuid
.
uuid4
...
...
API-Fast/src/models/project_equipment.py
View file @
98040cff
...
@@ -7,11 +7,11 @@ from ..config.database import Base
...
@@ -7,11 +7,11 @@ from ..config.database import Base
class
ProjectEquipment
(
Base
):
class
ProjectEquipment
(
Base
):
__tablename__
=
"project_equipments"
__tablename__
=
"project_equipments"
pe
_i
d
=
Column
(
pe
I
d
=
Column
(
UUID
(
as_uuid
=
True
),
UUID
(
as_uuid
=
True
),
primary_key
=
True
,
primary_key
=
True
,
default
=
uuid
.
uuid4
default
=
uuid
.
uuid4
)
)
project
_i
d
=
Column
(
UUID
(
as_uuid
=
True
),
nullable
=
False
)
project
I
d
=
Column
(
UUID
(
as_uuid
=
True
),
nullable
=
False
)
equipment
_i
d
=
Column
(
UUID
(
as_uuid
=
True
),
nullable
=
False
)
equipment
I
d
=
Column
(
UUID
(
as_uuid
=
True
),
nullable
=
False
)
quantity_in_project
=
Column
(
Integer
,
nullable
=
False
,
default
=
0
)
quantity_in_project
=
Column
(
Integer
,
nullable
=
False
,
default
=
0
)
API-Fast/src/models/project_member.py
View file @
98040cff
...
@@ -8,7 +8,7 @@ from ..config.database import Base
...
@@ -8,7 +8,7 @@ from ..config.database import Base
class
ProjectMember
(
Base
):
class
ProjectMember
(
Base
):
__tablename__
=
'project_members'
__tablename__
=
'project_members'
pm
_i
d
=
Column
(
UUID
(
as_uuid
=
True
),
primary_key
=
True
,
default
=
uuid
.
uuid4
)
pm
I
d
=
Column
(
UUID
(
as_uuid
=
True
),
primary_key
=
True
,
default
=
uuid
.
uuid4
)
user_i
d
=
Column
(
UUID
(
as_uuid
=
True
),
nullable
=
False
)
memberI
d
=
Column
(
UUID
(
as_uuid
=
True
),
nullable
=
False
)
project
_i
d
=
Column
(
UUID
(
as_uuid
=
True
),
nullable
=
False
)
project
I
d
=
Column
(
UUID
(
as_uuid
=
True
),
nullable
=
False
)
role_in_project
=
Column
(
String
(
100
),
nullable
=
True
)
role_in_project
=
Column
(
String
(
100
),
nullable
=
True
)
API-Fast/src/routes/borrow_routes.py
View file @
98040cff
...
@@ -31,13 +31,13 @@ async def create_borrow_endpoint(
...
@@ -31,13 +31,13 @@ async def create_borrow_endpoint(
return
new_borrow
return
new_borrow
# UPDATE (เช่น คืนอุปกรณ์)
# UPDATE (เช่น คืนอุปกรณ์)
@router.put
(
"/{borrow
_i
d}"
,
response_model
=
BorrowResponse
)
@router.put
(
"/{borrow
I
d}"
,
response_model
=
BorrowResponse
)
async
def
update_borrow_endpoint
(
async
def
update_borrow_endpoint
(
borrow
_i
d
:
UUID
,
borrow
I
d
:
UUID
,
borrow_up
:
BorrowUpdate
,
borrow_up
:
BorrowUpdate
,
db
:
AsyncSession
=
Depends
(
get_db
)
db
:
AsyncSession
=
Depends
(
get_db
)
):
):
updated_borrow
=
await
update_borrow_transaction
(
db
,
borrow
_i
d
,
borrow_up
)
updated_borrow
=
await
update_borrow_transaction
(
db
,
borrow
I
d
,
borrow_up
)
return
updated_borrow
return
updated_borrow
# GET ALL
# GET ALL
...
@@ -46,20 +46,20 @@ async def get_all_borrows_endpoint(db: AsyncSession = Depends(get_db)):
...
@@ -46,20 +46,20 @@ async def get_all_borrows_endpoint(db: AsyncSession = Depends(get_db)):
return
await
get_all_borrow_transactions
(
db
)
return
await
get_all_borrow_transactions
(
db
)
# GET BY ID
# GET BY ID
@router.get
(
"/{borrow
_i
d}"
,
response_model
=
BorrowResponse
)
@router.get
(
"/{borrow
I
d}"
,
response_model
=
BorrowResponse
)
async
def
get_borrow_by_id_endpoint
(
async
def
get_borrow_by_id_endpoint
(
borrow
_i
d
:
UUID
,
borrow
I
d
:
UUID
,
db
:
AsyncSession
=
Depends
(
get_db
)
db
:
AsyncSession
=
Depends
(
get_db
)
):
):
tx
=
await
get_borrow_transaction_by_id
(
db
,
borrow
_i
d
)
tx
=
await
get_borrow_transaction_by_id
(
db
,
borrow
I
d
)
if
not
tx
:
if
not
tx
:
raise
HTTPException
(
status_code
=
404
,
detail
=
"BorrowTransaction not found"
)
raise
HTTPException
(
status_code
=
404
,
detail
=
"BorrowTransaction not found"
)
return
tx
return
tx
# DELETE
# DELETE
@router.delete
(
"/{borrow
_i
d}"
)
@router.delete
(
"/{borrow
I
d}"
)
async
def
delete_borrow_endpoint
(
async
def
delete_borrow_endpoint
(
borrow
_i
d
:
UUID
,
borrow
I
d
:
UUID
,
db
:
AsyncSession
=
Depends
(
get_db
)
db
:
AsyncSession
=
Depends
(
get_db
)
):
):
return
await
delete_borrow_transaction
(
db
,
borrow
_i
d
)
return
await
delete_borrow_transaction
(
db
,
borrow
I
d
)
API-Fast/src/routes/project_equipment_routes.py
View file @
98040cff
...
@@ -37,30 +37,30 @@ async def read_all_pe_endpoint(db: AsyncSession = Depends(get_db)):
...
@@ -37,30 +37,30 @@ async def read_all_pe_endpoint(db: AsyncSession = Depends(get_db)):
return
pes
return
pes
# READ ONE
# READ ONE
@router.get
(
"/{pe
_i
d}"
,
response_model
=
ProjectEquipmentResponse
)
@router.get
(
"/{pe
I
d}"
,
response_model
=
ProjectEquipmentResponse
)
async
def
read_pe_by_id_endpoint
(
async
def
read_pe_by_id_endpoint
(
pe
_i
d
:
UUID
,
pe
I
d
:
UUID
,
db
:
AsyncSession
=
Depends
(
get_db
)
db
:
AsyncSession
=
Depends
(
get_db
)
):
):
pe_db
=
await
get_project_equipment_by_id
(
db
,
pe
_i
d
)
pe_db
=
await
get_project_equipment_by_id
(
db
,
pe
I
d
)
if
not
pe_db
:
if
not
pe_db
:
raise
HTTPException
(
status_code
=
404
,
detail
=
"ProjectEquipment not found"
)
raise
HTTPException
(
status_code
=
404
,
detail
=
"ProjectEquipment not found"
)
return
pe_db
return
pe_db
# UPDATE
# UPDATE
@router.put
(
"/{pe
_i
d}"
,
response_model
=
ProjectEquipmentResponse
)
@router.put
(
"/{pe
I
d}"
,
response_model
=
ProjectEquipmentResponse
)
async
def
update_pe_endpoint
(
async
def
update_pe_endpoint
(
pe
_i
d
:
UUID
,
pe
I
d
:
UUID
,
pe_in
:
ProjectEquipmentUpdate
,
pe_in
:
ProjectEquipmentUpdate
,
db
:
AsyncSession
=
Depends
(
get_db
)
db
:
AsyncSession
=
Depends
(
get_db
)
):
):
updated_pe
=
await
update_project_equipment
(
db
,
pe
_i
d
,
pe_in
)
updated_pe
=
await
update_project_equipment
(
db
,
pe
I
d
,
pe_in
)
return
updated_pe
return
updated_pe
# DELETE
# DELETE
@router.delete
(
"/{pe
_i
d}"
)
@router.delete
(
"/{pe
I
d}"
)
async
def
delete_pe_endpoint
(
async
def
delete_pe_endpoint
(
pe
_i
d
:
UUID
,
pe
I
d
:
UUID
,
db
:
AsyncSession
=
Depends
(
get_db
)
db
:
AsyncSession
=
Depends
(
get_db
)
):
):
return
await
delete_project_equipment
(
db
,
pe
_i
d
)
return
await
delete_project_equipment
(
db
,
pe
I
d
)
API-Fast/src/routes/project_member_routes.py
View file @
98040cff
...
@@ -37,30 +37,30 @@ async def read_all_pms(db: AsyncSession = Depends(get_db)):
...
@@ -37,30 +37,30 @@ async def read_all_pms(db: AsyncSession = Depends(get_db)):
return
pms
return
pms
# READ ONE
# READ ONE
@router.get
(
"/{pm
_i
d}"
,
response_model
=
ProjectMemberResponse
)
@router.get
(
"/{pm
I
d}"
,
response_model
=
ProjectMemberResponse
)
async
def
read_pm_by_id
(
async
def
read_pm_by_id
(
pm
_i
d
:
UUID
,
pm
I
d
:
UUID
,
db
:
AsyncSession
=
Depends
(
get_db
)
db
:
AsyncSession
=
Depends
(
get_db
)
):
):
pm_db
=
await
get_project_member_by_id
(
db
,
pm
_i
d
)
pm_db
=
await
get_project_member_by_id
(
db
,
pm
I
d
)
if
not
pm_db
:
if
not
pm_db
:
raise
HTTPException
(
status_code
=
404
,
detail
=
"ProjectMember not found"
)
raise
HTTPException
(
status_code
=
404
,
detail
=
"ProjectMember not found"
)
return
pm_db
return
pm_db
# UPDATE
# UPDATE
@router.put
(
"/{pm
_i
d}"
,
response_model
=
ProjectMemberResponse
)
@router.put
(
"/{pm
I
d}"
,
response_model
=
ProjectMemberResponse
)
async
def
update_pm_endpoint
(
async
def
update_pm_endpoint
(
pm
_i
d
:
UUID
,
pm
I
d
:
UUID
,
pm_in
:
ProjectMemberUpdate
,
pm_in
:
ProjectMemberUpdate
,
db
:
AsyncSession
=
Depends
(
get_db
)
db
:
AsyncSession
=
Depends
(
get_db
)
):
):
updated_pm
=
await
update_project_member
(
db
,
pm
_i
d
,
pm_in
)
updated_pm
=
await
update_project_member
(
db
,
pm
I
d
,
pm_in
)
return
updated_pm
return
updated_pm
# DELETE
# DELETE
@router.delete
(
"/{pm
_i
d}"
)
@router.delete
(
"/{pm
I
d}"
)
async
def
delete_pm_endpoint
(
async
def
delete_pm_endpoint
(
pm
_i
d
:
UUID
,
pm
I
d
:
UUID
,
db
:
AsyncSession
=
Depends
(
get_db
)
db
:
AsyncSession
=
Depends
(
get_db
)
):
):
return
await
delete_project_member
(
db
,
pm
_i
d
)
return
await
delete_project_member
(
db
,
pm
I
d
)
API-Fast/src/schemas/__pycache__/borrow_schema.cpython-312.pyc
View file @
98040cff
No preview for this file type
API-Fast/src/schemas/borrow_schema.py
View file @
98040cff
# myproject/schemas/borrow_schema.py
from
pydantic
import
BaseModel
from
pydantic
import
BaseModel
from
uuid
import
UUID
from
uuid
import
UUID
from
typing
import
Optional
from
typing
import
Optional
from
datetime
import
datetime
from
datetime
import
datetime
# CREATE Borrow (ตอน user กดยืม)
class
BorrowCreate
(
BaseModel
):
class
BorrowCreate
(
BaseModel
):
member
_i
d
:
UUID
member
I
d
:
UUID
pe
_i
d
:
UUID
pe
I
d
:
UUID
quantity_borrowed
:
int
quantity_borrowed
:
int
status
:
Optional
[
str
]
=
"borrowed"
status
:
Optional
[
str
]
=
"borrowed"
# UPDATE Borrow (เปลี่ยนสถานะเป็น returned, canceled ฯลฯ)
class
BorrowUpdate
(
BaseModel
):
class
BorrowUpdate
(
BaseModel
):
status
:
Optional
[
str
]
=
None
status
:
Optional
[
str
]
=
None
# RESPONSE
class
BorrowResponse
(
BaseModel
):
class
BorrowResponse
(
BaseModel
):
borrow
_i
d
:
UUID
borrow
I
d
:
UUID
pe
_i
d
:
UUID
pe
I
d
:
UUID
member
_i
d
:
UUID
member
I
d
:
UUID
quantity_borrowed
:
int
quantity_borrowed
:
int
status
:
str
status
:
str
returned_date
:
Optional
[
datetime
]
=
None
returned_date
:
Optional
[
datetime
]
=
None
...
...
API-Fast/src/schemas/project_equipment_schema.py
View file @
98040cff
...
@@ -4,20 +4,20 @@ from typing import Optional
...
@@ -4,20 +4,20 @@ from typing import Optional
from
uuid
import
UUID
from
uuid
import
UUID
class
ProjectEquipmentBase
(
BaseModel
):
class
ProjectEquipmentBase
(
BaseModel
):
project
_i
d
:
UUID
project
I
d
:
UUID
equipment
_i
d
:
UUID
equipment
I
d
:
UUID
quantity_in_project
:
int
=
0
quantity_in_project
:
int
=
0
class
ProjectEquipmentCreate
(
ProjectEquipmentBase
):
class
ProjectEquipmentCreate
(
ProjectEquipmentBase
):
pass
pass
class
ProjectEquipmentUpdate
(
BaseModel
):
class
ProjectEquipmentUpdate
(
BaseModel
):
project
_i
d
:
Optional
[
UUID
]
=
None
project
I
d
:
Optional
[
UUID
]
=
None
equipment
_i
d
:
Optional
[
UUID
]
=
None
equipment
I
d
:
Optional
[
UUID
]
=
None
quantity_in_project
:
Optional
[
int
]
=
None
quantity_in_project
:
Optional
[
int
]
=
None
class
ProjectEquipmentResponse
(
ProjectEquipmentBase
):
class
ProjectEquipmentResponse
(
ProjectEquipmentBase
):
pe
_i
d
:
UUID
pe
I
d
:
UUID
class
Config
:
class
Config
:
orm_mode
=
True
orm_mode
=
True
API-Fast/src/schemas/project_member_schema.py
View file @
98040cff
...
@@ -5,20 +5,20 @@ from typing import Optional
...
@@ -5,20 +5,20 @@ from typing import Optional
from
uuid
import
UUID
from
uuid
import
UUID
class
ProjectMemberBase
(
BaseModel
):
class
ProjectMemberBase
(
BaseModel
):
user_i
d
:
UUID
memberI
d
:
UUID
project
_i
d
:
UUID
project
I
d
:
UUID
role_in_project
:
Optional
[
str
]
=
None
role_in_project
:
Optional
[
str
]
=
None
class
ProjectMemberCreate
(
ProjectMemberBase
):
class
ProjectMemberCreate
(
ProjectMemberBase
):
pass
pass
class
ProjectMemberUpdate
(
BaseModel
):
class
ProjectMemberUpdate
(
BaseModel
):
user_i
d
:
Optional
[
UUID
]
=
None
memberI
d
:
Optional
[
UUID
]
=
None
project
_i
d
:
Optional
[
UUID
]
=
None
project
I
d
:
Optional
[
UUID
]
=
None
role_in_project
:
Optional
[
str
]
=
None
role_in_project
:
Optional
[
str
]
=
None
class
ProjectMemberResponse
(
ProjectMemberBase
):
class
ProjectMemberResponse
(
ProjectMemberBase
):
pm
_i
d
:
UUID
pm
I
d
:
UUID
class
Config
:
class
Config
:
orm_mode
=
True
orm_mode
=
True
API-Fast/src/schemas/project_schema.py
View file @
98040cff
...
@@ -21,7 +21,7 @@ class ProjectUpdate(BaseModel):
...
@@ -21,7 +21,7 @@ class ProjectUpdate(BaseModel):
end_date
:
Optional
[
date
]
=
None
end_date
:
Optional
[
date
]
=
None
class
ProjectResponse
(
ProjectBase
):
class
ProjectResponse
(
ProjectBase
):
project
_i
d
:
UUID
project
I
d
:
UUID
class
Config
:
class
Config
:
orm_mode
=
True
orm_mode
=
True
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment