diff --git a/src/main/scala/server/Main.scala b/src/main/scala/server/Main.scala index 7714fc1..b5ef801 100644 --- a/src/main/scala/server/Main.scala +++ b/src/main/scala/server/Main.scala @@ -6,6 +6,7 @@ import fetch.{FetchService, FileNameService} object Main extends IOApp { def run(args: List[String]): IO[ExitCode] = { + // TODO looks like fetchTask fails server if no csv on meteo server val fetchTask = FileNameService.generateCurrentHour.flatMap(FetchService.fetchSingleFile) val scheduler = Scheduler.scheduleTask(fetchTask) .evalMap { case (name, content) => diff --git a/src/main/scala/server/Server.scala b/src/main/scala/server/Server.scala index 8cce7f9..7b862ba 100644 --- a/src/main/scala/server/Server.scala +++ b/src/main/scala/server/Server.scala @@ -51,7 +51,8 @@ object Server { (fetchErrors, successDownloads) = fetchResult.partitionMap(identity) saveResults <- successDownloads.traverse { case (name, content) => DBService.save(name, content) } (saveErrors, successSaves) = saveResults.partitionMap(identity) - successes = successDownloads.map(s => s"fetched: ${s._1}") ++ successSaves.map(s => s"saved: $s") +// successes = successDownloads.map(s => s"fetched: ${s._1}") ++ successSaves.map(s => s"saved: $s") + successes = successSaves errors = fetchServiceError ++ fetchErrors.map(e => s"FetchError: ${e.getMessage}") ++ saveErrors.map(e => s"SaveError: ${e.getMessage}") _ <- IO.println(s"errors: $errors") _ <- IO.println(s"successes: $successes") diff --git a/web/src/App.tsx b/web/src/App.tsx index 10b293d..27d98e2 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -10,7 +10,7 @@ console.log("api host:", import.meta.env.VITE_API_HOST); type Section = "aggregator" | "fileManager"; const App: Component = () => { - const [getSection, setSection] = createSignal
("aggregator"); + const [getSection, setSection] = createSignal
("fileManager"); const section = () => getSection() === "aggregator" ? : ; diff --git a/web/src/fileManager/FetchFiles.tsx b/web/src/fileManager/FetchFiles.tsx new file mode 100644 index 0000000..9ca178c --- /dev/null +++ b/web/src/fileManager/FetchFiles.tsx @@ -0,0 +1,72 @@ +import moment from "moment"; +import { createSignal } from "solid-js"; +import { apiHost } from "../consts"; + +export function FetchFiles() { + const [getStart, setStart] = createSignal(new Date()); + const [getEnd, setEnd] = createSignal(new Date()); + const [getFetchResult, setFetchResult] = createSignal(""); + const [isSpinner, setIsSpinner] = createSignal(false); + + const startStr = () => moment(getStart()).format("YYYY-MM-DD"); + const endStr = () => moment(getEnd()).format("YYYY-MM-DD"); + + function handleSubmit(e: MouseEvent) { + e.preventDefault(); + const dates = getDatesBetween(getStart(), getEnd()); + timerFetch(dates); + } + + async function timerFetch(dates: Date[]) { + setIsSpinner(true); + for (const date of dates) { + const response = await fetch(`${apiHost}/api/fetch/date/${moment(date).format("YYYYMMDD")}`); + const text = await response.text(); + setFetchResult(text); + await new Promise(resolve => setTimeout(resolve, 200)); + } + setIsSpinner(false); + } + + return ( +
+

Date range fetch

+

+ setStart(new Date(e.target.value))} + /> start +

+

+ setEnd(new Date(e.target.value))} + /> end +

+

+ +

+

result:

+ { isSpinner() &&
+ + Fetching csv files +
+ } +

{ getFetchResult() }

+
+ ) +} + +function getDatesBetween(startDate: Date, endDate: Date): Date[] { + const dates: Date[] = []; + let currentDate = new Date(startDate); // start from the start date + + while (currentDate <= endDate) { + dates.push(new Date(currentDate)); // add current date to the list + currentDate.setDate(currentDate.getDate() + 1); // increment the date + } + + return dates; +} \ No newline at end of file diff --git a/web/src/fileManager/FileManager.tsx b/web/src/fileManager/FileManager.tsx index 81b490d..54c3257 100644 --- a/web/src/fileManager/FileManager.tsx +++ b/web/src/fileManager/FileManager.tsx @@ -1,6 +1,7 @@ import { createSignal } from "solid-js"; import "../css/FileManager.css" import { DateList } from "./DateList"; +import { FetchFiles } from "./FetchFiles"; import { FileContent } from "./FileContent"; import { FileNameList } from "./FileNameList"; @@ -13,6 +14,7 @@ export function FileManager() {

File manager

+