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
|
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 = {
|
keys = {
|
||||||
k: [f"{k}_{i}" for i, _ in enumerate(vs, start=1)] for k, vs in kwds.items()
|
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}"
|
query = f"SELECT {fields_} FROM {model._table} WHERE {cond}"
|
||||||
rows = await shared_connection().fetch_all(query=query, values=values)
|
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):
|
async def update(item):
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ from starlette.routing import Mount, Route
|
||||||
from . import config, db
|
from . import config, db
|
||||||
from .db import close_connection_pool, find_ratings, open_connection_pool
|
from .db import close_connection_pool, find_ratings, open_connection_pool
|
||||||
from .middleware.responsetime import ResponseTimeMiddleware
|
from .middleware.responsetime import ResponseTimeMiddleware
|
||||||
from .models import Group, Movie, asplain
|
from .models import Group, Movie, User, asplain
|
||||||
from .types import ULID
|
from .types import ULID
|
||||||
from .utils import b64encode, phc_compare, phc_scrypt
|
from .utils import b64encode, phc_compare, phc_scrypt
|
||||||
|
|
||||||
|
|
@ -160,6 +160,12 @@ async def add_movie(request):
|
||||||
pass
|
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"])
|
@requires(["authenticated", "admin"])
|
||||||
async def add_user(request):
|
async def add_user(request):
|
||||||
pass
|
pass
|
||||||
|
|
@ -263,6 +269,7 @@ def create_app():
|
||||||
routes=[
|
routes=[
|
||||||
Route("/movies", get_movies),
|
Route("/movies", get_movies),
|
||||||
Route("/movies", add_movie, methods=["POST"]),
|
Route("/movies", add_movie, methods=["POST"]),
|
||||||
|
Route("/users", list_users),
|
||||||
Route("/users", add_user, methods=["POST"]),
|
Route("/users", add_user, methods=["POST"]),
|
||||||
Route("/users/{user_id}/ratings", ratings_for_user),
|
Route("/users/{user_id}/ratings", ratings_for_user),
|
||||||
Route(
|
Route(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue