from sqlalchemy import Column, Integer, String, Boolean, ForeignKey, ARRAY, UniqueConstraint from sqlalchemy.orm import DeclarativeBase class Base(DeclarativeBase): pass class Users(Base): __tablename__ = 'Users' UserID = Column(Integer, primary_key=True, autoincrement=True) Email = Column(String(166), nullable=False, unique=True) Hashed_password = Column(String(200), nullable=False) class Students(Base): __tablename__ = 'Students' StudentID = Column(Integer, primary_key=True, autoincrement=True) Name = Column(String(155), nullable=False) Type = Column(String(60), nullable=False) Faculties = Column(String(70), nullable=False) Group = Column(String(20), nullable=False) Year = Column(Integer, nullable=False) Experience_specialty = Column(Boolean, nullable=False) Time = Column(ARRAY(String(3)), nullable=False) Soft_skills = Column(String(155), nullable=False) Link = Column(String(155), nullable=False) Email = Column(String(166), nullable=False) Phone_number = Column(String(16), nullable=False) class Jobs(Base): __tablename__ = 'Jobs' JobID = Column(Integer, primary_key=True, autoincrement=True) UserID = Column(Integer, ForeignKey( "Users.UserID", ondelete="CASCADE"), nullable=False) Company_name = Column(String(155), nullable=False) Link_to_job = Column(String(155), nullable=True) Job_name = Column(String(155), nullable=False) Year = Column(String(1), nullable=False) Qualification = Column(Boolean, nullable=False) Salary_after_interview = Column(Boolean, nullable=False) Salary = Column(Integer, nullable=False) Email = Column(String(155), nullable=False) Archive = Column(Boolean, nullable=False) Responsibilities = Column(String(255), nullable=False) Time = Column(ARRAY(String), nullable=False) class Hard_skills(Base): __tablename__ = 'Hard_skills' Hard_skillID = Column(Integer, primary_key=True, nullable=False, autoincrement=True) Title = Column(String, nullable=False, unique=True) class StudentsHard_skills(Base): __tablename__ = 'StudentsHard_skills' StudentID = Column(Integer, ForeignKey( "Students.StudentID", onupdate="CASCADE", ondelete="CASCADE"), primary_key=True) Hard_skillID = Column(Integer, ForeignKey( "Hard_skills.Hard_skillID", onupdate="CASCADE", ondelete="CASCADE"), primary_key=True) class JobsHard_skills(Base): __tablename__ = 'JobsHard_skills' JobID = Column(Integer, ForeignKey( "Jobs.JobID", onupdate="CASCADE", ondelete="CASCADE"), primary_key=True) Hard_skillID = Column(Integer, ForeignKey( "Hard_skills.Hard_skillID", onupdate="CASCADE", ondelete="CASCADE"), primary_key=True) class Responses(Base): __tablename__ = 'Responses' ResponseID = Column(Integer, primary_key=True, autoincrement=True) StudentID = Column(Integer, ForeignKey( "Students.StudentID", onupdate="CASCADE", ondelete="CASCADE")) JobID = Column(Integer, ForeignKey( "Jobs.JobID", onupdate="CASCADE", ondelete="CASCADE")) Status = Column(String(50), nullable=True) Comment = Column(String(700), nullable=True) Link = Column(String(155), nullable=True) __table_args__ = ( UniqueConstraint('StudentID', 'JobID', name='unique_student_job_for_responses'), ) class Matches(Base): __tablename__ = 'Matches' StudentID = Column(Integer, ForeignKey( "Students.StudentID", onupdate="CASCADE", ondelete="CASCADE"), primary_key=True) JobID = Column(Integer, ForeignKey( "Jobs.JobID", onupdate="CASCADE", ondelete="CASCADE"), primary_key=True) Match = Column(Integer, nullable=False)