Skip to content

Commit 27c7551

Browse files
committed
CU-8687aj3gt Updated angular, fixed build and added novu
1 parent 8994824 commit 27c7551

File tree

32 files changed

+133285
-107299
lines changed

32 files changed

+133285
-107299
lines changed

Core/Resgrid.Config/ChatConfig.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,10 @@ public static class ChatConfig
44
{
55
public static string DepartmentChatPrefix = "D1_";
66
public static string DepartmentGroupChatPrefix = "DG1_";
7+
public static string NovuBackendUrl = "";
8+
public static string NovuSocketUrl = "";
9+
public static string NovuEnvironmentId = "";
10+
public static string NovuApplicationId = "";
11+
public static string NovuSecretKey = "";
712
}
813
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using System.Threading.Tasks;
2+
3+
namespace Resgrid.Model.Providers;
4+
5+
public interface INovuProvider
6+
{
7+
Task<bool> CreateSubscriber(string userId, int departmentId, string email, string firstName, string lastName);
8+
}

Providers/Resgrid.Providers.Messaging/Class1.cs

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using Autofac;
2+
using Resgrid.Model.Providers;
3+
4+
namespace Resgrid.Providers.Messaging
5+
{
6+
public class MessagingProviderModule : Module
7+
{
8+
protected override void Load(ContainerBuilder builder)
9+
{
10+
builder.RegisterType<NovuProvider>().As<INovuProvider>().InstancePerLifetimeScope();
11+
}
12+
}
13+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
using Novu;
2+
using Novu.Domain.Models.Subscribers;
3+
using Resgrid.Framework;
4+
using Resgrid.Model.Providers;
5+
6+
namespace Resgrid.Providers.Messaging
7+
{
8+
public class NovuProvider: INovuProvider
9+
{
10+
public async Task<bool> CreateSubscriber(string userId, int departmentId, string email, string firstName, string lastName)
11+
{
12+
try
13+
{
14+
var novuConfiguration = new NovuClientConfiguration
15+
{
16+
Url = Config.ChatConfig.NovuBackendUrl, //"https://novu-api.my-domain.com/v1",
17+
ApiKey = Config.ChatConfig.NovuSecretKey //"12345",
18+
};
19+
20+
var novu = new NovuClient(novuConfiguration);
21+
22+
var subscriberCreateData = new SubscriberCreateData();
23+
subscriberCreateData.SubscriberId = userId;
24+
subscriberCreateData.FirstName = firstName;
25+
subscriberCreateData.LastName = lastName;
26+
subscriberCreateData.Email = email;
27+
subscriberCreateData.Data = new List<AdditionalData>();
28+
subscriberCreateData.Data.Add(new AdditionalData
29+
{
30+
Key = "DepartmentId",
31+
Value = departmentId.ToString()
32+
});
33+
34+
var subscriber = await novu.Subscriber.Create(subscriberCreateData);
35+
36+
if (subscriber != null && subscriber.Data != null)
37+
return true;
38+
39+
return false;
40+
}
41+
catch (Exception e)
42+
{
43+
Logging.LogException(e, "Failed to create novu subscriber");
44+
return false;
45+
}
46+
}
47+
48+
49+
}
50+
}

Providers/Resgrid.Providers.Messaging/Resgrid.Providers.Messaging.csproj

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,18 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10+
<PackageReference Include="Autofac" Version="8.0.0" />
11+
<PackageReference Include="Novu" Version="0.6.0" />
1012
<PackageReference Include="WhatsappBusiness.CloudApi" Version="1.0.35" />
1113
</ItemGroup>
1214

1315
<ItemGroup>
1416
<Folder Include="Whatsapp\" />
1517
</ItemGroup>
1618

19+
<ItemGroup>
20+
<ProjectReference Include="..\..\Core\Resgrid.Config\Resgrid.Config.csproj" />
21+
<ProjectReference Include="..\..\Core\Resgrid.Model\Resgrid.Model.csproj" />
22+
</ItemGroup>
23+
1724
</Project>

Web/Resgrid.Web.Eventing/Resgrid.Web.Eventing.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
<ProjectReference Include="..\..\Providers\Resgrid.Providers.Firebase\Resgrid.Providers.Firebase.csproj" />
6262
<ProjectReference Include="..\..\Providers\Resgrid.Providers.Geo\Resgrid.Providers.Geo.csproj" />
6363
<ProjectReference Include="..\..\Providers\Resgrid.Providers.Marketing\Resgrid.Providers.Marketing.csproj" />
64+
<ProjectReference Include="..\..\Providers\Resgrid.Providers.Messaging\Resgrid.Providers.Messaging.csproj" />
6465
<ProjectReference Include="..\..\Providers\Resgrid.Providers.Migrations\Resgrid.Providers.Migrations.csproj" />
6566
<ProjectReference Include="..\..\Providers\Resgrid.Providers.Number\Resgrid.Providers.Number.csproj" />
6667
<ProjectReference Include="..\..\Providers\Resgrid.Providers.Pdf\Resgrid.Providers.Pdf.csproj" />

Web/Resgrid.Web.Eventing/Startup.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
using Org.BouncyCastle.Asn1.Ess;
5050
using IPNetwork = Microsoft.AspNetCore.HttpOverrides.IPNetwork;
5151
using System.Net.Http;
52+
using Resgrid.Providers.Messaging;
5253

5354
namespace Resgrid.Web.Eventing
5455
{
@@ -75,7 +76,7 @@ public Startup(IHostingEnvironment env)
7576
public void ConfigureServices(IServiceCollection services)
7677
{
7778
IdentityModelEventSource.ShowPII = true;
78-
79+
7980
bool configResult = ConfigProcessor.LoadAndProcessConfig(Configuration["AppOptions:ConfigPath"]);
8081
bool envConfigResult = ConfigProcessor.LoadAndProcessEnvVariables(Configuration.AsEnumerable());
8182

@@ -284,10 +285,10 @@ public void ConfigureServices(IServiceCollection services)
284285
options.RequireHttpsMetadata = false;
285286
options.Audience = JwtConfig.Audience;
286287
options.TokenValidationParameters = tokenValidationParameters;
287-
288+
288289
// We have to hook the OnMessageReceived event in order to
289290
// allow the JWT authentication handler to read the access
290-
// token from the query string when a WebSocket or
291+
// token from the query string when a WebSocket or
291292
// Server-Sent Events request comes in.
292293

293294
// Sending the access token in the query string is required due to
@@ -337,6 +338,7 @@ public void ConfigureContainer(ContainerBuilder builder)
337338
builder.RegisterModule(new MarketingModule());
338339
builder.RegisterModule(new PdfProviderModule());
339340
builder.RegisterModule(new FirebaseProviderModule());
341+
builder.RegisterModule(new MessagingProviderModule());
340342

341343
builder.RegisterType<IdentityUserStore>().As<IUserStore<Model.Identity.IdentityUser>>().InstancePerLifetimeScope();
342344
builder.RegisterType<IdentityRoleStore>().As<IRoleStore<Model.Identity.IdentityRole>>().InstancePerLifetimeScope();

Web/Resgrid.Web.ServicesCore/Controllers/v4/ConfigController.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,11 @@ public async Task<ActionResult<GetConfigResult>> GetConfig(string key)
7373
result.Data.PersonnelLocationMinMeters = MappingConfig.PersonnelLocationMinMeters;
7474
result.Data.UnitLocationMinMeters = MappingConfig.UnitLocationMinMeters;
7575

76+
result.Data.NovuEnvironmentId = ChatConfig.NovuEnvironmentId;
77+
result.Data.NovuApplicationId = ChatConfig.NovuApplicationId;
78+
result.Data.NovuBackendApiUrl = ChatConfig.NovuBackendUrl;
79+
result.Data.NovuSocketUrl = ChatConfig.NovuSocketUrl;
80+
7681
result.PageSize = 1;
7782
result.Status = ResponseHelper.Success;
7883
ResponseHelper.PopulateV4ResponseData(result);

Web/Resgrid.Web.ServicesCore/Controllers/v4/SecurityController.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Resgrid.Web.Services.Helpers;
77
using Resgrid.Web.Services.Models.v4.Security;
88
using Resgrid.Model;
9+
using Resgrid.Model.Providers;
910

1011
namespace Resgrid.Web.Services.Controllers.v4
1112
{
@@ -23,18 +24,21 @@ public class SecurityController : V4AuthenticatedApiControllerbase
2324
private readonly IPermissionsService _permissionsService;
2425
private readonly IPersonnelRolesService _personnelRolesService;
2526
private readonly IUserProfileService _userProfileService;
27+
private readonly INovuProvider _novuProvider;
2628

2729
/// <summary>
2830
/// Operations to perform against the security sub-system
2931
/// </summary>
3032
public SecurityController(IDepartmentsService departmentsService, IDepartmentGroupsService departmentGroupsService,
31-
IPermissionsService permissionsService, IPersonnelRolesService personnelRolesService, IUserProfileService userProfileService)
33+
IPermissionsService permissionsService, IPersonnelRolesService personnelRolesService, IUserProfileService userProfileService,
34+
INovuProvider novuProvider)
3235
{
3336
_departmentsService = departmentsService;
3437
_departmentGroupsService = departmentGroupsService;
3538
_permissionsService = permissionsService;
3639
_personnelRolesService = personnelRolesService;
3740
_userProfileService = userProfileService;
41+
_novuProvider = novuProvider;
3842
}
3943
#endregion Members and Constructors
4044

@@ -95,6 +99,8 @@ public async Task<ActionResult<DepartmentRightsResult>> GetCurrentUsersRights()
9599
result.Data.CanAddNote = _permissionsService.IsUserAllowed(createNotePermission, result.Data.IsAdmin, isGroupAdmin, roles);
96100
result.Data.CanCreateMessage = _permissionsService.IsUserAllowed(createMessagePermission, result.Data.IsAdmin, isGroupAdmin, roles);
97101

102+
var novuSuccess = await _novuProvider.CreateSubscriber(UserId, DepartmentId, profile.MembershipEmail, profile.FirstName, profile.LastName);
103+
98104
result.PageSize = 1;
99105
result.Status = ResponseHelper.Success;
100106
ResponseHelper.PopulateV4ResponseData(result);

0 commit comments

Comments
 (0)