Implement fetcher scaffolding

This commit is contained in:
2024-11-12 22:46:28 +01:00
parent 33e9644e1a
commit 3bc4785fdb
2 changed files with 59 additions and 0 deletions

33
src/fetcher/index.ts Normal file
View File

@@ -0,0 +1,33 @@
import dayjs, { Dayjs } from "dayjs";
import { type Tauron } from "../tauron";
import { Measurement } from "./types";
export class Fetcher {
#service: Tauron;
constructor(service: Tauron) {
this.#service = service;
}
/**
* Collects the measurements for a specific date.
* @param date - the measurement date (note, that 'todays' date may not be available at the time being when request is made)
* @returns the measurement data
*/
async fetch(date: Dayjs): Promise<Measurement> {
const monthEnd = date.endOf('month');
const endDay = monthEnd.isBefore(dayjs(), 'day') ? monthEnd : date;
const energyForDay = await this.#service.getEnergyForDay(date);
const energyForMonth = await this.#service.getEnergyForRange(date.startOf('month'), endDay);
const energyForYear = await this.#service.getEnergyForYear(date.format('YYYY'));
const reading = await this.#service.getReadingForRange(date, date);
return {
energyForDay,
energyForMonth,
energyForYear,
reading: reading?.[0],
};
}
};

26
src/fetcher/types.ts Normal file
View File

@@ -0,0 +1,26 @@
import { EnergyDTO, PowerDTO, ReadingDTO } from "../tauron";
/**
* Measurement for a specific point of time (minute, hour, max day).
*/
export type Measurement = {
/**
* Energy reading data.
*/
reading: ReadingDTO;
/**
* Energy measurements data for day range.
*/
energyForDay: EnergyDTO;
/**
* Energy measurements data for month range.
*/
energyForMonth: EnergyDTO;
/**
* Energy measurements data for year range.
*/
energyForYear: EnergyDTO;
};