keys.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from typing import List
  2. from uuid import UUID
  3. from fastapi import APIRouter, Depends, HTTPException, status
  4. from flowsint_core.core.models import Profile
  5. from flowsint_core.core.postgre_db import get_db
  6. from flowsint_core.core.services import (
  7. DatabaseError,
  8. NotFoundError,
  9. create_key_service,
  10. )
  11. from sqlalchemy.orm import Session
  12. from app.api.deps import get_current_user
  13. from app.api.schemas.key import KeyCreate, KeyExists, KeyRead
  14. router = APIRouter()
  15. @router.get("", response_model=List[KeyRead])
  16. def get_keys(
  17. db: Session = Depends(get_db), current_user: Profile = Depends(get_current_user)
  18. ):
  19. service = create_key_service(db)
  20. keys = service.get_keys_for_user(current_user.id)
  21. return [
  22. KeyRead(
  23. id=key.id,
  24. owner_id=key.owner_id,
  25. name=key.name,
  26. created_at=key.created_at,
  27. )
  28. for key in keys
  29. ]
  30. @router.get("/chat-key-exists", response_model=KeyExists)
  31. def chat_key_exists(
  32. db: Session = Depends(get_db),
  33. current_user: Profile = Depends(get_current_user),
  34. ):
  35. """
  36. A simple util route to know if any ai chat key exists in the vault for this user
  37. """
  38. service = create_key_service(db)
  39. try:
  40. key_exists = service.chat_key_exist(current_user.id)
  41. return KeyExists(exists=key_exists)
  42. except NotFoundError as e:
  43. print(e)
  44. return KeyExists(exists=False)
  45. @router.get("/{id}", response_model=KeyRead)
  46. def get_key_by_id(
  47. id: UUID,
  48. db: Session = Depends(get_db),
  49. current_user: Profile = Depends(get_current_user),
  50. ):
  51. service = create_key_service(db)
  52. try:
  53. key = service.get_key_by_id(id, current_user.id)
  54. return KeyRead(
  55. id=key.id,
  56. owner_id=key.owner_id,
  57. name=key.name,
  58. created_at=key.created_at,
  59. )
  60. except NotFoundError:
  61. raise HTTPException(status_code=404, detail="Key not found")
  62. @router.post("/create", response_model=KeyRead, status_code=status.HTTP_201_CREATED)
  63. def create_key(
  64. payload: KeyCreate,
  65. db: Session = Depends(get_db),
  66. current_user: Profile = Depends(get_current_user),
  67. ):
  68. service = create_key_service(db)
  69. try:
  70. key = service.create_key(payload.name, payload.key, current_user.id)
  71. return KeyRead(
  72. id=key.id,
  73. owner_id=key.owner_id,
  74. name=key.name,
  75. created_at=key.created_at,
  76. )
  77. except DatabaseError:
  78. raise HTTPException(
  79. status_code=500, detail="An error occurred creating the key."
  80. )
  81. @router.delete("/{id}", status_code=status.HTTP_204_NO_CONTENT)
  82. def delete_key(
  83. id: UUID,
  84. db: Session = Depends(get_db),
  85. current_user: Profile = Depends(get_current_user),
  86. ):
  87. service = create_key_service(db)
  88. try:
  89. service.delete_key(id, current_user.id)
  90. return None
  91. except NotFoundError:
  92. raise HTTPException(status_code=404, detail="Key not found")