Skip to content

Commit 0af98c3

Browse files
Merge pull request #637 from US-EPA-CAMD/feature/6110-mats_submission
Feature/6110 mats submission
2 parents 1613294 + 3f18e7f commit 0af98c3

28 files changed

+733
-108
lines changed

.eslintrc.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ module.exports = {
77
plugins: ['@typescript-eslint/eslint-plugin'],
88
extends: [
99
'plugin:@typescript-eslint/recommended',
10-
'prettier/@typescript-eslint',
1110
'plugin:prettier/recommended',
1211
],
1312
root: true,

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
"prebuild": "rimraf dist",
1616
"build": "nest build",
1717
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
18+
"repl": "nest start --watch --entryFile repl",
1819
"start": "node dist/main",
1920
"start:dev": "nest start --watch",
2021
"start:debug": "nest start --debug --watch",
@@ -68,6 +69,7 @@
6869
"eslint": "^8.0.1",
6970
"eslint-config-prettier": "^8.3.0",
7071
"eslint-plugin-import": "^2.25.2",
72+
"eslint-plugin-prettier": "^5.2.3",
7173
"jest": "^27.3.1",
7274
"jest-sonar-reporter": "^2.0.0",
7375
"prettier": "^1.19.1",

src/app.module.ts

Lines changed: 56 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { HttpModule } from '@nestjs/axios';
12
import {
23
MiddlewareConsumer,
34
Module,
@@ -7,91 +8,91 @@ import {
78
import { ConfigModule } from '@nestjs/config';
89
import { RouterModule } from '@nestjs/core';
910
import { TypeOrmModule } from '@nestjs/typeorm';
10-
import { HttpModule } from '@nestjs/axios';
1111

1212
import { CheckCatalogModule } from '@us-epa-camd/easey-common/check-catalog';
1313
import { dbConfig } from '@us-epa-camd/easey-common/config';
14-
import { LoggerModule } from '@us-epa-camd/easey-common/logger';
1514
import { CorsOptionsModule } from '@us-epa-camd/easey-common/cors-options';
15+
import { LoggerModule } from '@us-epa-camd/easey-common/logger';
16+
import { MaintenanceMiddleware } from '@us-epa-camd/easey-common/middleware/maintenance.middleware';
1617
import {
1718
DbLookupValidator,
1819
IsValidCodesValidator,
1920
} from '@us-epa-camd/easey-common/validators';
20-
import { MaintenanceMiddleware } from '@us-epa-camd/easey-common/middleware/maintenance.middleware';
2121

22-
import routes from './routes';
2322
import appConfig from './config/app.config';
2423
import { TypeOrmConfigService } from './config/typeorm.config';
24+
import routes from './routes';
2525

26-
import { QACertificationModule } from './qa-certification/qa-certification.module';
2726
import { QACertificationWorkspaceModule } from './qa-certification-workspace/qa-certification.module';
27+
import { QACertificationModule } from './qa-certification/qa-certification.module';
2828

29-
import { LocationWorkspaceModule } from './monitor-location-workspace/monitor-location.module';
30-
import { ComponentModule } from './component-workspace/component.module';
31-
import { AnalyzerRangeModule } from './analyzer-range-workspace/analyzer-range.module';
32-
import { RataModule } from './rata/rata.module';
33-
import { RataWorkspaceModule } from './rata-workspace/rata-workspace.module';
34-
import { MonitorSystemModule } from './monitor-system/monitor-system.module';
35-
import { MonitorMethodWorkspaceModule } from './monitor-method-workspace/monitor-method-workspace.module';
36-
import { RataSummaryWorkspaceModule } from './rata-summary-workspace/rata-summary-workspace.module';
37-
import { RataSummaryModule } from './rata-summary/rata-summary.module';
38-
import { RataRunModule } from './rata-run/rata-run.module';
39-
import { RataRunWorkspaceModule } from './rata-run-workspace/rata-run-workspace.module';
40-
import { TestQualificationModule } from './test-qualification/test-qualification.module';
41-
import { TestQualificationWorkspaceModule } from './test-qualification-workspace/test-qualification-workspace.module';
42-
import { AirEmissionTestingModule } from './air-emission-testing/air-emission-testing.module';
4329
import { AirEmissionTestingWorkspaceModule } from './air-emission-testing-workspace/air-emission-testing-workspace.module';
44-
import { FlowRataRunModule } from './flow-rata-run/flow-rata-run.module';
45-
import { FlowRataRunWorkspaceModule } from './flow-rata-run-workspace/flow-rata-run-workspace.module';
46-
import { RataTraverseWorkspaceModule } from './rata-traverse-workspace/rata-traverse-workspace.module';
47-
import { RataTraverseModule } from './rata-traverse/rata-traverse.module';
48-
import { FuelFlowToLoadTestModule } from './fuel-flow-to-load-test/fuel-flow-to-load-test.module';
49-
import { FuelFlowToLoadTestWorkspaceModule } from './fuel-flow-to-load-test-workspace/fuel-flow-to-load-test-workspace.module';
50-
import { AppECorrelationTestRunModule } from './app-e-correlation-test-run/app-e-correlation-test-run.module';
30+
import { AirEmissionTestingModule } from './air-emission-testing/air-emission-testing.module';
31+
import { AnalyzerRangeModule } from './analyzer-range-workspace/analyzer-range.module';
5132
import { AppECorrelationTestRunWorkspaceModule } from './app-e-correlation-test-run-workspace/app-e-correlation-test-run-workspace.module';
52-
import { AppEHeatInputFromGasModule } from './app-e-heat-input-from-gas/app-e-heat-input-from-gas.module';
53-
import { AppEHeatInputFromGasWorkspaceModule } from './app-e-heat-input-from-gas-workspace/app-e-heat-input-from-gas-workspace.module';
54-
import { AppEHeatInputFromOilModule } from './app-e-heat-input-from-oil/app-e-heat-input-from-oil.module';
55-
import { AppEHeatInputFromOilWorkspaceModule } from './app-e-heat-input-from-oil-workspace/app-e-heat-input-from-oil.module';
33+
import { AppECorrelationTestRunModule } from './app-e-correlation-test-run/app-e-correlation-test-run.module';
5634
import { AppECorrelationTestSummaryWorkspaceModule } from './app-e-correlation-test-summary-workspace/app-e-correlation-test-summary-workspace.module';
5735
import { AppECorrelationTestSummaryModule } from './app-e-correlation-test-summary/app-e-correlation-test-summary.module';
36+
import { AppEHeatInputFromGasWorkspaceModule } from './app-e-heat-input-from-gas-workspace/app-e-heat-input-from-gas-workspace.module';
37+
import { AppEHeatInputFromGasModule } from './app-e-heat-input-from-gas/app-e-heat-input-from-gas.module';
38+
import { AppEHeatInputFromOilWorkspaceModule } from './app-e-heat-input-from-oil-workspace/app-e-heat-input-from-oil.module';
39+
import { AppEHeatInputFromOilModule } from './app-e-heat-input-from-oil/app-e-heat-input-from-oil.module';
40+
import { CalibrationInjectionWorkspaceModule } from './calibration-injection-workspace/calibration-injection-workspace.module';
41+
import { CalibrationInjectionModule } from './calibration-injection/calibration-injection.module';
42+
import { ComponentModule } from './component-workspace/component.module';
43+
import { CrossCheckCatalogValueModule } from './cross-check-catalog-value/cross-check-catalog-value.module';
44+
import { CycleTimeInjectionWorkspaceModule } from './cycle-time-injection-workspace/cycle-time-injection-workspace.module';
45+
import { CycleTimeInjectionModule } from './cycle-time-injection/cycle-time-injection.module';
46+
import { CycleTimeSummaryWorkspaceModule } from './cycle-time-summary-workspace/cycle-time-summary-workspace.module';
47+
import { CycleTimeSummaryModule } from './cycle-time-summary/cycle-time-summary.module';
48+
import { FlowRataRunWorkspaceModule } from './flow-rata-run-workspace/flow-rata-run-workspace.module';
49+
import { FlowRataRunModule } from './flow-rata-run/flow-rata-run.module';
5850
import { FlowToLoadCheckWorkspaceModule } from './flow-to-load-check-workspace/flow-to-load-check-workspace.module';
5951
import { FlowToLoadCheckModule } from './flow-to-load-check/flow-to-load-check.module';
6052
import { FlowToLoadReferenceWorkspaceModule } from './flow-to-load-reference-workspace/flow-to-load-reference-workspace.module';
6153
import { FlowToLoadReferenceModule } from './flow-to-load-reference/flow-to-load-reference.module';
6254
import { FuelFlowToLoadBaselineWorkspaceModule } from './fuel-flow-to-load-baseline-workspace/fuel-flow-to-load-baseline-workspace.module';
6355
import { FuelFlowToLoadBaselineModule } from './fuel-flow-to-load-baseline/fuel-flow-to-load-baseline.module';
64-
import { CalibrationInjectionWorkspaceModule } from './calibration-injection-workspace/calibration-injection-workspace.module';
65-
import { CalibrationInjectionModule } from './calibration-injection/calibration-injection.module';
66-
import { OnlineOfflineCalibrationModule } from './online-offline-calibration/online-offline-calibration.module';
67-
import { OnlineOfflineCalibrationWorkspaceModule } from './online-offline-calibration-workspace/online-offline-calibration.module';
68-
import { MonitorLocationModule } from './monitor-location/monitor-location.module';
69-
import { ReportingPeriodModule } from './reporting-period/reporting-period.module';
56+
import { FuelFlowToLoadTestWorkspaceModule } from './fuel-flow-to-load-test-workspace/fuel-flow-to-load-test-workspace.module';
57+
import { FuelFlowToLoadTestModule } from './fuel-flow-to-load-test/fuel-flow-to-load-test.module';
7058
import { FuelFlowmeterAccuracyWorkspaceModule } from './fuel-flowmeter-accuracy-workspace/fuel-flowmeter-accuracy-workspace.module';
7159
import { FuelFlowmeterAccuracyModule } from './fuel-flowmeter-accuracy/fuel-flowmeter-accuracy.module';
72-
import { CycleTimeSummaryWorkspaceModule } from './cycle-time-summary-workspace/cycle-time-summary-workspace.module';
73-
import { CycleTimeSummaryModule } from './cycle-time-summary/cycle-time-summary.module';
74-
import { CycleTimeInjectionModule } from './cycle-time-injection/cycle-time-injection.module';
75-
import { CycleTimeInjectionWorkspaceModule } from './cycle-time-injection-workspace/cycle-time-injection-workspace.module';
76-
import { TransmitterTransducerAccuracyModule } from './transmitter-transducer-accuracy/transmitter-transducer-accuracy.module';
77-
import { TransmitterTransducerAccuracyWorkspaceModule } from './transmitter-transducer-accuracy-workspace/transmitter-transducer-accuracy.module';
78-
import { UnitDefaultTestWorkspaceModule } from './unit-default-test-workspace/unit-default-test-workspace.module';
79-
import { UnitDefaultTestModule } from './unit-default-test/unit-default-test.module';
80-
import { UnitDefaultTestRunWorkspaceModule } from './unit-default-test-run-workspace/unit-default-test-run.module';
81-
import { UnitDefaultTestRunModule } from './unit-default-test-run/unit-default-test-run.module';
82-
import { HgSummaryWorkspaceModule } from './hg-summary-workspace/hg-summary-workspace.module';
60+
import { GasComponentCodeModule } from './gas-component-code/gas-component-code.module';
61+
import { GasTypeCodeModule } from './gas-type-code/gas-type-code.module';
8362
import { HgInjectionWorkspaceModule } from './hg-injection-workspace/hg-injection-workspace.module';
84-
import { HgSummaryModule } from './hg-summary/hg-summary.module';
8563
import { HgInjectionModule } from './hg-injection/hg-injection.module';
86-
import { QaCertificationEventWorkspaceModule } from './qa-certification-event-workspace/qa-certification-event-workspace.module';
64+
import { HgSummaryWorkspaceModule } from './hg-summary-workspace/hg-summary-workspace.module';
65+
import { HgSummaryModule } from './hg-summary/hg-summary.module';
66+
import { LocationWorkspaceModule } from './monitor-location-workspace/monitor-location.module';
67+
import { MatsDataSubmissionModule } from './mats-data-submission/mats-data-submission.module';
68+
import { MonitorLocationModule } from './monitor-location/monitor-location.module';
69+
import { MonitorMethodWorkspaceModule } from './monitor-method-workspace/monitor-method-workspace.module';
8770
import { MonitorSystemWorkspaceModule } from './monitor-system-workspace/monitor-system-workspace.module';
88-
import { TestExtensionExemptionsWorkspaceModule } from './test-extension-exemptions-workspace/test-extension-exemptions-workspace.module';
89-
import { TestExtensionExemptionsModule } from './test-extension-exemptions/test-extension-exemptions.module';
71+
import { MonitorSystemModule } from './monitor-system/monitor-system.module';
72+
import { OnlineOfflineCalibrationWorkspaceModule } from './online-offline-calibration-workspace/online-offline-calibration.module';
73+
import { OnlineOfflineCalibrationModule } from './online-offline-calibration/online-offline-calibration.module';
74+
import { QaCertificationEventWorkspaceModule } from './qa-certification-event-workspace/qa-certification-event-workspace.module';
9075
import { QaCertificationEventModule } from './qa-certification-event/qa-certification-event.module';
91-
import { GasComponentCodeModule } from './gas-component-code/gas-component-code.module';
76+
import { RataRunWorkspaceModule } from './rata-run-workspace/rata-run-workspace.module';
77+
import { RataRunModule } from './rata-run/rata-run.module';
78+
import { RataSummaryWorkspaceModule } from './rata-summary-workspace/rata-summary-workspace.module';
79+
import { RataSummaryModule } from './rata-summary/rata-summary.module';
80+
import { RataTraverseWorkspaceModule } from './rata-traverse-workspace/rata-traverse-workspace.module';
81+
import { RataTraverseModule } from './rata-traverse/rata-traverse.module';
82+
import { RataWorkspaceModule } from './rata-workspace/rata-workspace.module';
83+
import { RataModule } from './rata/rata.module';
9284
import { ReferenceMethodCodeModule } from './reference-method-code/reference-method-code.module';
93-
import { GasTypeCodeModule } from './gas-type-code/gas-type-code.module';
94-
import { CrossCheckCatalogValueModule } from './cross-check-catalog-value/cross-check-catalog-value.module';
85+
import { ReportingPeriodModule } from './reporting-period/reporting-period.module';
86+
import { TestExtensionExemptionsWorkspaceModule } from './test-extension-exemptions-workspace/test-extension-exemptions-workspace.module';
87+
import { TestExtensionExemptionsModule } from './test-extension-exemptions/test-extension-exemptions.module';
88+
import { TestQualificationWorkspaceModule } from './test-qualification-workspace/test-qualification-workspace.module';
89+
import { TestQualificationModule } from './test-qualification/test-qualification.module';
90+
import { TransmitterTransducerAccuracyWorkspaceModule } from './transmitter-transducer-accuracy-workspace/transmitter-transducer-accuracy.module';
91+
import { TransmitterTransducerAccuracyModule } from './transmitter-transducer-accuracy/transmitter-transducer-accuracy.module';
92+
import { UnitDefaultTestRunWorkspaceModule } from './unit-default-test-run-workspace/unit-default-test-run.module';
93+
import { UnitDefaultTestRunModule } from './unit-default-test-run/unit-default-test-run.module';
94+
import { UnitDefaultTestWorkspaceModule } from './unit-default-test-workspace/unit-default-test-workspace.module';
95+
import { UnitDefaultTestModule } from './unit-default-test/unit-default-test.module';
9596
import { WhatHasDataModule } from './what-has-data/what-has-data.module';
9697

9798
@Module({
@@ -179,6 +180,7 @@ import { WhatHasDataModule } from './what-has-data/what-has-data.module';
179180
GasTypeCodeModule,
180181
CrossCheckCatalogValueModule,
181182
WhatHasDataModule,
183+
MatsDataSubmissionModule,
182184
],
183185
providers: [DbLookupValidator, IsValidCodesValidator],
184186
})

src/dto/mats-code.dto.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export class MatsCodeDTO {
2+
code: string;
3+
description: string;
4+
}

src/dto/mats-data-submission.dto.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { MatsCodeDTO } from './mats-code.dto';
2+
3+
export class MatsDataSubmissionDTO {
4+
id: number;
5+
6+
averagingGroup?: MatsCodeDTO;
7+
8+
facilityName: string;
9+
10+
frsId?: string;
11+
12+
location: { id: string; name: string };
13+
14+
orisCode: number;
15+
16+
pollutants?: MatsCodeDTO[];
17+
18+
quarter?: number;
19+
20+
reportType: MatsCodeDTO;
21+
22+
status: MatsCodeDTO;
23+
24+
testComment?: string;
25+
26+
testDate?: Date;
27+
28+
testMethods?: MatsCodeDTO[];
29+
30+
testNumber?: string;
31+
32+
year?: number;
33+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { BaseEntity, Column, Entity, PrimaryColumn } from 'typeorm';
2+
3+
@Entity({ name: 'camdecmpsmd.mats_averaging_group_code' })
4+
export class MatsAveragingGroupCode extends BaseEntity {
5+
@PrimaryColumn({ name: 'mats_avg_group_cd' })
6+
code: string;
7+
8+
@Column({ name: 'mats_avg_group_description' })
9+
description: string;
10+
}
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
import { NumericColumnTransformer } from '@us-epa-camd/easey-common/transforms';
2+
import {
3+
BaseEntity,
4+
Column,
5+
Entity,
6+
JoinColumn,
7+
JoinTable,
8+
ManyToMany,
9+
ManyToOne,
10+
OneToOne,
11+
PrimaryColumn,
12+
} from 'typeorm';
13+
14+
import { MatsAveragingGroupCode } from './mats-averaging-group-code.entity';
15+
import { MatsReportTypeCode } from './mats-report-type-code.entity';
16+
import { MatsStatusCode } from './mats-status-code.entity';
17+
import { MatsTestMethodCode } from './mats-test-method-code.entity';
18+
import { MatsPollutantCode } from './mats-pollutant-code.entity';
19+
import { MonitorLocation } from './monitor-location.entity';
20+
import { MonitorPlan } from './monitor-plan.entity';
21+
import { Plant } from './plant.entity';
22+
23+
@Entity({ name: 'camdecmpsaux.mats_data_submission' })
24+
export class MatsDataSubmission extends BaseEntity {
25+
@PrimaryColumn({
26+
name: 'mats_data_sub_id',
27+
transformer: new NumericColumnTransformer(),
28+
})
29+
id: number;
30+
31+
@Column({ name: 'test_number' })
32+
testNumber: string;
33+
34+
@Column({ name: 'test_date' })
35+
testDate: Date;
36+
37+
@Column({ name: 'test_comment' })
38+
testComment: string;
39+
40+
@Column({ name: 'year', transformer: new NumericColumnTransformer() })
41+
year: number;
42+
43+
@Column({ name: 'quarter', transformer: new NumericColumnTransformer() })
44+
quarter: number;
45+
46+
@Column({ name: 'user_id' })
47+
userId: string;
48+
49+
@Column({ name: 'add_time' })
50+
addTime: Date;
51+
52+
@Column({ name: 'update_time' })
53+
updateTime: Date;
54+
55+
@ManyToOne(() => MonitorPlan)
56+
@JoinColumn({ name: 'mon_plan_id' })
57+
plan: MonitorPlan;
58+
59+
@ManyToOne(() => MonitorLocation)
60+
@JoinColumn({ name: 'mon_loc_id' })
61+
location: MonitorLocation;
62+
63+
@ManyToOne(() => MatsReportTypeCode)
64+
@JoinColumn({ name: 'mats_rpt_type_cd' })
65+
reportType: MatsReportTypeCode;
66+
67+
@ManyToOne(() => MatsAveragingGroupCode)
68+
@JoinColumn({ name: 'mats_avg_group_cd' })
69+
averagingGroup: MatsAveragingGroupCode;
70+
71+
@ManyToOne(() => MatsStatusCode)
72+
@JoinColumn({ name: 'mats_status_cd' })
73+
status: MatsStatusCode;
74+
75+
@OneToOne(() => MatsDataSubmission)
76+
@JoinColumn({ name: 'original_sub_id' })
77+
originalSubmission: MatsDataSubmission;
78+
79+
@ManyToOne(() => Plant)
80+
@JoinColumn({ name: 'fac_id' })
81+
facility: Plant;
82+
83+
@ManyToMany(() => MatsPollutantCode)
84+
@JoinTable({
85+
name: 'camdecmpsaux.mats_data_submission_pollutant',
86+
joinColumn: { name: 'mats_data_sub_id' },
87+
inverseJoinColumn: { name: 'mats_pollutant_cd' },
88+
})
89+
pollutants: MatsPollutantCode[];
90+
91+
@ManyToMany(() => MatsTestMethodCode)
92+
@JoinTable({
93+
name: 'camdecmpsaux.mats_data_submission_test_method',
94+
joinColumn: { name: 'mats_data_sub_id' },
95+
inverseJoinColumn: { name: 'mats_test_meth_cd' },
96+
})
97+
testMethods: MatsTestMethodCode[];
98+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { BaseEntity, Column, Entity, PrimaryColumn } from 'typeorm';
2+
3+
@Entity({ name: 'camdecmpsmd.mats_pollutant_code' })
4+
export class MatsPollutantCode extends BaseEntity {
5+
@PrimaryColumn({ name: 'mats_pollutant_cd' })
6+
code: string;
7+
8+
@Column({ name: 'mats_pollutant_description' })
9+
description: string;
10+
11+
@Column({ name: 'metadata_pollutant_cd' })
12+
metadataPollutantCode: string;
13+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { BaseEntity, Column, Entity, PrimaryColumn } from 'typeorm';
2+
3+
@Entity({ name: 'camdecmpsmd.mats_report_type_code' })
4+
export class MatsReportTypeCode extends BaseEntity {
5+
@PrimaryColumn({ name: 'mats_rpt_type_cd' })
6+
code: string;
7+
8+
@Column({ name: 'mats_rpt_type_description' })
9+
description: string;
10+
11+
@Column({ name: 'metadata_rpt_type_cd' })
12+
metadataReportTypeCode: string;
13+
14+
@Column({ name: 'requires_pollutant' })
15+
requiresPollutant: boolean;
16+
17+
@Column({ name: 'requires_test_method' })
18+
requiresTestMethod: boolean;
19+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { BaseEntity, Column, Entity, PrimaryColumn } from 'typeorm';
2+
3+
@Entity({ name: 'camdecmpsmd.mats_status_code' })
4+
export class MatsStatusCode extends BaseEntity {
5+
@PrimaryColumn({ name: 'mats_status_cd' })
6+
code: string;
7+
8+
@Column({ name: 'mats_status_description' })
9+
description: string;
10+
}

0 commit comments

Comments
 (0)