diff --git a/app.py b/app.py new file mode 100644 index 0000000..1d75691 --- /dev/null +++ b/app.py @@ -0,0 +1,90 @@ +import json +import os +import uuid +from datetime import datetime +from flask import Flask, render_template, request, jsonify + +app = Flask(__name__) +DATA_DIR = os.path.join(os.path.dirname(__file__), 'data') +os.makedirs(DATA_DIR, exist_ok=True) + +def list_projects(): + projects = [] + for f in os.listdir(DATA_DIR): + if f.endswith('.json'): + path = os.path.join(DATA_DIR, f) + with open(path) as fp: + data = json.load(fp) + projects.append({ + 'id': f.replace('.json', ''), + 'name': data.get('name', 'Unbenannt'), + 'updated': data.get('updated', ''), + 'rooms': len(data.get('rooms', [])) + }) + projects.sort(key=lambda p: p['updated'], reverse=True) + return projects + +def load_project(pid): + path = os.path.join(DATA_DIR, f'{pid}.json') + if not os.path.exists(path): + return None + with open(path) as fp: + return json.load(fp) + +def save_project(pid, data): + data['updated'] = datetime.now().isoformat() + path = os.path.join(DATA_DIR, f'{pid}.json') + with open(path, 'w') as fp: + json.dump(data, fp, indent=2, ensure_ascii=False) + +@app.route('/') +def index(): + return render_template('index.html') + +@app.route('/api/projects') +def api_projects(): + return jsonify(list_projects()) + +@app.route('/api/projects', methods=['POST']) +def api_create_project(): + body = request.get_json() or {} + pid = str(uuid.uuid4())[:8] + data = { + 'name': body.get('name', 'Neuer Grundriss'), + 'created': datetime.now().isoformat(), + 'updated': datetime.now().isoformat(), + 'rooms': [], + 'grid_size': 20 # cm per grid cell + } + save_project(pid, data) + return jsonify({'id': pid, **data}) + +@app.route('/api/projects/') +def api_get_project(pid): + data = load_project(pid) + if not data: + return jsonify({'error': 'Projekt nicht gefunden'}), 404 + return jsonify({'id': pid, **data}) + +@app.route('/api/projects/', methods=['PUT']) +def api_update_project(pid): + data = load_project(pid) + if not data: + return jsonify({'error': 'Projekt nicht gefunden'}), 404 + body = request.get_json() or {} + if 'name' in body: + data['name'] = body['name'] + if 'rooms' in body: + data['rooms'] = body['rooms'] + save_project(pid, data) + return jsonify({'id': pid, **data}) + +@app.route('/api/projects/', methods=['DELETE']) +def api_delete_project(pid): + path = os.path.join(DATA_DIR, f'{pid}.json') + if os.path.exists(path): + os.remove(path) + return jsonify({'status': 'ok'}) + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5000, debug=True)