From 070e408b6372381493f236b87f9c640065cac422 Mon Sep 17 00:00:00 2001 From: andrei Date: Sat, 4 Jan 2025 10:44:07 +0500 Subject: [PATCH] ._. --- API/data/connect.py | 173 ++++++++++++++++ Erd.drawio | 490 ++++++++++++++++++++++---------------------- 2 files changed, 418 insertions(+), 245 deletions(-) create mode 100644 API/data/connect.py diff --git a/API/data/connect.py b/API/data/connect.py new file mode 100644 index 0000000..5d5f395 --- /dev/null +++ b/API/data/connect.py @@ -0,0 +1,173 @@ +from sqlalchemy import create_engine, Column, Integer, VARCHAR, Float, ForeignKey, Date, Text, 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) + login = 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('user.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')) + + +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() diff --git a/Erd.drawio b/Erd.drawio index 3607f0c..080214d 100644 --- a/Erd.drawio +++ b/Erd.drawio @@ -1,13 +1,13 @@ - + - + - + - + @@ -15,218 +15,218 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -235,139 +235,139 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -375,149 +375,149 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -525,52 +525,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -578,204 +578,204 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -783,74 +783,74 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -858,159 +858,159 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1019,36 +1019,36 @@ - + - + - + - + - + - + - + - +