Implement server-side order persistence with SQLite and Flask API
This commit is contained in:
112
backend/order-service.py
Normal file
112
backend/order-service.py
Normal file
@@ -0,0 +1,112 @@
|
||||
from flask import Flask, request, jsonify
|
||||
import sqlite3
|
||||
import os
|
||||
import json
|
||||
from datetime import datetime
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# Database setup
|
||||
DB_PATH = '/data/services-order.db'
|
||||
os.makedirs('/data', exist_ok=True)
|
||||
|
||||
def init_db():
|
||||
"""Initialize the database with orders table"""
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS service_order (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id TEXT NOT NULL DEFAULT 'default',
|
||||
order_data TEXT NOT NULL,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
''')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
# Initialize database on startup
|
||||
init_db()
|
||||
|
||||
@app.route('/api/order', methods=['GET'])
|
||||
def get_order():
|
||||
"""Get the saved service order"""
|
||||
user_id = request.args.get('user_id', 'default')
|
||||
|
||||
try:
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute(
|
||||
'SELECT order_data FROM service_order WHERE user_id = ? ORDER BY updated_at DESC LIMIT 1',
|
||||
(user_id,)
|
||||
)
|
||||
row = cursor.fetchone()
|
||||
conn.close()
|
||||
|
||||
if row:
|
||||
return jsonify(json.loads(row[0])), 200
|
||||
else:
|
||||
return jsonify({}), 200
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
@app.route('/api/order', methods=['POST'])
|
||||
def save_order():
|
||||
"""Save the service order"""
|
||||
user_id = request.json.get('user_id', 'default')
|
||||
order_data = request.json.get('order', {})
|
||||
|
||||
if not order_data:
|
||||
return jsonify({'error': 'No order data provided'}), 400
|
||||
|
||||
try:
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Check if user already has an order
|
||||
cursor.execute('SELECT id FROM service_order WHERE user_id = ?', (user_id,))
|
||||
existing = cursor.fetchone()
|
||||
|
||||
if existing:
|
||||
# Update existing order
|
||||
cursor.execute(
|
||||
'UPDATE service_order SET order_data = ?, updated_at = CURRENT_TIMESTAMP WHERE user_id = ?',
|
||||
(json.dumps(order_data), user_id)
|
||||
)
|
||||
else:
|
||||
# Insert new order
|
||||
cursor.execute(
|
||||
'INSERT INTO service_order (user_id, order_data) VALUES (?, ?)',
|
||||
(user_id, json.dumps(order_data))
|
||||
)
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
return jsonify({'success': True, 'message': 'Order saved'}), 200
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
@app.route('/api/order', methods=['DELETE'])
|
||||
def delete_order():
|
||||
"""Delete saved order (reset to default)"""
|
||||
user_id = request.args.get('user_id', 'default')
|
||||
|
||||
try:
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('DELETE FROM service_order WHERE user_id = ?', (user_id,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
return jsonify({'success': True, 'message': 'Order deleted'}), 200
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
@app.route('/health', methods=['GET'])
|
||||
def health():
|
||||
"""Health check endpoint"""
|
||||
return jsonify({'status': 'ok'}), 200
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(host='0.0.0.0', port=8082)
|
||||
Reference in New Issue
Block a user