# models.py - CHUNK 2: ADD these models to your existing models.py file # ADD AFTER the Category class: class Job(db.Model): __tablename__ = 'jobs' # Core Job (8 fields) id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(200), nullable=False) description = db.Column(db.Text, nullable=False) contractor_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) category_id = db.Column(db.Integer, db.ForeignKey('categories.id'), nullable=False) location = db.Column(db.String(100), nullable=False) budget_min = db.Column(db.Numeric(10,2)) budget_max = db.Column(db.Numeric(10,2)) # Legal/Safety (3 fields) whs_requirements = db.Column(db.Text) insurance_required = db.Column(db.Boolean, default=True) white_card_required = db.Column(db.Boolean, default=True) # System (4 fields) status = db.Column(db.String(20), default='open') date_posted = db.Column(db.DateTime, default=datetime.utcnow) deadline = db.Column(db.DateTime) applications_count = db.Column(db.Integer, default=0) 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) worker_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) status = db.Column(db.String(20), default='pending') proposed_rate = db.Column(db.Numeric(10,2)) cover_letter = db.Column(db.Text) date_applied = db.Column(db.DateTime, default=datetime.utcnow) abn_verified = db.Column(db.Boolean, default=False) insurance_verified = db.Column(db.Boolean, default=False) # database_setup.py - CHUNK 2: REPLACE your existing database_setup.py with this: import os from flask import Flask from models import db def create_database(): app = Flask(__name__) # SQLite configuration (stable, no SSL issues) basedir = os.path.abspath(os.path.dirname(__file__)) app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{os.path.join(basedir, "rateright.db")}' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config['SECRET_KEY'] = 'rateright-legal-compliant-2025' # Initialize database db.init_app(app) with app.app_context(): # Create all tables db.create_all() print("โœ… CHUNK 2: Core business tables created successfully!") # Verify table creation tables = db.engine.table_names() print(f"โœ… Created {len(tables)} tables: {', '.join(tables)}") print("โœ… Core Tables: users, categories, jobs, applications") return app if __name__ == '__main__': create_database() # test_chunk2.py - CHUNK 2: NEW FILE - Create this new test file from database_setup import create_database from models import db, User, Category, Job, Application from datetime import datetime, timedelta def test_chunk2(): app = create_database() with app.app_context(): print("๐Ÿงช Testing CHUNK 2: Core Business Models...") # Clear existing data db.drop_all() db.create_all() # Create test contractor contractor = User( email='contractor@rateright.com.au', first_name='John', last_name='Smith', role='contractor', phone_number='0412345678', location='Sydney, NSW', business_name='Smith Construction', abn_number='12345678901' ) contractor.set_password('password123') db.session.add(contractor) # Create test worker worker = User( email='worker@rateright.com.au', first_name='Mike', last_name='Johnson', role='worker', phone_number='0423456789', location='Sydney, NSW', primary_trade='Formworker', abn_number='98765432109' ) worker.set_password('password123') db.session.add(worker) # Create test category category = Category( name='Formworker', description='Formwork construction and setup', whs_risk_level='high', insurance_requirements='$20M public liability required' ) db.session.add(category) db.session.commit() # Create test job job = Job( title='High-rise Formwork - Level 15-20', description='Need experienced formworkers for high-rise residential build.', contractor_id=contractor.id, category_id=category.id, location='Sydney, NSW', budget_min=3000, budget_max=4500, whs_requirements='Fall protection, height safety training', insurance_required=True, white_card_required=True, deadline=datetime.utcnow() + timedelta(days=14) ) db.session.add(job) db.session.commit() # Create test application application = Application( job_id=job.id, worker_id=worker.id, status='pending', proposed_rate=4000, cover_letter='Experienced formworker with 12+ years in high-rise construction.', abn_verified=True, insurance_verified=True ) db.session.add(application) db.session.commit() # Verify relationships user_count = User.query.count() category_count = Category.query.count() job_count = Job.query.count() application_count = Application.query.count() print(f"โœ… Users created: {user_count}") print(f"โœ… Categories created: {category_count}") print(f"โœ… Jobs created: {job_count}") print(f"โœ… Applications created: {application_count}") # Test relationships test_job = Job.query.first() test_application = Application.query.first() print(f"โœ… Job contractor: {User.query.get(test_job.contractor_id).first_name}") print(f"โœ… Job category: {Category.query.get(test_job.category_id).name}") print(f"โœ… Application worker: {User.query.get(test_application.worker_id).first_name}") print(f"โœ… Application job: {Job.query.get(test_application.job_id).title}") print("โœ… CHUNK 2 completed successfully!") print("โœ… Core business workflow: Contractor โ†’ Job โ†’ Worker Application") print("๐Ÿ“ฆ Ready for CHUNK 3...") if __name__ == '__main__': test_chunk2()