File size: 4,629 Bytes
2efccc9
5d26a98
739823d
2efccc9
 
 
 
d707be1
2efccc9
b916cdf
c53513a
2efccc9
 
 
 
 
 
 
 
2cd7197
2efccc9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91e849f
2efccc9
 
 
 
 
91e849f
2efccc9
 
 
 
 
 
 
 
 
 
 
f7205b4
373f340
712433f
 
 
 
 
 
 
 
2efccc9
 
 
 
 
 
712433f
 
 
 
 
 
 
 
 
2efccc9
712433f
 
 
 
 
2efccc9
712433f
 
 
 
 
 
 
 
6159237
c550535
7a4300a
f7205b4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
from fastapi import FastAPI, Request, HTTPException
from fastapi.responses import JSONResponse
import json
from datetime import datetime
import pyodbc
import os
from dotenv import load_dotenv

load_dotenv()
app = FastAPI()

# --------------------------------------------| CONNESSIONE DB |-------------------------------------------------
# Connessione al DB Web (Amazon RDS)
def get_db_connection():
    server = os.getenv('SERVER_DB')
    username = os.getenv('USERNAME_DB')
    password = os.getenv('PASSWORD_DB')
    connection_string = f"DRIVER={{ODBC Driver 17 for SQL Server}};SERVER={server};UID={username};PWD={password}"
    return pyodbc.connect(connection_string)

# --------------------------------------------| CREAZIONE AZIENDA-DB |-------------------------------------------------
# Controllo se presente il Database e la tabella aziendale. Se non ci sono le creo
def crea_database_azienda(database, azienda):
    tabella = f"{azienda.upper()}transazioni"
    conn = get_db_connection()
    cursor = conn.cursor()
    # Controllo presenza DATABASE
    conn.autocommit = True
    check_db_query = f"""
    IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = '{database}')
    BEGIN
        CREATE DATABASE {database};
    END
    """
    cursor.execute(check_db_query)
    cursor.execute(f"USE {database}")
    conn.autocommit = False
    #Controllo presenza TABELLA 
    check_table_query = f"""
    IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = '{tabella}')
    BEGIN
        CREATE TABLE dbo.{tabella} (
            id INT IDENTITY(1,1) PRIMARY KEY,
            datreg DATETIME NOT NULL,
            azione VARCHAR(255) NOT NULL,
            id_transazione VARCHAR(50) NOT NULL,
            jsonCompleto NVARCHAR(MAX) NOT NULL
        );
    END
    """
    cursor.execute(check_table_query)
    conn.commit()
    cursor.close()
    conn.close()

# ------------------------------------------------| POST |--------------------------------------------------
# Inizio transazione (questo endpoint viene chiamato dal RENTRI come CALLBACK per il PUSH Request)
@app.post("/{azione}/{versione}/{database}/{azienda}/start")
async def receive_post(request: Request, azione: str, versione :str, database: str, azienda: str):
    data = await request.json()
    print(json.dumps(data, indent=3))
    #conn = get_db_connection()
    #cursor = conn.cursor()
    #crea_database_azienda(database, azienda)
    #insert_query = f"INSERT INTO [{database}].dbo.{azienda}transazioni (datreg, azione, id_transazione, JsonCompleto) VALUES (?, ?, ?, ?)"
    #cursor.execute(insert_query, (datetime.now(), azione, data.get('transazione_id'), json.dumps(data)))
    #conn.commit()
    #cursor.close()
    #conn.close()
    return JSONResponse(content={"message": "Received", "data": data})  

# ------------------------------------------------| GET |-----------------------------------------------------
# Result/Status transazione (Questo endpoint viene chiamato da AdHoc per leggere il risultato della transazione) /dati-registri/v1.0/id_transazione/STATUS/Azienda
@app.get("/{azione}/{versione}/{database}/{azienda}/{id_transazione}/{tipo}")
async def get_status(azione: str, versione: str, id_transazione: str, tipo: str, database: str, azienda: str):
    print('{"message": "OK"}')
    return '{"message": "OK"}'
    #conn = get_db_connection()
    #cursor = conn.cursor()
    #select_query = f"SELECT TOP 1 JsonCompleto FROM [{database}].dbo.{azienda}transazioni WHERE azione = ? AND id_transazione = ? order by id desc"
    #cursor.execute(select_query, (azione, id_transazione))
    #row = cursor.fetchone()
    #cursor.close()
    #conn.close()
    # STATUS: Restituisce 303 se esiste la riga della transazione (cioè se per il rentri è terminata)
    #if tipo == "status": 
    #    if not row:
    #        raise HTTPException(status_code=200, detail="Transazione non terminata")
    #    else:
    #        raise HTTPException(status_code=303, detail="Transazione terminata")
    # RESULT: Restituisce 303 se esiste la riga della transazione (cioè se per il rentri è terminata)
    #elif tipo == "result": 
    #    if not row:
    #        raise HTTPException(status_code=404, detail="Transazione non terminata")
    #    else: 
    #        result = json.loads(row.JsonCompleto)
    #        return JSONResponse(content=result)
    #else:
    #    raise HTTPException(status_code=404, detail="Endpoint non trovato")

@app.get("/")
def read_general(): 
    return {"response": "Benvenuto. Per maggiori info: https://matteoscript-RentriWebServer.hf.space/docs"}