import boto3 import json import math import asyncio import random from datetime import datetime from fastapi import APIRouter, Depends from backend.app.dependencies import validate_token from backend.app.plan.schemas import PlanTriggerRequest from backend.app.config import get_settings from sqlalchemy.orm import sessionmaker from utils.logger import setup_logger from backend.app.db.connection import db_engine from backend.app.db.functions.recommendations_functions import create_scenario import pandas as pd from backend.app.whlg.schema import WHLGElligibilityRequest from utils.s3 import read_csv_from_s3 from sqlalchemy.dialects.postgresql import insert from backend.app.db.connection import get_db_session from backend.app.db.models.whlg import Whlg from backend.app.db.functions.whlg_functions import upsert_whlg_postcode logger = setup_logger() if get_settings().ENVIRONMENT == "local": router = APIRouter( prefix="/whlg", tags=["whlg"], ) else: router = APIRouter( prefix="/whlg", tags=["whlg"], dependencies=[Depends(validate_token)], responses={404: {"description": "Not found"}} ) @router.get("/") async def whlg_entrypoint(): # body needs to include postcode, UPRN [task ID?] # # Refer to the plan trigger route for code # 1) Create an event schema and store it in the schemas file # 2) Build the tasks functions # 3) Read in the funding csx. This can be found as such: # whlg_eligible_postcodes = read_csv_from_s3( # bucket_name=get_settings().DATA_BUCKET, # filepath="funding/whlg eligible postcodes.csv", # ) # whlg_eligible_postcodes = pd.DataFrame(whlg_eligible_postcodes) # Check the postcode against this file # We need to store this somewhere????!!!??!??!?!?!?!??!??!??!??!??!??!??!??!??!??! Create a new table! # Update subtask to be complete # Once this is complete, build the logs stuff, add the cloudwatch logs ID to the database return {"hello": "from whlg"} @router.post("/eligible") async def eligiable(body: WHLGElligibilityRequest): postcode = body.postcode or "" postcode = postcode.lower().replace(" ", "") whlg_eligible_postcodes = read_csv_from_s3( bucket_name=get_settings().DATA_BUCKET, filepath="funding/whlg eligible postcodes.csv", ) whlg_eligible_postcodes = pd.DataFrame(whlg_eligible_postcodes) whlg_eligible_postcodes['Postcode'] = whlg_eligible_postcodes['Postcode'].str.replace(' ', '', regex=False) is_eligible = postcode in whlg_eligible_postcodes['Postcode'].values return {"whlg_eligible": is_eligible}