from flask_sqlalchemy import SQLAlchemy from datetime import datetime import json db = SQLAlchemy() # ✅ Import User model here, before Job and Application use it from backend.models.user import User class Job(db.Model): __tablename__ = 'jobs' id = db.Column(db.Integer, primary_key=True) role = db.Column(db.String(100), nullable=False) description = db.Column(db.Text, nullable=False) seniority = db.Column(db.String(50), nullable=False) skills = db.Column(db.Text, nullable=False) company = db.Column(db.String(100), nullable=False) date_posted = db.Column(db.DateTime, default=datetime.utcnow) recruiter_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=True) recruiter = db.relationship('User', backref='posted_jobs') def __repr__(self): return f"" class Application(db.Model): __tablename__ = 'applications' id = db.Column(db.Integer, primary_key=True) job_id = db.Column(db.Integer, db.ForeignKey('jobs.id'), nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) name = db.Column(db.String(100), nullable=False) email = db.Column(db.String(100), nullable=False) resume_path = db.Column(db.String(255), nullable=True) cover_letter = db.Column(db.Text, nullable=True) extracted_features = db.Column(db.Text, nullable=True) status = db.Column(db.String(50), default='applied') date_applied = db.Column(db.DateTime, default=datetime.utcnow) user = db.relationship('User', backref='applications') def __repr__(self): return f"Application('{self.name}', '{self.email}', Job ID: {self.job_id})" def get_profile_data(self): try: return json.loads(self.extracted_features) if self.extracted_features else {} except: return {} def init_db(app): db.init_app(app) with app.app_context(): db.create_all() # Add sample data... # Add sample data if jobs table is empty if Job.query.count() == 0: sample_jobs = [ Job( role='Senior Python Developer', description='Experienced developer needed for backend systems.', seniority='Senior', skills=json.dumps(['Python', 'Flask', 'SQL', 'AWS']), company='TechCorp' ), Job( role='Data Scientist', description='ML model development and statistical analysis.', seniority='Mid', skills=json.dumps(['Python', 'scikit-learn', 'Pandas', 'Spark']), company='DataInsights' ), Job( role='Frontend Developer', description='Modern web frontend development with React.', seniority='Junior', skills=json.dumps(['HTML', 'CSS', 'JavaScript', 'React']), company='WebSolutions' ), ] for job in sample_jobs: db.session.add(job) db.session.commit() print("✅ Sample jobs added to database.")