sio-2425/delivery1/server/app.py

52 lines
1.8 KiB
Python

import os
import sqlalchemy.exc
from flask import Flask, request, jsonify
from routes import org_bp, user_bp, file_bp
from database import db_connection, db
from models import Organization, User, File, Session
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///database.db"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
app.config["SQLALCHEMY_AUTOCOMMIT"] = False
app.config["SQLALCHEMY_AUTOFLUSH"] = False
db_connection.init_app(app)
with app.app_context():
try:
db_connection.session.query(Session).delete()
db_connection.session.commit()
except sqlalchemy.exc.OperationalError:
pass
db_connection.create_all()
app.register_blueprint(org_bp, url_prefix="/org")
app.register_blueprint(user_bp, url_prefix="/user")
app.register_blueprint(file_bp, url_prefix="/file")
@app.route("/", methods=["GET"])
def index():
return jsonify({"message": "Welcome to the API"}), 200
@app.route("/reset", methods=["POST"])
def reset():
password = request.json["password"]
if password != "123":
return jsonify({"error": "Invalid password"}), 403
try:
with app.app_context():
db_connection.drop_all()
db_connection.create_all()
repos = os.path.join(os.path.dirname(os.path.abspath(__file__)), "repository")
for repo in os.listdir(repos):
if os.path.isdir(os.path.join(repos, repo)):
for file in os.listdir(os.path.join(repos, repo)):
os.remove(os.path.join(repos, repo, file))
os.rmdir(os.path.join(repos, repo))
except sqlalchemy.exc.OperationalError:
return jsonify({"error": "Database error"}), 500
return jsonify({"message": "Database reset"}), 200
if __name__ == "__main__":
app.run(debug=True)