prb_1/Desktop/data/connect.py
2025-01-15 22:42:02 +05:00

220 lines
6.0 KiB
Python

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))
users = relationship('User', back_populates='post')
class Department(base):
__tablename__ = 'departments'
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(VARCHAR(100))
description = Column(VARCHAR(1000))
parent_id = Column(Integer, ForeignKey('departments.id'))
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'))
post = relationship('Post', back_populates='users')
comments = relationship('Comment', back_populates='user')
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))
documents = relationship('Document', back_populates='category')
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'))
category = relationship('DocumentCategory', back_populates='documents')
comments = relationship('Comment', back_populates='document')
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'))
document = relationship('Document', back_populates='comments')
user = relationship('User', back_populates='comments')
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)
class Attendance(base):
__tablename__ = 'attendances'
id = Column(Integer, primary_key=True, autoincrement=True)
date = Column(Date)
is_attended = Column(Boolean)
reason = Column(Text)
user = Column(Integer, ForeignKey('users.id'))
class VacationTimetable(base):
__tablename__ = 'vacation_timetable'
id = Column(Integer, primary_key=True, autoincrement=True)
start_date = Column(Date)
end_date = Column(Date)
user = 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()