from typing import List from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column from sqlalchemy import ForeignKey, create_engine ENGINE = create_engine('sqlite:///application_dev.db') class Base(DeclarativeBase): pass class Employee(Base): __tablename__ = 'employees' employee_id: Mapped[str] = mapped_column(primary_key = True) email_id: Mapped[str] = mapped_column(unique = True,nullable = False) first_name: Mapped[str] = mapped_column(nullable = True) last_name: Mapped[str] = mapped_column(nullable = True) password: Mapped[str] department: Mapped[str] # jobs_posted: Mapped[list["Job"]] = relationship(back_populates="jobs") def __repr__(self): return f'Employee({self.employee_id!r},{self.email_id!r},{self.first_name!r},{self.department!r})' @property def full_name(self): return f'{self.first_name.title()} {self.last_name.title()}' class Job(Base): __tablename__ = 'jobs' job_id :Mapped[str] = mapped_column(primary_key = True) employee_id :Mapped[str] #= mapped_column(ForeignKey('employees.employee_id')) post_name: Mapped[str] = mapped_column(nullable = False) description: Mapped[str] = mapped_column(nullable= False) responsibilities: Mapped[str] min_experience: Mapped[int] = mapped_column(nullable = False) max_experience: Mapped[int] = mapped_column(nullable = False) primary_skills: Mapped[str] = mapped_column(nullable = False) secondary_skills: Mapped[str] = mapped_column(nullable = True) vacancies: Mapped[int] = mapped_column(nullable=False) # employee: Mapped["Employee"] = relationship(back_populates="employee") # users_applied: Mapped[list["User"]] = relationship(back_populates="users") created_at: Mapped[str] = mapped_column(nullable=False) expires_at: Mapped[str] = mapped_column(nullable = False) def __repr__(self): return f"Job({self.job_id!r},{self.post_name!r},{self.min_experience},{self.max_experience})" class User(Base): __tablename__ = "users" email_id: Mapped[str] = mapped_column(primary_key=True) password: Mapped[str] = mapped_column(nullable=False) first_name: Mapped[str] = mapped_column(nullable = False) last_name: Mapped[str] = mapped_column(nullable = False) def __repr__(self): return f'User({self.email_id!r},{self.first_name!r},{self.last_name!r})' @property def full_name(self): return f'{self.first_name.title()} {self.last_name.title()}' class JobsApplied(Base): __tablename__ = 'jobs_applied' email_id: Mapped[str] = mapped_column(primary_key=True) job_id: Mapped[str] = mapped_column(ForeignKey('jobs.job_id')) rank: Mapped[int] = mapped_column(nullable=False) experience: Mapped[int] = mapped_column(nullable=False) round_number: Mapped[int] = mapped_column(nullable=False) primary_skills: Mapped[int] secondary_skills: Mapped[int] def __repr__(self): return f'JobsApplied({self.email_id!r},{self.job_id!r},{self.rank},{self.experience},{self.round_number})' def __create_tables(): Base.metadata.create_all(bind = ENGINE)