Skip to content

Commit

Permalink
Merge pull request #28 from IndustryFusion/feature/task-004-03-add_co…
Browse files Browse the repository at this point in the history
…pyright

added region_code fetch
  • Loading branch information
LahariMIBS authored Oct 3, 2024
2 parents 2bd4330 + ba35bcc commit a597718
Show file tree
Hide file tree
Showing 13 changed files with 359 additions and 97 deletions.
12 changes: 10 additions & 2 deletions backend/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ import { RegionSchema, Region } from 'src/schemas/region.schema';
import { ServerSchema, Server } from 'src/schemas/server.schema';
import { UrnSchema, Urn } from 'src/schemas/urn.schema';
import { UserSchema, User } from 'src/schemas/user.schema';
import { Contract, ContractSchema } from './schemas/contract.schema';
import { Binding, BindingSchema } from './schemas/binding.schema';
import { ScriptController } from './endpoints/script/script.controller';
import { ScriptService } from './endpoints/script/script.service';
import { AssetController } from './endpoints/asset/asset.controller';
Expand All @@ -42,6 +44,8 @@ import { UserController } from './endpoints/user/user.controller';
import { UserService } from './endpoints/user/user.service';
import { CertificateController } from './endpoints/certificate/certificate.controller';
import { CertificateService } from './endpoints/certificate/certificate.service';
import { ContractController } from './endpoints/contract/contract.controller';
import { ContractService } from './endpoints/contract/contract.service';

dotenv.config();
const mongoURI = process.env.MONGO_URL;
Expand All @@ -63,6 +67,8 @@ const mongoURI = process.env.MONGO_URL;
{ name: Server.name, schema: ServerSchema },
{ name: Urn.name, schema: UrnSchema },
{ name: User.name, schema: UserSchema },
{ name: Contract.name, schema: ContractSchema },
{ name: Binding.name, schema: BindingSchema }
]),
],
controllers: [
Expand All @@ -72,7 +78,8 @@ const mongoURI = process.env.MONGO_URL;
GatewayController,
CompanyController,
UserController,
CertificateController
CertificateController,
ContractController
],
providers: [
AppService,
Expand All @@ -81,7 +88,8 @@ const mongoURI = process.env.MONGO_URL;
GatewayService,
CompanyService,
UserService,
CertificateService
CertificateService,
ContractService
],
})
export class AppModule {}
11 changes: 10 additions & 1 deletion backend/src/endpoints/asset/asset.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import { Urn } from 'src/schemas/urn.schema';
import { Asset } from 'src/schemas/asset.schema';
import { ObjectSubType } from 'src/schemas/objectSubType.schema';
import { ObjectType } from 'src/schemas/objectType.schema';
import { Region } from 'src/schemas/region.schema';
import { v5 as uuidv5, validate as uuidValidate } from 'uuid';
import * as moment from 'moment';

Expand All @@ -34,7 +35,9 @@ export class AssetService {
@InjectModel(ObjectSubType.name)
private objectSubTypeModel: Model<ObjectSubType>,
@InjectModel(ObjectType.name)
private ObjectTypeModel: Model<ObjectType>
private ObjectTypeModel: Model<ObjectType>,
@InjectModel(Region.name)
private regionModel: Model<Region>
) {}
private readonly ifricId = process.env.IFRIC_NAMESPACE;

Expand All @@ -47,6 +50,12 @@ export class AssetService {
let response = await this.assetModel.find({machine_serial_number: data.machine_serial_number});
if(!(response.length > 0)){
let uuid = uuidv5(data.machine_serial_number, this.ifricId);
const regionData = await this.regionModel.find();
regionData.forEach(value => {
if(value.region_code.startsWith(data.region_code)) {
data.region_code = value.region_code;
}
})
let ifricId = `urn:ifric:${data.dataspace_code.toLowerCase()}-${data.region_code.toLowerCase()}-${data.object_type_code.toLowerCase()}-${data.object_sub_type_code.toLowerCase()}-${uuid}`;
const urnData = new this.urnModel({
urn: ifricId,
Expand Down
11 changes: 10 additions & 1 deletion backend/src/endpoints/company/company.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { Company } from 'src/schemas/company.schema';
import { ObjectSubType } from 'src/schemas/objectSubType.schema';
import { ObjectType } from 'src/schemas/objectType.schema';
import { Urn } from 'src/schemas/urn.schema';
import { Region } from 'src/schemas/region.schema';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { v5 as uuidv5, validate as uuidValidate } from 'uuid';
Expand All @@ -37,7 +38,9 @@ export class CompanyService {
@InjectModel(ObjectSubType.name)
private objectSubTypeModel: Model<ObjectSubType>,
@InjectModel(ObjectType.name)
private ObjectTypeModel: Model<ObjectType>
private ObjectTypeModel: Model<ObjectType>,
@InjectModel(Region.name)
private regionModel: Model<Region>
) {}
private readonly ifricId = process.env.IFRIC_NAMESPACE;

Expand All @@ -52,6 +55,12 @@ export class CompanyService {
let response = await this.companyModel.find({registration_code: data.registration_code});
if(!response.length){
let uuid = uuidv5(data.country_code.toUpperCase() + data.registration_code, this.ifricId);
const regionData = await this.regionModel.find();
regionData.forEach(value => {
if(value.region_code.startsWith(data.region_code)) {
data.region_code = value.region_code;
}
})
let ifricId = `urn:ifric:${data.dataspace_code.toLowerCase()}-${data.region_code.toLowerCase()}-${data.object_type_code.toLowerCase()}-${data.object_sub_type_code.toLowerCase()}-${uuid}`;
const urnData = new this.urnModel({
urn: ifricId,
Expand Down
20 changes: 20 additions & 0 deletions backend/src/endpoints/contract/contract.controller.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { Test, TestingModule } from '@nestjs/testing';
import { ContractController } from './contract.controller';
import { ContractService } from './contract.service';

describe('ContractController', () => {
let controller: ContractController;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [ContractController],
providers: [ContractService],
}).compile();

controller = module.get<ContractController>(ContractController);
});

it('should be defined', () => {
expect(controller).toBeDefined();
});
});
18 changes: 18 additions & 0 deletions backend/src/endpoints/contract/contract.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { ContractService } from './contract.service';
import { CreateContractDto, CreateBindingDto } from './dto/create-contract.dto';

@Controller('contract')
export class ContractController {
constructor(private readonly contractService: ContractService) {}

@Post('/binding')
createBinding(@Body() createBindingDto: CreateBindingDto) {
return this.contractService.createBinding(createBindingDto);
}

@Post()
createContract(@Body() createContractDto: CreateContractDto) {
return this.contractService.createContract(createContractDto);
}
}
9 changes: 9 additions & 0 deletions backend/src/endpoints/contract/contract.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { Module } from '@nestjs/common';
import { ContractService } from './contract.service';
import { ContractController } from './contract.controller';

@Module({
controllers: [ContractController],
providers: [ContractService],
})
export class ContractModule {}
18 changes: 18 additions & 0 deletions backend/src/endpoints/contract/contract.service.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { ContractService } from './contract.service';

describe('ContractService', () => {
let service: ContractService;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [ContractService],
}).compile();

service = module.get<ContractService>(ContractService);
});

it('should be defined', () => {
expect(service).toBeDefined();
});
});
78 changes: 78 additions & 0 deletions backend/src/endpoints/contract/contract.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import { Injectable, InternalServerErrorException } from '@nestjs/common';
import { CreateContractDto, CreateBindingDto } from './dto/create-contract.dto';
import { Urn } from 'src/schemas/urn.schema';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { v5 as uuidv5, validate as uuidValidate } from 'uuid';
import * as moment from 'moment';
import { Contract } from 'src/schemas/contract.schema';
import { Binding } from 'src/schemas/binding.schema';

@Injectable()
export class ContractService {
constructor(
@InjectModel(Urn.name)
private urnModel: Model<Urn>,
@InjectModel(Contract.name)
private contractModel: Model<Contract>,
@InjectModel(Binding.name)
private bindingModel: Model<Binding>
) {}
private readonly ifricId = process.env.IFRIC_NAMESPACE;
private readonly contractCode = process.env.CONTRACT_DEFAULT_CODE;
private readonly bindingCode = process.env.BINDING_DEFAULT_CODE;

async createBinding(data: CreateBindingDto) {
try {
let uuid = uuidv5(data.data_provider_company_ifric_id, this.ifricId);
let bindingCodeArr = this.bindingCode.split('-');
let region_code = data.data_provider_company_ifric_id.split("-")[1];
let ifricId = `urn:ifric:${bindingCodeArr[0].toLowerCase()}-${region_code}-${bindingCodeArr[1].toLowerCase()}-${bindingCodeArr[2].toLowerCase()}-${uuid}`;
const urnData = new this.urnModel({
urn: ifricId,
created_at: moment().format(),
last_updated_at: moment().format()
})
const savedUrnData = await urnData.save();

const bindingData = new this.bindingModel({
urn_id: savedUrnData._id,
binding_datetime_string: data.binding_datetime_string,
data_provider_company_ifric_id: data.data_provider_company_ifric_id,
data_consumer_company_ifric_id: data.data_consumer_company_ifric_id,
created_at: moment().format(),
last_updated_at: moment().format()
})
await bindingData.save();
return { status: 201, message: 'Binding created successfully', urn_id: ifricId };
} catch(err) {
throw new InternalServerErrorException(`Failed to create binding: ${err.message}`);
}
}

async createContract(data: CreateContractDto) {
try {
let uuid = uuidv5(data.data_consumer_company_ifric_id, this.ifricId);
let contractCodeArr = this.contractCode.split('-');
let region_code = data.data_consumer_company_ifric_id.split("-")[1];
let ifricId = `urn:ifric:${contractCodeArr[0].toLowerCase()}-${region_code}-${contractCodeArr[1].toLowerCase()}-${contractCodeArr[2].toLowerCase()}-${uuid}`;
const urnData = new this.urnModel({
urn: ifricId,
created_at: moment().format(),
last_updated_at: moment().format()
})
const savedUrnData = await urnData.save();
const contractData = new this.contractModel({
urn_id: savedUrnData._id,
contract_datetime_string: data.contract_datetime_string,
data_consumer_company_ifric_id: data.data_consumer_company_ifric_id,
created_at: moment().format(),
last_updated_at: moment().format()
})
await contractData.save();
return { status: 201, message: 'Contract created successfully', urn_id: ifricId };
} catch(err) {
throw new InternalServerErrorException(`Failed to create contract: ${err.message}`);
}
}
}
10 changes: 10 additions & 0 deletions backend/src/endpoints/contract/dto/create-contract.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
export class CreateContractDto {
data_consumer_company_ifric_id: string;
contract_datetime_string: string;
}

export class CreateBindingDto {
data_consumer_company_ifric_id: string;
data_provider_company_ifric_id: string;
binding_datetime_string: string;
}
1 change: 1 addition & 0 deletions backend/src/endpoints/contract/entities/contract.entity.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export class Contract {}
Loading

0 comments on commit a597718

Please sign in to comment.