mods
Some checks failed
Run Unit-Tests / test_frontend (push) Has been cancelled
Run Unit-Tests / test_backend (push) Has been cancelled

This commit is contained in:
Bastian Wagner
2026-02-16 13:07:31 +01:00
parent 9ea2229f5a
commit b4826cab2c
10 changed files with 65 additions and 20 deletions

View File

@@ -1,3 +1,6 @@
# Application
DEVELOP_MODE=false
# Database # Database
MYSQL_USER=db_user MYSQL_USER=db_user
MYSQL_PASSWORD=PAssword123 MYSQL_PASSWORD=PAssword123

View File

@@ -4,10 +4,11 @@ import { CylinderService } from './cylinder.service';
import { AuthModule } from '../auth/auth.module'; import { AuthModule } from '../auth/auth.module';
import { DatabaseModule } from 'src/shared/database/database.module'; import { DatabaseModule } from 'src/shared/database/database.module';
import { SharedServiceModule } from 'src/shared/service/shared.service.module'; import { SharedServiceModule } from 'src/shared/service/shared.service.module';
import { ConfigService } from '@nestjs/config';
@Module({ @Module({
controllers: [CylinderController], controllers: [CylinderController],
providers: [CylinderService], providers: [CylinderService, ConfigService],
imports: [AuthModule, DatabaseModule, SharedServiceModule], imports: [AuthModule, DatabaseModule, SharedServiceModule],
}) })
export class CylinderModule {} export class CylinderModule {}

View File

@@ -1,4 +1,5 @@
import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { Cylinder, User } from 'src/model/entitites'; import { Cylinder, User } from 'src/model/entitites';
import { ActivityRepository, CylinderRepository, KeyRepository } from 'src/model/repositories'; import { ActivityRepository, CylinderRepository, KeyRepository } from 'src/model/repositories';
import { HelperService } from 'src/shared/service/system.helper.service'; import { HelperService } from 'src/shared/service/system.helper.service';
@@ -9,15 +10,24 @@ export class CylinderService {
private readonly cylinderRepo: CylinderRepository, private readonly cylinderRepo: CylinderRepository,
private readonly keyRepo: KeyRepository, private readonly keyRepo: KeyRepository,
private systemActivityRepo: ActivityRepository, private systemActivityRepo: ActivityRepository,
private readonly helper: HelperService private readonly helper: HelperService,
private readonly configService: ConfigService
) {} ) {}
get isDevelopMode(): boolean {
return (this.configService.get('DEVELOP_MODE') || '').toLowerCase() == 'true';
}
async getCylinders(user: User): Promise<Cylinder[]> { async getCylinders(user: User): Promise<Cylinder[]> {
const c = await this.cylinderRepo.find({ let c = await this.cylinderRepo.find({
where: { system: { managers: { id: user.id } } }, where: { system: { managers: { id: user.id } } },
order: { name: { direction: 'ASC' } }, order: { name: { direction: 'ASC' } },
relations: ['system', 'keys'], relations: ['system', 'keys'],
}); });
if (this.isDevelopMode) {
c = c.filter(c => c.name.toLowerCase().includes('develop') || c.system.name.toLocaleLowerCase().includes('develop'))
}
return c; return c;
} }

View File

@@ -4,10 +4,11 @@ import { KeyService } from './key.service';
import { DatabaseModule } from 'src/shared/database/database.module'; import { DatabaseModule } from 'src/shared/database/database.module';
import { AuthModule } from '../auth/auth.module'; import { AuthModule } from '../auth/auth.module';
import { SharedServiceModule } from 'src/shared/service/shared.service.module'; import { SharedServiceModule } from 'src/shared/service/shared.service.module';
import { ConfigService } from '@nestjs/config';
@Module({ @Module({
controllers: [KeyController], controllers: [KeyController],
providers: [KeyService], providers: [KeyService, ConfigService],
imports: [DatabaseModule, AuthModule, SharedServiceModule], imports: [DatabaseModule, AuthModule, SharedServiceModule],
}) })
export class KeyModule {} export class KeyModule {}

View File

@@ -8,7 +8,9 @@ import {
import { KeyHandoutRepository } from 'src/model/repositories/key-handout.repository'; import { KeyHandoutRepository } from 'src/model/repositories/key-handout.repository';
import { ActivityHelperService } from 'src/shared/service/activity.logger.service'; import { ActivityHelperService } from 'src/shared/service/activity.logger.service';
import { HelperService } from 'src/shared/service/system.helper.service'; import { HelperService } from 'src/shared/service/system.helper.service';
import { IsNull, Not } from 'typeorm'; import { FindOperator, IsNull, Not } from 'typeorm';
import { faker } from '@faker-js/faker';
import { ConfigService } from '@nestjs/config';
@Injectable() @Injectable()
export class KeyService { export class KeyService {
@@ -18,27 +20,39 @@ export class KeyService {
private readonly handoverRepo: KeyHandoutRepository, private readonly handoverRepo: KeyHandoutRepository,
private readonly activityService: ActivityHelperService, private readonly activityService: ActivityHelperService,
private readonly helper: HelperService, private readonly helper: HelperService,
private readonly configService: ConfigService
) {} ) {}
get isDevelopMode(): boolean {
return (this.configService.get('DEVELOP_MODE') || '').toLowerCase() == 'true';
}
async getUsersKeys(user: User): Promise<Key[]> { async getUsersKeys(user: User): Promise<Key[]> {
const keys = await this.keyrepository.find({ let keys = await this.keyrepository.find({
where: { cylinder: { system: { managers: { id: user.id } } }, keyLost: IsNull() }, where: { cylinder: { system: { managers: { id: user.id } } }, keyLost: IsNull() },
relations: ['cylinder', 'cylinder.system', 'customer'], relations: ['cylinder', 'cylinder.system', 'customer'],
}); });
for (let k of keys) { for (let k of keys) {
k.customer = await this.getCustomerOfLastHandout(user, k.id); k.customer = await this.getCustomerOfLastHandout(user, k.id);
} }
if (this.isDevelopMode) {
keys = keys.filter(k => k.cylinder.some(c => c.name.toLowerCase().includes('develop') || c.system.name.toLowerCase().includes('develop')))
}
return keys; return keys;
} }
async getLostKeys(user: User): Promise<Key[]> { async getLostKeys(user: User): Promise<Key[]> {
const keys = await this.keyrepository.find({ let keys = await this.keyrepository.find({
where: { cylinder: { system: { managers: { id: user.id } } }, keyLost: Not(IsNull()) }, where: { cylinder: { system: { managers: { id: user.id } } }, keyLost: Not(IsNull()) },
relations: ['cylinder', 'cylinder.system', 'customer'], relations: ['cylinder', 'cylinder.system', 'customer'],
}); });
for (let k of keys) { for (let k of keys) {
k.customer = await this.getCustomerOfLastHandout(user, k.id); k.customer = await this.getCustomerOfLastHandout(user, k.id);
} }
if (this.isDevelopMode) {
keys = keys.filter(k => k.cylinder.some(c => c.name.toLowerCase().includes('develop') || c.system.name.toLowerCase().includes('develop')))
}
return keys; return keys;
} }

View File

@@ -4,10 +4,11 @@ import { SystemController } from './system.controller';
import { AuthModule } from '../auth/auth.module'; import { AuthModule } from '../auth/auth.module';
import { DatabaseModule } from 'src/shared/database/database.module'; import { DatabaseModule } from 'src/shared/database/database.module';
import { MailModule } from '../mail/mail.module'; import { MailModule } from '../mail/mail.module';
import { ConfigService } from '@nestjs/config';
@Module({ @Module({
controllers: [SystemController], controllers: [SystemController],
providers: [SystemService], providers: [SystemService, ConfigService],
imports: [AuthModule, DatabaseModule, MailModule], imports: [AuthModule, DatabaseModule, MailModule],
}) })
export class SystemModule {} export class SystemModule {}

View File

@@ -5,6 +5,7 @@ import { ActivityRepository, KeySystemRepository, UserRepository } from 'src/mod
import { User } from 'src/model/entitites'; import { User } from 'src/model/entitites';
import { IUser } from 'src/model/interface'; import { IUser } from 'src/model/interface';
import { MailService } from '../mail/mail.service'; import { MailService } from '../mail/mail.service';
import { ConfigService } from '@nestjs/config';
@Injectable() @Injectable()
export class SystemService { export class SystemService {
@@ -12,8 +13,13 @@ export class SystemService {
private systemRepo: KeySystemRepository, private systemRepo: KeySystemRepository,
private userRepo: UserRepository, private userRepo: UserRepository,
private systemActivityRepo: ActivityRepository, private systemActivityRepo: ActivityRepository,
private mailService: MailService private mailService: MailService,
private readonly configService: ConfigService
) {} ) {}
get isDevelopMode(): boolean {
return (this.configService.get('DEVELOP_MODE') || '').toLowerCase() == 'true';
}
async create(user: User, createSystemDto: CreateSystemDto) { async create(user: User, createSystemDto: CreateSystemDto) {
const sys = this.systemRepo.create(createSystemDto); const sys = this.systemRepo.create(createSystemDto);
@@ -34,11 +40,17 @@ export class SystemService {
} }
} }
findAll(user: User) { async findAll(user: User) {
return this.systemRepo.find({ let systems = await this.systemRepo.find({
where: { managers: { id: user.id } }, where: { managers: { id: user.id } },
order: { name: { direction: 'ASC' } }, order: { name: { direction: 'ASC' } },
}); });
if (this.isDevelopMode) {
systems = systems.filter(s => s.name.toLocaleLowerCase().includes('develop'));
}
return systems;
} }
findOne(id: string) { findOne(id: string) {

View File

@@ -28,12 +28,12 @@
<button matButton [mat-dialog-close]="null">Abbrechen</button> <button matButton [mat-dialog-close]="null">Abbrechen</button>
@if(key.keyLost != null) { @if(key.keyLost != null) {
<button matButton="elevated" (click)="closeFound()"> <button matButton="elevated" (click)="closeFound()" class="btn-primary">
<mat-icon>report</mat-icon> <mat-icon>report</mat-icon>
Als gefunden melden Als gefunden melden
</button> </button>
} @else { } @else {
<button matButton="elevated" (click)="closeWithData()"> <button matButton="elevated" (click)="closeWithData()" class="btn-warning">
<mat-icon>report_problem</mat-icon> <mat-icon>report_problem</mat-icon>
Als verloren melden Als verloren melden
</button> </button>

View File

@@ -47,9 +47,7 @@ export class KeysComponent {
valueFormatter: (data: any) => { return data; }, valueFormatter: (data: any) => { return data; },
cellRenderer: (data: any) => {return data.value?.map((m: ICylinder) => m.name).join(', ')}, cellRenderer: (data: any) => {return data.value?.map((m: ICylinder) => m.name).join(', ')},
tooltipValueGetter: (data: any) => data.value?.map((m: ICylinder) => m.name).join(','), tooltipValueGetter: (data: any) => data.value?.map((m: ICylinder) => m.name).join(','),
onCellDoubleClicked(event) { onCellDoubleClicked(event) {},
},
cellEditorPopup: true, cellEditorPopup: true,
filterValueGetter: (params: any) => {return params.data.cylinder?.map((m: ICylinder) => m.name).join(', ')}, filterValueGetter: (params: any) => {return params.data.cylinder?.map((m: ICylinder) => m.name).join(', ')},
}, },

View File

@@ -79,10 +79,7 @@ export class AgDeleteKeyComponent implements ICellRendererAngularComp {
}) })
).subscribe({ ).subscribe({
next: () => { next: () => {
let data = this.params.api.getGridOption("rowData"); this.setData();
data = data?.filter(d => d.id != this.key.id);
this.params.api.setGridOption("rowData", data);
this.params.api.setGridOption("loading", false);
}, },
error: () => { error: () => {
this.params.api.setGridOption("loading", false); this.params.api.setGridOption("loading", false);
@@ -122,8 +119,16 @@ export class AgDeleteKeyComponent implements ICellRendererAngularComp {
this.key.keyLost = n; this.key.keyLost = n;
this.params.api.refreshCells(); this.params.api.refreshCells();
this.api.updateKey(this.key).subscribe(); this.api.updateKey(this.key).subscribe();
this.setData();
} }
} }
}) })
} }
private setData() {
let data = this.params.api.getGridOption("rowData");
data = data?.filter(d => d.id != this.key.id);
this.params.api.setGridOption("rowData", data);
this.params.api.setGridOption("loading", false);
}
} }