Files
Hotel-Booking/Backend/src/models/room_inspection.py
Iliyan Angelov 627959f52b updates
2025-11-23 18:59:18 +02:00

69 lines
2.9 KiB
Python

from sqlalchemy import Column, Integer, String, Text, Enum, ForeignKey, DateTime, Boolean, JSON, Numeric
from sqlalchemy.orm import relationship
from datetime import datetime
import enum
from ..config.database import Base
class InspectionType(str, enum.Enum):
pre_checkin = 'pre_checkin'
post_checkout = 'post_checkout'
routine = 'routine'
maintenance = 'maintenance'
damage = 'damage'
class InspectionStatus(str, enum.Enum):
pending = 'pending'
in_progress = 'in_progress'
completed = 'completed'
failed = 'failed'
cancelled = 'cancelled'
class RoomInspection(Base):
__tablename__ = 'room_inspections'
id = Column(Integer, primary_key=True, index=True, autoincrement=True)
room_id = Column(Integer, ForeignKey('rooms.id'), nullable=False, index=True)
booking_id = Column(Integer, ForeignKey('bookings.id'), nullable=True, index=True)
inspection_type = Column(Enum(InspectionType), nullable=False)
status = Column(Enum(InspectionStatus), nullable=False, default=InspectionStatus.pending)
# Scheduling
scheduled_at = Column(DateTime, nullable=False, index=True)
started_at = Column(DateTime, nullable=True)
completed_at = Column(DateTime, nullable=True)
# Assignment
inspected_by = Column(Integer, ForeignKey('users.id'), nullable=True)
created_by = Column(Integer, ForeignKey('users.id'), nullable=True)
# Checklist
checklist_template_id = Column(Integer, nullable=True) # Reference to checklist template
checklist_items = Column(JSON, nullable=False) # Array of {category: string, item: string, status: string, notes: string, photos: string[]}
# status can be: 'pass', 'fail', 'needs_attention', 'not_applicable'
# Overall assessment
overall_score = Column(Numeric(3, 2), nullable=True) # 0-5 rating
overall_notes = Column(Text, nullable=True)
issues_found = Column(JSON, nullable=True) # Array of {severity: string, description: string, photo: string}
# severity can be: 'critical', 'major', 'minor', 'cosmetic'
# Photos
photos = Column(JSON, nullable=True) # Array of photo URLs
# Follow-up
requires_followup = Column(Boolean, nullable=False, default=False)
followup_notes = Column(Text, nullable=True)
maintenance_request_id = Column(Integer, ForeignKey('room_maintenance.id'), nullable=True)
created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
# Relationships
room = relationship('Room', back_populates='inspections')
booking = relationship('Booking')
inspector = relationship('User', foreign_keys=[inspected_by])
creator = relationship('User', foreign_keys=[created_by])
maintenance_request = relationship('RoomMaintenance', foreign_keys=[maintenance_request_id])