Spaces:
Paused
Paused
| """ | |
| Database models for the Codingo application. | |
| """ | |
| from flask_sqlalchemy import SQLAlchemy | |
| from datetime import datetime | |
| import json | |
| db = SQLAlchemy() | |
| 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) # JSON string | |
| 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"<Job {self.role} at {self.company}>" | |
| 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): | |
| """Initialize the database with the Flask app.""" | |
| db.init_app(app) | |
| # Import all models before db.create_all() | |
| import backend.models.user # <-- Don't just import User directly | |
| import backend.models.database # Your Job and Application classes are here | |
| with app.app_context(): | |
| db.create_all() | |
| 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' | |
| ), | |
| ] | |
| db.session.add_all(sample_jobs) | |
| db.session.commit() | |
| print("Sample jobs added to database.") | |