nft.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. from typing import Any, List
  2. from fastapi import APIRouter, Depends, HTTPException
  3. from sqlalchemy.orm import Session
  4. from app import crud, models, schemas
  5. from app.api import deps
  6. router = APIRouter()
  7. @router.get("/", response_model=schemas.NftPrint)
  8. # @router.get("/")
  9. def read_items(
  10. db: Session = Depends(deps.get_db),
  11. skip: int = 0,
  12. limit: int = 100,
  13. current_user: models.users = Depends(deps.get_current_active_superuser),
  14. ) -> Any:
  15. """
  16. Retrieve items.
  17. """
  18. if crud.user.is_superuser(current_user):
  19. nfts = crud.nft.get_group_by_title(db, skip=skip, limit=limit)
  20. else:
  21. nfts = crud.nft.get_multi_by_owner(
  22. db=db, owner_id=current_user.userid, skip=skip, limit=limit
  23. )
  24. return nfts
  25. @router.post("/", response_model=schemas.NftBase)
  26. def create_item(
  27. *,
  28. db: Session = Depends(deps.get_db),
  29. item_in: schemas.NftCreate,
  30. current_user: models.users = Depends(deps.get_current_active_user),
  31. ) -> Any:
  32. """
  33. Create new item.
  34. """
  35. nft = crud.nft.create_with_owner(db=db, obj_in=item_in, owner_id=current_user.userid)
  36. return nft
  37. @router.put("/{id}", response_model=schemas.NftCreate)
  38. def update_item(
  39. *,
  40. db: Session = Depends(deps.get_db),
  41. id: int,
  42. item_in: schemas.NftUpdate,
  43. current_user: models.users = Depends(deps.get_current_active_user),
  44. ) -> Any:
  45. """
  46. Update an item.
  47. """
  48. nft = crud.nft.get(db=db, id=id)
  49. if not nft:
  50. raise HTTPException(status_code=404, detail="Item not found")
  51. if not crud.user.is_superuser(current_user) and (nft.userid != current_user.userid):
  52. raise HTTPException(status_code=400, detail="Not enough permissions")
  53. nft = crud.nft.update(db=db, db_obj=nft, obj_in=item_in)
  54. return nft
  55. @router.get("/{id}", response_model=schemas.NftCreate)
  56. def read_item(
  57. *,
  58. db: Session = Depends(deps.get_db),
  59. id: int,
  60. current_user: models.users = Depends(deps.get_current_active_user),
  61. ) -> Any:
  62. """
  63. Get item by ID.
  64. """
  65. nft = crud.nft.get(db=db, id=id)
  66. if not nft:
  67. raise HTTPException(status_code=404, detail="Item not found")
  68. if not crud.user.is_superuser(current_user) and (nft.userid != current_user.userid):
  69. raise HTTPException(status_code=400, detail="Not enough permissions")
  70. return nft
  71. @router.delete("/{id}", response_model=schemas.NftCreate)
  72. def delete_item(
  73. *,
  74. db: Session = Depends(deps.get_db),
  75. id: int,
  76. current_user: models.users = Depends(deps.get_current_active_user),
  77. ) -> Any:
  78. """
  79. Delete an item.
  80. """
  81. nft = crud.nft.get(db=db, id=id)
  82. if not nft:
  83. raise HTTPException(status_code=404, detail="Item not found")
  84. if not crud.user.is_superuser(current_user) and (nft.userid != current_user.userid):
  85. raise HTTPException(status_code=400, detail="Not enough permissions")
  86. nft = crud.nft.remove(db=db, id=id)
  87. return nft