zkt25/z1/backend/app.py

93 lines
2.4 KiB
Python

from flask import Flask, request, jsonify
from flask_cors import CORS
import os
import psycopg2
import time
app = Flask(__name__)
CORS(app)
DB_HOST = os.getenv("DB_HOST", "db")
DB_NAME = os.getenv("DB_NAME", "notesdb")
DB_USER = os.getenv("DB_USER", "notesuser")
DB_PASSWORD = os.getenv("DB_PASSWORD", "notessecret")
DB_PORT = os.getenv("DB_PORT", "5432")
def get_connection():
return psycopg2.connect(
host=DB_HOST,
database=DB_NAME,
user=DB_USER,
password=DB_PASSWORD,
port=DB_PORT
)
def init_db():
for _ in range(20):
try:
conn = get_connection()
cur = conn.cursor()
cur.execute("""
CREATE TABLE IF NOT EXISTS notes (
id SERIAL PRIMARY KEY,
content TEXT NOT NULL
);
""")
conn.commit()
cur.close()
conn.close()
return
except Exception:
time.sleep(2)
raise Exception("Database not ready")
@app.route("/api/health", methods=["GET"])
def health():
return jsonify({"status": "ok"})
@app.route("/api/notes", methods=["GET"])
def get_notes():
conn = get_connection()
cur = conn.cursor()
cur.execute("SELECT id, content FROM notes ORDER BY id DESC;")
rows = cur.fetchall()
cur.close()
conn.close()
return jsonify([{"id": r[0], "content": r[1]} for r in rows])
@app.route("/api/notes", methods=["POST"])
def add_note():
data = request.get_json()
content = data.get("content", "").strip()
if not content:
return jsonify({"error": "Content is required"}), 400
conn = get_connection()
cur = conn.cursor()
cur.execute("INSERT INTO notes (content) VALUES (%s) RETURNING id;", (content,))
note_id = cur.fetchone()[0]
conn.commit()
cur.close()
conn.close()
return jsonify({"id": note_id, "content": content}), 201
@app.route("/api/notes/<int:note_id>", methods=["DELETE"])
def delete_note(note_id):
conn = get_connection()
cur = conn.cursor()
cur.execute("DELETE FROM notes WHERE id = %s RETURNING id;", (note_id,))
deleted = cur.fetchone()
conn.commit()
cur.close()
conn.close()
if deleted is None:
return jsonify({"error": "Note not found"}), 404
return jsonify({"message": "Note deleted successfully"})
if __name__ == "__main__":
init_db()
app.run(host="0.0.0.0", port=5000)