CoolFace
Apppublic

MatteoScript/RentriWebServer

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
main.py103 linesDownload Raw Back to root
1from fastapi import FastAPI, Request, HTTPException2from fastapi.responses import JSONResponse3import json4from datetime import datetime5import pyodbc6import os7from dotenv import load_dotenv8 9load_dotenv()10app = FastAPI()11 12# --------------------------------------------| CONNESSIONE DB |-------------------------------------------------13# Connessione al DB Web (Amazon RDS)14def get_db_connection():15    server = os.getenv('SERVER_DB')16    username = os.getenv('USERNAME_DB')17    password = os.getenv('PASSWORD_DB')18    connection_string = f"DRIVER={{ODBC Driver 17 for SQL Server}};SERVER={server};UID={username};PWD={password}"19    return pyodbc.connect(connection_string)20 21# --------------------------------------------| CREAZIONE AZIENDA-DB |-------------------------------------------------22# Controllo se presente il Database e la tabella aziendale. Se non ci sono le creo23def crea_database_azienda(database, azienda):24    tabella = f"{azienda.upper()}transazioni"25    conn = get_db_connection()26    cursor = conn.cursor()27    # Controllo presenza DATABASE28    conn.autocommit = True29    check_db_query = f"""30    IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = '{database}')31    BEGIN32        CREATE DATABASE {database};33    END34    """35    cursor.execute(check_db_query)36    cursor.execute(f"USE {database}")37    conn.autocommit = False38    #Controllo presenza TABELLA 39    check_table_query = f"""40    IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = '{tabella}')41    BEGIN42        CREATE TABLE dbo.{tabella} (43            id INT IDENTITY(1,1) PRIMARY KEY,44            datreg DATETIME NOT NULL,45            azione VARCHAR(255) NOT NULL,46            id_transazione VARCHAR(50) NOT NULL,47            jsonCompleto NVARCHAR(MAX) NOT NULL48        );49    END50    """51    cursor.execute(check_table_query)52    conn.commit()53    cursor.close()54    conn.close()55 56# ------------------------------------------------| POST |--------------------------------------------------57# Inizio transazione (questo endpoint viene chiamato dal RENTRI come CALLBACK per il PUSH Request)58@app.post("/{azione}/{versione}/{database}/{azienda}/start")59async def receive_post(request: Request, azione: str, versione :str, database: str, azienda: str):60    data = await request.json()61    print(json.dumps(data, indent=3))62    #conn = get_db_connection()63    #cursor = conn.cursor()64    #crea_database_azienda(database, azienda)65    #insert_query = f"INSERT INTO [{database}].dbo.{azienda}transazioni (datreg, azione, id_transazione, JsonCompleto) VALUES (?, ?, ?, ?)"66    #cursor.execute(insert_query, (datetime.now(), azione, data.get('transazione_id'), json.dumps(data)))67    #conn.commit()68    #cursor.close()69    #conn.close()70    return JSONResponse(content={"message": "Received", "data": data})  71 72# ------------------------------------------------| GET |-----------------------------------------------------73# Result/Status transazione (Questo endpoint viene chiamato da AdHoc per leggere il risultato della transazione) /dati-registri/v1.0/id_transazione/STATUS/Azienda74@app.get("/{azione}/{versione}/{database}/{azienda}/{id_transazione}/{tipo}")75async def get_status(azione: str, versione: str, id_transazione: str, tipo: str, database: str, azienda: str):76    print('{"message": "OK"}')77    return '{"message": "OK"}'78    #conn = get_db_connection()79    #cursor = conn.cursor()80    #select_query = f"SELECT TOP 1 JsonCompleto FROM [{database}].dbo.{azienda}transazioni WHERE azione = ? AND id_transazione = ? order by id desc"81    #cursor.execute(select_query, (azione, id_transazione))82    #row = cursor.fetchone()83    #cursor.close()84    #conn.close()85    # STATUS: Restituisce 303 se esiste la riga della transazione (cioè se per il rentri è terminata)86    #if tipo == "status": 87    #    if not row:88    #        raise HTTPException(status_code=200, detail="Transazione non terminata")89    #    else:90    #        raise HTTPException(status_code=303, detail="Transazione terminata")91    # RESULT: Restituisce 303 se esiste la riga della transazione (cioè se per il rentri è terminata)92    #elif tipo == "result": 93    #    if not row:94    #        raise HTTPException(status_code=404, detail="Transazione non terminata")95    #    else: 96    #        result = json.loads(row.JsonCompleto)97    #        return JSONResponse(content=result)98    #else:99    #    raise HTTPException(status_code=404, detail="Endpoint non trovato")100 101@app.get("/")102def read_general(): 103    return {"response": "Benvenuto. Per maggiori info: https://matteoscript-RentriWebServer.hf.space/docs"}