diff --git a/src/components/ContainerComponents/IndicatorsContainer/IndicatorContainerSwitcher.tsx b/src/components/ContainerComponents/IndicatorsContainer/IndicatorContainerSwitcher.tsx index 541b05a2dc2fa5ca3a69ea640bb15db163c472fa..f46a45ad2bbfdf4363d7f40cb24ece5e071cf0e7 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 5f5cd02414524a88622ee09e58c5e4820aefa026..1751cb8521c39b9f1e7f258b76ffc28670a8b722 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 93992ebde713346069aa882e201f34ea493f03ab..166bb7770de7337be57986418fb1ab7d86581647 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 15921e1bddf5d9e3858557b37f8f17f460c6d609..5eff410e2d5164179c350b6a09c9dd2c89b87c1b 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 4ae28cc1dfa3d1e6a8b1c8ebe858154e5ec3c174..56946db9b72273f7b4a2c6c7906d094210cf5746 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 5ef068dbef451eac6b5c424cb961ba8679a9417c..fca6a2496e2e432e3c5781cb6bb18a26d362fcf1 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 3d1cbc2fa1c69d56e76d75f6db25afb36d22a489..823ea3768c7df2116f9dfec45a844279c7d4e869 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 907446e0080ba4190b4108ec8017f6030b295c16..8d3f48d8e2822357b116257d991e80220b90200d 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 a435215ba706c11216ac58f533357e0c5dd236b0..6a78e606f3fd859e07ca24d811464a5c90aab630 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 0000000000000000000000000000000000000000..860be8c3d70a93b8a7e0fa02e4d84427c23b6f43 --- /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 df52e3a233a5f9f90cb6cbff450835a0fd7d786e..22c7ad4481384ca3a70600043c59ae52496a2b1f 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 5070632302e5af19db6d6ca934c2c205fd350772..e9caa57f24b0c7455691b16183041e2d819a2dff 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 b5e9b8088867f40fd59044edafcb57d0f6429848..a894b3e134aa15e78809d8f35348ea830d2b488b 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 9bd1b234b225038c1f7779357aee391e1ad4f340..f814290eba471648930cd60f4beda54efe5440cf 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 d66d6e78fa47311876d4b6e0974b98122d7795a5..539e534a657da6ce998985c5ceeabadafd378480 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 17cfd4ebc19263239f55828b389a7cebe8c14b08..54072901adde0b53b24b45536824720d03ca6240 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 bb4438d1c1c37e52d3e110dadb11bc76f44e2177..d3689498c5254b75ea82f9105ea883ae5397b1a0 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 1fb27090e2c70457c3bfedb952f532fab7e7812b..2901efcd4808ce4e85ce7b1e2d04f13b84abbf79 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 aac28530cb9be702d9da5a34cc5cf169057e918e..49052ad0ba514117b303e3f886931426ad59f4c6 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 => {