From 3b175a1f836345d1c6468550132337dcd80cc70f Mon Sep 17 00:00:00 2001 From: "s.mostryukov" Date: Fri, 12 Jul 2024 14:44:02 +0300 Subject: [PATCH] final --- sipi-app/api/__init__.py | 9 ++++++++- sipi-app/api/api_v1/__init__.py | 2 +- sipi-app/api/api_v1/crud/__init__.py | 0 sipi-app/api/api_v1/crud/users.py | 20 ++++++++++++++++++++ sipi-app/api/api_v1/users.py | 25 +++++++++++++++++++++++-- sipi-app/core/config.py | 6 +++--- sipi-app/core/schemas/__init__.py | 0 sipi-app/core/schemas/user.py | 25 +++++++++++++++++++++++++ 8 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 sipi-app/api/api_v1/crud/__init__.py create mode 100644 sipi-app/api/api_v1/crud/users.py create mode 100644 sipi-app/core/schemas/__init__.py create mode 100644 sipi-app/core/schemas/user.py diff --git a/sipi-app/api/__init__.py b/sipi-app/api/__init__.py index fd1e81d..177e02a 100644 --- a/sipi-app/api/__init__.py +++ b/sipi-app/api/__init__.py @@ -1,4 +1,11 @@ from fastapi import APIRouter +from core.config import settings +from .api_v1 import router as router_api_v1 -router = APIRouter() \ No newline at end of file +router = APIRouter( + prefix=settings.api.prefix +) +router.include_router( + router_api_v1, +) \ No newline at end of file diff --git a/sipi-app/api/api_v1/__init__.py b/sipi-app/api/api_v1/__init__.py index eb2c796..b7da0ed 100644 --- a/sipi-app/api/api_v1/__init__.py +++ b/sipi-app/api/api_v1/__init__.py @@ -5,7 +5,7 @@ from core.config import settings from .users import router as users_router router = APIRouter( - prefix=settings.api.v1.users, + prefix=settings.api.v1.prefix, ) router.include_router(users_router, diff --git a/sipi-app/api/api_v1/crud/__init__.py b/sipi-app/api/api_v1/crud/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sipi-app/api/api_v1/crud/users.py b/sipi-app/api/api_v1/crud/users.py new file mode 100644 index 0000000..85431fb --- /dev/null +++ b/sipi-app/api/api_v1/crud/users.py @@ -0,0 +1,20 @@ +from typing import Sequence + +from sqlalchemy import select +from sqlalchemy.ext.asyncio import AsyncSession + +from core.models import User +from core.schemas.user import UserCreate + + +async def get_all_users(session: AsyncSession) -> Sequence[User]: + stmt = select(User).order_by(User.id) + result = await session.scalars(stmt) + return result.all() + + +async def create_user(session: AsyncSession, user_create: UserCreate) -> User: + user = User(**user_create.model_dump()) + session.add(user) + await session.commit() + return user diff --git a/sipi-app/api/api_v1/users.py b/sipi-app/api/api_v1/users.py index 77958ab..006aef5 100644 --- a/sipi-app/api/api_v1/users.py +++ b/sipi-app/api/api_v1/users.py @@ -1,6 +1,27 @@ -from fastapi import APIRouter +from typing import Annotated +from fastapi import APIRouter, Depends +from sqlalchemy.ext.asyncio import AsyncSession + + +from core.models import db_helper +from core.schemas.user import UserRead, UserCreate + + +from api.api_v1.crud import users as users_crud router = APIRouter( tags=['Users'], -) \ No newline at end of file +) + + +@router.get('', response_model=list[UserRead]) +async def get_users(session: Annotated[AsyncSession, Depends(db_helper.session_getter)]): + users = await users_crud.get_all_users(session=session) + return users + + +@router.post('', response_model=UserRead) +async def create_user(session: Annotated[AsyncSession, Depends(db_helper.session_getter)], user_create: UserCreate,): + user = await users_crud.create_user(session=session, user_create=user_create) + return user diff --git a/sipi-app/core/config.py b/sipi-app/core/config.py index 8181458..c01e352 100644 --- a/sipi-app/core/config.py +++ b/sipi-app/core/config.py @@ -39,9 +39,10 @@ class DatabaseConfig(BaseModel): 'pk': 'pk_%(table_name)s', } + class Settings(BaseSettings): model_config = SettingsConfigDict( - env_file=('.env-template', '.env'), + env_file=('D:\PythonScripts\sipi-web\sipi-app\.env', 'sipi-app/.env'), case_sensitive=False, env_nested_delimiter='__', env_prefix='SIPI_CONFIG__', @@ -51,5 +52,4 @@ class Settings(BaseSettings): db: DatabaseConfig -settings = Settings() - +settings = Settings() \ No newline at end of file diff --git a/sipi-app/core/schemas/__init__.py b/sipi-app/core/schemas/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sipi-app/core/schemas/user.py b/sipi-app/core/schemas/user.py new file mode 100644 index 0000000..1bf3fcb --- /dev/null +++ b/sipi-app/core/schemas/user.py @@ -0,0 +1,25 @@ +from pydantic import BaseModel + + +class UserBase(BaseModel): + username: str + foo: int + bar: int + + +class UserCreate(UserBase): + pass + + +class UserRead(UserBase): + id: int + + +class UserRemove(UserBase): + pass + + +class UserChange(UserBase): + pass + +