Add database abstraction

This commit is contained in:
François Voron
2019-10-06 08:53:13 +02:00
parent 4e0b0f6f7d
commit 552f313d76
7 changed files with 67 additions and 10 deletions

View File

@ -0,0 +1,19 @@
from typing import List
from ..models import UserDB
class UserDBInterface:
"""
Common interface exposing methods to list, get, create and update users in
the database.
"""
async def list(self) -> List[UserDB]:
raise NotImplementedError()
async def get_by_email(self, email: str) -> UserDB:
raise NotImplementedError()
async def create(self, user: UserDB) -> UserDB:
raise NotImplementedError()

View File

@ -1,7 +1,8 @@
import uuid
from typing import Optional
from pydantic import BaseModel
from pydantic.types import EmailStr
from typing import Optional
class UserBase(BaseModel):

View File

@ -1,12 +1,20 @@
from fastapi import APIRouter
from .db import UserDBInterface
from .models import UserCreate, UserDB
from .password import get_password_hash
router = APIRouter()
class UserRouter:
@router.post('/register')
async def register(user: UserCreate):
hashed_password = get_password_hash(user.password)
return UserDB(**user.dict(), hashed_password=hashed_password)
def __new__(cls, userDB: UserDBInterface) -> APIRouter:
router = APIRouter()
@router.post('/register')
async def register(user: UserCreate):
hashed_password = get_password_hash(user.password)
db_user = UserDB(**user.dict(), hashed_password=hashed_password)
created_user = await userDB.create(db_user)
return created_user
return router