You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

34 lines
853 B

  1. import { Prisma, PrismaClient } from '@prisma/client';
  2. import {User} from '../common';
  3. import {Log, LogParameterData} from './models';
  4. export interface LogService {
  5. create(subject: User, action: string, ...parameters: LogParameterData[]): Promise<Log>
  6. }
  7. export class LogServiceImpl implements LogService {
  8. private readonly prismaClient: PrismaClient
  9. constructor() {
  10. this.prismaClient = new PrismaClient()
  11. }
  12. async create(subject: User, action: string, ...parameters: LogParameterData[]): Promise<Log> {
  13. const createData: Prisma.LogCreateInput = {
  14. subjectUsername: subject.username,
  15. subjectUserId: subject.id,
  16. action,
  17. }
  18. if (parameters.length > 0) {
  19. createData['parameters'] = {
  20. create: parameters,
  21. }
  22. }
  23. return this.prismaClient.log.create({
  24. data: createData,
  25. })
  26. }
  27. }