This commit is contained in:
Bastian Wagner
2024-10-18 16:52:58 +02:00
parent ed6b2b9c45
commit 76e54cfaa0
32 changed files with 552 additions and 7 deletions

View File

@@ -0,0 +1,40 @@
import {
Body,
Controller,
Get,
Post,
Put,
Req,
UseGuards,
} from '@nestjs/common';
import { KeyService } from './key.service';
import { AuthenticatedRequest } from 'src/model/interface/authenticated-request.interface';
import { AuthGuard } from 'src/core/guards/auth.guard';
import { Key } from 'src/model/entitites';
import { CreateKeySystemDto } from 'src/model/dto/create-key-system.dto';
@UseGuards(AuthGuard)
@Controller('key')
export class KeyController {
constructor(private service: KeyService) {}
@Get()
getKeys(@Req() req: AuthenticatedRequest) {
return this.service.getUsersKeys(req.user);
}
@Put()
updateKey(@Req() req: AuthenticatedRequest, @Body() key: Key) {
return this.service.updateKey(req.user, key);
}
@Get('cylinder')
getCylinders(@Req() req: AuthenticatedRequest) {
return this.service.getUsersCylinders(req.user);
}
@Post('system')
createKeySystem(@Req() req: AuthenticatedRequest, @Body() body: CreateKeySystemDto) {
return this.service.createKeySystem(req.user, body);
}
}

View File

@@ -0,0 +1,12 @@
import { Module } from '@nestjs/common';
import { KeyController } from './key.controller';
import { KeyService } from './key.service';
import { DatabaseModule } from 'src/shared/database/database.module';
import { AuthModule } from '../auth/auth.module';
@Module({
controllers: [KeyController],
providers: [KeyService],
imports: [DatabaseModule, AuthModule],
})
export class KeyModule {}

View File

@@ -0,0 +1,77 @@
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { CreateKeySystemDto } from 'src/model/dto';
import { Cylinder, Key, User } from 'src/model/entitites';
import {
CylinderRepository,
KeyActivityRepository,
KeyRepository,
KeySystemRepository,
} from 'src/model/repositories';
@Injectable()
export class KeyService {
constructor(
private readonly keyrepository: KeyRepository,
private readonly cylinderRepository: CylinderRepository,
private readonly systemRepo: KeySystemRepository,
private activityRepo: KeyActivityRepository,
) {}
async getUsersKeys(user: User): Promise<Key[]> {
return this.keyrepository.find({
where: { cylinder: { system: { managers: { id: user.id } } } },
relations: ['cylinder', 'cylinder.system'],
});
}
async updateKey(user: User, key: Key) {
if (!user || !user.id) {
throw new HttpException('forbidden', HttpStatus.FORBIDDEN);
}
await this.keyrepository.findOneOrFail({
where: { cylinder: { system: { managers: { id: user.id } } } },
});
const original = await this.keyrepository.findOne({
where: { id: key.id },
relations: ['cylinder'],
});
this.saveLog(original, user);
return this.keyrepository.save(this.keyrepository.create(key));
}
private saveLog(key: Key, user: User) {
const l = this.activityRepo.create({
cylinder: key.cylinder,
handedOut: key.handedOut,
name: key.name,
id: key.id,
nr: key.nr,
user: user,
});
this.activityRepo.save(l);
}
async getUsersCylinders(user: User): Promise<Cylinder[]> {
if (!user || !user.id) {
throw new HttpException('forbidden', HttpStatus.FORBIDDEN);
}
return this.cylinderRepository.find({
where: { system: { managers: { id: user.id } } },
order: { name: { direction: 'ASC' } },
relations: ['system'],
});
}
async createKeySystem(user: User, systemDTO: CreateKeySystemDto) {
const sys = this.systemRepo.create(systemDTO);
sys.managers = [user];
try {
const res = await this.systemRepo.save(sys);
return res;
} catch (e) {
throw new HttpException(e.code, HttpStatus.UNPROCESSABLE_ENTITY);
}
}
}