83 lines
No EOL
3.1 KiB
Python
83 lines
No EOL
3.1 KiB
Python
from src.windows import LoginWindow, AdminWindow, ClientWindow, ManagerWindow
|
||
from src.objects import User, Rights
|
||
from src.db import DB_CONFIG
|
||
|
||
from PyQt6.QtWidgets import QApplication
|
||
from PyQt6.QtCore import QObject, pyqtSlot, pyqtSignal
|
||
from PyQt6.QtSql import QSqlDatabase
|
||
|
||
|
||
class Composer(QObject):
|
||
"""Управляет навигацией между окнами приложения"""
|
||
|
||
render_request = pyqtSignal(User)
|
||
|
||
def __init__(self):
|
||
super().__init__()
|
||
self._current = None
|
||
self._app = QApplication([])
|
||
self._init_db()
|
||
self.render_request.connect(self._render)
|
||
|
||
def _init_db(self):
|
||
"""Инициализация подключения к базе данных"""
|
||
self._db = QSqlDatabase("QPSQL")
|
||
self._db.setDatabaseName(DB_CONFIG['dbname'])
|
||
self._db.setPort(DB_CONFIG['port'])
|
||
self._db.setHostName(DB_CONFIG['host'])
|
||
self._db.setUserName(DB_CONFIG['user'])
|
||
self._db.setPassword(DB_CONFIG['password'])
|
||
|
||
if not self._db.open():
|
||
raise Exception(f"Не получилось подключиться к базе данных: {self._db.lastError().text()}")
|
||
|
||
@pyqtSlot(User)
|
||
def _render(self, user: User):
|
||
"""Маршрутизация пользователя на основе его роли"""
|
||
match user.rights:
|
||
case Rights.ADMIN:
|
||
self._admin_fabric()
|
||
case Rights.MANAGER:
|
||
self._manager_fabric()
|
||
case Rights.CLIENT:
|
||
self._client_fabric(user)
|
||
case Rights.GUEST:
|
||
self._guest_fabric()
|
||
|
||
def _login_fabric(self):
|
||
"""Создание и отображение окна входа"""
|
||
self.wlogin = LoginWindow(self, self._db)
|
||
self._switch_window(self.wlogin)
|
||
|
||
def _admin_fabric(self):
|
||
"""Создание и отображение панели администратора"""
|
||
self.wadmin = AdminWindow(self, self._db)
|
||
self._switch_window(self.wadmin)
|
||
|
||
def _manager_fabric(self):
|
||
"""Создание и отображение панели менеджера"""
|
||
self.wmanager = ManagerWindow(self, self._db)
|
||
self._switch_window(self.wmanager)
|
||
|
||
def _client_fabric(self, user: User):
|
||
"""Создание и отображение панели клиента"""
|
||
self.wclient = ClientWindow(self, self._db, user)
|
||
self._switch_window(self.wclient)
|
||
|
||
def _guest_fabric(self):
|
||
"""Создание и отображение панели гостя"""
|
||
# TODO: Реализовать GuestWindow если нужен режим гостя
|
||
pass
|
||
|
||
def _switch_window(self, new_window):
|
||
"""Переключение между окнами"""
|
||
if self._current:
|
||
self._current.close()
|
||
new_window.show()
|
||
self._current = new_window
|
||
|
||
def run(self):
|
||
"""Запуск приложения"""
|
||
import sys
|
||
self._login_fabric()
|
||
sys.exit(self._app.exec()) |