From 5429540f32687611201f6d2f511f063208396038 Mon Sep 17 00:00:00 2001 From: Jaronim Pracht Date: Sun, 22 Jun 2025 11:33:14 +0200 Subject: [PATCH] deploy --- project/backend/coordinator/app.py | 8 +++- .../controller/pitch_book_controller.py | 21 +++++++-- project/frontend/.dockerignore | 1 + .../frontend/src/components/UploadPage.tsx | 43 +++++++++++-------- project/frontend/src/util/api.ts | 21 ++++++++- 5 files changed, 70 insertions(+), 24 deletions(-) diff --git a/project/backend/coordinator/app.py b/project/backend/coordinator/app.py index 2603f42..1212c56 100644 --- a/project/backend/coordinator/app.py +++ b/project/backend/coordinator/app.py @@ -1,4 +1,4 @@ -from flask import Flask +from flask import Flask, send_from_directory, request from flask_cors import CORS import os from dotenv import load_dotenv @@ -6,7 +6,7 @@ from controller import register_routes from model.database import init_db from controller.socketIO import socketio -app = Flask(__name__) +app = Flask(__name__, static_folder='dist', static_url_path='/') CORS(app) socketio.init_app(app) @@ -25,6 +25,10 @@ register_routes(app) def health_check(): return "OK" +@app.route('/', defaults={'path': 'index.html'}) +@app.route('/') +def catch_all(path): + return app.send_static_file('index.html') # für Docker wichtig: host='0.0.0.0' if __name__ == "__main__": diff --git a/project/backend/coordinator/controller/pitch_book_controller.py b/project/backend/coordinator/controller/pitch_book_controller.py index 4a77dbd..a79899e 100644 --- a/project/backend/coordinator/controller/pitch_book_controller.py +++ b/project/backend/coordinator/controller/pitch_book_controller.py @@ -1,4 +1,4 @@ -from flask import Blueprint, request, jsonify, send_file, current_app +from flask import Blueprint, request, jsonify, send_file, current_app, make_response from model.database import db from model.pitch_book_model import PitchBookModel from io import BytesIO @@ -86,10 +86,25 @@ def get_file(id): @pitch_book_controller.route("//download", methods=["GET"]) def download_file(id): file = PitchBookModel.query.get_or_404(id) - return send_file( - BytesIO(file.file), download_name=file.filename, as_attachment=True + + response = make_response( + send_file( + BytesIO(file.file), + download_name=file.filename, + as_attachment=True + ) ) + # Set cache headers + response.headers['Cache-Control'] = 'public, max-age=31536000' # 1 year + response.headers['Pragma'] = 'cache' + response.headers['Expires'] = 'Thu, 31 Dec 2037 23:55:55 GMT' # Far future date + + return response + # return send_file( + # BytesIO(file.file), download_name=file.filename, as_attachment=True + # ) + @pitch_book_controller.route("/", methods=["PUT"]) def update_file(id): diff --git a/project/frontend/.dockerignore b/project/frontend/.dockerignore index f965aed..3705324 100644 --- a/project/frontend/.dockerignore +++ b/project/frontend/.dockerignore @@ -13,3 +13,4 @@ helm-charts .editorconfig .idea coverage* +dist diff --git a/project/frontend/src/components/UploadPage.tsx b/project/frontend/src/components/UploadPage.tsx index e72c9da..a794cdb 100644 --- a/project/frontend/src/components/UploadPage.tsx +++ b/project/frontend/src/components/UploadPage.tsx @@ -4,7 +4,8 @@ import { useNavigate, useRouter } from "@tanstack/react-router"; import { useCallback, useEffect, useState } from "react"; import FileUpload from "react-material-file-upload"; import { socket } from "../socket"; -import { API_HOST } from "../util/api"; +import { uploadPitchBook } from "../util/api"; +// import { API_HOST } from "../util/api"; import { CircularProgressWithLabel } from "./CircularProgressWithLabel"; export default function UploadPage() { @@ -15,23 +16,23 @@ export default function UploadPage() { const navigate = useNavigate(); const router = useRouter(); - const uploadFile = useCallback(async () => { - const formData = new FormData(); - formData.append("file", files[0]); - const response = await fetch(`${API_HOST}/api/pitch_book`, { - method: "POST", - body: formData, - }); + // const uploadFile = useCallback(async () => { + // const formData = new FormData(); + // formData.append("file", files[0]); + // const response = await fetch(`${API_HOST}/api/pitch_book/`, { + // method: "POST", + // body: formData, + // }); - if (response.ok) { - console.log("File uploaded successfully"); - const data = await response.json(); - setPageId(data.id.toString()); - setLoadingState(5); - } else { - console.error("Failed to upload file"); - } - }, [files]); + // if (response.ok) { + // console.log("File uploaded successfully"); + // const data = await response.json(); + // setPageId(data.id.toString()); + // setLoadingState(5); + // } else { + // console.error("Failed to upload file"); + // } + // }, [files]); const onConnection = useCallback(() => { console.log("connected"); @@ -166,7 +167,13 @@ export default function UploadPage() { backgroundColor: "#383838", }} disabled={files.length === 0} - onClick={uploadFile} + onClick={async () => { + setLoadingState(1); + setPageId("-1"); + const id = await uploadPitchBook(files); + setPageId(id.toString()); + setLoadingState(5); + }} > Kennzahlen extrahieren diff --git a/project/frontend/src/util/api.ts b/project/frontend/src/util/api.ts index ca066c1..185bcd8 100644 --- a/project/frontend/src/util/api.ts +++ b/project/frontend/src/util/api.ts @@ -1,6 +1,7 @@ import type { Kennzahl } from "@/types/kpi"; -const API_HOST = import.meta.env.VITE_API_HOST || "http://localhost:5050"; +// const API_HOST = import.meta.env.VITE_API_HOST || "http://localhost:5050"; +const API_HOST = ""; export { API_HOST }; @@ -122,3 +123,21 @@ export async function fetchPitchBooksById(id: number) { } return response.json(); } + +export const uploadPitchBook = async (files: File[]): Promise => { + const formData = new FormData(); + formData.append("file", files[0]); + const response = await fetch(`${API_HOST}/api/pitch_book/`, { + method: "POST", + body: formData, + }); + + if (response.ok) { + console.log("File uploaded successfully"); + const data = await response.json(); + return data.id.toString(); + } else { + console.error("Failed to upload file"); + } + return -1; +};