Skip to content

Commit

Permalink
feat(origin-device-registry-irec-local-api): irec service refactoring…
Browse files Browse the repository at this point in the history
…, mock service separated
  • Loading branch information
ioncreature committed Jun 23, 2021
1 parent a73fcd2 commit ca1d53c
Show file tree
Hide file tree
Showing 13 changed files with 310 additions and 170 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Injectable } from '@nestjs/common';
import { Inject, Injectable } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule';
import { CommandBus, EventBus, QueryBus } from '@nestjs/cqrs';
import {
Expand All @@ -7,12 +7,13 @@ import {
ApproveCertificationRequestCommand
} from '@energyweb/issuer-irec-api';
import { IssuanceStatus } from '@energyweb/issuer-irec-api-wrapper';
import { IrecService } from '@energyweb/origin-organization-irec-api';
import { IREC_SERVICE, IrecService } from '@energyweb/origin-organization-irec-api';

@Injectable()
export class CheckCertificateStateTask {
constructor(
private readonly commandBus: CommandBus,
@Inject(IREC_SERVICE)
private readonly irecService: IrecService,
private readonly eventBus: EventBus,
private readonly queryBus: QueryBus
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';

import { DeviceModule } from './device';

@Module({
imports: [DeviceModule]
imports: [ScheduleModule.forRoot(), DeviceModule]
})
export class AppModule {}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Injectable } from '@nestjs/common';
import { Inject, Injectable } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule';
import { CommandBus, EventBus } from '@nestjs/cqrs';
import { IrecService } from '@energyweb/origin-organization-irec-api';
import { IREC_SERVICE, IrecService } from '@energyweb/origin-organization-irec-api';
import { DeviceService } from '../device.service';
import { DeviceStatusChangedEvent } from '../events';

Expand All @@ -10,6 +10,7 @@ export class CheckDeviceStateTask {
constructor(
private readonly commandBus: CommandBus,
private readonly deviceService: DeviceService,
@Inject(IREC_SERVICE)
private readonly irecService: IrecService,
private readonly eventBus: EventBus
) {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { CqrsModule } from '@nestjs/cqrs';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule } from '@nestjs/config';
import { PassportModule } from '@nestjs/passport';
import { ScheduleModule } from '@nestjs/schedule';

import {
ConnectionModule,
Expand All @@ -20,7 +19,6 @@ import { CheckDeviceStateTask } from './cron';

@Module({
imports: [
ScheduleModule.forRoot(),
TypeOrmModule.forFeature([Device]),
CqrsModule,
ConfigModule,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm';
import {
BadRequestException,
ConflictException,
Inject,
Injectable,
NotFoundException
} from '@nestjs/common';
Expand All @@ -16,7 +17,7 @@ import {
} from '@energyweb/issuer-irec-api-wrapper';
import { ILoggedInUser } from '@energyweb/origin-backend-core';
import { UserService } from '@energyweb/origin-backend';
import { IrecService } from '@energyweb/origin-organization-irec-api';
import { IREC_SERVICE, IrecService } from '@energyweb/origin-organization-irec-api';

import { Device } from './device.entity';
import { CodeNameDTO, CreateDeviceDTO, ImportIrecDeviceDTO, UpdateDeviceDTO } from './dto';
Expand All @@ -30,6 +31,7 @@ export class DeviceService {
private readonly repository: Repository<Device>,
private readonly eventBus: EventBus,
private readonly configService: ConfigService,
@Inject(IREC_SERVICE)
private readonly irecService: IrecService,
private readonly userService: UserService
) {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,16 @@ import { Module } from '@nestjs/common';
import { RegistrationModule } from './registration';
import { ConnectionModule } from './connection';
import { BeneficiaryModule } from './beneficiary';
import { ScheduleModule } from '@nestjs/schedule';
import { IrecModule } from './irec';

@Module({
imports: [BeneficiaryModule, ConnectionModule, RegistrationModule]
imports: [
ScheduleModule.forRoot(),
BeneficiaryModule,
ConnectionModule,
RegistrationModule,
IrecModule
]
})
export class AppModule {}
Original file line number Diff line number Diff line change
@@ -1,20 +1,21 @@
import { Repository } from 'typeorm';
import { CommandBus, CommandHandler, ICommandHandler } from '@nestjs/cqrs';
import { InjectRepository } from '@nestjs/typeorm';
import { Inject } from '@nestjs/common';
import { UserService } from '@energyweb/origin-backend';

import { IrecService } from '../../irec';
import { CreateBeneficiaryCommand } from '../commands/create-beneficiary.command';
import { IREC_SERVICE, IrecService } from '../../irec';
import { Beneficiary } from '../beneficiary.entity';
import { BeneficiaryDTO } from '../dto/beneficiary.dto';
import { GetBeneficiaryCommand } from '../commands';
import { CreateBeneficiaryCommand, GetBeneficiaryCommand } from '../commands';

@CommandHandler(CreateBeneficiaryCommand)
export class CreateBeneficiaryHandler implements ICommandHandler<CreateBeneficiaryCommand> {
constructor(
@InjectRepository(Beneficiary)
private readonly repository: Repository<Beneficiary>,
private readonly userService: UserService,
@Inject(IREC_SERVICE)
private readonly irecService: IrecService,
private readonly commandBus: CommandBus
) {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import { CqrsModule } from '@nestjs/cqrs';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ConfigModule } from '@nestjs/config';
import { PassportModule } from '@nestjs/passport';
import { ScheduleModule } from '@nestjs/schedule';

import { RegistrationModule } from '../registration';
import { IrecModule, IrecService } from '../irec';
Expand All @@ -14,7 +13,6 @@ import { RefreshAllTokensTask } from './cron';

@Module({
imports: [
ScheduleModule.forRoot(),
TypeOrmModule.forFeature([Connection]),
ConfigModule,
CqrsModule,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { Repository } from 'typeorm';
import { CommandHandler, EventBus, ICommandHandler } from '@nestjs/cqrs';
import { InjectRepository } from '@nestjs/typeorm';
import { BadRequestException } from '@nestjs/common';
import { BadRequestException, Inject } from '@nestjs/common';

import { RegistrationService } from '../../registration';
import { IrecService } from '../../irec';
import { IREC_SERVICE, IrecService } from '../../irec';
import { CreateConnectionCommand } from '../commands';
import { ConnectionDTO } from '../dto';
import { ConnectionCreatedEvent } from '../events';
Expand All @@ -17,6 +17,7 @@ export class CreateConnectionHandler implements ICommandHandler<CreateConnection
private readonly repository: Repository<Connection>,
private readonly registrationService: RegistrationService,
private readonly eventBus: EventBus,
@Inject(IREC_SERVICE)
private readonly irecService: IrecService
) {}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
import { Injectable } from '@nestjs/common';

import {
AccessTokens,
Account,
AccountType,
Beneficiary,
BeneficiaryUpdateParams,
Device,
Device as IrecDevice,
DeviceCreateParams,
DeviceState,
DeviceUpdateParams,
IssuanceStatus,
Issue,
IssueWithStatus
} from '@energyweb/issuer-irec-api-wrapper';
import { ILoggedInUser, IPublicOrganization } from '@energyweb/origin-backend-core';

import { ReadStream } from 'fs';
import { CreateConnectionDTO } from './dto';
import { IIrecService } from './irec.service';

export type UserIdentifier = ILoggedInUser | string | number;

@Injectable()
export class IrecMockService implements IIrecService {
isIrecIntegrationEnabled(): boolean {
return false;
}

async login({
userName,
password,
clientId,
clientSecret
}: CreateConnectionDTO): Promise<AccessTokens> {
return {
expiryDate: new Date(),
accessToken: 'someAccessToken',
refreshToken: 'someRefreshToken'
};
}

async createBeneficiary(
user: UserIdentifier,
organization: IPublicOrganization
): Promise<Beneficiary> {
return {
id: 1,
name: organization.name,
countryCode: organization.country,
location: `${organization.city}, ${organization.address}`,
active: true
};
}

async updateBeneficiary(
user: UserIdentifier,
beneficiaryId: number,
params: BeneficiaryUpdateParams
): Promise<Beneficiary> {
return {
id: 1,
name: 'Test Corp',
countryCode: 'GB',
location: `Manchester, Lennon street`,
active: params.active
};
}

async createDevice(user: UserIdentifier, deviceData: DeviceCreateParams): Promise<IrecDevice> {
return {
...deviceData,
status: DeviceState.InProgress,
code: ''
};
}

async updateDevice(
user: UserIdentifier,
code: string,
device: DeviceUpdateParams
): Promise<IrecDevice> {
return {
...device,
status: DeviceState.InProgress,
code
} as IrecDevice;
}

async getDevice(user: UserIdentifier, code: string): Promise<Device> {
return {
address: '1 Wind Farm Avenue, London',
capacity: 500,
commissioningDate: new Date('2001-08-10'),
countryCode: 'GB',
defaultAccount: 'someTradeAccount',
deviceType: 'TC110',
fuelType: 'ES200',
issuer: 'someIssuerCode',
latitude: '53.405088',
longitude: '-1.744222',
name: 'DeviceXYZ',
notes: 'Lorem ipsum dolor sit amet',
registrantOrganization: 'someRegistrantCode',
registrationDate: new Date('2001-09-20'),
status: DeviceState.Approved,
code: 'mockDeviceCode',
active: true
};
}

async getDevices(user: UserIdentifier): Promise<IrecDevice[]> {
return [
{
address: '1 Wind Farm Avenue, London',
capacity: 500,
commissioningDate: new Date('2001-08-10'),
countryCode: 'GB',
defaultAccount: 'someTradeAccount',
deviceType: 'TC110',
fuelType: 'ES200',
issuer: 'someIssuerCode',
latitude: '53.405088',
longitude: '-1.744222',
name: 'DeviceXYZ',
notes: 'Lorem ipsum dolor sit amet',
registrantOrganization: 'someRegistrantCode',
registrationDate: new Date('2001-09-20'),
status: DeviceState.Approved,
code: 'mockDeviceCode',
active: true
}
];
}

async getAccountInfo(user: UserIdentifier): Promise<Account[]> {
return [
{
code: 'TEST001',
details: {
name: 'Some new revision',
private: false,
restricted: false,
active: true,
notes: 'Some test'
},
type: AccountType.Trade
},
{
code: 'TESTREDEMPTIONACCOUNT',
details: {
name: 'Test Account Details 001',
private: false,
restricted: false,
active: true,
notes: 'Some test notes'
},
type: AccountType.Redemption
}
];
}

async getTradeAccountCode(user: UserIdentifier): Promise<string> {
const accounts = await this.getAccountInfo(user);
return accounts.find((account: Account) => account.type === AccountType.Trade)?.code || '';
}

async createIssueRequest(user: UserIdentifier, issue: Issue): Promise<IssueWithStatus> {
return {
...issue,
status: IssuanceStatus.InProgress,
code: 'somecode'
};
}

async updateIssueRequest(
user: UserIdentifier,
code: string,
issue: Issue
): Promise<IssueWithStatus> {
return {
...issue,
status: IssuanceStatus.InProgress,
code
} as IssueWithStatus;
}

async getIssueRequest(user: UserIdentifier, code: string): Promise<IssueWithStatus> {
return {
device: 'TESTDEVICE1',
fuelType: 'ES200',
recipient: 'SOMEORG',
start: new Date(),
end: new Date(),
production: 1000000,
notes: '',
code: '100500',
status: IssuanceStatus.Approved
};
}

async uploadFiles(user: UserIdentifier, files: Buffer[] | Blob[] | ReadStream[]) {
return files.map(() => ((Math.random() * 1e9) | 0).toString(16));
}
}
Loading

0 comments on commit ca1d53c

Please sign in to comment.