from datetime import datetime from flask_sqlalchemy import SQLAlchemy from flask_login import UserMixin from werkzeug.security import generate_password_hash, check_password_hash from app import db class User(UserMixin, db.Model): """Gebruiker model voor geregistreerde gebruikers""" id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(120), unique=True, nullable=False, index=True) password_hash = db.Column(db.String(255), nullable=False) created_at = db.Column(db.DateTime, default=datetime.utcnow) # Relatie met incidents incidents = db.relationship('Incident', backref='user', lazy='dynamic', cascade='all, delete-orphan') def set_password(self, password): """Hash het wachtwoord""" self.password_hash = generate_password_hash(password) def check_password(self, password): """Controleer het wachtwoord""" return check_password_hash(self.password_hash, password) def __repr__(self): return f'' class Incident(db.Model): """Incident model voor het bijhouden van snauwgedrag""" id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=True) # Null voor anonieme gebruikers timestamp = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) severity = db.Column(db.Integer, nullable=False) # 1-5 Snauw-index schaal notes = db.Column(db.Text, nullable=True) # Optionele opmerkingen created_at = db.Column(db.DateTime, default=datetime.utcnow) # Voor anonieme gebruikers session_id = db.Column(db.String(255), nullable=True, index=True) # Voor anonieme tracking def __repr__(self): return f'' def to_dict(self): """Converteer naar dictionary voor JSON responses""" return { 'id': self.id, 'timestamp': self.timestamp.isoformat(), 'severity': self.severity, 'notes': self.notes or '', 'created_at': self.created_at.isoformat() }