Skip to content

Commit 03c068c

Browse files
authored
Merge pull request #1016 from nk-coding/bugfix/change_db_to_sql
Bugfix/change db to sql
2 parents dd16dee + a626004 commit 03c068c

24 files changed

Lines changed: 226 additions & 204 deletions

server/src/database/sql-database.module.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { MikroORM } from '@mikro-orm/core';
22
import { ISchemaGenerator } from '@mikro-orm/core/typings';
3-
import { MikroOrmModule } from '@mikro-orm/nestjs';
3+
import { MikroOrmModule, MikroOrmModuleSyncOptions } from '@mikro-orm/nestjs';
44
import { TsMorphMetadataProvider } from '@mikro-orm/reflection';
55
import { DynamicModule, Logger, Module, OnApplicationShutdown, OnModuleInit } from '@nestjs/common';
66
import { StartUpException } from '../exceptions/StartUpException';
@@ -12,7 +12,9 @@ function getEntityDirectory(): string {
1212
return isProduction() ? './database/entities' : './dist/database/entities';
1313
}
1414

15-
export function loadDatabaseModule(): DynamicModule {
15+
export function loadDatabaseModule(
16+
additionalOptions: MikroOrmModuleSyncOptions = {}
17+
): DynamicModule {
1618
return MikroOrmModule.forRoot({
1719
metadataProvider: TsMorphMetadataProvider,
1820
baseDir: process.cwd(),
@@ -22,6 +24,7 @@ export function loadDatabaseModule(): DynamicModule {
2224
type: 'mysql',
2325
debug: false,
2426
...StaticSettings.getService().getDatabaseConnectionInformation(),
27+
...additionalOptions,
2528
});
2629
}
2730

server/src/module/scheincriteria/scheincriteria.module.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
import { MikroOrmModule } from '@mikro-orm/nestjs';
12
import { Logger, Module, OnModuleInit } from '@nestjs/common';
3+
import { ScheincriteriaEntity } from '../../database/entities/scheincriteria.entity';
24
import { ScheinexamModule } from '../scheinexam/scheinexam.module';
35
import { SheetModule } from '../sheet/sheet.module';
46
import { ShortTestModule } from '../short-test/short-test.module';
@@ -19,7 +21,14 @@ import { ScheincriteriaService } from './scheincriteria.service';
1921
export type ScheincriteriaConstructor = new (...args: any[]) => Scheincriteria;
2022

2123
@Module({
22-
imports: [StudentModule, SheetModule, ScheinexamModule, TutorialModule, ShortTestModule],
24+
imports: [
25+
StudentModule,
26+
SheetModule,
27+
ScheinexamModule,
28+
TutorialModule,
29+
ShortTestModule,
30+
MikroOrmModule.forFeature([ScheincriteriaEntity]),
31+
],
2332
providers: [ScheincriteriaService],
2433
controllers: [ScheincriteriaController],
2534
exports: [ScheincriteriaService],

server/src/module/scheincriteria/scheincriteria.service.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { EntityRepository } from '@mikro-orm/core';
2-
import { EntityManager } from '@mikro-orm/mysql';
32
import { Injectable, NotFoundException } from '@nestjs/common';
43
import { FormDataResponse } from 'shared/model/FormTypes';
54
import {
@@ -24,6 +23,7 @@ import { Scheincriteria } from './container/Scheincriteria';
2423
import { ScheincriteriaContainer } from './container/scheincriteria.container';
2524
import { ScheinCriteriaDTO } from './scheincriteria.dto';
2625
import { GradingService, StudentAndGradings } from '../student/grading.service';
26+
import { InjectRepository } from '@mikro-orm/nestjs';
2727

2828
interface CalculationParams {
2929
criterias: ScheincriteriaEntity[];
@@ -50,19 +50,16 @@ interface GetRequiredDocsParams {
5050
export class ScheincriteriaService
5151
implements CRUDService<IScheinCriteria, ScheinCriteriaDTO, ScheincriteriaEntity>
5252
{
53-
private readonly repository: EntityRepository<ScheincriteriaEntity>;
54-
5553
constructor(
5654
private readonly studentService: StudentService,
5755
private readonly sheetService: SheetService,
5856
private readonly scheinexamService: ScheinexamService,
5957
private readonly tutorialService: TutorialService,
6058
private readonly shortTestService: ShortTestService,
6159
private readonly gradingService: GradingService,
62-
entityManager: EntityManager
63-
) {
64-
this.repository = entityManager.fork().getRepository(ScheincriteriaEntity);
65-
}
60+
@InjectRepository(ScheincriteriaEntity)
61+
private readonly repository: EntityRepository<ScheincriteriaEntity>
62+
) {}
6663

6764
/**
6865
* @returns All scheincriterias saved in the database.

server/src/module/scheinexam/scheinexam.module.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
import { MikroOrmModule } from '@mikro-orm/nestjs';
12
import { Module } from '@nestjs/common';
3+
import { Scheinexam } from '../../database/entities/scheinexam.entity';
24
import { ScheinexamController } from './scheinexam.controller';
35
import { ScheinexamService } from './scheinexam.service';
46

57
@Module({
8+
imports: [MikroOrmModule.forFeature([Scheinexam])],
69
controllers: [ScheinexamController],
710
providers: [ScheinexamService],
811
exports: [ScheinexamService],

server/src/module/scheinexam/scheinexam.service.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { EntityRepository } from '@mikro-orm/core';
2-
import { EntityManager } from '@mikro-orm/mysql';
2+
import { InjectRepository } from '@mikro-orm/nestjs';
33
import { Injectable, NotFoundException } from '@nestjs/common';
44
import { IScheinExam } from 'shared/model/Scheinexam';
55
import { Scheinexam } from '../../database/entities/scheinexam.entity';
@@ -8,11 +8,10 @@ import { ScheinexamDTO } from './scheinexam.dto';
88

99
@Injectable()
1010
export class ScheinexamService implements CRUDService<IScheinExam, ScheinexamDTO, Scheinexam> {
11-
private readonly repository: EntityRepository<Scheinexam>;
12-
13-
constructor(entityManager: EntityManager) {
14-
this.repository = entityManager.fork().getRepository(Scheinexam);
15-
}
11+
constructor(
12+
@InjectRepository(Scheinexam)
13+
private readonly repository: EntityRepository<Scheinexam>
14+
) {}
1615

1716
/**
1817
* @returns All scheinexams saved in the database.

server/src/module/session/session.module.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
import { MikroOrmModule } from '@mikro-orm/nestjs';
12
import { Module } from '@nestjs/common';
3+
import { SessionEntity } from '../../database/entities/session.entity';
24
import { SessionService } from './session.service';
35

46
@Module({
7+
imports: [MikroOrmModule.forFeature([SessionEntity])],
58
providers: [SessionService],
69
exports: [SessionService],
710
})

server/src/module/session/session.service.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { EntityRepository } from '@mikro-orm/core';
2-
import { EntityManager } from '@mikro-orm/mysql';
1+
import { EntityRepository, MikroORM, UseRequestContext } from '@mikro-orm/core';
2+
import { InjectRepository } from '@mikro-orm/nestjs';
33
import { Injectable, Logger } from '@nestjs/common';
44
import { SessionEntity } from '../../database/entities/session.entity';
55
import {
@@ -10,12 +10,14 @@ import {
1010
@Injectable()
1111
export class SessionService implements ISessionService {
1212
private readonly logger = new Logger(SessionService.name);
13-
private readonly repository: EntityRepository<SessionEntity>;
1413

15-
constructor(entityManager: EntityManager) {
16-
this.repository = entityManager.fork().getRepository(SessionEntity);
17-
}
14+
constructor(
15+
private readonly orm: MikroORM,
16+
@InjectRepository(SessionEntity)
17+
private readonly repository: EntityRepository<SessionEntity>
18+
) {}
1819

20+
@UseRequestContext()
1921
async setSession(sid: string, sessionData: SessionData): Promise<void> {
2022
this.logger.log(`SET session for ID ${sid}`);
2123
const session = (await this.findSession(sid)) ?? new SessionEntity(sid, sessionData);
@@ -24,12 +26,14 @@ export class SessionService implements ISessionService {
2426
await this.repository.persistAndFlush(session);
2527
}
2628

29+
@UseRequestContext()
2730
async getSession(sid: string): Promise<SessionData | null> {
2831
this.logger.log(`GET session for ID ${sid}`);
2932
const session = await this.findSession(sid);
3033
return session?.sessionData ?? null;
3134
}
3235

36+
@UseRequestContext()
3337
async destroySession(sid: string): Promise<void> {
3438
this.logger.log(`DESTROY session with ID ${sid}`);
3539
const session = await this.findSession(sid);

server/src/module/settings/settings.module.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1+
import { MikroOrmModule } from '@mikro-orm/nestjs';
12
import { Global, Module } from '@nestjs/common';
3+
import { Setting } from '../../database/entities/settings.entity';
24
import { SettingsController } from './settings.controller';
35
import { SettingsService } from './settings.service';
46

57
@Global()
68
@Module({
9+
imports: [MikroOrmModule.forFeature([Setting])],
710
providers: [SettingsService],
811
exports: [SettingsService],
912
controllers: [SettingsController],

server/src/module/settings/settings.service.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { EntityRepository } from '@mikro-orm/core';
2-
import { EntityManager } from '@mikro-orm/mysql';
1+
import { EntityRepository, MikroORM, UseRequestContext } from '@mikro-orm/core';
2+
import { InjectRepository } from '@mikro-orm/nestjs';
33
import { Injectable, OnApplicationBootstrap } from '@nestjs/common';
44
import { IClientSettings, IMailingSettings } from 'shared/model/Settings';
55
import { Setting } from '../../database/entities/settings.entity';
@@ -9,11 +9,12 @@ import { StaticSettings } from './settings.static';
99

1010
@Injectable()
1111
export class SettingsService extends StaticSettings implements OnApplicationBootstrap {
12-
private readonly repository: EntityRepository<Setting>;
13-
14-
constructor(entityManager: EntityManager) {
12+
constructor(
13+
private readonly orm: MikroORM,
14+
@InjectRepository(Setting)
15+
private readonly repository: EntityRepository<Setting>
16+
) {
1517
super();
16-
this.repository = entityManager.fork().getRepository(Setting);
1718
}
1819

1920
/**
@@ -56,6 +57,7 @@ export class SettingsService extends StaticSettings implements OnApplicationBoot
5657
*
5758
* If there is ONE nothing is done.
5859
*/
60+
@UseRequestContext()
5961
async onApplicationBootstrap(): Promise<void> {
6062
const settings = await this.repository.findOne({
6163
id: Setting.SETTING_ID,

server/src/module/sheet/sheet.module.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
import { MikroOrmModule } from '@mikro-orm/nestjs';
12
import { Module } from '@nestjs/common';
3+
import { Sheet } from '../../database/entities/sheet.entity';
24
import { SheetController } from './sheet.controller';
35
import { SheetService } from './sheet.service';
46

57
@Module({
8+
imports: [MikroOrmModule.forFeature([Sheet])],
69
controllers: [SheetController],
710
providers: [SheetService],
811
exports: [SheetService],

0 commit comments

Comments
 (0)