From d24a340c15efa784dfc74da6e37dd89093b193c7 Mon Sep 17 00:00:00 2001 From: "lucas.oskorep" Date: Mon, 10 Jul 2023 21:21:41 -0400 Subject: [PATCH] adding next.js app which calls the fastAPI AND displays date in the app. --- mta-sign-ui/components/header.tsx | 7 ++++--- mta-sign-ui/next.config.js | 22 +++++++++++----------- mta-sign-ui/services/api/mta-server.ts | 11 ----------- mta-sign-ui/services/mta-api/mta-server.ts | 19 +++++++++++++++++++ mta-sign-ui/services/mta-api/types.ts | 7 +++++++ server.py | 9 +++++---- 6 files changed, 46 insertions(+), 29 deletions(-) delete mode 100644 mta-sign-ui/services/api/mta-server.ts create mode 100644 mta-sign-ui/services/mta-api/mta-server.ts create mode 100644 mta-sign-ui/services/mta-api/types.ts diff --git a/mta-sign-ui/components/header.tsx b/mta-sign-ui/components/header.tsx index b187bb5..2077671 100644 --- a/mta-sign-ui/components/header.tsx +++ b/mta-sign-ui/components/header.tsx @@ -1,16 +1,17 @@ 'use client' import React, {useEffect, useState} from 'react'; -import {fetchStationData} from "@/services/api/mta-server"; +import {fetchStartDate} from "@/services/mta-api/mta-server"; +import {MtaStartTime} from "@/services/mta-api/types"; const TitleBar = () => { - const [data, setData] = useState(null); + const [data, setData] = useState(null); useEffect(() => { const fetchData = async () => { try { console.log("CALLING API") - const mtaData = await fetchStationData([""]) + const mtaData = await fetchStartDate([""]) setData( mtaData) } catch (error) { diff --git a/mta-sign-ui/next.config.js b/mta-sign-ui/next.config.js index 9a1fb6f..8af75b0 100644 --- a/mta-sign-ui/next.config.js +++ b/mta-sign-ui/next.config.js @@ -1,16 +1,16 @@ /** @type {import('next').NextConfig} */ const nextConfig = { - // rewrites: async () => { - // return [ - // { - // source: '/api/:path*', - // destination: - // process.env.NODE_ENV === 'development' - // ? 'http://127.0.0.1:8000/api/:path*' - // : '/api/', - // }, - // ] - // }, + rewrites: async () => { + return [ + { + source: '/api/:path*', + destination: + process.env.NODE_ENV === 'development' + ? 'http://127.0.0.1:8000/api/:path*' + : '/api/', + }, + ] + }, } module.exports = nextConfig diff --git a/mta-sign-ui/services/api/mta-server.ts b/mta-sign-ui/services/api/mta-server.ts deleted file mode 100644 index b6af02f..0000000 --- a/mta-sign-ui/services/api/mta-server.ts +++ /dev/null @@ -1,11 +0,0 @@ -export type MtaData = { - mtaData: any; -}; - -export const fetchStationData = async (stations:[string]):Promise => { - const res = await fetch("") - const data = await res.json() - return { - mtaData: data - }; -}; \ No newline at end of file diff --git a/mta-sign-ui/services/mta-api/mta-server.ts b/mta-sign-ui/services/mta-api/mta-server.ts new file mode 100644 index 0000000..ac4dc8f --- /dev/null +++ b/mta-sign-ui/services/mta-api/mta-server.ts @@ -0,0 +1,19 @@ +import {MtaData, MtaStartTime} from "@/services/mta-api/types"; + +export const fetchStationData = async (stations: [string]): Promise => { + const res = await fetch("/api/mta_data", {method: "POST"}) + const data = await res.json() + return { + mtaData: data + }; +}; + + +export const fetchStartDate = async (stations: [string]): Promise => { + const res = await fetch("/api/start_time", {method: "POST"}) + const data = await res.text() + const date = new Date(data.replaceAll("\"", "")) + return { + startTime: date + }; +}; \ No newline at end of file diff --git a/mta-sign-ui/services/mta-api/types.ts b/mta-sign-ui/services/mta-api/types.ts new file mode 100644 index 0000000..fc9b450 --- /dev/null +++ b/mta-sign-ui/services/mta-api/types.ts @@ -0,0 +1,7 @@ +export interface MtaData { + mtaData: any; +}; + +export interface MtaStartTime { + startTime: Date +} \ No newline at end of file diff --git a/server.py b/server.py index e46ee54..b2e4c18 100644 --- a/server.py +++ b/server.py @@ -9,6 +9,7 @@ from fastapi_utils.tasks import repeat_every # import pandas as pd from dotenv import load_dotenv +from starlette.responses import JSONResponse from mta_manager import MTA, Feed, Route @@ -26,8 +27,8 @@ app.add_middleware( logger = logging.getLogger(__name__) # the __name__ resolve to "main" since we are at the root of the project. -start_time = datetime.now().strftime("%d/%m/%Y %H:%M:%S") -last_updated = datetime.now().strftime("%d/%m/%Y %H:%M:%S") +start_time = datetime.now() +last_updated = datetime.now() mtaController = MTA( api_key, @@ -40,7 +41,7 @@ STATION_STOP_IDs = ["127S", "127N", "A27N", "A27S"] @app.post("/api/start_time") def get_start_time(): - return start_time + return start_time.isoformat() @app.post("/api/mta_data") async def get_mta_data(): @@ -53,7 +54,7 @@ async def get_mta_data(): arrival_times = mtaController.get_arrival_times(route, stop_id) if len(arrival_times) > 0: arrival_by_station_and_route[stop_id][route.value] = arrival_times - return arrival_by_station_and_route + return JSONResponse(arrival_by_station_and_route) @app.on_event("startup") @repeat_every(seconds=5)