from sqlalchemy import create_engine, Column, Integer, VARCHAR, Float, ForeignKey, Date, Text, Boolean, DateTime from sqlalchemy.orm import Session, sessionmaker, relationship from sqlalchemy.ext.declarative import declarative_base base = declarative_base() __factory = None class Post(base): __tablename__ = 'posts' id = Column(Integer, primary_key=True, autoincrement=True) title = Column(VARCHAR(100)) class Department(base): __tablename__ = 'departments' id = Column(Integer, primary_key=True, autoincrement=True) title = Column(VARCHAR(100)) description = Column(VARCHAR(1000)) class User(base): __tablename__ = 'users' id = Column(Integer, primary_key=True, autoincrement=True) first_name = Column(VARCHAR(100)) last_name = Column(VARCHAR(100)) patronymic = Column(VARCHAR(100)) work_phone = Column(VARCHAR(20)) phone = Column(VARCHAR(20)) office = Column(VARCHAR(10)) birthday = Column(Date) other_info = Column(Text) email = Column(VARCHAR(100)) password = Column(VARCHAR(150)) helper_id = Column(Integer, ForeignKey('users.id')) director_id = Column(Integer, ForeignKey('users.id')) post_id = Column(Integer, ForeignKey('posts.id')) department_id = Column(Integer, ForeignKey('departments.id')) class DepartmentUser(base): __tablename__ = 'department_users' id = Column(Integer, primary_key=True, autoincrement=True) department_id = Column(Integer, ForeignKey('departments.id')) user_id = Column(Integer, ForeignKey('users.id')) class DocumentCategory(base): __tablename__ = 'document_categories' id = Column(Integer, primary_key=True, autoincrement=True) title = Column(VARCHAR(100)) class Document(base): __tablename__ = 'documents' id = Column(Integer, primary_key=True, autoincrement=True) title = Column(VARCHAR(100)) date_created = Column(DateTime) date_updated = Column(DateTime) category_id = Column(Integer, ForeignKey('document_categories.id')) class Comment(base): __tablename__ = 'comments' id = Column(Integer, primary_key=True, autoincrement=True) text = Column(Text) date_created = Column(DateTime) date_updated = Column(DateTime) user_id = Column(Integer, ForeignKey('users.id')) document_id = Column(Integer, ForeignKey('documents.id')) class MaterialType(base): __tablename__ = 'material_types' id = Column(Integer, primary_key=True, autoincrement=True) title = Column(VARCHAR(100)) class MaterialStatus(base): __tablename__ = 'material_statuses' id = Column(Integer, primary_key=True, autoincrement=True) title = Column(VARCHAR(100)) class Material(base): __tablename__ = 'materials' id = Column(Integer, primary_key=True, autoincrement=True) title = Column(VARCHAR(100)) success_date = Column(Date) edit_date = Column(DateTime) area = Column(Text) user_id = Column(Integer, ForeignKey('users.id')) status_id = Column(Integer, ForeignKey('material_statuses.id')) type_id = Column(Integer, ForeignKey('material_types.id')) class EventType(base): __tablename__ = 'event_types' id = Column(Integer, primary_key=True, autoincrement=True) title = Column(VARCHAR(100)) class EventStatus(base): __tablename__ = 'event_statuses' id = Column(Integer, primary_key=True, autoincrement=True) title = Column(VARCHAR(100)) class Event(base): __tablename__ = 'events' id = Column(Integer, primary_key=True, autoincrement=True) title = Column(VARCHAR(100)) datetime_event = Column(DateTime) short_description = Column(VARCHAR(1500)) type_id = Column(Integer, ForeignKey('event_types.id')) status_id = Column(Integer, ForeignKey('event_statuses.id')) class DepartmentEvent(base): __tablename__ = 'department_events' id = Column(Integer, primary_key=True, autoincrement=True) event_id = Column(Integer, ForeignKey('events.id')) department_id = Column(Integer, ForeignKey('departments.id')) class ResponsibleUser(base): __tablename__ = 'responsible_users' id = Column(Integer, primary_key=True, autoincrement=True) event_id = Column(Integer, ForeignKey('events.id')) user_id = Column(Integer, ForeignKey('users.id')) class UserEvent(base): __tablename__ = 'user_events' id = Column(Integer, primary_key=True, autoincrement=True) event_id = Column(Integer, ForeignKey('events.id')) user_id = Column(Integer, ForeignKey('users.id')) class WorkingCalendar(base): __tablename__ = 'workingcalendar' id = Column(Integer, primary_key=True, autoincrement=True) exceptiondate = Column(Date) isworkingday = Column(Boolean) def init_db(): eng = create_engine( 'postgresql+psycopg2://postgres:2509@localhost:5432/prb1' ) global __factory __factory = sessionmaker(bind=eng) base.metadata.create_all(eng) def connect() -> Session: global __factory return __factory()