Compare commits

...

1 Commits
main ... deploy

Author SHA1 Message Date
Jaronim Pracht 5429540f32 deploy 2025-06-22 11:33:14 +02:00
5 changed files with 70 additions and 24 deletions

View File

@ -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('/<path:path>')
def catch_all(path):
return app.send_static_file('index.html')
# für Docker wichtig: host='0.0.0.0'
if __name__ == "__main__":

View File

@ -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("/<int:id>/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("/<int:id>", methods=["PUT"])
def update_file(id):

View File

@ -13,3 +13,4 @@ helm-charts
.editorconfig
.idea
coverage*
dist

View File

@ -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
</Button>

View File

@ -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<number> => {
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;
};