Skip to content
Snippets Groups Projects
Commit f8150a19 authored by Yoan VALLET's avatar Yoan VALLET
Browse files

feat: add connection information to fluidStatus

parent c7067574
No related branches found
No related tags found
1 merge request!167Features/review connection
...@@ -7,7 +7,7 @@ import StyledButton from 'components/CommonKit/Button/StyledButton' ...@@ -7,7 +7,7 @@ import StyledButton from 'components/CommonKit/Button/StyledButton'
import StyledStopButton from 'components/CommonKit/Button/StyledStopButton' import StyledStopButton from 'components/CommonKit/Button/StyledStopButton'
import { Redirect } from 'react-router-dom' import { Redirect } from 'react-router-dom'
import { FluidType } from 'enum/fluid.enum' import { FluidState, FluidType } from 'enum/fluid.enum'
import { FluidStatus } from 'models' import { FluidStatus } from 'models'
import './oldFluidDataModal.scss' import './oldFluidDataModal.scss'
interface OldFluidDataModalProps { interface OldFluidDataModalProps {
...@@ -32,7 +32,7 @@ const OldFluidDataModal: React.FC<OldFluidDataModalProps> = ({ ...@@ -32,7 +32,7 @@ const OldFluidDataModal: React.FC<OldFluidDataModalProps> = ({
fluidStatus && fluidStatus &&
fluidStatus.length > 0 && fluidStatus.length > 0 &&
fluidStatus.forEach(fluid => { fluidStatus.forEach(fluid => {
if (fluid.status === 'errored') { if (fluid.status === FluidState.ERRORED) {
!erroredKonnectors.includes(fluid.fluidType) && !erroredKonnectors.includes(fluid.fluidType) &&
erroredKonnectors.push(fluid.fluidType) erroredKonnectors.push(fluid.fluidType)
} }
......
...@@ -4,3 +4,11 @@ export enum FluidType { ...@@ -4,3 +4,11 @@ export enum FluidType {
GAS = 2, GAS = 2,
MULTIFLUID = 3, MULTIFLUID = 3,
} }
export enum FluidState {
NO_KONNECTOR = 0,
NOT_CONNECTED = 1,
LOGIN_FAILED = 100,
DONE = 200,
ERRORED = 300,
}
import { DateTime } from 'luxon' import { DateTime } from 'luxon'
import { FluidType } from 'enum/fluid.enum' import { FluidState, FluidType } from 'enum/fluid.enum'
import { Konnector, Trigger, Account } from 'models'
interface FluidConnection {
type: string
slug: string
isConnectionOnGoing: boolean
konnector: Konnector | null
account: Account | null
trigger: Trigger | null
}
export interface FluidStatus { export interface FluidStatus {
fluidType: FluidType fluidType: FluidType
status: string | null status: FluidState
lastDataDate: DateTime | null lastDataDate: DateTime | null
connection: FluidConnection
} }
import { FluidType } from 'enum/fluid.enum' import { FluidState, FluidType } from 'enum/fluid.enum'
import { Client } from 'cozy-client' import { Client } from 'cozy-client'
import { FluidStatus } from 'models' import { Account, FluidStatus, Konnector, Trigger, TriggerState } from 'models'
import ConfigService from 'services/fluidConfig.service' import ConfigService from 'services/fluidConfig.service'
import KonnectorService from 'services/konnector.service' import KonnectorService from 'services/konnector.service'
import ConsumptionService from 'services/consumption.service' import ConsumptionService from 'services/consumption.service'
import AccountService from 'services/account.service' import AccountService from 'services/account.service'
import TriggerService from 'services/triggers.service' import TriggerService from 'services/triggers.service'
import { DateTime } from 'luxon'
export default class FluidService { export default class FluidService {
private _client: Client private _client: Client
...@@ -15,10 +16,36 @@ export default class FluidService { ...@@ -15,10 +16,36 @@ export default class FluidService {
this._client = _client this._client = _client
} }
private parseFluidStatus = (
konnector: Konnector | null,
state: TriggerState | null
): FluidState => {
if (konnector) {
if (state) {
switch (state.status) {
case 'done':
return FluidState.DONE
case 'errored':
return FluidState.ERRORED
default:
return FluidState.NOT_CONNECTED
}
} else {
return FluidState.NOT_CONNECTED
}
} else {
return FluidState.NO_KONNECTOR
}
}
public getFluidStatus = async (): Promise<FluidStatus[]> => { public getFluidStatus = async (): Promise<FluidStatus[]> => {
const fluidConfig = new ConfigService().getFluidConfig() const fluidConfig = new ConfigService().getFluidConfig()
const accountService = new AccountService(this._client) const accountService = new AccountService(this._client)
const [elecAccount, gasAccount, waterAccount] = await Promise.all([ const [
elecAccount,
gasAccount,
waterAccount,
]: (Account | null)[] = await Promise.all([
accountService.getAccountByType( accountService.getAccountByType(
fluidConfig[FluidType.ELECTRICITY].konnectorConfig.slug fluidConfig[FluidType.ELECTRICITY].konnectorConfig.slug
), ),
...@@ -30,7 +57,11 @@ export default class FluidService { ...@@ -30,7 +57,11 @@ export default class FluidService {
), ),
]) ])
const konnectorService = new KonnectorService(this._client) const konnectorService = new KonnectorService(this._client)
const [elecKonnector, gasKonnector, waterKonnector] = await Promise.all([ const [
elecKonnector,
gasKonnector,
waterKonnector,
]: (Konnector | null)[] = await Promise.all([
konnectorService.getKonnector( konnectorService.getKonnector(
fluidConfig[FluidType.ELECTRICITY].konnectorConfig.slug fluidConfig[FluidType.ELECTRICITY].konnectorConfig.slug
), ),
...@@ -42,7 +73,11 @@ export default class FluidService { ...@@ -42,7 +73,11 @@ export default class FluidService {
), ),
]) ])
const triggerService = new TriggerService(this._client) const triggerService = new TriggerService(this._client)
const [elecTrigger, waterTrigger, gasTrigger] = await Promise.all([ const [
elecTrigger,
waterTrigger,
gasTrigger,
]: (Trigger | null)[] = await Promise.all([
elecAccount && elecKonnector elecAccount && elecKonnector
? triggerService.getTrigger(elecAccount, elecKonnector) ? triggerService.getTrigger(elecAccount, elecKonnector)
: null, : null,
...@@ -58,32 +93,53 @@ export default class FluidService { ...@@ -58,32 +93,53 @@ export default class FluidService {
elecStatus, elecStatus,
waterStatus, waterStatus,
gasStatus, gasStatus,
lastDataDates, ]: (TriggerState | null)[] = await Promise.all([
] = await Promise.all([
elecTrigger ? triggerService.fetchTriggerState(elecTrigger) : null, elecTrigger ? triggerService.fetchTriggerState(elecTrigger) : null,
waterTrigger ? triggerService.fetchTriggerState(waterTrigger) : null, waterTrigger ? triggerService.fetchTriggerState(waterTrigger) : null,
gasTrigger ? triggerService.fetchTriggerState(gasTrigger) : null, gasTrigger ? triggerService.fetchTriggerState(gasTrigger) : null,
consumptionService.fetchAllLastDateData([
FluidType.ELECTRICITY,
FluidType.WATER,
FluidType.GAS,
]),
]) ])
const lastDataDates: (DateTime | null)[] = await consumptionService.fetchAllLastDateData(
[FluidType.ELECTRICITY, FluidType.WATER, FluidType.GAS]
)
const result: FluidStatus[] = [ const result: FluidStatus[] = [
{ {
fluidType: FluidType.ELECTRICITY, fluidType: FluidType.ELECTRICITY,
status: elecStatus ? elecStatus.status : null, status: this.parseFluidStatus(elecKonnector, elecStatus),
lastDataDate: lastDataDates[FluidType.ELECTRICITY], lastDataDate: lastDataDates[FluidType.ELECTRICITY],
connection: {
type: fluidConfig[FluidType.ELECTRICITY].konnectorConfig.type,
slug: fluidConfig[FluidType.ELECTRICITY].konnectorConfig.slug,
isConnectionOnGoing: false,
konnector: elecKonnector,
account: elecAccount,
trigger: elecTrigger,
},
}, },
{ {
fluidType: FluidType.WATER, fluidType: FluidType.WATER,
status: waterStatus ? waterStatus.status : null, status: this.parseFluidStatus(waterKonnector, waterStatus),
lastDataDate: lastDataDates[FluidType.WATER], lastDataDate: lastDataDates[FluidType.WATER],
connection: {
type: fluidConfig[FluidType.WATER].konnectorConfig.type,
slug: fluidConfig[FluidType.WATER].konnectorConfig.slug,
isConnectionOnGoing: false,
konnector: waterKonnector,
account: waterAccount,
trigger: waterTrigger,
},
}, },
{ {
fluidType: FluidType.GAS, fluidType: FluidType.GAS,
status: gasStatus ? gasStatus.status : null, status: this.parseFluidStatus(gasKonnector, gasStatus),
lastDataDate: lastDataDates[FluidType.GAS], lastDataDate: lastDataDates[FluidType.GAS],
connection: {
type: fluidConfig[FluidType.GAS].konnectorConfig.type,
slug: fluidConfig[FluidType.GAS].konnectorConfig.slug,
isConnectionOnGoing: false,
konnector: gasKonnector,
account: gasAccount,
trigger: gasTrigger,
},
}, },
] ]
return result return result
......
...@@ -8,7 +8,7 @@ import { ...@@ -8,7 +8,7 @@ import {
} from 'store/global/global.actions' } from 'store/global/global.actions'
import { FluidStatus, GlobalState } from 'models' import { FluidStatus, GlobalState } from 'models'
import { ScreenType } from 'enum/screen.enum' import { ScreenType } from 'enum/screen.enum'
import { FluidType } from 'enum/fluid.enum' import { FluidState, FluidType } from 'enum/fluid.enum'
const initialState: GlobalState = { const initialState: GlobalState = {
screenType: ScreenType.MOBILE, screenType: ScreenType.MOBILE,
...@@ -17,18 +17,42 @@ const initialState: GlobalState = { ...@@ -17,18 +17,42 @@ const initialState: GlobalState = {
fluidStatus: [ fluidStatus: [
{ {
fluidType: FluidType.ELECTRICITY, fluidType: FluidType.ELECTRICITY,
status: null, status: FluidState.NO_KONNECTOR,
lastDataDate: null, lastDataDate: null,
connection: {
type: '',
slug: '',
isConnectionOnGoing: false,
konnector: null,
account: null,
trigger: null,
},
}, },
{ {
fluidType: FluidType.WATER, fluidType: FluidType.WATER,
status: null, status: FluidState.NO_KONNECTOR,
lastDataDate: null, lastDataDate: null,
connection: {
type: '',
slug: '',
isConnectionOnGoing: false,
konnector: null,
account: null,
trigger: null,
},
}, },
{ {
fluidType: FluidType.GAS, fluidType: FluidType.GAS,
status: null, status: FluidState.NO_KONNECTOR,
lastDataDate: null, lastDataDate: null,
connection: {
type: '',
slug: '',
isConnectionOnGoing: false,
konnector: null,
account: null,
trigger: null,
},
}, },
], ],
fluidTypes: [], fluidTypes: [],
...@@ -37,7 +61,10 @@ const initialState: GlobalState = { ...@@ -37,7 +61,10 @@ const initialState: GlobalState = {
const getFluidTypesFromStatus = (fluidStatus: FluidStatus[]): FluidType[] => { const getFluidTypesFromStatus = (fluidStatus: FluidStatus[]): FluidType[] => {
const fluidTypes: FluidType[] = [] const fluidTypes: FluidType[] = []
fluidStatus.forEach(fluid => { fluidStatus.forEach(fluid => {
if (fluid.status) { if (
fluid.status !== FluidState.NOT_CONNECTED &&
fluid.status !== FluidState.NEVER_RAN
) {
fluidTypes.push(fluid.fluidType) fluidTypes.push(fluid.fluidType)
} }
}) })
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment