feat/db-init #3
3 Participants
Due Date
Notifications
Total Time Spent: 2 hours 47 minutes
Sweetbread
2 hours 47 minutes
No due date set.
Dependencies
No dependencies set.
Reference: Hackaton/Backend#3
Reference in New Issue
Block a user
Delete Branch "feat/db-init"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Добавил модели данных, настроил подключение к БД, а также создал репозитории для работы с таблицами.
Все впринцепе хорошо, но:
@@ -0,0 +1,3 @@from .connection import get_connection, get_db_configФайл не нужен
@@ -0,0 +9,4 @@initializeENV()def get_db_config() -> dict:Добавь подключение по ссылке вместо этого
Зачем
@Nitro, как раз наоборот: зачем отдельно вводить кучу переменных? Ссылка стандартизирована и удобнее
@@ -0,0 +25,4 @@try:config = get_db_config()conn = psycopg2.connect(**config)print("Подключение к БД установлено")Поменяй на логи
@@ -0,0 +28,4 @@print("Подключение к БД установлено")yield connexcept psycopg2.OperationalError as e:print(f"Ошибка подключения к БД: {e}")Поменяй на логи
@@ -0,0 +31,4 @@print(f"Ошибка подключения к БД: {e}")raiseexcept Exception as e:print(f"Неожиданная ошибка: {e}")Поменяй на логи
А в чём смысл обрабатывать ошибку, которая всё равно уронит процесс? Если она неожиданная, то и обрабатывать не надо
@@ -0,0 +38,4 @@finally:if conn:conn.close()print("БД закрыта")Поменяй на логи
@@ -0,0 +47,4 @@with conn.cursor() as cur:cur.execute("SELECT version();")version = cur.fetchone()print(f" Версия PostgreSQL: {version[0]}")Поменяй на логи
@@ -0,0 +50,4 @@print(f" Версия PostgreSQL: {version[0]}")return Trueexcept Exception as e:print(f"Тест подключения бд провален: {e}")Поменяй на логи
@@ -0,0 +22,4 @@) for row in cur.fetchall()]except Exception as e:print(f"Ошибка получения прогнозов: {e}")Поменяй на логи
@@ -0,0 +33,4 @@row = cur.fetchone()return AIPrediction(*row) if row else Noneexcept Exception as e:print(f"Ошибка получения прогноза {prediction_id}: {e}")Поменяй на логи
@@ -0,0 +48,4 @@""", (product_id, limit))return [AIPrediction(*row) for row in cur.fetchall()]except Exception as e:print(f"Ошибка получения прогноза по товару {product_id}: {e}")Поменяй на логи
@@ -0,0 +62,4 @@""")return [AIPrediction(*row) for row in cur.fetchall()]except Exception as e:print(f"Ошибка получения последних прогнозов по товарам: {e}")Поменяй на логи
@@ -0,0 +82,4 @@conn.commit()return prediction_idexcept Exception as e:print(f"Ошибка создания прогноза: {e}")Поменяй на логи
@@ -0,0 +98,4 @@conn.commit()return deleted_countexcept Exception as e:print(f"Ошибка удаления старых прогнозов: {e}")Поменяй на логи
@@ -0,0 +27,4 @@) for row in cur.fetchall()]except Exception as e:print(f"Ошибка получения истории инвентаризации: {e}")Поменяй на логи
@@ -0,0 +38,4 @@row = cur.fetchone()return InventoryRecord(*row) if row else Noneexcept Exception as e:print(f"Ошибка получения записи инвентаризации {record_id}: {e}")Поменяй на логи
@@ -0,0 +57,4 @@conn.commit()return record_idexcept Exception as e:print(f"Ошибка создания записи инвентаризации: {e}")Поменяй на логи
@@ -0,0 +71,4 @@""")return [InventoryRecord(*row) for row in cur.fetchall()]except Exception as e:print(f"Ошибка получения последней записи инвентаризации по каждому товару: {e}")Поменяй на логи
@@ -20,3 +15,2 @@return self.role == 'admin'def toJSON(self):return json.dumps({"token": f'{self.token}', "user": {"id": self.id, "role": f'{self.role}', "name": f'{self.name}'}})Не надо так, лучше верни словарь
@@ -20,3 +16,2 @@def toJSON(self):return json.dumps({"token": f'{self.token}', "user": {"id": self.id, "role": f'{self.role}', "name": f'{self.name}'}})def is_operator(self) -> bool:Это тут зачем разве мы не тянем эту инфу из бд?
Просто я предполагал , что вся информация о пользователе нужна нам не только при аунтефикации
@@ -23,0 +17,4 @@def is_operator(self) -> bool:return self.role == 'operator'def is_viewer(self) -> bool:Это тут тоже зачем, разве мы не тянем это опять же из бд
@@ -0,0 +34,4 @@print(f"Неожиданная ошибка: {e}")if conn:conn.rollback()raiseЗачем?
@@ -0,0 +9,4 @@try:with get_connection() as conn:with conn.cursor() as cur:cur.execute("SELECT * FROM ai_predictions ORDER BY prediction_date DESC, product_id")Слишком длинная строка
@@ -0,0 +42,4 @@return Nonedef create_record(self, robot_id: str, product_id: str, quantity: int, zone: str,row_number: int, shelf_number: int, status: str, scanned_at: datetime) -> Optional[int]:Слишком длинное определение. Лучше заменить на
@@ -0,0 +35,4 @@print(f"Ошибка получения роботов {robot_id}: {e}")return Nonedef update_robot(self, robot_id: str, status: str = None, battery_level: int = None,Слишком длинное определение
@@ -0,0 +14,4 @@password_hash=row[2],name=row[3],role=row[4],created_at=row[5]Можно ли заменить на User(*row)?
@Nitro, на конце файлов оставляй пустую строку. Это связано с тем, что для git строка считается до
\nвключительно:Если добавить или убрать строку, будут лишние изменения:
@@ -0,0 +38,4 @@def test_connection() -> bool:try:with get_connection() as conn:cur = PSQLCursor(conn)Делать надо лучше, а не хуже
Так захотел Кирилл
это его функции
Все исправил, жду одобрения и заливаю
Конфликты надо решить, как минимум
Также, мне кажется, надо всё логирование успешных операций с БД надо сделать debug
Конфликты решаются при мерже, если больше вопросов нет, тогда делаю
Микроскопом гвозди забивать
Так, а теперь, как пользоваться этим кодом, как его проверить на работоспособность и зачем он?
Добавить инициализацию таблиц
Ну начнем с того что не logger а logur а 2 где записки? Я как ориентироваться должен? По наитию?
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.