538: Add endpoints to manage users (#601)

* Add endpoints for getting, updating, deleting users by global user ID

* Resolve formatting

* Include alembic revision script

* Updated down_revision to current alembic head

Co-authored-by: Andreas Köpf <andreas.koepf@xamla.com>
This commit is contained in:
Oliver Stanley
2023-01-12 21:30:07 +01:00
committed by GitHub
co-authored by Andreas Köpf
parent 30242a2f32
commit 050d4902f3
4 changed files with 152 additions and 1 deletions
+46 -1
View File
@@ -1,11 +1,13 @@
import datetime
from typing import Optional
from uuid import UUID
from fastapi import APIRouter, Depends, Query
from oasst_backend.api import deps
from oasst_backend.api.v1 import utils
from oasst_backend.models import ApiClient
from oasst_backend.models import ApiClient, User
from oasst_backend.prompt_repository import PromptRepository
from oasst_backend.user_repository import UserRepository
from oasst_shared.schemas import protocol
from sqlmodel import Session
from starlette.status import HTTP_204_NO_CONTENT
@@ -13,6 +15,49 @@ from starlette.status import HTTP_204_NO_CONTENT
router = APIRouter()
@router.get("/users/{user_id}", response_model=protocol.User)
def get_user(
user_id: UUID,
api_client_id: UUID = None,
db: Session = Depends(deps.get_db),
api_client: ApiClient = Depends(deps.get_api_client),
):
"""
Get a user by global user ID. Only trusted clients can resolve users they did not register.
"""
ur = UserRepository(db, api_client)
user: User = ur.get_user(user_id, api_client_id)
return protocol.User(user.username, user.display_name, user.auth_method)
@router.put("/users/{user_id}", status_code=HTTP_204_NO_CONTENT)
def update_user(
user_id: UUID,
enabled: Optional[bool] = None,
notes: Optional[str] = None,
db: Session = Depends(deps.get_db),
api_client: ApiClient = Depends(deps.get_trusted_api_client),
):
"""
Update a user by global user ID. Only trusted clients can update users.
"""
ur = UserRepository(db, api_client)
ur.update_user(user_id, enabled, notes)
@router.delete("/users/{user_id}", status_code=HTTP_204_NO_CONTENT)
def delete_user(
user_id: UUID,
db: Session = Depends(deps.get_db),
api_client: ApiClient = Depends(deps.get_trusted_api_client),
):
"""
Delete a user by global user ID. Only trusted clients can delete users.
"""
ur = UserRepository(db, api_client)
ur.mark_user_deleted(user_id)
@router.get("/{user_id}/messages", response_model=list[protocol.Message])
def query_user_messages(
user_id: UUID,