# from fastapi import FastAPI # from qgis.core import QgsVectorLayer # from qgis_bootstrap import start_qgis # app = FastAPI() # # Start QGIS headless # qgs = start_qgis() # @app.get("/") # def root(): # return {"status": "QGIS API Ready"} # @app.get("/extent") # def extent(): # layer = QgsVectorLayer("data/exmpl.geojson", "jalan", "ogr") # if not layer.isValid(): # return {"error": "Layer tidak valid"} # ext = layer.extent() # return { # "xmin": ext.xMinimum(), # "ymin": ext.yMinimum(), # "xmax": ext.xMaximum(), # "ymax": ext.yMaximum(), # } from fastapi import FastAPI, BackgroundTasks from qgis_bootstrap import start_qgis # from cleansing_service import load_layer, cleansing_layer from full_cleansing_service import load_layer, cleansing_layer app = FastAPI() qgs = start_qgis() @app.get("/") def root(): return {"status": "QGIS Cleansing API Running"} @app.get("/clean/{table_name}") def clean_table(table_name: str): layer = load_layer(table_name) if not layer.isValid(): return {"error": f"Table '{table_name}' tidak valid atau tidak ditemukan."} print(layer) result = cleansing_layer(layer) summary = result["summary"] return { "table": table_name, "summary": summary, "message": "Cleansing selesai" } @app.post("/process/{table_name}") def process_table(table_name: str, background: BackgroundTasks): background.add_task(run_clean_table, table_name) return {"status": "ACCEPTED", "table": table_name} def run_clean_table(table_name: str): print(f"\n=== Mulai cleansing untuk tabel: {table_name} ===") layer = load_layer(table_name) if not layer.isValid(): print(f"[ERROR] Table '{table_name}' tidak valid atau tidak ditemukan.") return print("[OK] Layer valid, mulai cleansing...") result = cleansing_layer(layer) summary = result["summary"] clean_layer = result["clean_layer"] print("\n=== RINGKASAN CLEANSING ===") for k, v in summary.items(): print(f"{k}: {v}") # TODO: save back ke PostGIS # save_to_postgis(clean_layer, table_name) print(f"=== Cleansing selesai untuk tabel: {table_name} ===\n")