From a2f9f1ded21422efdbcad8cb5b94a7075df6ff09 Mon Sep 17 00:00:00 2001 From: Yoan VALLET <ext.sopra.yvallet@grandlyon.com> Date: Wed, 16 Sep 2020 09:43:23 +0200 Subject: [PATCH] feat: review time period model --- .../IndicatorContainerSwitcher.tsx | 4 +- .../MultiFluidIndicatorsContainer.tsx | 20 +++---- .../SingleFluidIndicatorsContainer.tsx | 17 +++--- .../ContentComponents/Charts/BarChart.tsx | 4 +- .../ContentComponents/Charts/Hash.tsx | 9 +-- .../FluidChart/FluidChartContent.tsx | 12 ++-- .../FluidChart/FluidChartSlide.tsx | 4 +- .../FluidChart/FluidChartSwipe.tsx | 4 +- src/models/index.ts | 1 + src/models/timePeriod.model.ts | 6 ++ .../consumptionDataFormatterService.ts | 7 ++- src/services/consumptionDataManagerService.ts | 22 +++---- .../consumptionDataValidatorService.ts | 11 ++-- src/services/dataConsumptionContracts.ts | 16 ++--- src/services/dateChart.service.ts | 59 ++++++++++--------- src/services/queryRunner.service.ts | 21 +++---- src/services/timePeriod.service.ts | 19 +++--- src/targets/services/monthlyReport.ts | 22 +++---- src/utils/date.ts | 5 +- 19 files changed, 136 insertions(+), 127 deletions(-) create mode 100644 src/models/timePeriod.model.ts diff --git a/src/components/ContainerComponents/IndicatorsContainer/IndicatorContainerSwitcher.tsx b/src/components/ContainerComponents/IndicatorsContainer/IndicatorContainerSwitcher.tsx index 541b05a2d..f46a45ad2 100644 --- a/src/components/ContainerComponents/IndicatorsContainer/IndicatorContainerSwitcher.tsx +++ b/src/components/ContainerComponents/IndicatorsContainer/IndicatorContainerSwitcher.tsx @@ -3,8 +3,8 @@ import { AppContext } from 'components/Contexts/AppContextProvider' import { TimeStep, IPerformanceIndicator, - ITimePeriod, } from 'services/dataConsumptionContracts' +import { TimePeriod } from 'models' import { convertDateByTimeStep } from 'utils/date' import ConfigService from 'services/fluidConfig.service' import FluidPerformanceIndicator from 'components/ContentComponents/PerformanceIndicator/FluidPerformanceIndicator' @@ -13,7 +13,7 @@ import KonnectorViewer from 'components/ContentComponents/KonnectorViewer/Konnec interface IndicatorContainerSwitcherProps { performanceIndicators: IPerformanceIndicator[] timeStep: TimeStep - comparisonTimePeriod: ITimePeriod | null + comparisonTimePeriod: TimePeriod | null } const IndicatorContainerSwitcher: React.FC<IndicatorContainerSwitcherProps> = ({ diff --git a/src/components/ContainerComponents/IndicatorsContainer/MultiFluidIndicatorsContainer.tsx b/src/components/ContainerComponents/IndicatorsContainer/MultiFluidIndicatorsContainer.tsx index 5f5cd0241..1751cb852 100644 --- a/src/components/ContainerComponents/IndicatorsContainer/MultiFluidIndicatorsContainer.tsx +++ b/src/components/ContainerComponents/IndicatorsContainer/MultiFluidIndicatorsContainer.tsx @@ -1,17 +1,18 @@ import React, { useEffect, useContext, useState } from 'react' +import { withClient, Client } from 'cozy-client' +import { translate } from 'cozy-ui/react/I18n' import { AppContext } from 'components/Contexts/AppContextProvider' import { TimeStep, IPerformanceIndicator, - ITimePeriod, } from 'services/dataConsumptionContracts' -import { withClient, Client } from 'cozy-client' -import PerformanceIndicator from 'components/ContentComponents/PerformanceIndicator/PerformanceIndicator' -import IndicatorContainerSwitcher from 'components/ContainerComponents/IndicatorsContainer/IndicatorContainerSwitcher' +import { TimePeriod } from 'models' import TimePeriodService from 'services/timePeriod.service' import ConsumptionDataManager from 'services/consumptionDataManagerService' import PerformanceIndicatorService from 'services/performanceIndicator.service' -import { translate } from 'cozy-ui/react/I18n' +import PerformanceIndicator from 'components/ContentComponents/PerformanceIndicator/PerformanceIndicator' +import IndicatorContainerSwitcher from 'components/ContainerComponents/IndicatorsContainer/IndicatorContainerSwitcher' + import { convertDateByTimeStep } from 'utils/date' interface MultiFluidIndicatorsContainerProps { @@ -32,14 +33,13 @@ const MultiFluidIndicatorsContainer: React.FC<MultiFluidIndicatorsContainerProps IPerformanceIndicator[] >([]) - const [ - currentTimePeriod, - setCurrentTimePeriod, - ] = useState<ITimePeriod | null>(null) + const [currentTimePeriod, setCurrentTimePeriod] = useState<TimePeriod | null>( + null + ) const [ comparisonTimePeriod, setComparisonTimePeriod, - ] = useState<ITimePeriod | null>(null) + ] = useState<TimePeriod | null>(null) const [isLoaded, setIsLoaded] = useState<boolean>(false) useEffect(() => { diff --git a/src/components/ContainerComponents/IndicatorsContainer/SingleFluidIndicatorsContainer.tsx b/src/components/ContainerComponents/IndicatorsContainer/SingleFluidIndicatorsContainer.tsx index 93992ebde..166bb7770 100644 --- a/src/components/ContainerComponents/IndicatorsContainer/SingleFluidIndicatorsContainer.tsx +++ b/src/components/ContainerComponents/IndicatorsContainer/SingleFluidIndicatorsContainer.tsx @@ -1,17 +1,17 @@ import React, { useEffect, useContext, useState } from 'react' +import { withClient, Client } from 'cozy-client' +import { translate } from 'cozy-ui/react/I18n' import { AppContext } from 'components/Contexts/AppContextProvider' import { TimeStep, IPerformanceIndicator, - ITimePeriod, } from 'services/dataConsumptionContracts' +import { TimePeriod } from 'models' import { FluidType } from 'enum/fluid.enum' -import { withClient, Client } from 'cozy-client' -import PerformanceIndicator from 'components/ContentComponents/PerformanceIndicator/PerformanceIndicator' import TimePeriodService from 'services/timePeriod.service' import ConsumptionDataManager from 'services/consumptionDataManagerService' import PerformanceIndicatorService from 'services/performanceIndicator.service' -import { translate } from 'cozy-ui/react/I18n' +import PerformanceIndicator from 'components/ContentComponents/PerformanceIndicator/PerformanceIndicator' import { convertDateByTimeStep } from 'utils/date' import RedirectionMiniCard from 'components/ContentComponents/Card/RedirectionMiniCard' @@ -36,14 +36,13 @@ const SingleFluidIndicatorsContainer: React.FC<SingleFluidIndicatorsContainerPro const [performanceIndicators, setPerformanceIndicators] = useState< IPerformanceIndicator[] >([]) - const [ - currentTimePeriod, - setCurrentTimePeriod, - ] = useState<ITimePeriod | null>(null) + const [currentTimePeriod, setCurrentTimePeriod] = useState<TimePeriod | null>( + null + ) const [ comparisonTimePeriod, setComparisonTimePeriod, - ] = useState<ITimePeriod | null>(null) + ] = useState<TimePeriod | null>(null) const filteredFluidTypes = allConfiguredFluidTypes.filter( fluidType => fluidType !== fluidTypes[0] ) diff --git a/src/components/ContentComponents/Charts/BarChart.tsx b/src/components/ContentComponents/Charts/BarChart.tsx index 15921e1bd..5eff410e2 100644 --- a/src/components/ContentComponents/Charts/BarChart.tsx +++ b/src/components/ContentComponents/Charts/BarChart.tsx @@ -4,8 +4,8 @@ import { IDataload, IChartData, TimeStep, - ITimePeriod, } from 'services/dataConsumptionContracts' +import { TimePeriod } from 'models' import { FluidType } from 'enum/fluid.enum' import Bar from 'components/ContentComponents/Charts/Bar' import Hash from 'components/ContentComponents/Charts/Hash' @@ -21,7 +21,7 @@ export interface BarChartProps { multiFluid: boolean selectedDate: DateTime showCompare: boolean - challengePeriod: ITimePeriod | null + challengePeriod: TimePeriod | null handleClickData: ( dataload: IDataload, compareDataload: IDataload | null diff --git a/src/components/ContentComponents/Charts/Hash.tsx b/src/components/ContentComponents/Charts/Hash.tsx index 4ae28cc1d..56946db9b 100644 --- a/src/components/ContentComponents/Charts/Hash.tsx +++ b/src/components/ContentComponents/Charts/Hash.tsx @@ -1,15 +1,12 @@ import React, { useState, useEffect } from 'react' import { ScaleBand } from 'd3-scale' -import { - ITimePeriod, - IChartData, - TimeStep, -} from 'services/dataConsumptionContracts' +import { IChartData, TimeStep } from 'services/dataConsumptionContracts' +import { TimePeriod } from 'models' import { DateTime } from 'luxon' import DateChartService from 'services/dateChart.service' interface HashProps { - challengePeriod: ITimePeriod | null + challengePeriod: TimePeriod | null multiFluid: boolean xScale: ScaleBand<string> padding: number diff --git a/src/components/ContentComponents/FluidChart/FluidChartContent.tsx b/src/components/ContentComponents/FluidChart/FluidChartContent.tsx index 5ef068dbe..fca6a2496 100644 --- a/src/components/ContentComponents/FluidChart/FluidChartContent.tsx +++ b/src/components/ContentComponents/FluidChart/FluidChartContent.tsx @@ -5,9 +5,8 @@ import { IConsumptionDataManager, IDataload, TimeStep, - ITimePeriod, - TimePeriod, } from 'services/dataConsumptionContracts' +import { TimePeriod } from 'models' import DateChartService from 'services/dateChart.service' import { UserChallenge } from 'services/dataChallengeContracts' import { FluidType } from 'enum/fluid.enum' @@ -62,11 +61,12 @@ const FluidChartContent: React.FC<FluidChartContentProps> = ({ pathname: `challenges/ongoing`, state: { challenge: currentChallenge }, } - const challengePeriod: ITimePeriod | null = - currentChallenge && + const challengePeriod: TimePeriod | null = currentChallenge && currentChallenge.startingDate && - currentChallenge.endingDate && - new TimePeriod(currentChallenge.startingDate, currentChallenge.endingDate) + currentChallenge.endingDate && { + startDate: currentChallenge.startingDate, + endDate: currentChallenge.endingDate, + } const handleChangeIndex = (index: number) => { const dateChartService = new DateChartService() const date = diff --git a/src/components/ContentComponents/FluidChart/FluidChartSlide.tsx b/src/components/ContentComponents/FluidChart/FluidChartSlide.tsx index 3d1cbc2fa..823ea3768 100644 --- a/src/components/ContentComponents/FluidChart/FluidChartSlide.tsx +++ b/src/components/ContentComponents/FluidChart/FluidChartSlide.tsx @@ -6,8 +6,8 @@ import { IChartData, ChartData, TimeStep, - ITimePeriod, } from 'services/dataConsumptionContracts' +import { TimePeriod } from 'models' import DateChartService from 'services/dateChart.service' import { FluidType } from 'enum/fluid.enum' @@ -25,7 +25,7 @@ interface FluidChartSlideProps { showCompare: boolean width: number height: number - challengePeriod: ITimePeriod | null + challengePeriod: TimePeriod | null handleClickData: ( dataload: IDataload, compareDataload: IDataload | null diff --git a/src/components/ContentComponents/FluidChart/FluidChartSwipe.tsx b/src/components/ContentComponents/FluidChart/FluidChartSwipe.tsx index 907446e00..8d3f48d8e 100644 --- a/src/components/ContentComponents/FluidChart/FluidChartSwipe.tsx +++ b/src/components/ContentComponents/FluidChart/FluidChartSwipe.tsx @@ -6,8 +6,8 @@ import { IConsumptionDataManager, IDataload, TimeStep, - ITimePeriod, } from 'services/dataConsumptionContracts' +import { TimePeriod } from 'models' import { FluidType } from 'enum/fluid.enum' import FluidChartSlide from 'components/ContentComponents/FluidChart/FluidChartSlide' @@ -21,7 +21,7 @@ interface FluidChartSwipeProps { selectedDate: DateTime indexDisplayed: number showCompare: boolean - challengePeriod: ITimePeriod | null + challengePeriod: TimePeriod | null handleChangeIndex: (index: number) => void handleClickData: ( dataload: IDataload, diff --git a/src/models/index.ts b/src/models/index.ts index a435215ba..6a78e606f 100644 --- a/src/models/index.ts +++ b/src/models/index.ts @@ -2,5 +2,6 @@ export * from './account.model' export * from './ecogesture.model' export * from './config.model' export * from './konnector.model' +export * from './timePeriod.model' export * from './trigger.model' export * from './userProfile.model' diff --git a/src/models/timePeriod.model.ts b/src/models/timePeriod.model.ts new file mode 100644 index 000000000..860be8c3d --- /dev/null +++ b/src/models/timePeriod.model.ts @@ -0,0 +1,6 @@ +import { DateTime } from 'luxon' + +export interface TimePeriod { + startDate: DateTime + endDate: DateTime +} diff --git a/src/services/consumptionDataFormatterService.ts b/src/services/consumptionDataFormatterService.ts index df52e3a23..22c7ad448 100644 --- a/src/services/consumptionDataFormatterService.ts +++ b/src/services/consumptionDataFormatterService.ts @@ -1,12 +1,13 @@ /* eslint-disable @typescript-eslint/interface-name-prefix */ -import { TimeStep, ITimePeriod, IDataload } from './dataConsumptionContracts' +import { TimeStep, IDataload } from './dataConsumptionContracts' +import { TimePeriod } from 'models' import { compareDates } from 'utils/date' import DateChartService from 'services/dateChart.service' export default class ConsumptionDataFormatter { public formatGraphData( data: IDataload[], - timePeriod: ITimePeriod, + timePeriod: TimePeriod, timeStep: TimeStep ): IDataload[] { data.sort((dataA, dataB) => compareDates(dataA.date, dataB.date)) @@ -20,7 +21,7 @@ export default class ConsumptionDataFormatter { private fillMissingData( data: IDataload[], - timePeriod: ITimePeriod, + timePeriod: TimePeriod, timeStep: TimeStep ): IDataload[] { const filledData = [] diff --git a/src/services/consumptionDataManagerService.ts b/src/services/consumptionDataManagerService.ts index 507063230..e9caa57f2 100644 --- a/src/services/consumptionDataManagerService.ts +++ b/src/services/consumptionDataManagerService.ts @@ -2,12 +2,12 @@ import { DateTime } from 'luxon' import { Client } from 'cozy-client' import { IConsumptionDataManager, - ITimePeriod, TimeStep, IDataload, IChartData, IPerformanceIndicator, } from 'services/dataConsumptionContracts' +import { TimePeriod } from 'models' import { FluidType } from 'enum/fluid.enum' import ConsumptionDataFormatter from 'services/consumptionDataFormatterService' import QueryRunnerService from 'services/queryRunner.service' @@ -34,10 +34,10 @@ export default class ConsumptionDataManager implements IConsumptionDataManager { } public async getGraphData( - timePeriod: ITimePeriod, + timePeriod: TimePeriod, timeStep: TimeStep, fluidTypes: FluidType[], - compareTimePeriod?: ITimePeriod, + compareTimePeriod?: TimePeriod, isHome?: boolean ): Promise<IChartData | null> { const InputisValid: boolean = this._consumptionDataValidator.ValidateGetGraphData( @@ -113,10 +113,10 @@ export default class ConsumptionDataManager implements IConsumptionDataManager { } public async getMaxLoad( - maxTimePeriod: ITimePeriod, + maxTimePeriod: TimePeriod, timeStep: TimeStep, fluidTypes: FluidType[], - compareMaxTimePeriod?: ITimePeriod, + compareMaxTimePeriod?: TimePeriod, isHome?: boolean ): Promise<number | null> { let allData @@ -146,10 +146,10 @@ export default class ConsumptionDataManager implements IConsumptionDataManager { } public async getPerformanceIndicators( - timePeriod: ITimePeriod, + timePeriod: TimePeriod, timeStep: TimeStep, fluidTypes: FluidType[], - compareTimePeriod?: ITimePeriod + compareTimePeriod?: TimePeriod ): Promise<IPerformanceIndicator[]> { //const result = {}; const performanceIndicators: IPerformanceIndicator[] = [] @@ -221,10 +221,10 @@ export default class ConsumptionDataManager implements IConsumptionDataManager { } private async fetchSingleFluidGraphData( - timePeriod: ITimePeriod, + timePeriod: TimePeriod, timeStep: TimeStep, fluidType: FluidType, - compareTimePeriod?: ITimePeriod + compareTimePeriod?: TimePeriod ): Promise<IChartData | null> { let actualData: IDataload[] | null = [] let comparisonData: IDataload[] | null = [] @@ -265,8 +265,8 @@ export default class ConsumptionDataManager implements IConsumptionDataManager { private formatGraphDataManage( data: IChartData | null, timeStep: TimeStep, - timePeriod: ITimePeriod, - compareTimePeriod: ITimePeriod | null + timePeriod: TimePeriod, + compareTimePeriod: TimePeriod | null ): IChartData | null { if (!data) return null diff --git a/src/services/consumptionDataValidatorService.ts b/src/services/consumptionDataValidatorService.ts index b5e9b8088..a894b3e13 100644 --- a/src/services/consumptionDataValidatorService.ts +++ b/src/services/consumptionDataValidatorService.ts @@ -1,13 +1,14 @@ -import { ITimePeriod, TimeStep } from './dataConsumptionContracts' +import { TimeStep } from './dataConsumptionContracts' +import { TimePeriod } from 'models' import { FluidType } from 'enum/fluid.enum' import { Interval } from 'luxon' export default class ConsumptionDataValidator { public ValidateGetGraphData( - timePeriod: ITimePeriod, + timePeriod: TimePeriod, timeStep: TimeStep, fluidTypes: FluidType[], - compareTimePeriod?: ITimePeriod + compareTimePeriod?: TimePeriod ): boolean { if (fluidTypes.length === 0) return false if (!this.ValidateTimePeriod(timePeriod)) return false @@ -34,7 +35,7 @@ export default class ConsumptionDataValidator { } private ValidateTimePeriodLength( - timePeriod: ITimePeriod, + timePeriod: TimePeriod, timeStep: TimeStep ): boolean { const interval = Interval.fromDateTimes( @@ -50,7 +51,7 @@ export default class ConsumptionDataValidator { return true } - private ValidateTimePeriod(timePeriod: ITimePeriod): boolean { + private ValidateTimePeriod(timePeriod: TimePeriod): boolean { return timePeriod.endDate >= timePeriod.startDate } } diff --git a/src/services/dataConsumptionContracts.ts b/src/services/dataConsumptionContracts.ts index 9bd1b234b..f814290eb 100644 --- a/src/services/dataConsumptionContracts.ts +++ b/src/services/dataConsumptionContracts.ts @@ -44,12 +44,12 @@ export class ChartData implements IChartData { } } -export interface ITimePeriod { +export interface TimePeriod { startDate: DateTime endDate: DateTime } -export class TimePeriod implements ITimePeriod { +export class TimePeriod implements TimePeriod { startDate: DateTime endDate: DateTime @@ -70,27 +70,27 @@ export enum TimeStep { export interface IConsumptionDataManager { getGraphData( - timePeriod: ITimePeriod, + timePeriod: TimePeriod, timeStep: TimeStep, fluidTypes: FluidType[], - compareTimePeriod?: ITimePeriod, + compareTimePeriod?: TimePeriod, isHome?: boolean ): Promise<IChartData | null> getMaxLoad( - timePeriod: ITimePeriod, + timePeriod: TimePeriod, timeStep: TimeStep, fluidTypes: FluidType[], - compareTimePeriod?: ITimePeriod, + compareTimePeriod?: TimePeriod, isHome?: boolean ): Promise<number | null> fetchLastDateData(fluidType: FluidType[]): Promise<DateTime | null> getPerformanceIndicators( - timePeriod: ITimePeriod, + timePeriod: TimePeriod, timeStep: TimeStep, fluidTypes: FluidType[], - compareTimePeriod?: ITimePeriod + compareTimePeriod?: TimePeriod ): Promise<IPerformanceIndicator[]> } diff --git a/src/services/dateChart.service.ts b/src/services/dateChart.service.ts index d66d6e78f..539e534a6 100644 --- a/src/services/dateChart.service.ts +++ b/src/services/dateChart.service.ts @@ -1,10 +1,7 @@ import { DateTime, Interval } from 'luxon' import { FluidType } from 'enum/fluid.enum' -import { - TimeStep, - TimePeriod, - IDataload, -} from 'services/dataConsumptionContracts' +import { TimeStep, IDataload } from 'services/dataConsumptionContracts' +import { TimePeriod } from 'models' export default class DateChartService { public defineTimePeriod( @@ -23,10 +20,10 @@ export default class DateChartService { second: 0, millisecond: 0, }) - return new TimePeriod( - date.plus({ years: -5 * index - (5 - 1) }), - date.plus({ years: -5 * index }) - ) + return { + startDate: date.plus({ years: -5 * index - (5 - 1) }), + endDate: date.plus({ years: -5 * index }), + } case TimeStep.MONTH: date = referenceDate.set({ month: 12, @@ -36,18 +33,18 @@ export default class DateChartService { second: 0, millisecond: 0, }) - return new TimePeriod( - date.plus({ months: -12 * index - (12 - 1) }), - date.plus({ months: -12 * index }) - ) + return { + startDate: date.plus({ months: -12 * index - (12 - 1) }), + endDate: date.plus({ months: -12 * index }), + } case TimeStep.DAY: date = referenceDate .endOf('week') .set({ hour: 0, minute: 0, second: 0, millisecond: 0 }) - return new TimePeriod( - date.plus({ days: -7 * index - (7 - 1) }), - date.plus({ days: -7 * index }) - ) + return { + startDate: date.plus({ days: -7 * index - (7 - 1) }), + endDate: date.plus({ days: -7 * index }), + } case TimeStep.HOUR: date = referenceDate.set({ hour: 23, @@ -55,22 +52,26 @@ export default class DateChartService { second: 0, millisecond: 0, }) - return new TimePeriod( - date.set({ hour: 0, minute: 0 }).plus({ days: -1 * index }), - date.plus({ days: -1 * index }) - ) + return { + startDate: date + .set({ hour: 0, minute: 0 }) + .plus({ days: -1 * index }), + endDate: date.plus({ days: -1 * index }), + } case TimeStep.HALF_AN_HOUR: date = referenceDate.set({ hour: 23, minute: 30 }) - return new TimePeriod( - date.set({ hour: 0, minute: 0 }).plus({ days: -1 * index }), - date.plus({ days: -1 * index }) - ) + return { + startDate: date + .set({ hour: 0, minute: 0 }) + .plus({ days: -1 * index }), + endDate: date.plus({ days: -1 * index }), + } default: date = referenceDate - return new TimePeriod( - date.plus({ days: -7 * index - (7 - 1) }), - date.plus({ days: -7 * index }) - ) + return { + startDate: date.plus({ days: -7 * index - (7 - 1) }), + endDate: date.plus({ days: -7 * index }), + } } } diff --git a/src/services/queryRunner.service.ts b/src/services/queryRunner.service.ts index 17cfd4ebc..54072901a 100644 --- a/src/services/queryRunner.service.ts +++ b/src/services/queryRunner.service.ts @@ -13,8 +13,9 @@ import { ENEDIS_MINUTE_DOCTYPE, GRDF_HOUR_DOCTYPE, } from 'doctypes' +import { TimePeriod } from 'models' import { FluidType } from 'enum/fluid.enum' -import { TimeStep, ITimePeriod, IDataload } from './dataConsumptionContracts' +import { TimeStep, IDataload } from './dataConsumptionContracts' export default class QueryRunner { // TODO to be clean up @@ -61,7 +62,7 @@ export default class QueryRunner { } public async fetchFluidData( - timePeriod: ITimePeriod, + timePeriod: TimePeriod, timeStep: TimeStep, fluidType: FluidType ): Promise<IDataload[] | null> { @@ -80,7 +81,7 @@ export default class QueryRunner { } public async fetchFluidMaxData( - maxTimePeriod: ITimePeriod, + maxTimePeriod: TimePeriod, timeStep: TimeStep, fluidType: FluidType ): Promise<number | null> { @@ -159,7 +160,7 @@ export default class QueryRunner { return result } - private filterDataList(data, timePeriod: ITimePeriod) { + private filterDataList(data, timePeriod: TimePeriod) { const filteredResult = data.data.filter(entry => this.withinDateBoundaries( DateTime.local( @@ -191,7 +192,7 @@ export default class QueryRunner { private buildListQuery( timeStep: TimeStep, - timePeriod: ITimePeriod, + timePeriod: TimePeriod, fluidType: FluidType, limit: number ) { @@ -205,7 +206,7 @@ export default class QueryRunner { private buildMaxQuery( timeStep: TimeStep, - maxTimePeriod: ITimePeriod, + maxTimePeriod: TimePeriod, fluidType: FluidType, limit: number ) { @@ -224,11 +225,11 @@ export default class QueryRunner { .sortBy([{ load: 'desc' }]) } - private withinDateBoundaries(dateTime: DateTime, timePeriod: ITimePeriod) { + private withinDateBoundaries(dateTime: DateTime, timePeriod: TimePeriod) { return dateTime <= timePeriod.endDate && dateTime >= timePeriod.startDate } - private getInBetweenMonths(timePeriod: ITimePeriod) { + private getInBetweenMonths(timePeriod: TimePeriod) { const intervalCount = Interval.fromDateTimes( timePeriod.startDate, timePeriod.endDate @@ -249,7 +250,7 @@ export default class QueryRunner { return monthList } - private getInBetweenDays(timePeriod: ITimePeriod) { + private getInBetweenDays(timePeriod: TimePeriod) { const intervalCount = Interval.fromDateTimes( timePeriod.startDate, timePeriod.endDate @@ -281,7 +282,7 @@ export default class QueryRunner { .limitBy(limit) } - private getPredicate(timePeriod: ITimePeriod, timeStep: TimeStep) { + private getPredicate(timePeriod: TimePeriod, timeStep: TimeStep) { let predicate = {} switch (timeStep) { diff --git a/src/services/timePeriod.service.ts b/src/services/timePeriod.service.ts index bb4438d1c..d3689498c 100644 --- a/src/services/timePeriod.service.ts +++ b/src/services/timePeriod.service.ts @@ -1,6 +1,7 @@ import { DateTime } from 'luxon' import { FluidType } from 'enum/fluid.enum' -import { ITimePeriod, TimeStep } from './dataConsumptionContracts' +import { TimePeriod } from 'models' +import { TimeStep } from './dataConsumptionContracts' import ConfigService from 'services/fluidConfig.service' export default class TimePeriodService { @@ -9,8 +10,8 @@ export default class TimePeriodService { fluidTypes: FluidType[], timeStep: TimeStep ): { - timePeriod: ITimePeriod - comparisonTimePeriod: ITimePeriod + timePeriod: TimePeriod + comparisonTimePeriod: TimePeriod } { const endOfOffsetDate = this.applyOffsetToDate( date, @@ -27,11 +28,11 @@ export default class TimePeriodService { timeStep ).endOf('day') - const timePeriod: ITimePeriod = this.getLastCompletePeriod( + const timePeriod: TimePeriod = this.getLastCompletePeriod( lastDayOfCompletePeriod, timeStep ) - const comparisonTimePeriod: ITimePeriod = this.getComparisonTimePeriod( + const comparisonTimePeriod: TimePeriod = this.getComparisonTimePeriod( timePeriod, timeStep ) @@ -136,7 +137,7 @@ export default class TimePeriodService { public getLastCompletePeriod( lastDay: DateTime, timeStep: TimeStep - ): ITimePeriod { + ): TimePeriod { // calculate last day of the tobe coimpleted period const lastCompleteTimePeriod = { startDate: this.getStartDateFromEndDateByTimeStep(lastDay, timeStep), @@ -146,9 +147,9 @@ export default class TimePeriodService { } public getComparisonTimePeriod( - timePeriod: ITimePeriod, + timePeriod: TimePeriod, timeStep: TimeStep - ): ITimePeriod { + ): TimePeriod { let comparisonTimePeriodStartDate: DateTime let comparisonTimePeriodEndDate: DateTime @@ -196,7 +197,7 @@ export default class TimePeriodService { comparisonTimePeriodEndDate = timePeriod.endDate } - const comparisonTimePeriod: ITimePeriod = { + const comparisonTimePeriod: TimePeriod = { startDate: comparisonTimePeriodStartDate, endDate: comparisonTimePeriodEndDate, } diff --git a/src/targets/services/monthlyReport.ts b/src/targets/services/monthlyReport.ts index 1fb27090e..2901efcd4 100644 --- a/src/targets/services/monthlyReport.ts +++ b/src/targets/services/monthlyReport.ts @@ -4,7 +4,7 @@ import get from 'lodash/get' import { DateTime } from 'luxon' import { runService } from './service' import { createEmail } from './createEmail' -import { TimePeriod } from 'services/dataConsumptionContracts' +import { TimePeriod } from 'models' import UserProfileService from 'services/userProfile.service' import ConsumptionDataManager from 'services/consumptionDataManagerService' import PerformanceIndicatorService from 'services/performanceIndicator.service' @@ -47,30 +47,30 @@ const monthlyReport = async ({ client }: MonthlyReportProps) => { } // Define period for the mail - const period = new TimePeriod( - DateTime.local() + const period: TimePeriod = { + startDate: DateTime.local() .minus({ months: 1, }) .startOf('month'), - DateTime.local() + endDate: DateTime.local() .minus({ months: 1, }) - .endOf('month') - ) - const comparePeriod = new TimePeriod( - DateTime.local() + .endOf('month'), + } + const comparePeriod: TimePeriod = { + startDate: DateTime.local() .minus({ months: 2, }) .startOf('month'), - DateTime.local() + endDate: DateTime.local() .minus({ months: 2, }) - .endOf('month') - ) + .endOf('month'), + } periodLabel = `${period.startDate.setLocale('fr').toFormat('LLL yyyy')}` // Retrieve performance for the concerned period diff --git a/src/utils/date.ts b/src/utils/date.ts index aac28530c..49052ad0b 100644 --- a/src/utils/date.ts +++ b/src/utils/date.ts @@ -1,5 +1,6 @@ import { DateTime } from 'luxon' -import { ITimePeriod, TimeStep } from '../services/dataConsumptionContracts' +import { TimeStep } from '../services/dataConsumptionContracts' +import { TimePeriod } from 'models' import { UserChallenge } from 'services/dataChallengeContracts' export function compareDates(dateA: DateTime, dateB: DateTime) { @@ -20,7 +21,7 @@ export const formatCompareChallengeDate = (challenge: UserChallenge) => { } export const convertDateByTimeStep = ( - timeperiod: ITimePeriod | null, + timeperiod: TimePeriod | null, timeStep: TimeStep, header = false ): string => { -- GitLab