From a870da4f43d018845427d0adbbec0f544fbac32f Mon Sep 17 00:00:00 2001 From: Ryan Allen Date: Thu, 21 Oct 2021 18:29:11 -0400 Subject: [PATCH] move user specific db operations to db/users dir --- .../backend/app/alembic/env.py | 2 +- .../api/api_v1/routers/tests/test_users.py | 4 +-- .../backend/app/api/api_v1/routers/users.py | 4 +-- .../backend/app/core/auth.py | 30 +++++++++---------- .../backend/app/db/users/__init__.py | 0 .../backend/app/db/{ => users}/crud.py | 0 .../backend/app/db/{ => users}/models.py | 2 +- .../backend/app/db/{ => users}/schemas.py | 0 .../backend/app/initial_data.py | 4 +-- .../backend/conftest.py | 10 +++---- 10 files changed, 27 insertions(+), 29 deletions(-) create mode 100644 {{cookiecutter.project_slug}}/backend/app/db/users/__init__.py rename {{cookiecutter.project_slug}}/backend/app/db/{ => users}/crud.py (100%) rename {{cookiecutter.project_slug}}/backend/app/db/{ => users}/models.py (93%) rename {{cookiecutter.project_slug}}/backend/app/db/{ => users}/schemas.py (100%) diff --git a/{{cookiecutter.project_slug}}/backend/app/alembic/env.py b/{{cookiecutter.project_slug}}/backend/app/alembic/env.py index 5cbeca06..30e3811f 100644 --- a/{{cookiecutter.project_slug}}/backend/app/alembic/env.py +++ b/{{cookiecutter.project_slug}}/backend/app/alembic/env.py @@ -5,7 +5,7 @@ from sqlalchemy import engine_from_config from sqlalchemy import pool -from app.db.models import Base +from app.db.session import Base # this is the Alembic Config object, which provides # access to the values within the .ini file in use. diff --git a/{{cookiecutter.project_slug}}/backend/app/api/api_v1/routers/tests/test_users.py b/{{cookiecutter.project_slug}}/backend/app/api/api_v1/routers/tests/test_users.py index 5f285b03..b1d2bc03 100644 --- a/{{cookiecutter.project_slug}}/backend/app/api/api_v1/routers/tests/test_users.py +++ b/{{cookiecutter.project_slug}}/backend/app/api/api_v1/routers/tests/test_users.py @@ -1,4 +1,4 @@ -from app.db import models +from app.db.users.models import User def test_get_users(client, test_superuser, superuser_token_headers): @@ -19,7 +19,7 @@ def test_delete_user(client, test_superuser, test_db, superuser_token_headers): f"/api/v1/users/{test_superuser.id}", headers=superuser_token_headers ) assert response.status_code == 200 - assert test_db.query(models.User).all() == [] + assert test_db.query(User).all() == [] def test_delete_user_not_found(client, superuser_token_headers): diff --git a/{{cookiecutter.project_slug}}/backend/app/api/api_v1/routers/users.py b/{{cookiecutter.project_slug}}/backend/app/api/api_v1/routers/users.py index 06167e27..7b29baf3 100644 --- a/{{cookiecutter.project_slug}}/backend/app/api/api_v1/routers/users.py +++ b/{{cookiecutter.project_slug}}/backend/app/api/api_v1/routers/users.py @@ -2,14 +2,14 @@ import typing as t from app.db.session import get_db -from app.db.crud import ( +from app.db.users.crud import ( get_users, get_user, create_user, delete_user, edit_user, ) -from app.db.schemas import UserCreate, UserEdit, User, UserOut +from app.db.users.schemas import UserCreate, UserEdit, User, UserOut from app.core.auth import get_current_active_user, get_current_active_superuser users_router = r = APIRouter() diff --git a/{{cookiecutter.project_slug}}/backend/app/core/auth.py b/{{cookiecutter.project_slug}}/backend/app/core/auth.py index 0b404b2f..4bc52bbf 100644 --- a/{{cookiecutter.project_slug}}/backend/app/core/auth.py +++ b/{{cookiecutter.project_slug}}/backend/app/core/auth.py @@ -2,8 +2,10 @@ from fastapi import Depends, HTTPException, status from jwt import PyJWTError -from app.db import models, schemas, session -from app.db.crud import get_user_by_email, create_user +from app.db import session +from app.db.users.crud import get_user_by_email, create_user +from app.db.users.models import User +from app.db.users.schemas import TokenData, UserCreate from app.core import security @@ -23,7 +25,7 @@ async def get_current_user( if email is None: raise credentials_exception permissions: str = payload.get("permissions") - token_data = schemas.TokenData(email=email, permissions=permissions) + token_data = TokenData(email=email, permissions=permissions) except PyJWTError: raise credentials_exception user = get_user_by_email(db, token_data.email) @@ -33,7 +35,7 @@ async def get_current_user( async def get_current_active_user( - current_user: models.User = Depends(get_current_user), + current_user: User = Depends(get_current_user), ): if not current_user.is_active: raise HTTPException(status_code=400, detail="Inactive user") @@ -41,8 +43,8 @@ async def get_current_active_user( async def get_current_active_superuser( - current_user: models.User = Depends(get_current_user), -) -> models.User: + current_user: User = Depends(get_current_user), +) -> User: if not current_user.is_superuser: raise HTTPException( status_code=403, detail="The user doesn't have enough privileges" @@ -63,13 +65,9 @@ def sign_up_new_user(db, email: str, password: str): user = get_user_by_email(db, email) if user: return False # User already exists - new_user = create_user( - db, - schemas.UserCreate( - email=email, - password=password, - is_active=True, - is_superuser=False, - ), - ) - return new_user + return create_user(db, UserCreate( + email=email, + password=password, + is_active=True, + is_superuser=False, + )) diff --git a/{{cookiecutter.project_slug}}/backend/app/db/users/__init__.py b/{{cookiecutter.project_slug}}/backend/app/db/users/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/{{cookiecutter.project_slug}}/backend/app/db/crud.py b/{{cookiecutter.project_slug}}/backend/app/db/users/crud.py similarity index 100% rename from {{cookiecutter.project_slug}}/backend/app/db/crud.py rename to {{cookiecutter.project_slug}}/backend/app/db/users/crud.py diff --git a/{{cookiecutter.project_slug}}/backend/app/db/models.py b/{{cookiecutter.project_slug}}/backend/app/db/users/models.py similarity index 93% rename from {{cookiecutter.project_slug}}/backend/app/db/models.py rename to {{cookiecutter.project_slug}}/backend/app/db/users/models.py index 4744d4cf..2de0ad9b 100644 --- a/{{cookiecutter.project_slug}}/backend/app/db/models.py +++ b/{{cookiecutter.project_slug}}/backend/app/db/users/models.py @@ -1,6 +1,6 @@ from sqlalchemy import Boolean, Column, Integer, String -from .session import Base +from app.db.session import Base class User(Base): diff --git a/{{cookiecutter.project_slug}}/backend/app/db/schemas.py b/{{cookiecutter.project_slug}}/backend/app/db/users/schemas.py similarity index 100% rename from {{cookiecutter.project_slug}}/backend/app/db/schemas.py rename to {{cookiecutter.project_slug}}/backend/app/db/users/schemas.py diff --git a/{{cookiecutter.project_slug}}/backend/app/initial_data.py b/{{cookiecutter.project_slug}}/backend/app/initial_data.py index b41a523d..75a84e98 100644 --- a/{{cookiecutter.project_slug}}/backend/app/initial_data.py +++ b/{{cookiecutter.project_slug}}/backend/app/initial_data.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 from app.db.session import get_db -from app.db.crud import create_user -from app.db.schemas import UserCreate +from app.db.users.crud import create_user +from app.db.users.schemas import UserCreate from app.db.session import SessionLocal diff --git a/{{cookiecutter.project_slug}}/backend/conftest.py b/{{cookiecutter.project_slug}}/backend/conftest.py index ecd831dc..b75e8696 100644 --- a/{{cookiecutter.project_slug}}/backend/conftest.py +++ b/{{cookiecutter.project_slug}}/backend/conftest.py @@ -7,7 +7,7 @@ from app.core import config, security from app.db.session import Base, get_db -from app.db import models +from app.db.users.models import User from app.main import app @@ -100,12 +100,12 @@ def get_password_hash() -> str: @pytest.fixture -def test_user(test_db) -> models.User: +def test_user(test_db) -> User: """ Make a test user in the database """ - user = models.User( + user = User( email="fake@email.com", hashed_password=get_password_hash(), is_active=True, @@ -116,12 +116,12 @@ def test_user(test_db) -> models.User: @pytest.fixture -def test_superuser(test_db) -> models.User: +def test_superuser(test_db) -> User: """ Superuser for testing """ - user = models.User( + user = User( email="fakeadmin@email.com", hashed_password=get_password_hash(), is_superuser=True,