-
Notifications
You must be signed in to change notification settings - Fork 347
Expand file tree
/
Copy pathEventProcessor.cs
More file actions
89 lines (77 loc) · 2.71 KB
/
EventProcessor.cs
File metadata and controls
89 lines (77 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
using System;
using System.Text.Json;
using AutoMapper;
using CommandsService.Data;
using CommandsService.Dtos;
using CommandsService.Models;
using Microsoft.Extensions.DependencyInjection;
namespace CommandsService.EventProcessing
{
public class EventProcessor : IEventProcessor
{
private readonly IServiceScopeFactory _scopeFactory;
private readonly IMapper _mapper;
public EventProcessor(IServiceScopeFactory scopeFactory, AutoMapper.IMapper mapper)
{
_scopeFactory = scopeFactory;
_mapper = mapper;
}
public void ProcessEvent(string message)
{
var eventType = DetermineEvent(message);
switch (eventType)
{
case EventType.PlatformPublished:
addPlatform(message);
break;
default:
break;
}
}
private EventType DetermineEvent(string notifcationMessage)
{
Console.WriteLine("--> Determining Event");
var eventType = JsonSerializer.Deserialize<GenericEventDto>(notifcationMessage);
switch(eventType.Event)
{
case "Platform_Published":
Console.WriteLine("--> Platform Published Event Detected");
return EventType.PlatformPublished;
default:
Console.WriteLine("--> Could not determine the event type");
return EventType.Undetermined;
}
}
private void addPlatform(string platformPublishedMessage)
{
using (var scope = _scopeFactory.CreateScope())
{
var repo = scope.ServiceProvider.GetRequiredService<ICommandRepo>();
var platformPublishedDto = JsonSerializer.Deserialize<PlatformPublishedDto>(platformPublishedMessage);
try
{
var plat = _mapper.Map<Platform>(platformPublishedDto);
if(!repo.ExternalPlatformExists(plat.ExternalID))
{
repo.CreatePlatform(plat);
repo.SaveChanges();
Console.WriteLine("--> Platform added!");
}
else
{
Console.WriteLine("--> Platform already exists...");
}
}
catch (Exception ex)
{
Console.WriteLine($"--> Could not add Platform to DB {ex.Message}");
}
}
}
}
enum EventType
{
PlatformPublished,
Undetermined
}
}