[rewrite] Updated backend structure a bit and started working on registration
This commit is contained in:
1 parent
f0c378b20f
commit
5d12391635
17 files changed
+832
-86
No files matched your search
@@ -4,10 +4,8 @@ from contextlib import contextmanager
|
||||
|
||||
from sqlalchemy.orm import sessionmaker, Session
|
||||
from sqlalchemy import create_engine, text
|
||||
from sqlalchemy.exc import DatabaseError as SqlAlchemyDatabaseError
|
||||
|
||||
from app.database.exceptions import DatabaseError
|
||||
from app.models.base_model import Base
|
||||
|
||||
|
||||
class DatabaseManager():
|
||||
@@ -19,37 +17,34 @@ class DatabaseManager():
|
||||
cls._instance = super().__new__(cls)
|
||||
return cls._instance
|
||||
|
||||
def __init__(self) -> None:
|
||||
if hasattr(self, "engine"):
|
||||
return
|
||||
|
||||
def __init__(self, mysql_user: str, mysql_password: str, mysql_host: str, mysql_port: str, mysql_db_name: str) -> None:
|
||||
self.logger = logging.getLogger(__name__)
|
||||
self.logger.info("Initializing Database")
|
||||
|
||||
self.engine = create_engine('sqlite:///bank.db')
|
||||
|
||||
self.Session = sessionmaker(bind=self.engine)
|
||||
self.create_tables()
|
||||
|
||||
def create_tables(self):
|
||||
self.logger.debug("Creating tables")
|
||||
Base.metadata.create_all(self.engine)
|
||||
self.logger.info("Reading database config")
|
||||
self.engine = create_engine('mysql+mysqlconnector://%s:%s@%s:%s/%s' % (
|
||||
mysql_user,
|
||||
mysql_password,
|
||||
mysql_host,
|
||||
mysql_port,
|
||||
mysql_db_name),
|
||||
pool_pre_ping=True)
|
||||
self.test_connection()
|
||||
self.Session = sessionmaker(bind=self.engine) # NOSONAR
|
||||
|
||||
def cleanup(self) -> None:
|
||||
self.logger.debug("Closing connection")
|
||||
self.engine.dispose()
|
||||
|
||||
def test_connection(self) -> bool:
|
||||
def test_connection(self):
|
||||
self.logger.debug("Testing database connection")
|
||||
try:
|
||||
with self.engine.connect() as connection:
|
||||
connection.execute(text("select 1"))
|
||||
self.logger.debug("Database connection successful")
|
||||
return True
|
||||
except SqlAlchemyDatabaseError as e:
|
||||
except DatabaseError as e:
|
||||
self.logger.critical("Database connection failed: %s", e)
|
||||
raise DatabaseError("Database connection failed", DatabaseError.CONNECTION_ERROR) from e
|
||||
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
@contextmanager
|
||||
|
||||
Whitespace-only changes.
Whitespace-only changes.
+3
-3
@@ -1,7 +1,7 @@
|
||||
from fastapi import FastAPI
|
||||
from .routes.cart_routes import router as cart_router
|
||||
from .routes.user_routes import router as user_router
|
||||
from .routes.shop_routes import router as shop_router
|
||||
from app.routes.cart_routes import router as cart_router
|
||||
from app.routes.user_routes import router as user_router
|
||||
from app.routes.shop_routes import router as shop_router
|
||||
|
||||
|
||||
app = FastAPI(
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
from fastapi import APIRouter, Body
|
||||
|
||||
from app.schemas.user_register_schema import UserRegisterSchema
|
||||
|
||||
from app.services.user_service import create_user
|
||||
|
||||
router = APIRouter(
|
||||
prefix="/user",
|
||||
tags=["User"]
|
||||
@@ -22,8 +26,8 @@ async def logout():
|
||||
|
||||
|
||||
@router.post("/register", summary="Register new user")
|
||||
async def register(data: dict = Body(...)):
|
||||
raise NotImplementedError("register() needs to be implemented.")
|
||||
async def register(user_data: UserRegisterSchema):
|
||||
create_user(user_data)
|
||||
|
||||
|
||||
@router.put("/update", summary="Update user details")
|
||||
|
||||
Whitespace-only changes.
@@ -0,0 +1,13 @@
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel, EmailStr, Field
|
||||
|
||||
|
||||
class UserRegisterSchema(BaseModel):
|
||||
username: str = Field(..., min_length=3, max_length=64)
|
||||
email: EmailStr = Field(...)
|
||||
phone_number: str = Field(..., min_length=10, max_length=15, pattern=r'^\+[0-9]{1,3} [0-9]{1,9}$')
|
||||
password: str = Field(..., min_length=6, max_length=128)
|
||||
shop_id: Optional[int] = None
|
||||
|
||||
class Config:
|
||||
orm_mode = True
|
||||
@@ -0,0 +1,18 @@
|
||||
from app.database.manager import DatabaseManager
|
||||
from app.models.user_model import User
|
||||
|
||||
from app.schemas.user_register_schema import UserRegisterSchema
|
||||
|
||||
|
||||
def create_user(user_data: UserRegisterSchema):
|
||||
|
||||
with DatabaseManager.get_session() as session:
|
||||
user = User(
|
||||
username=user_data.username,
|
||||
password=user_data.password,
|
||||
email=user_data.email,
|
||||
phone_number=user_data.phone_number,
|
||||
shop_id=user_data.shop_id
|
||||
)
|
||||
session.add(user)
|
||||
session.commit()
|
||||
Reference in new issue
Block a user