Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(application-system): Add validated config #15872

Merged
merged 28 commits into from
Oct 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
6a98fb2
feat(application-system): Add validated config
norda-gunni Sep 3, 2024
2b5f3b6
Add sharedConfig to appModule
norda-gunni Sep 4, 2024
f66af12
Cleanup
norda-gunni Sep 4, 2024
a3721d0
PR comment
norda-gunni Sep 4, 2024
8a1fa0e
PR comment fixes
norda-gunni Sep 10, 2024
78427fd
Remove unused import
norda-gunni Sep 10, 2024
106dbee
SharedTemplateAPIModule no longer dynamically registered
norda-gunni Sep 10, 2024
a888d47
local fallback for attachment bucket
norda-gunni Sep 10, 2024
8679d18
Add error logging
norda-gunni Sep 10, 2024
4f69619
Modules that no longer need to be dynamic are no longer dynamic
norda-gunni Sep 13, 2024
c49bc62
Update readme
norda-gunni Sep 13, 2024
82d6c86
Post merge conflict fix
norda-gunni Sep 13, 2024
6ad1489
Cleanup
norda-gunni Sep 16, 2024
3b96279
fix shared.utils
norda-gunni Sep 18, 2024
07370f0
Cleanup
norda-gunni Sep 19, 2024
18b10f4
Fixes
norda-gunni Oct 3, 2024
021fd22
Fix test
norda-gunni Oct 4, 2024
351b4a9
fix tests
norda-gunni Oct 7, 2024
77ac315
Fix lint
norda-gunni Oct 7, 2024
9c849ae
Update social-insurance-administration.service to static module
norda-gunni Oct 7, 2024
f70c24c
Remove unused import
norda-gunni Oct 7, 2024
e77a5ed
transition parental leave module to static
norda-gunni Oct 7, 2024
8dd4611
Transition children residence change to static module
norda-gunni Oct 7, 2024
8c4f492
cleanup shared utils
norda-gunni Oct 7, 2024
4cf9c33
fix test
norda-gunni Oct 7, 2024
549f546
coderabbit suggestion
norda-gunni Oct 9, 2024
faa85d7
Merge branch 'main' into feat/application-system-config
kodiakhq[bot] Oct 9, 2024
f814d01
Merge branch 'main' into feat/application-system-config
kodiakhq[bot] Oct 9, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions apps/application-system/api/src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ import { RightsPortalClientConfig } from '@island.is/clients/icelandic-health-in
import { FriggClientConfig } from '@island.is/clients/mms/frigg'
import { smsModuleConfig } from '@island.is/nova-sms'
import { emailModuleConfig } from '@island.is/email-service'
import { sharedModuleConfig } from '@island.is/application/template-api-modules'

@Module({
imports: [
Expand Down Expand Up @@ -117,6 +118,7 @@ import { emailModuleConfig } from '@island.is/email-service'
FriggClientConfig,
smsModuleConfig,
emailModuleConfig,
sharedModuleConfig,
],
}),
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import { environment } from '../../../environments'
import { ApplicationAccessService } from './tools/applicationAccess.service'

import { LoggingModule } from '@island.is/logging'
import { TemplateApiApplicationService } from './template-api.service'
import { AwsModule } from '@island.is/nest/aws'
import { ApplicationApiCoreModule } from '@island.is/application/api/core'
import { FeatureFlagModule } from '@island.is/nest/feature-flags'
Expand All @@ -35,10 +34,7 @@ import { ApplicationActionService } from './application-action.service'
PaymentModule,
AuditModule.forRoot(environment.audit),
AuthModule.register(environment.auth),
TemplateAPIModule.register({
...environment.templateApi,
applicationService: TemplateApiApplicationService,
}),
TemplateAPIModule.register(environment.templateApi),
norda-gunni marked this conversation as resolved.
Show resolved Hide resolved
ApplicationApiCoreModule,
createBullModule(),
ApplicationFilesModule,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { MockFeatureFlagService } from './mockFeatureFlagService'
import * as uuid from 'uuidv4'
import jwt from 'jsonwebtoken'
import { coreHistoryMessages } from '@island.is/application/core'
import { sharedModuleConfig } from '@island.is/application/template-api-modules'

let app: INestApplication

Expand Down Expand Up @@ -56,6 +57,35 @@ class MockContentfulRepository {
}
}

const mockConfig = {
clientLocationOrigin: 'http://localhost:4242',
baseApiUrl: 'http://localhost:4444',
attachmentBucket: 'attachmentBucket',
templateApi: {
clientLocationOrigin: 'http://localhost:4242/umsoknir',
email: {
sender: 'Devland.is',
address: 'development@island.is',
},
jwtSecret: 'supersecret',
xRoadBasePathWithEnv: '',
baseApiUrl: 'http://localhost:4444',
presignBucket: '',
attachmentBucket: 'island-is-dev-storage-application-system',
generalPetition: {
endorsementApiBasePath: 'http://localhost:4246',
},
userProfile: {
serviceBasePath: 'http://localhost:3366',
},
islykill: {
cert: '',
passphrase: '',
basePath: '',
},
},
}

let server: request.SuperTest<request.Test>
// eslint-disable-next-line local-rules/disallow-kennitalas
const nationalId = '1234564321'
Expand All @@ -74,6 +104,8 @@ beforeAll(async () => {
.useClass(MockFeatureFlagService)
.overrideProvider(EmailService)
.useClass(MockEmailService)
.overrideProvider(sharedModuleConfig.KEY)
.useValue(mockConfig)
.overrideGuard(IdsUserGuard)
.useValue(mockAuthGuard),
})
Expand Down
22 changes: 7 additions & 15 deletions libs/application/template-api-modules/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,28 +19,20 @@ Start by creating `{your_template_name}.module.ts` and `{your_template_name}.ser
Example of a template API module:

```typescript
import { DynamicModule } from '@nestjs/common'
import { Module } from '@nestjs/common'

// This is a shared module that gives you access to common methods
import { SharedTemplateAPIModule } from '../../shared'

// The base config that template api modules are registered with by default
// (configurable inside `template-api.module.ts`)
import { BaseTemplateAPIModuleConfig } from '../../../types'

// Here you import your module service
import { ReferenceTemplateService } from './reference-template.service'

export class ReferenceTemplateModule {
static register(config: BaseTemplateAPIModuleConfig): DynamicModule {
return {
module: ReferenceTemplateModule,
imports: [SharedTemplateAPIModule.register(config)],
providers: [ReferenceTemplateService],
exports: [ReferenceTemplateService],
}
}
}
@Module({
imports: [SharedTemplateAPIModule],
providers: [ReferenceTemplateService],
exports: [ReferenceTemplateService],
})
export class ReferenceTemplateModule {}
```

Create your service class that extends the `BaseTemplateApiService` and provide the application type to the `super` constructor. \
Expand Down
1 change: 1 addition & 0 deletions libs/application/template-api-modules/src/lib/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export { TemplateAPIModule } from './modules/template-api.module'
export { TemplateAPIService } from './modules/template-api.service'
export { sharedModuleConfig } from './modules/shared'
export { BaseTemplateAPIModuleConfig as TemplateAPIConfig } from './types'
export {
BaseTemplateApiApplicationService,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
import { ApplicationApiCoreModule } from '@island.is/application/api/core'
import { HistoryModule } from '@island.is/application/api/history'
import { DynamicModule } from '@nestjs/common'
import { Module } from '@nestjs/common'
import { ApplicationService } from './application.service'

export class ApplicationModule {
static register(): DynamicModule {
return {
module: ApplicationModule,
imports: [ApplicationApiCoreModule, HistoryModule],
providers: [ApplicationService],
exports: [ApplicationService],
}
}
}
@Module({
imports: [ApplicationApiCoreModule, HistoryModule],
providers: [ApplicationService],
exports: [ApplicationService],
})
export class ApplicationModule {}
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import { DynamicModule } from '@nestjs/common'
import { Module } from '@nestjs/common'
import { DirectorateOfImmigrationService } from './directorate-of-immigration.service'
import { DirectorateOfImmigrationClientModule } from '@island.is/clients/directorate-of-immigration'
export class DirectorateOfImmigrationModule {
static register(): DynamicModule {
return {
module: DirectorateOfImmigrationModule,
imports: [DirectorateOfImmigrationClientModule],
providers: [DirectorateOfImmigrationService],
exports: [DirectorateOfImmigrationService],
}
}
}

@Module({
imports: [DirectorateOfImmigrationClientModule],
providers: [DirectorateOfImmigrationService],
exports: [DirectorateOfImmigrationService],
})
export class DirectorateOfImmigrationModule {}
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
import { DynamicModule } from '@nestjs/common'
import { Module } from '@nestjs/common'
import { DrivingLicenseProviderService } from './driving-license.service'
import { DrivingLicenseApiModule } from '@island.is/clients/driving-license'
import { DrivingLicenseBookModule } from '@island.is/api/domains/driving-license-book'

export class DrivingLicenseModule {
static register(): DynamicModule {
return {
module: DrivingLicenseModule,
imports: [DrivingLicenseApiModule, DrivingLicenseBookModule],
providers: [DrivingLicenseProviderService],
exports: [DrivingLicenseProviderService],
}
}
}
@Module({
imports: [DrivingLicenseApiModule, DrivingLicenseBookModule],
providers: [DrivingLicenseProviderService],
exports: [DrivingLicenseProviderService],
})
export class DrivingLicenseModule {}
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
import { DynamicModule } from '@nestjs/common'
import { Module } from '@nestjs/common'
import { InnaClientModule } from '@island.is/clients/inna'
import { InnaService } from './inna.service'
export class InnaModule {
static register(): DynamicModule {
return {
module: InnaModule,
imports: [InnaClientModule],
providers: [InnaService],
exports: [InnaService],
}
}
}

@Module({
imports: [InnaClientModule],
providers: [InnaService],
exports: [InnaService],
})
export class InnaModule {}
Original file line number Diff line number Diff line change
@@ -1,24 +1,20 @@
import { DynamicModule } from '@nestjs/common'
import { Module } from '@nestjs/common'
import { HealthInsuranceService } from './health-insurance.service'
import {
RightsPortalClientConfig,
RightsPortalClientModule,
} from '@island.is/clients/icelandic-health-insurance/rights-portal'
import { ConfigModule } from '@nestjs/config'

export class HealthInsuranceModule {
static register(): DynamicModule {
return {
module: HealthInsuranceModule,
imports: [
RightsPortalClientModule,
ConfigModule.forRoot({
isGlobal: true,
load: [RightsPortalClientConfig],
}),
],
providers: [HealthInsuranceService],
exports: [HealthInsuranceService],
}
}
}
@Module({
imports: [
RightsPortalClientModule,
ConfigModule.forRoot({
isGlobal: true,
load: [RightsPortalClientConfig],
}),
],
providers: [HealthInsuranceService],
exports: [HealthInsuranceService],
})
export class HealthInsuranceModule {}
Original file line number Diff line number Diff line change
@@ -1,15 +1,10 @@
import { DynamicModule } from '@nestjs/common'
import { BaseTemplateAPIModuleConfig } from '../../../../types'
import { Module } from '@nestjs/common'
import { IdentityClientModule } from '@island.is/clients/identity'
import { IdentityService } from './identity.service'

export class IdentityModule {
static register(config: BaseTemplateAPIModuleConfig): DynamicModule {
return {
module: IdentityModule,
imports: [IdentityClientModule],
providers: [IdentityService],
exports: [IdentityService],
}
}
}
@Module({
imports: [IdentityClientModule],
providers: [IdentityService],
exports: [IdentityService],
})
export class IdentityModule {}
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,11 @@ import { HealthInsuranceService } from './health-insurance/health-insurance.serv
import { InnaService } from './education/inna.service'
import { InnaModule } from './education/inna.module'

export const dynamicModules = [UserProfileModule]

norda-gunni marked this conversation as resolved.
Show resolved Hide resolved
export const modules = [
NationalRegistryModule,
PaymentApiModule,
UserProfileModule,
IdentityModule,
DrivingLicenseModule,
ApplicationModule,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,20 @@
import { DynamicModule } from '@nestjs/common'
import { BaseTemplateAPIModuleConfig } from '../../../../types'
import { Module } from '@nestjs/common'
import { NationalRegistryClientModule } from '@island.is/clients/national-registry-v2'
import { NationalRegistryService } from './national-registry.service'
import { AssetsModule } from '@island.is/api/domains/assets'
import { ConfigModule } from '@nestjs/config'
import { AssetsClientConfig } from '@island.is/clients/assets'

export class NationalRegistryModule {
static register(config: BaseTemplateAPIModuleConfig): DynamicModule {
return {
module: NationalRegistryModule,
imports: [
NationalRegistryClientModule,
AssetsModule,
ConfigModule.forRoot({
isGlobal: true,
load: [AssetsClientConfig],
}),
],
providers: [NationalRegistryService],
exports: [NationalRegistryService],
}
}
}
@Module({
imports: [
NationalRegistryClientModule,
AssetsModule,
ConfigModule.forRoot({
isGlobal: true,
load: [AssetsClientConfig],
}),
],
providers: [NationalRegistryService],
exports: [NationalRegistryService],
})
export class NationalRegistryModule {}
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
import { DynamicModule } from '@nestjs/common'
import { Module } from '@nestjs/common'
import { PassportService } from './passport.service'
import { PassportsClientModule } from '@island.is/clients/passports'

export class PassportModule {
static register(): DynamicModule {
return {
module: PassportModule,
imports: [PassportsClientModule],
providers: [PassportService],
exports: [PassportService],
}
}
}
@Module({
imports: [PassportsClientModule],
providers: [PassportService],
exports: [PassportService],
})
export class PassportModule {}
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { DynamicModule } from '@nestjs/common'
import { BaseTemplateAPIModuleConfig } from '../../../../types'
import { Module } from '@nestjs/common'

import {
ChargeFjsV2ClientConfig,
Expand All @@ -10,20 +9,16 @@ import { XRoadConfig } from '@island.is/nest/config'
import { PaymentModule } from '@island.is/application/api/payment'
import { PaymentService } from './payment.service'

export class PaymentApiModule {
static register(config: BaseTemplateAPIModuleConfig): DynamicModule {
return {
module: PaymentModule,
imports: [
ChargeFjsV2ClientModule,
PaymentModule,
ConfigModule.forRoot({
isGlobal: true,
load: [XRoadConfig, ChargeFjsV2ClientConfig],
}),
],
providers: [PaymentService],
exports: [PaymentService],
}
}
}
@Module({
imports: [
ChargeFjsV2ClientModule,
PaymentModule,
ConfigModule.forRoot({
isGlobal: true,
load: [XRoadConfig, ChargeFjsV2ClientConfig],
}),
],
providers: [PaymentService],
exports: [PaymentService],
})
export class PaymentApiModule {}
Loading
Loading