Collector/app.py

100 lines
2.8 KiB
Python

# app.py
from flask import Flask, request, render_template, jsonify, redirect, url_for
from sqlalchemy import create_engine, func
from sqlalchemy.orm import sessionmaker
from config.config import config
from models.album import Base, Album
app = Flask(__name__)
engine = create_engine(config['DB_URL'])
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base.metadata.create_all(bind=engine)
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.route('/')
def index():
db = next(get_db())
albums = db.query(Album).all()
return render_template('index.html', albums=albums)
@app.route('/admin', methods=['GET'])
def admin_get():
db = next(get_db())
albums = db.query(Album).all()
return render_template('admin.html', albums=albums)
@app.route('/admin', methods=['POST'])
def admin_post():
action = request.form.get('action')
album_id = request.form.get('album_id')
if not action or not album_id:
if not album_id:
album_id = 1
#return jsonify({'error': 'Missing required fields'}), 400
try:
album_id = int(album_id)
except ValueError:
return jsonify({'error': 'Invalid album ID'}), 400
db = next(get_db())
if action == 'edit':
title = request.form.get('title')
artist = request.form.get('artist')
year = request.form.get('year')
if not title or not artist or not year:
return jsonify({'error': 'All fields are required'}), 400
album = db.query(Album).filter(Album.id == album_id).first()
if album:
album.title = title
album.artist = artist
album.year = int(year)
db.commit()
return jsonify({'message': 'Album updated successfully', 'album': album.to_dict()})
else:
return jsonify({'error': 'Album not found'}), 404
elif action == 'delete':
album = db.query(Album).filter(Album.id == album_id).first()
if album:
db.delete(album)
db.commit()
return jsonify({'message': 'Album deleted successfully'})
else:
return jsonify({'error': 'Album not found'}), 404
elif action == 'add_album':
title = request.form.get('title')
artist = request.form.get('artist')
year = request.form.get('year')
if not title or not artist or not year:
return jsonify({'error': 'All fields are required'}), 400
new_album = Album(title=title, artist=artist, year=int(year))
db.add(new_album)
db.commit()
return jsonify({'message': 'Album added successfully', 'album': new_album.to_dict()})
else:
return jsonify({'error': 'Invalid action'}), 400
if __name__ == '__main__':
app.run(debug=True)