Skip to content

Commit

Permalink
EW-1005: Add school data to TSP sync. (#5296)
Browse files Browse the repository at this point in the history
* Add school data to TSP sync.
---------

Co-authored-by: Alexander Weber <[email protected]>
  • Loading branch information
mkreuzkam-cap and alweber-cap authored Oct 23, 2024
1 parent d567a04 commit 73165ca
Show file tree
Hide file tree
Showing 19 changed files with 941 additions and 43 deletions.
10 changes: 7 additions & 3 deletions apps/server/src/infra/sync/sync.module.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
import { Configuration } from '@hpi-schul-cloud/commons/lib';
import { ConsoleWriterModule } from '@infra/console';
import { RabbitMQWrapperModule } from '@infra/rabbitmq';
import { TspClientModule } from '@infra/tsp-client/tsp-client.module';
import { LegacySchoolModule } from '@modules/legacy-school';
import { SchoolModule } from '@modules/school';
import { SystemModule } from '@modules/system';
import { Module } from '@nestjs/common';
import { LoggerModule } from '@src/core/logger';
import { RabbitMQWrapperModule } from '@infra/rabbitmq';
import { ProvisioningModule } from '@src/modules/provisioning';
import { SyncConsole } from './console/sync.console';
import { SyncService } from './service/sync.service';
import { TspOauthDataMapper } from './tsp/tsp-oauth-data.mapper';
import { TspSyncService } from './tsp/tsp-sync.service';
import { TspSyncStrategy } from './tsp/tsp-sync.strategy';
import { SyncUc } from './uc/sync.uc';
Expand All @@ -18,14 +20,16 @@ import { SyncUc } from './uc/sync.uc';
LoggerModule,
ConsoleWriterModule,
...((Configuration.get('FEATURE_TSP_SYNC_ENABLED') as boolean)
? [TspClientModule, SystemModule, SchoolModule, LegacySchoolModule, RabbitMQWrapperModule]
? [TspClientModule, SystemModule, SchoolModule, LegacySchoolModule, RabbitMQWrapperModule, ProvisioningModule]
: []),
],
providers: [
SyncConsole,
SyncUc,
SyncService,
...((Configuration.get('FEATURE_TSP_SYNC_ENABLED') as boolean) ? [TspSyncStrategy, TspSyncService] : []),
...((Configuration.get('FEATURE_TSP_SYNC_ENABLED') as boolean)
? [TspSyncStrategy, TspSyncService, TspOauthDataMapper]
: []),
],
exports: [SyncConsole],
})
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { TspDataFetchedLoggable } from './tsp-data-fetched.loggable';

describe(TspDataFetchedLoggable.name, () => {
let loggable: TspDataFetchedLoggable;

beforeAll(() => {
loggable = new TspDataFetchedLoggable(1, 2, 3, 4);
});

describe('when loggable is initialized', () => {
it('should be defined', () => {
expect(loggable).toBeDefined();
});
});

describe('getLogMessage', () => {
it('should return a log message', () => {
expect(loggable.getLogMessage()).toEqual({
message: `Fetched 1 teachers, 2 students and 3 classes for the last 4 days from TSP`,
data: {
tspTeacherCount: 1,
tspStudentCount: 2,
tspClassesCount: 3,
daysFetched: 4,
},
});
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { Loggable, LogMessage } from '@src/core/logger';

export class TspDataFetchedLoggable implements Loggable {
constructor(
private readonly tspTeacherCount: number,
private readonly tspStudentCount: number,
private readonly tspClassesCount: number,
private readonly daysFetched: number
) {}

getLogMessage(): LogMessage {
const message: LogMessage = {
message: `Fetched ${this.tspTeacherCount} teachers, ${this.tspStudentCount} students and ${this.tspClassesCount} classes for the last ${this.daysFetched} days from TSP`,
data: {
tspTeacherCount: this.tspTeacherCount,
tspStudentCount: this.tspStudentCount,
tspClassesCount: this.tspClassesCount,
daysFetched: this.daysFetched,
},
};

return message;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { TspMissingExternalIdLoggable } from './tsp-missing-external-id.loggable';

describe(TspMissingExternalIdLoggable.name, () => {
let loggable: TspMissingExternalIdLoggable;

beforeAll(() => {
loggable = new TspMissingExternalIdLoggable('teacher');
});

describe('when loggable is initialized', () => {
it('should be defined', () => {
expect(loggable).toBeDefined();
});
});

describe('getLogMessage', () => {
it('should return a log message', () => {
expect(loggable.getLogMessage()).toEqual({
message: `A teacher is missing an id. It is skipped.`,
data: {
objectType: 'teacher',
},
});
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { Loggable, LogMessage } from '@src/core/logger';

export class TspMissingExternalIdLoggable implements Loggable {
constructor(private readonly objectType: string) {}

getLogMessage(): LogMessage {
const message: LogMessage = {
message: `A ${this.objectType} is missing an id. It is skipped.`,
data: {
objectType: this.objectType,
},
};

return message;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { TspSyncedUsersLoggable } from './tsp-synced-users.loggable';

describe(TspSyncedUsersLoggable.name, () => {
let loggable: TspSyncedUsersLoggable;

beforeAll(() => {
loggable = new TspSyncedUsersLoggable(10);
});

describe('when loggable is initialized', () => {
it('should be defined', () => {
expect(loggable).toBeDefined();
});
});

describe('getLogMessage', () => {
it('should return a log message', () => {
expect(loggable.getLogMessage()).toEqual({
message: `Synced 10 users from TSP.`,
data: {
syncedUsers: 10,
},
});
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { Loggable, LogMessage } from '@src/core/logger';

export class TspSyncedUsersLoggable implements Loggable {
constructor(private readonly syncedUsers: number) {}

getLogMessage(): LogMessage {
const message: LogMessage = {
message: `Synced ${this.syncedUsers} users from TSP.`,
data: {
syncedUsers: this.syncedUsers,
},
};

return message;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { TspSyncingUsersLoggable } from './tsp-syncing-users.loggable';

describe(TspSyncingUsersLoggable.name, () => {
let loggable: TspSyncingUsersLoggable;

beforeAll(() => {
loggable = new TspSyncingUsersLoggable(10);
});

describe('when loggable is initialized', () => {
it('should be defined', () => {
expect(loggable).toBeDefined();
});
});

describe('getLogMessage', () => {
it('should return a log message', () => {
expect(loggable.getLogMessage()).toEqual({
message: `Syncing 10 users from TSP.`,
data: {
syncingUsers: 10,
},
});
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { Loggable, LogMessage } from '@src/core/logger';

export class TspSyncingUsersLoggable implements Loggable {
constructor(private readonly syncingUsers: number) {}

getLogMessage(): LogMessage {
const message: LogMessage = {
message: `Syncing ${this.syncingUsers} users from TSP.`,
data: {
syncingUsers: this.syncingUsers,
},
};

return message;
}
}
Loading

0 comments on commit 73165ca

Please sign in to comment.