Skip to content

Instantly share code, notes, and snippets.

@brandonchadlange
Created October 17, 2022 05:59
Show Gist options
  • Save brandonchadlange/2a39434b97e6f8198f66f5853e50e81f to your computer and use it in GitHub Desktop.
Save brandonchadlange/2a39434b97e6f8198f66f5853e50e81f to your computer and use it in GitHub Desktop.
A service to create and fire events
import { Injectable } from '@nestjs/common';
import { PrismaService } from 'src/prisma.service';
import { EventCreateDTO } from '../dto/event-create.dto';
import { OnEvent, EventEmitter2 } from '@nestjs/event-emitter';
import { EventTriggeredEvent } from '../events/event-triggered.event';
import { HttpService } from '@nestjs/axios';
@Injectable()
export class EventService {
constructor(
private readonly prisma: PrismaService,
private eventEmitter: EventEmitter2,
private readonly httpService: HttpService,
) {}
async createEvent(data: EventCreateDTO) {
const event = await this.prisma.event.create({
data: {
name: data.name,
},
});
return event;
}
async triggerEvent(eventId: number, payload) {
this.eventEmitter.emit(
'event.triggered',
new EventTriggeredEvent(eventId, payload),
);
}
@OnEvent('event.triggered')
public async onTriggerRecieved(event: EventTriggeredEvent) {
const actions = await this.prisma.action.findMany({
where: {
event_id: event.eventId,
},
});
for await (const action of actions) {
try {
await this.httpService.axiosRef.post(trigger.endpoint, event.payload, {
baseURL: null,
insecureHTTPParser: true,
});
} catch (err) {
console.log(err);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment