Compare commits

...
2 Commits
Author SHA1 Message Date
Sweetbread e44696ce04 wip 2025-10-26 23:19:51 +03:00
Sweetbread 72f766ab46 fix(log): replace logger with loguru (again!) 2025-10-26 23:09:42 +03:00
9 changed files with 39 additions and 59 deletions
+9 -2
View File
@@ -1,5 +1,7 @@
from flask import Blueprint, request, jsonify
from model.user import User
from db.repositories.user_repository import UserRepository # FIXME: authenticate_user as get_user
from utils.token import generateKey as getToken
auth = Blueprint("auth", __name__)
@@ -21,8 +23,13 @@ def login():
if len(password.strip()) < 8:
return "Password is too short", 400
user = User(email, password)
return jsonify(user.toJson())
user = UserRepository().authenticate_user(email, password)
if not user:
return "Wrong credentials", 400
token = getToken(user)
return jsonify({'token': token, 'user': {'id': user.id, 'name': user.name, 'role': user.role}})
else:
return "Request is not a json", 400
+10 -11
View File
@@ -1,6 +1,6 @@
import psycopg2
import os
import logging
from loguru import logger
from contextlib import contextmanager
from typing import Generator
@@ -8,10 +8,8 @@ from utils.loadDotEnv import initializeENV
initializeENV()
logger = logging.getLogger(__name__)
def PSQLConnect():
conn = psycopg2.connect(os.getenv('POSTDRESS_CONNECTION'))
conn = psycopg2.connect(os.getenv('POSTGRES_URL'))
return conn
def PSQLCursor(conn):
@@ -24,16 +22,16 @@ def get_connection() -> Generator[psycopg2.extensions.connection, None, None]:
conn = None
try:
conn = PSQLConnect()
logger.debug("Подключение к БД установлено")
logger.info("Подключение к БД установлено")
yield conn
except psycopg2.OperationalError as e:
logger.error(f"Ошибка подключения к БД: {e}")
logger.error(f"Ошибка подключения к БД:\n{e}")
raise
except psycopg2.Error as e:
logger.error(f"Ошибка PostgreSQL: {e}")
logger.error(f"Ошибка PostgreSQL:\n{e}")
raise
except Exception as e:
logger.error(f"Неожиданная ошибка при работе с БД: {e}")
logger.error(f"Неожиданная ошибка при работе с БД:\n{e}")
raise
finally:
if conn:
@@ -41,7 +39,7 @@ def get_connection() -> Generator[psycopg2.extensions.connection, None, None]:
conn.close()
logger.debug("Соединение с БД закрыто")
except Exception as e:
logger.warning(f"Ошибка при закрытии соединения: {e}")
logger.warning(f"Ошибка при закрытии соединения:\n{e}")
def test_connection() -> bool:
try:
@@ -56,6 +54,7 @@ def test_connection() -> bool:
cur.close()
logger.debug("Курсор закрыт")
except Exception as e:
logger.error(f"Тест подключения к БД провален: {e}")
logger.error(f"Тест подключения к БД провален:\n{e}")
return False
print(test_connection())
logger.debug(test_connection())
+1 -3
View File
@@ -1,11 +1,9 @@
from typing import List, Optional
from datetime import datetime, date
import logging
from loguru import logger
from db.connection import get_connection
from model.ai_prediction import AIPrediction
logger = logging.getLogger(__name__)
class AIPredictionsRepository:
def get_all(self) -> List[AIPrediction]:
try:
+1 -3
View File
@@ -1,12 +1,10 @@
# db/repositories/inventory_repository.py
from typing import List, Optional, Tuple
from datetime import datetime
import logging
from loguru import logger
from db.connection import get_connection
from model.inventory import InventoryRecord
logger = logging.getLogger(__name__)
class InventoryRepository:
def get_all(self) -> List[InventoryRecord]:
try:
+1 -3
View File
@@ -1,10 +1,8 @@
from typing import List, Optional
import logging
from loguru import logger
from db.connection import get_connection
from model.product import Product
logger = logging.getLogger(__name__)
class ProductRepository:
def get_all(self) -> List[Product]:
try:
+1 -3
View File
@@ -1,10 +1,8 @@
from typing import List, Optional
import logging
from loguru import logger
from db.connection import get_connection
from model.robot import Robot
logger = logging.getLogger(__name__)
class RobotRepository:
def get_all(self) -> List[Robot]:
try:
+4 -21
View File
@@ -1,10 +1,8 @@
from typing import List, Optional
import logging
from loguru import logger
from model.user import User
from db.connection import get_connection
logger = logging.getLogger(__name__)
class UserRepository:
def get_all(self) -> List[User]:
try:
@@ -168,6 +166,9 @@ class UserRepository:
return False
def authenticate_user(self, email: str, password_hash: str) -> Optional[User]:
if not self.user_exists(email):
return
try:
with get_connection() as conn:
with conn.cursor() as cur:
@@ -185,24 +186,6 @@ class UserRepository:
logger.error(f"Ошибка аутентификации пользователя {email}: {e}")
return None
def is_valid_authenticate(self, email: str, password_hash: str) -> bool:
try:
with get_connection() as conn:
with conn.cursor() as cur:
cur.execute("""
SELECT 1 FROM users
WHERE email = %s AND password_hash = %s
""", (email, password_hash))
is_valid = cur.fetchone() is not None
if is_valid:
logger.debug(f"Валидные учетные данные для пользователя {email}")
else:
logger.warning(f"Невалидные учетные данные для пользователя {email}")
return is_valid
except Exception as e:
logger.error(f"Ошибка проверки учетных данных пользователя {email}: {e}")
return False
def user_exists(self, email: str) -> bool:
try:
with get_connection() as conn:
-11
View File
@@ -1,6 +1,5 @@
from dataclasses import dataclass
from datetime import datetime
from utils.token import generateKey
@dataclass
@@ -11,13 +10,3 @@ class User:
name: str
role: str
created_at: datetime
def __init__(self, email: str, passwd: str):
#us = getUsModel() #возвращает словарь
self.id = 1#us['id']
self.name = 'Bob'#us['name']
self.role = 'Backend'#us['role']
self.token = generateKey(email, passwd)
def toJson(self):
return {"user": {"id": self.id, "name": self.name, "role": self.role}, "token": self.token}
+12 -2
View File
@@ -1,8 +1,18 @@
import jwt
import os
from time import time
from model.user import User
def generateKey(email, passwd):
def generateKey(user: User) -> dict:
key = os.getenv('KEY')
encoded = jwt.encode({email: passwd, 'iat': time()}, key, algorithm="HS256")
encoded = jwt.encode(
{
'id': user.id,
'name': user.name,
'role': user.role,
'iat': time()
},
key,
algorithm="HS256"
)
return encoded