Skip to content

Commit

Permalink
Add VIDIS Angebot Id to ServiceProvider and use it to identify VIDIS …
Browse files Browse the repository at this point in the history
…ServiceProviders in update logic
  • Loading branch information
he-meyer committed Dec 16, 2024
1 parent eb0ae23 commit 455fb6c
Show file tree
Hide file tree
Showing 13 changed files with 311 additions and 247 deletions.
507 changes: 264 additions & 243 deletions migrations/.snapshot-dbildungs-iam-server.json

Large diffs are not rendered by default.

11 changes: 11 additions & 0 deletions migrations/Migration20241216082224-S.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { Migration } from '@mikro-orm/migrations';

export class Migration20241216082224 extends Migration {
public async up(): Promise<void> {
this.addSql('alter table "service_provider" add column "vidis_angebot_id" varchar(255) null;');
}

public override async down(): Promise<void> {
this.addSql('alter table "service_provider" drop column "vidis_angebot_id";');
}
}
1 change: 1 addition & 0 deletions src/console/dbseed/domain/db-seed.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,7 @@ export class DbSeedService {
file.keycloakRole,
file.externalSystem ?? ServiceProviderSystem.NONE,
file.requires2fa,
file.vidisAngebotId,
);
if (file.overrideId) {
serviceProvider.id = this.getValidUuidOrUndefined(file.overrideId);
Expand Down
2 changes: 2 additions & 0 deletions src/console/dbseed/file/service-provider-file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,6 @@ export class ServiceProviderFile {
public externalSystem?: ServiceProviderSystem;

public requires2fa!: boolean;

public vidisAngebotId?: string;
}
1 change: 1 addition & 0 deletions src/modules/rolle/repo/rolle.repo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ export function mapEntityToAggregate(entity: RolleEntity, rolleFactory: RolleFac
sp.keycloakRole,
sp.externalSystem,
sp.requires2fa,
sp.vidisAngebotId,
);
},
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export class ServiceProviderFactory {
keycloakRole: string | undefined,
externalSystem: ServiceProviderSystem,
requires2fa: boolean,
vidisAngebotId: string | undefined,
): ServiceProvider<true> {
return ServiceProvider.construct(
id,
Expand All @@ -35,6 +36,7 @@ export class ServiceProviderFactory {
keycloakRole,
externalSystem,
requires2fa,
vidisAngebotId,
);
}

Expand All @@ -50,6 +52,7 @@ export class ServiceProviderFactory {
keycloakRole: string | undefined,
externalSystem: ServiceProviderSystem,
requires2fa: boolean,
vidisAngebotId: string | undefined,
): ServiceProvider<false> {
return ServiceProvider.createNew(
name,
Expand All @@ -63,6 +66,7 @@ export class ServiceProviderFactory {
keycloakRole,
externalSystem,
requires2fa,
vidisAngebotId,
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ export class ServiceProviderService {
await Promise.allSettled(
vidisAngebote.map(async (angebot: VidisAngebot) => {
const existingServiceProvider: Option<ServiceProvider<true>> =
await this.serviceProviderRepo.findByName(angebot.angebotTitle);
await this.serviceProviderRepo.findByVidisAngebotId(angebot.angebotId);

const angebotLogoMediaType: string = this.determineMediaTypeFor(angebot.angebotLogo);

Expand All @@ -81,6 +81,7 @@ export class ServiceProviderService {
vidisKeycloakRole,
ServiceProviderSystem.NONE,
false,
angebot.angebotId,
);
this.logger.info(`ServiceProvider for VIDIS Angebot '${serviceProvider.name}' already exists.`);
} else {
Expand All @@ -96,6 +97,7 @@ export class ServiceProviderService {
vidisKeycloakRole,
ServiceProviderSystem.NONE,
false,
angebot.angebotId,
);
this.logger.info(`ServiceProvider for VIDIS Angebot '${serviceProvider.name}' was created.`);
}
Expand Down
5 changes: 5 additions & 0 deletions src/modules/service-provider/domain/service-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ export class ServiceProvider<WasPersisted extends boolean> {
public keycloakRole: string | undefined,
public externalSystem: ServiceProviderSystem,
public requires2fa: boolean,
public vidisAngebotId: string | undefined,
) {}

public static construct<WasPersisted extends boolean = false>(
Expand All @@ -33,6 +34,7 @@ export class ServiceProvider<WasPersisted extends boolean> {
keycloakRole: string | undefined,
externalSystem: ServiceProviderSystem,
requires2fa: boolean,
vidisAngebotId: string | undefined,
): ServiceProvider<WasPersisted> {
return new ServiceProvider(
id,
Expand All @@ -49,6 +51,7 @@ export class ServiceProvider<WasPersisted extends boolean> {
keycloakRole,
externalSystem,
requires2fa,
vidisAngebotId,
);
}

Expand All @@ -64,6 +67,7 @@ export class ServiceProvider<WasPersisted extends boolean> {
keycloakRole: string | undefined,
externalSystem: ServiceProviderSystem,
requires2fa: boolean,
vidisAngebotId: string | undefined,
): ServiceProvider<false> {
return new ServiceProvider(
undefined,
Expand All @@ -80,6 +84,7 @@ export class ServiceProvider<WasPersisted extends boolean> {
keycloakRole,
externalSystem,
requires2fa,
vidisAngebotId,
);
}
}
3 changes: 3 additions & 0 deletions src/modules/service-provider/repo/service-provider.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,7 @@ export class ServiceProviderEntity extends TimestampedEntity {

@Property()
public requires2fa!: boolean;

@Property({ nullable: true })
public vidisAngebotId?: string;
}
13 changes: 13 additions & 0 deletions src/modules/service-provider/repo/service-provider.repo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export function mapAggregateToData(
keycloakRole: serviceProvider.keycloakRole,
externalSystem: serviceProvider.externalSystem,
requires2fa: serviceProvider.requires2fa,
vidisAngebotId: serviceProvider.vidisAngebotId,
};
}

Expand All @@ -48,6 +49,7 @@ function mapEntityToAggregate(entity: ServiceProviderEntity): ServiceProvider<bo
entity.keycloakRole,
entity.externalSystem,
entity.requires2fa,
entity.vidisAngebotId,
);
}

Expand Down Expand Up @@ -85,6 +87,17 @@ export class ServiceProviderRepo {
return null;
}

public async findByVidisAngebotId(vidisAngebotId: string): Promise<Option<ServiceProvider<true>>> {
const serviceProvider: Option<ServiceProviderEntity> = await this.em.findOne(ServiceProviderEntity, {
vidisAngebotId: vidisAngebotId,
});
if (serviceProvider) {
return mapEntityToAggregate(serviceProvider);
}

return null;
}

public async findByKeycloakGroup(groupname: string): Promise<ServiceProvider<true>[]> {
const serviceProviders: ServiceProviderEntity[] = await this.em.find(ServiceProviderEntity, {
keycloakGroup: groupname,
Expand Down
2 changes: 1 addition & 1 deletion src/modules/vidis/api/vidis-angebote-api.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export type VidisOfferCategoriesResponse = {
};

export type VidisOfferResponse = {
offerId?: number;
offerId: number;
offerVersion: number;
offerDescription: string;
offerLink: string;
Expand Down
2 changes: 1 addition & 1 deletion src/modules/vidis/domain/vidis-angebot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ export type VidisAngebotKategorie = {
};

export type VidisAngebot = {
angebotId?: number;
angebotId: string;
angebotVersion: number;
angebotDescription: string;
angebotLink: string;
Expand Down
3 changes: 2 additions & 1 deletion src/modules/vidis/vidis.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export class VidisService {

public async getActivatedAngeboteByRegion(regionName: string): Promise<VidisAngebot[]> {
const url: string = this.vidisConfig.BASE_URL + `/o/vidis-rest/v1.0/offers/activated/by-region/${regionName}`;
this.logger.info(`Fetching activated Angebote for region: ${regionName}`);
this.logger.info(`Fetching activated Angebote for region '${regionName}' from ${url}`);
try {
const response: AxiosResponse<VidisResponse<VidisOfferResponse>> = await firstValueFrom(
this.httpService.get(url, {
Expand All @@ -36,6 +36,7 @@ export class VidisService {
const vidisOfferResponses: VidisOfferResponse[] = response.data.items;
const vidisAngebote: VidisAngebot[] = vidisOfferResponses.map((offer: VidisOfferResponse) => {
return {
angebotId: offer.offerId.toString(),
angebotVersion: offer.offerVersion,
angebotDescription: offer.offerDescription,
angebotLink: offer.offerLink,
Expand Down

0 comments on commit 455fb6c

Please sign in to comment.