Codingo / backend /models /database.py
husseinelsaadi's picture
updated
9d4b413
raw
history blame
3.28 kB
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"<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):
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.")