Skip to content
Snippets Groups Projects
dataConsumptionContracts.ts 1.89 KiB
Newer Older
  • Learn to ignore specific revisions
  • Hugo NOUTS's avatar
    Hugo NOUTS committed
    /* eslint-disable @typescript-eslint/interface-name-prefix */
    import { DateTime } from 'luxon'
    
    import { FluidType } from 'enum/fluid.enum'
    //import _ from 'lodash'
    
    export interface IDataload {
      date: DateTime
      value: number
      valueDetail?: number[] | null
    }
    
    export interface IPerformanceIndicator {
      value: number | null
      compareValue: number | null
      percentageVariation: number | null
    }
    
    class Dataload implements IDataload {
      date: DateTime
      value: number
      valueDetail?: number[]
    
      constructor(date: DateTime, value: number, valueDetail?: number[]) {
        this.date = date
        this.value = value
        this.valueDetail = valueDetail
      }
    }
    
    export interface IChartData {
      actualData: IDataload[]
      comparisonData: IDataload[] | null
    }
    
    export class ChartData implements IChartData {
      actualData: IDataload[]
      comparisonData: IDataload[] | null
    
      constructor(actualData: IDataload[], comparisonData?: IDataload[]) {
        this.actualData = actualData
        if (comparisonData) this.comparisonData = comparisonData
        else this.comparisonData = null
      }
    }
    
    export interface ITimePeriod {
      startDate: DateTime
      endDate: DateTime
    }
    
    export class TimePeriod implements ITimePeriod {
      startDate: DateTime
      endDate: DateTime
    
      constructor(startDate: DateTime, endDate: DateTime) {
        this.startDate = startDate
        this.endDate = endDate
      }
    }
    
    export enum TimeStep {
      HALF_AN_HOUR = 10,
      HOUR = 15,
      DAY = 20,
      WEEK = 30,
      MONTH = 40,
      YEAR = 50,
    }
    
    export interface IConsumptionDataManager {
      getGraphData(
        timePeriod: ITimePeriod,
        timeStep: TimeStep,
        fluidTypes: FluidType[],
        compareTimePeriod?: ITimePeriod
      ): Promise<IChartData | null>
    
      fetchLastDateData(fluidType: FluidType[]): Promise<DateTime | null>
    
      getPerformanceIndicators(
        timePeriod: ITimePeriod,
        timeStep: TimeStep,
        fluidTypes: FluidType[],
        compareTimePeriod?: ITimePeriod
      ): Promise<IPerformanceIndicator[]>
    }