Skip to content

Commit caf62e1

Browse files
authored
Merge pull request #38 from wafflestudio/fix/photo-admin-statistics
fix: 반납 사진, 관리자 자산 작업, 통계 갱신 조건 로직 수정
2 parents 7130c50 + 54cbe6f commit caf62e1

File tree

4 files changed

+61
-22
lines changed

4 files changed

+61
-22
lines changed

asset_management/app/admin/routes.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,11 @@ def add_asset(
359359
UserClublist.user_id == current_user.id,
360360
UserClublist.permission == UserPermission.ADMIN.value
361361
).first()
362+
if not admin_club:
363+
raise HTTPException(
364+
status_code=status.HTTP_404_NOT_FOUND,
365+
detail="Admin club not found"
366+
)
362367

363368
return asset_service.create_asset_for_admin(admin_club.club_id, asset)
364369

@@ -383,6 +388,11 @@ def update_asset(
383388
UserClublist.user_id == current_user.id,
384389
UserClublist.permission == UserPermission.ADMIN.value
385390
).first()
391+
if not admin_club:
392+
raise HTTPException(
393+
status_code=status.HTTP_404_NOT_FOUND,
394+
detail="Admin club not found"
395+
)
386396

387397
return asset_service.update_asset_for_admin(admin_club.club_id, asset_id, asset)
388398

@@ -391,16 +401,26 @@ def delete_asset(
391401
asset_id: int,
392402
current_user: Annotated[User, Depends(get_current_user)],
393403
asset_service: Annotated[AssetService, Depends()],
404+
session: Session = Depends(get_session),
394405
):
395406
# Check if user is admin
396407
if not current_user.is_admin:
397408
raise HTTPException(
398409
status_code=status.HTTP_403_FORBIDDEN,
399410
detail="Admin access required"
400411
)
401-
402-
403-
return asset_service.delete_asset_for_admin(asset_id)
412+
# Get admin's club
413+
admin_club = session.query(UserClublist).filter(
414+
UserClublist.user_id == current_user.id,
415+
UserClublist.permission == UserPermission.ADMIN.value
416+
).first()
417+
if not admin_club:
418+
raise HTTPException(
419+
status_code=status.HTTP_404_NOT_FOUND,
420+
detail="Admin club not found"
421+
)
422+
423+
return asset_service.delete_asset_for_admin(admin_club.club_id, asset_id)
404424

405425

406426
@router.post("/assets/{asset_id}/pictures", status_code=status.HTTP_201_CREATED)
@@ -465,4 +485,4 @@ def delete_asset_picture(
465485
detail="Admin access required"
466486
)
467487

468-
return picture_service.delete_picture(picture_id)
488+
return picture_service.delete_picture(picture_id)

asset_management/app/assets/services.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from io import StringIO, BytesIO
44
from typing import Annotated, List
55

6-
from fastapi import Depends, UploadFile
6+
from fastapi import Depends, UploadFile, HTTPException, status
77
from openpyxl import Workbook, load_workbook
88
from openpyxl.utils import get_column_letter
99
from asset_management.app.assets.repositories import AssetRepository
@@ -56,7 +56,15 @@ def update_asset_for_admin(
5656

5757
asset = self.asset_repository.get_asset_by_id(asset_id)
5858
if asset is None:
59-
raise Exception("ItemNotFoundException") # Replace with proper exception
59+
raise HTTPException(
60+
status_code=status.HTTP_404_NOT_FOUND,
61+
detail="Asset not found",
62+
)
63+
if asset.club_id != admin_club_id:
64+
raise HTTPException(
65+
status_code=status.HTTP_403_FORBIDDEN,
66+
detail="Permission denied",
67+
)
6068

6169
updated_asset = self.asset_repository.modify_asset(
6270
asset,
@@ -84,11 +92,19 @@ def update_asset_for_admin(
8492
max_rental_days=updated_asset.max_rental_days,
8593
)
8694

87-
def delete_asset_for_admin(self, asset_id: int) -> None:
95+
def delete_asset_for_admin(self, admin_club_id: int, asset_id: int) -> None:
8896

8997
asset = self.asset_repository.get_asset_by_id(asset_id)
9098
if asset is None:
91-
raise Exception("ItemNotFoundException") # Replace with proper exception
99+
raise HTTPException(
100+
status_code=status.HTTP_404_NOT_FOUND,
101+
detail="Asset not found",
102+
)
103+
if asset.club_id != admin_club_id:
104+
raise HTTPException(
105+
status_code=status.HTTP_403_FORBIDDEN,
106+
detail="Permission denied",
107+
)
92108

93109
self.asset_repository.delete_asset(asset)
94110

@@ -237,4 +253,4 @@ def export_assets_to_excel(self, club_id: int) -> bytes:
237253
output = BytesIO()
238254
wb.save(output)
239255
output.seek(0)
240-
return output.getvalue()
256+
return output.getvalue()

asset_management/app/rental/services.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -221,18 +221,21 @@ async def return_item(
221221

222222

223223
try:
224-
new_picture = Picture(
225-
asset_id=schedule.asset_id,
226-
is_main=False,
227-
user_id=user_id,
228-
data=data,
229-
content_type=file.content_type if file is not None else None,
230-
filename=file.filename if file is not None else "upload",
231-
size=len(data) if data is not None else 0
232-
)
224+
return_picture_id = None
225+
if file is not None:
226+
new_picture = Picture(
227+
asset_id=schedule.asset_id,
228+
is_main=False,
229+
user_id=user_id,
230+
data=data,
231+
content_type=file.content_type,
232+
filename=file.filename or "upload",
233+
size=len(data) if data is not None else 0,
234+
)
233235

234-
self.db_session.add(new_picture)
235-
self.db_session.flush()
236+
self.db_session.add(new_picture)
237+
self.db_session.flush()
238+
return_picture_id = new_picture.id
236239

237240
# 낙관적 락으로 반납 상태 업데이트
238241
result = self.db_session.execute(
@@ -245,7 +248,7 @@ async def return_item(
245248
.values(
246249
status=Status.RETURNED.value,
247250
end_date=returned_at,
248-
return_picture_id=new_picture.id if file is not None else None
251+
return_picture_id=return_picture_id,
249252
)
250253
)
251254

asset_management/app/statistics/services.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def get_statistics_for_asset(self, asset_id: int):
1919
if statistics is None:
2020
self.statistics_repository.create(asset_id)
2121
statistics = self.update_statistics_for_asset(asset_id)
22-
if statistics.last_updated_at > datetime.now() + timedelta(days=3):
22+
if statistics.last_updated_at < datetime.now() - timedelta(days=3):
2323
statistics = self.update_statistics_for_asset(asset_id)
2424

2525
return AssetStatistics.model_validate(statistics)

0 commit comments

Comments
 (0)