Advertisement
CustomEntity

Untitled

Dec 30th, 2023
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * @author : Flavio Moreno
  3.  * @mailto : contact@flaviomoreno.fr
  4.  * @created : 2023-12-30
  5.  **/
  6. import { CommandHandler, ICommandHandler } from '@nestjs/cqrs';
  7. import { CreateAppletCommand } from './create-applet.command';
  8. import { AppletRepository } from '../../ports/applet.repository';
  9. import { EventRepository } from '../../../events/core/ports/event.repository';
  10. import { ReactionRepository } from '../../../reactions/core/ports/reaction.repository';
  11. import { UserConnectionRepository } from '../../../user-connections/ports/user-connection.repository';
  12. import { DomainError } from '../../../../shared/domain-error';
  13. import { Applet } from '../../entities/applet.entity';
  14. import { IdProvider } from '../../../../system/id/id.provider';
  15. import { TriggerData } from '../../value-objects/trigger-data.vo';
  16. import { ReactionActionData } from '../../value-objects/reaction-action-data.vo';
  17. import { Event } from '../../value-objects/event.vo';
  18. import { Reaction } from '../../value-objects/reaction.vo';
  19.  
  20. @CommandHandler(CreateAppletCommand)
  21. export class CreateAppletHandler
  22.   implements ICommandHandler<CreateAppletCommand>
  23. {
  24.   constructor(
  25.     private readonly appletRepository: AppletRepository,
  26.     private readonly eventRepository: EventRepository,
  27.     private readonly reactionRepository: ReactionRepository,
  28.     private readonly userConnectionRepository: UserConnectionRepository,
  29.     private readonly idProvider: IdProvider,
  30.   ) {}
  31.  
  32.   async execute(command: CreateAppletCommand) {
  33.     console.log('CreateAppletHandler.execute.command', command);
  34.     const event = await this.eventRepository.findById(command.eventId);
  35.     if (!event) {
  36.       throw new DomainError('NotFound', 'EVENT_NOT_FOUND', 'Event not found');
  37.     }
  38.     const reaction = await this.reactionRepository.findById(command.reactionId);
  39.     if (!reaction) {
  40.       throw new DomainError(
  41.         'NotFound',
  42.         'REACTION_NOT_FOUND',
  43.         'Reaction not found',
  44.       );
  45.     }
  46.  
  47.     const eventConnection = await this.userConnectionRepository.findById(
  48.       command.eventConnectionId,
  49.     );
  50.     if (!eventConnection) {
  51.       throw new DomainError(
  52.         'NotFound',
  53.         'EVENT_CONNECTION_NOT_FOUND',
  54.         'Event connection not found',
  55.       );
  56.     }
  57.  
  58.     const reactionConnection = await this.userConnectionRepository.findById(
  59.       command.reactionConnectionId,
  60.     );
  61.     if (!reactionConnection) {
  62.       throw new DomainError(
  63.         'NotFound',
  64.         'REACTION_CONNECTION_NOT_FOUND',
  65.         'Reaction connection not found',
  66.       );
  67.     }
  68.  
  69.     const applet = new Applet({
  70.       id: this.idProvider.getId(),
  71.       userId: command.userId,
  72.       eventId: command.eventId,
  73.       event: Event.create({
  74.         id: event.data.id,
  75.         applicationId: event.data.applicationId,
  76.         name: event.data.name,
  77.         description: event.data.description,
  78.         notificationMethod: event.data.notificationMethod.value,
  79.         notificationParameters: event.data.notificationParameters.value,
  80.         triggerMapping: event.data.triggerMapping.value,
  81.         createdAt: event.data.createdAt,
  82.       }),
  83.       eventTriggerData: TriggerData.create(command.eventTriggerData),
  84.       eventConnectionId: command.eventConnectionId,
  85.       reactionId: command.reactionId,
  86.       reaction: Reaction.create({
  87.         id: reaction.data.id,
  88.         applicationId: reaction.data.applicationId,
  89.         name: reaction.data.name,
  90.         description: reaction.data.description,
  91.         actionMapping: reaction.data.actionMapping.value,
  92.         createdAt: reaction.data.createdAt,
  93.       }),
  94.       reactionActionData: ReactionActionData.create(command.reactionActionData),
  95.       reactionConnectionId: command.reactionConnectionId,
  96.       name: command.name,
  97.       description: command.description,
  98.       active: true,
  99.       createdAt: new Date(),
  100.     });
  101.  
  102.     await this.appletRepository.save(applet);
  103.   }
  104. }
  105.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement