import sqlite3 from flask import Flask, render_template_string, jsonify from datetime import datetime, date app = Flask(__name__) # Updated path for Docker volume DB_FILE = "/app/data/cleaning_logs.db" # Room definitions BUILDINGS = { "Haus A-C": [ list(range(101, 131)), list(range(201, 231)), list(range(301, 331)) ], "Haus D-F": [ list(range(131, 151)), list(range(231, 251)), list(range(331, 351)) ], "Haus O": [ list(range(401, 413)), list(range(420, 436)), list(range(440, 457)) ] } def get_all_defined_rooms(): rooms = set() for floors in BUILDINGS.values(): for floor in floors: rooms.update(str(r) for r in floor) return rooms def get_room_statuses(): today = date.today().strftime("%Y-%m-%d") try: with sqlite3.connect(DB_FILE) as conn: cursor = conn.execute(""" SELECT room_number, MAX(cleaned_at) as last_cleaned FROM cleaning_events GROUP BY room_number """) rows = cursor.fetchall() except sqlite3.OperationalError: return {} statuses = {} for room, last_cleaned in rows: is_today = last_cleaned.startswith(today) if last_cleaned else False statuses[room] = { "is_today": is_today, "last_cleaned": last_cleaned } return statuses def get_special_rooms(statuses): defined_rooms = get_all_defined_rooms() special_rooms = [r for r in statuses.keys() if r not in defined_rooms] return sorted(special_rooms) @app.route('/') def dashboard(): statuses = get_room_statuses() special_rooms = get_special_rooms(statuses) return render_template_string( TEMPLATE, buildings=BUILDINGS, statuses=statuses, special_rooms=special_rooms ) @app.route('/api/status') def api_status(): statuses = get_room_statuses() special_rooms = get_special_rooms(statuses) return jsonify({ "statuses": statuses, "special_rooms": special_rooms }) TEMPLATE = '''