the beginning of the idiots
This commit is contained in:
		
							
								
								
									
										123
									
								
								qwen/python/merchants_of_hope/models/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								qwen/python/merchants_of_hope/models/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,123 @@
 | 
			
		||||
"""
 | 
			
		||||
Database models for the application
 | 
			
		||||
"""
 | 
			
		||||
from sqlalchemy import Column, Integer, String, DateTime, Boolean, Text, ForeignKey
 | 
			
		||||
from sqlalchemy.ext.declarative import declarative_base
 | 
			
		||||
from sqlalchemy.orm import relationship
 | 
			
		||||
from sqlalchemy.sql import func
 | 
			
		||||
import enum
 | 
			
		||||
 | 
			
		||||
Base = declarative_base()
 | 
			
		||||
 | 
			
		||||
class Tenant(Base):
 | 
			
		||||
    """Tenant model for multi-tenant support"""
 | 
			
		||||
    __tablename__ = "tenants"
 | 
			
		||||
    
 | 
			
		||||
    id = Column(Integer, primary_key=True, index=True)
 | 
			
		||||
    name = Column(String(255), unique=True, index=True, nullable=False)
 | 
			
		||||
    subdomain = Column(String(255), unique=True, index=True, nullable=False)
 | 
			
		||||
    is_active = Column(Boolean, default=True)
 | 
			
		||||
    created_at = Column(DateTime(timezone=True), server_default=func.now())
 | 
			
		||||
    updated_at = Column(DateTime(timezone=True), onupdate=func.now())
 | 
			
		||||
    
 | 
			
		||||
    # Relationships
 | 
			
		||||
    users = relationship("User", back_populates="tenant")
 | 
			
		||||
    job_postings = relationship("JobPosting", back_populates="tenant")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class UserRole(enum.Enum):
 | 
			
		||||
    """User roles in the system"""
 | 
			
		||||
    JOB_SEEKER = "job_seeker"
 | 
			
		||||
    JOB_PROVIDER = "job_provider"
 | 
			
		||||
    ADMIN = "admin"
 | 
			
		||||
    MODERATOR = "moderator"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class User(Base):
 | 
			
		||||
    """User model"""
 | 
			
		||||
    __tablename__ = "users"
 | 
			
		||||
    
 | 
			
		||||
    id = Column(Integer, primary_key=True, index=True)
 | 
			
		||||
    email = Column(String(255), unique=True, index=True, nullable=False)
 | 
			
		||||
    username = Column(String(255), unique=True, index=True, nullable=False)
 | 
			
		||||
    hashed_password = Column(String(255), nullable=False)
 | 
			
		||||
    role = Column(String(50), nullable=False)  # job_seeker, job_provider, admin, moderator
 | 
			
		||||
    is_active = Column(Boolean, default=True)
 | 
			
		||||
    is_verified = Column(Boolean, default=False)
 | 
			
		||||
    tenant_id = Column(Integer, ForeignKey("tenants.id"), nullable=False)
 | 
			
		||||
    created_at = Column(DateTime(timezone=True), server_default=func.now())
 | 
			
		||||
    updated_at = Column(DateTime(timezone=True), onupdate=func.now())
 | 
			
		||||
    
 | 
			
		||||
    # Relationships
 | 
			
		||||
    tenant = relationship("Tenant", back_populates="users")
 | 
			
		||||
    resumes = relationship("Resume", back_populates="user")
 | 
			
		||||
    applications = relationship("Application", back_populates="user")
 | 
			
		||||
    job_postings = relationship("JobPosting", back_populates="created_by_user")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Resume(Base):
 | 
			
		||||
    """Resume model for job seekers"""
 | 
			
		||||
    __tablename__ = "resumes"
 | 
			
		||||
    
 | 
			
		||||
    id = Column(Integer, primary_key=True, index=True)
 | 
			
		||||
    user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
 | 
			
		||||
    title = Column(String(255), nullable=False)
 | 
			
		||||
    content = Column(Text, nullable=False)  # JSON or structured text
 | 
			
		||||
    is_active = Column(Boolean, default=True)
 | 
			
		||||
    created_at = Column(DateTime(timezone=True), server_default=func.now())
 | 
			
		||||
    updated_at = Column(DateTime(timezone=True), onupdate=func.now())
 | 
			
		||||
    
 | 
			
		||||
    # Relationships
 | 
			
		||||
    user = relationship("User", back_populates="resumes")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class JobPosting(Base):
 | 
			
		||||
    """Job posting model for job providers"""
 | 
			
		||||
    __tablename__ = "job_postings"
 | 
			
		||||
    
 | 
			
		||||
    id = Column(Integer, primary_key=True, index=True)
 | 
			
		||||
    tenant_id = Column(Integer, ForeignKey("tenants.id"), nullable=False)
 | 
			
		||||
    created_by_user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
 | 
			
		||||
    title = Column(String(255), nullable=False)
 | 
			
		||||
    description = Column(Text, nullable=False)
 | 
			
		||||
    requirements = Column(Text, nullable=False)
 | 
			
		||||
    location = Column(String(255))
 | 
			
		||||
    salary_min = Column(Integer)  # in cents
 | 
			
		||||
    salary_max = Column(Integer)  # in cents
 | 
			
		||||
    is_active = Column(Boolean, default=True)
 | 
			
		||||
    is_remote = Column(Boolean, default=False)
 | 
			
		||||
    created_at = Column(DateTime(timezone=True), server_default=func.now())
 | 
			
		||||
    updated_at = Column(DateTime(timezone=True), onupdate=func.now())
 | 
			
		||||
    
 | 
			
		||||
    # Relationships
 | 
			
		||||
    tenant = relationship("Tenant", back_populates="job_postings")
 | 
			
		||||
    created_by_user = relationship("User", back_populates="job_postings")
 | 
			
		||||
    applications = relationship("Application", back_populates="job_posting")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ApplicationStatus(enum.Enum):
 | 
			
		||||
    """Status of job applications"""
 | 
			
		||||
    SUBMITTED = "submitted"
 | 
			
		||||
    REVIEWED = "reviewed"
 | 
			
		||||
    INTERVIEW = "interview"
 | 
			
		||||
    OFFER = "offer"
 | 
			
		||||
    REJECTED = "rejected"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Application(Base):
 | 
			
		||||
    """Job application model"""
 | 
			
		||||
    __tablename__ = "applications"
 | 
			
		||||
    
 | 
			
		||||
    id = Column(Integer, primary_key=True, index=True)
 | 
			
		||||
    user_id = Column(Integer, ForeignKey("users.id"), nullable=False)
 | 
			
		||||
    job_posting_id = Column(Integer, ForeignKey("job_postings.id"), nullable=False)
 | 
			
		||||
    resume_id = Column(Integer, ForeignKey("resumes.id"), nullable=False)
 | 
			
		||||
    cover_letter = Column(Text)
 | 
			
		||||
    status = Column(String(50), default=ApplicationStatus.SUBMITTED.value)
 | 
			
		||||
    created_at = Column(DateTime(timezone=True), server_default=func.now())
 | 
			
		||||
    updated_at = Column(DateTime(timezone=True), onupdate=func.now())
 | 
			
		||||
    
 | 
			
		||||
    # Relationships
 | 
			
		||||
    user = relationship("User", back_populates="applications")
 | 
			
		||||
    job_posting = relationship("JobPosting", back_populates="applications")
 | 
			
		||||
    resume = relationship("Resume", back_populates="application")
 | 
			
		||||
		Reference in New Issue
	
	Block a user