File size: 4,298 Bytes
504df0f
 
2ae57cb
504df0f
 
 
9d4b413
 
 
504df0f
2ae57cb
 
504df0f
2ae57cb
504df0f
2ae57cb
9d4b413
2ae57cb
504df0f
 
2ae57cb
 
504df0f
3c4bd31
 
 
 
 
 
 
 
 
 
 
 
 
 
 
504df0f
2ae57cb
504df0f
 
2ae57cb
 
504df0f
2ae57cb
 
 
504df0f
 
2ae57cb
 
 
 
504df0f
 
2ae57cb
 
3c4bd31
 
 
 
 
 
504df0f
 
 
2ae57cb
 
 
 
 
504df0f
 
 
 
 
9d4b413
 
504df0f
f3a3e9b
504df0f
 
2ae57cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
504df0f
 
f3a3e9b
 
 
2c55e63
f3a3e9b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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')

    @property
    def skills_list(self):
        """Return a list of skills parsed from the JSON string stored in ``skills``.

        The ``skills`` column stores a JSON encoded list of skills (e.g. '["Python", "Flask"]').
        In templates it is convenient to work with a Python list so that skills can be joined
        or iterated over.  If parsing fails for any reason an empty list is returned.
        """
        try:
            # Import json lazily to avoid circular imports at module import time.
            import json as _json
            return _json.loads(self.skills) if self.skills else []
        except Exception:
            return []

    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')

    # Set up a relationship back to the Job so that templates can access
    # ``application.job`` directly.  Without this relationship you'd need to
    # query the Job model manually in the route or template, which is less
    # convenient and can lead to additional database queries.
    job = db.relationship('Job', backref='applications', lazy='joined')

    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.")