add route to list all users
This commit is contained in:
parent
75391b1ca2
commit
60f0152f9d
2 changed files with 20 additions and 3 deletions
14
unwind/db.py
14
unwind/db.py
|
|
@ -157,7 +157,7 @@ async def get(model: Type[ModelType], **kwds) -> Optional[ModelType]:
|
|||
return fromplain(model, row) if row else None
|
||||
|
||||
|
||||
async def get_many(model: Type[ModelType], **kwds) -> list[ModelType]:
|
||||
async def get_many(model: Type[ModelType], **kwds) -> Iterable[ModelType]:
|
||||
keys = {
|
||||
k: [f"{k}_{i}" for i, _ in enumerate(vs, start=1)] for k, vs in kwds.items()
|
||||
}
|
||||
|
|
@ -173,7 +173,17 @@ async def get_many(model: Type[ModelType], **kwds) -> list[ModelType]:
|
|||
)
|
||||
query = f"SELECT {fields_} FROM {model._table} WHERE {cond}"
|
||||
rows = await shared_connection().fetch_all(query=query, values=values)
|
||||
return [fromplain(model, row) for row in rows]
|
||||
return (fromplain(model, row) for row in rows)
|
||||
|
||||
|
||||
async def get_all(model: Type[ModelType], **kwds) -> Iterable[ModelType]:
|
||||
values = {k: v for k, v in kwds.items() if v is not None}
|
||||
|
||||
fields_ = ", ".join(f.name for f in fields(model))
|
||||
cond = " AND ".join(f"{k}=:{k}" for k in values) or "1=1"
|
||||
query = f"SELECT {fields_} FROM {model._table} WHERE {cond}"
|
||||
rows = await shared_connection().fetch_all(query=query, values=values)
|
||||
return (fromplain(model, row) for row in rows)
|
||||
|
||||
|
||||
async def update(item):
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ from starlette.routing import Mount, Route
|
|||
from . import config, db
|
||||
from .db import close_connection_pool, find_ratings, open_connection_pool
|
||||
from .middleware.responsetime import ResponseTimeMiddleware
|
||||
from .models import Group, Movie, asplain
|
||||
from .models import Group, Movie, User, asplain
|
||||
from .types import ULID
|
||||
from .utils import b64encode, phc_compare, phc_scrypt
|
||||
|
||||
|
|
@ -160,6 +160,12 @@ async def add_movie(request):
|
|||
pass
|
||||
|
||||
|
||||
@requires(["authenticated", "admin"])
|
||||
async def list_users(request):
|
||||
users = await db.get_all(User)
|
||||
return JSONResponse([asplain(u) for u in users])
|
||||
|
||||
|
||||
@requires(["authenticated", "admin"])
|
||||
async def add_user(request):
|
||||
pass
|
||||
|
|
@ -263,6 +269,7 @@ def create_app():
|
|||
routes=[
|
||||
Route("/movies", get_movies),
|
||||
Route("/movies", add_movie, methods=["POST"]),
|
||||
Route("/users", list_users),
|
||||
Route("/users", add_user, methods=["POST"]),
|
||||
Route("/users/{user_id}/ratings", ratings_for_user),
|
||||
Route(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue