Skip to content

Commit

Permalink
Merge pull request #350 from bcgov/BCPSDEMS-1584-duty-updates
Browse files Browse the repository at this point in the history
Duty message updates and minor style changes
  • Loading branch information
leewrigh authored Nov 24, 2023
2 parents c561046 + b2ffd29 commit bf5ff2e
Show file tree
Hide file tree
Showing 25 changed files with 145 additions and 75 deletions.
Original file line number Diff line number Diff line change
@@ -1,27 +1,47 @@
namespace edt.disclosure.HttpClients.Services.EdtDisclosure;

namespace Common.Models.EDT;

using System.Text.Json;

public class EdtDisclosureUserProvisioningModel
public abstract class EdtDisclosureUserProvisioningModel
{
public string? Id { get; set; }
public string? Key { get; set; }
public string? UserName { get; set; }
public string? FullName { get; set; }
public string? Email { get; set; }
public string? Role { get; set; }
public bool? IsActive => true;
public bool? IsActive { get; set; } = true;
public string? AccountType { get; set; }
public string? SystemName { get; set; } = "DigitalEvidenceDisclosure";
public int AccessRequestId { get; set; }
public string? OrganizationType { get; set; }
public string? OrganizationName { get; set; }
public override string ToString() => JsonSerializer.Serialize(this);

}

public class EdtDisclosureDefenceUserProvisioningModel : EdtDisclosureUserProvisioningModel
{
public new string? OrganizationType { get; set; } = "Defence";
public new string? OrganizationName { get; set; } = "BC Law";

}

public class EdtDisclosurePublicUserProvisioningModel : EdtDisclosureUserProvisioningModel
{
public new string? OrganizationType { get; set; } = "Public";
public new string? OrganizationName { get; set; } = "Out-of-custody-accused";
public string PersonKey { get; set; } = string.Empty; // ties to participant unique id in core for disclosure for public users

}

public class CaseId
{
public int Id { get; set; }
public string Key { get; set; } = string.Empty;

}



/// <summary>
Expand All @@ -35,5 +55,3 @@ public class EdtUserGroup

}



2 changes: 1 addition & 1 deletion backend/edt.disclosure/Features/Defence/CaseKeyQuery.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace edt.disclosure.Features.Defence;

using edt.disclosure.Features.Cases;
using Common.Models.EDT;
using edt.disclosure.HttpClients.Services.EdtDisclosure;
using MediatR;

Expand Down
8 changes: 4 additions & 4 deletions backend/edt.disclosure/Features/Defence/CaseModel.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace edt.disclosure.Features.Cases;

public class CaseModel
public class CaseModelx
{

public string Name { get; set; } = string.Empty;
Expand All @@ -11,10 +11,10 @@ public class CaseModel

public string Description { get; set; } = string.Empty;

public List<Field> Fields { get; set; }
public List<Fieldx> Fields { get; set; }

}
public class Field
public class Fieldx

{
public int Id { get; set; }
Expand All @@ -23,7 +23,7 @@ public class Field
public bool Display { get; set; } = true;
}

public class CaseId
public class CaseIdx
{
public int Id { get; set; }
public string Key { get; set; } = string.Empty;
Expand Down
2 changes: 1 addition & 1 deletion backend/edt.disclosure/Features/Defence/CaseQuery.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace edt.disclosure.Features.Defence;

using edt.disclosure.Features.Cases;
using Common.Models.EDT;
using edt.disclosure.HttpClients.Services.EdtDisclosure;
using MediatR;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace edt.disclosure.Features.Defence;

using edt.disclosure.Features.Cases;
using Common.Models.EDT;
using MediatR;
using Microsoft.AspNetCore.Mvc;
using Prometheus;
Expand All @@ -16,7 +16,7 @@ public class DefenceDisclosureController : ControllerBase

public DefenceDisclosureController(IMediator mediator)
{
_mediator = mediator;
this._mediator = mediator;
}
[HttpGet("folio/{folioID}")]
[ProducesResponseType(StatusCodes.Status200OK)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ namespace edt.disclosure.HttpClients.Services.EdtDisclosure;
using AutoMapper;
using Common.Models.EDT;
using edt.disclosure.Exceptions;
using edt.disclosure.Features.Cases;
using edt.disclosure.Infrastructure.Telemetry;
using edt.disclosure.Kafka.Model;
using edt.disclosure.Models;
Expand Down Expand Up @@ -708,7 +707,7 @@ public async Task<bool> RemoveUserFromCase(string userId, int caseId)



public async Task<Features.Cases.CaseModel> FindCase(string field, string value)
public async Task<CaseModel> FindCase(string field, string value)
{
ProcessedJobCount.Inc();
var searchString = Uri.EscapeDataString(field) + ':' + Uri.EscapeDataString(value);
Expand Down Expand Up @@ -780,7 +779,7 @@ public async Task<int> CreateCase(EdtCaseDto caseInfo)
{
throw new EdtDisclosureServiceException($"Invalid case creation request received");
}
var response = await this.PostAsync<Features.Cases.CaseModel>($"api/v1/org-units/1/cases", caseInfo);
var response = await this.PostAsync<CaseModel>($"api/v1/org-units/1/cases", caseInfo);
if (!response.IsSuccess)
{
var msg = $"Case creation failed {caseInfo.Name} {string.Join(",", response.Errors)}";
Expand Down Expand Up @@ -850,12 +849,12 @@ public async Task<bool> EnableOrDisableAccount(string userIdOrKey, bool activate
}

// include fields by default
public async Task<Features.Cases.CaseModel> GetCase(int caseID) => await this.GetCase(caseID, true);
public async Task<CaseModel> GetCase(int caseID) => await this.GetCase(caseID, true);


public async Task<Features.Cases.CaseModel> GetCase(int caseID, bool includeFields)
public async Task<CaseModel> GetCase(int caseID, bool includeFields)
{
var result = await this.GetAsync<Features.Cases.CaseModel?>($"api/v1/cases/{caseID}");
var result = await this.GetAsync<CaseModel?>($"api/v1/cases/{caseID}");
if (result.IsSuccess)
{
if (result != null)
Expand Down Expand Up @@ -1008,12 +1007,12 @@ private async Task<bool> AddUserToOUGroup(string userId, string groupName)

}

public async Task<Features.Cases.CaseModel> FindCaseByKey(string caseKey) => await this.FindCaseByKey(caseKey, true);
public async Task<CaseModel> FindCaseByKey(string caseKey) => await this.FindCaseByKey(caseKey, true);


public async Task<Features.Cases.CaseModel> FindCaseByIdentifier(string identifierType, string identifierValue)
public async Task<CaseModel> FindCaseByIdentifier(string identifierType, string identifierValue)
{
Features.Cases.CaseModel response = null;
CaseModel response = null;

var result = await this.GetAsync<IdentifierResponseModel>($"api/v1/org-units/1/identifiers?filter=IdentifierValue:{identifierValue},IdentifierType:{identifierType},ItemType:Case");
if (result.IsSuccess)
Expand All @@ -1034,7 +1033,7 @@ private async Task<bool> AddUserToOUGroup(string userId, string groupName)
/// </summary>
/// <param name="caseKey"></param>
/// <returns></returns>
public async Task<Features.Cases.CaseModel> FindCaseByKey(string caseKey, bool includeFields)
public async Task<CaseModel> FindCaseByKey(string caseKey, bool includeFields)
{
if (caseKey == null)
{
Expand All @@ -1061,7 +1060,7 @@ public static class RequestEventType
public const string CourtAccessProvisionEvent = "digitalevidence-court-case-provision-event";
public const string CourtAccessDecommissionEvent = "digitalevidence-court-case-decommission-event";
public const string DisclosureUserProvisionEvent = "digitalevidence-disclosure-provision-event";
public const string DisclosureUserDecommissionEvent = "igitalevidence-disclosure-decommission-event";
public const string DisclosureUserDecommissionEvent = "digitalevidence-disclosure-decommission-event";
public const string None = "None";
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
namespace edt.disclosure.HttpClients.Services.EdtDisclosure;

using System.Collections.Generic;
using edt.disclosure.Features.Cases;
using Common.Models.EDT;
using edt.disclosure.Kafka.Model;
using edt.disclosure.Models;
using edt.disclosure.ServiceEvents.CourtLocation.Models;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
namespace edt.disclosure.HttpClients.Services.EdtDisclosure;

using AutoMapper;
using edt.disclosure.HttpClients.Services.EdtDisclosure;
using Common.Models.EDT;

public class MappingProfile : Profile
{
Expand Down
6 changes: 3 additions & 3 deletions backend/edt.disclosure/Kafka/ConsumerSetup.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
namespace edt.disclosure.Kafka;

using System.Net;
using Common.Models.EDT;
using Confluent.Kafka;
using edt.disclosure.HttpClients.Services.EdtDisclosure;
using edt.disclosure.Kafka.Interfaces;
using edt.disclosure.ServiceEvents;
using edt.disclosure.ServiceEvents.CourtLocation;
Expand Down Expand Up @@ -84,8 +84,8 @@ public static IServiceCollection AddKafkaConsumer(this IServiceCollection servic
services.AddSingleton(typeof(IKafkaProducer<,>), typeof(KafkaProducer<,>));

services.AddScoped<IKafkaHandler<string, CourtLocationDomainEvent>, CourtLocationAccessRequestHandler>();
services.AddScoped<IKafkaHandler<string, EdtDisclosureUserProvisioningModel>, DefenceUserProvisioningHandler>();
services.AddScoped<IKafkaHandler<string, EdtDisclosureUserProvisioningModel>, PublicUserProvisioningHandler>();
services.AddScoped<IKafkaHandler<string, EdtDisclosureDefenceUserProvisioningModel>, DefenceUserProvisioningHandler>();
services.AddScoped<IKafkaHandler<string, EdtDisclosurePublicUserProvisioningModel>, PublicUserProvisioningHandler>();

services.AddSingleton(typeof(IKafkaConsumer<,>), typeof(KafkaConsumer<,>));

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
using edt.disclosure.HttpClients.Services.EdtDisclosure;
using edt.disclosure.Kafka.Interfaces;
namespace edt.disclosure.ServiceEvents.UserAccountCreation;

using System.Net;
using Common.Models.EDT;
using edt.disclosure.Kafka.Interfaces;

namespace edt.disclosure.ServiceEvents.UserAccountCreation;

public class DefenceUserProvisioningConsumer : BackgroundService
{
private readonly IKafkaConsumer<string, EdtDisclosureUserProvisioningModel> consumer;
private readonly IKafkaConsumer<string, EdtDisclosureDefenceUserProvisioningModel> consumer;

private readonly EdtDisclosureServiceConfiguration config;
public DefenceUserProvisioningConsumer(IKafkaConsumer<string, EdtDisclosureUserProvisioningModel> kafkaConsumer, EdtDisclosureServiceConfiguration config)
public DefenceUserProvisioningConsumer(IKafkaConsumer<string, EdtDisclosureDefenceUserProvisioningModel> kafkaConsumer, EdtDisclosureServiceConfiguration config)
{
this.consumer = kafkaConsumer;
this.config = config;
Expand All @@ -19,7 +20,7 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)

try
{
Serilog.Log.Information($"Consume from Defence User Topic {this.config.KafkaCluster.CreateDefenceUserTopic}");
Serilog.Log.Information($"Starting consumer from Defence User Topic {this.config.KafkaCluster.CreateDefenceUserTopic}");
await this.consumer.Consume(this.config.KafkaCluster.CreateDefenceUserTopic, stoppingToken);
}
catch (Exception ex)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
namespace edt.disclosure.ServiceEvents.UserAccountCreation.Handler;

using Common.Models.EDT;
using edt.disclosure.Exceptions;
using edt.disclosure.Features.Cases;
using edt.disclosure.HttpClients.Services.EdtDisclosure;
using edt.disclosure.Kafka.Model;

Expand Down Expand Up @@ -36,7 +36,7 @@ protected async Task<UserModificationEvent> AddOrUpdateUser(EdtDisclosureUserPro
protected async Task<CaseModel> CreateUserFolio(EdtDisclosureUserProvisioningModel accessRequestModel)
{
// check case isnt present - key changes depending on user type
var caseKey = (accessRequestModel.OrganizationType == this.configuration.EdtClient.OutOfCustodyOrgType) ? accessRequestModel.PersonKey : accessRequestModel.Key;
var caseKey = (accessRequestModel is EdtDisclosurePublicUserProvisioningModel) ? ((EdtDisclosurePublicUserProvisioningModel)accessRequestModel).PersonKey : accessRequestModel.Key;

var caseModel = await this.edtClient.FindCaseByKey(caseKey);
if (caseModel != null)
Expand All @@ -45,10 +45,10 @@ protected async Task<CaseModel> CreateUserFolio(EdtDisclosureUserProvisioningMod
}

var caseName = (accessRequestModel.OrganizationType == this.configuration.EdtClient.OutOfCustodyOrgType)
? accessRequestModel.FullName + " (Accused Folio)"
: accessRequestModel.FullName + " (Defence Folio)";
? accessRequestModel.FullName + "(" + caseKey + " Accused Folio)"
: accessRequestModel.FullName + "(" + caseKey + " Defence Folio)";

var caseCreation = (accessRequestModel.OrganizationType == this.configuration.EdtClient.OutOfCustodyOrgType) ?
var caseCreation = (accessRequestModel is EdtDisclosurePublicUserProvisioningModel) ?
new EdtCaseDto
{
Name = caseName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ namespace edt.disclosure.ServiceEvents.UserAccountCreation.Handler;

using System.Diagnostics;
using AutoMapper;
using Common.Models.EDT;
using edt.disclosure.Data;
using edt.disclosure.HttpClients.Services.EdtDisclosure;
using edt.disclosure.Kafka.Interfaces;
Expand All @@ -11,7 +12,7 @@ namespace edt.disclosure.ServiceEvents.UserAccountCreation.Handler;
using Microsoft.Extensions.Logging;
using NodaTime;

public class DefenceUserProvisioningHandler : BaseProvisioningHandler, IKafkaHandler<string, EdtDisclosureUserProvisioningModel>
public class DefenceUserProvisioningHandler : BaseProvisioningHandler, IKafkaHandler<string, EdtDisclosureDefenceUserProvisioningModel>
{


Expand Down Expand Up @@ -47,7 +48,7 @@ public DefenceUserProvisioningHandler(

}

public async Task<Task> HandleAsync(string consumerName, string key, EdtDisclosureUserProvisioningModel accessRequestModel)
public async Task<Task> HandleAsync(string consumerName, string key, EdtDisclosureDefenceUserProvisioningModel accessRequestModel)
{

// check this message is for us
Expand Down Expand Up @@ -179,6 +180,16 @@ public async Task<Task> HandleAsync(string consumerName, string key, EdtDisclosu
catch (Exception ex)
{
Serilog.Log.Logger.Error("Exception during EDT Disclosure provisioning {0}", ex.Message);
// send error response
var sentStatus = this.processResponseProducer.ProduceAsync(this.configuration.KafkaCluster.ProcessResponseTopic, Guid.NewGuid().ToString(), new GenericProcessStatusResponse
{
DomainEvent = "digitalevidencedisclosure-defence-usercreation-exception",
Id = accessRequestModel.AccessRequestId,
EventTime = SystemClock.Instance.GetCurrentInstant(),
ErrorList = new List<string>() { ex.Message },
Status = "Error",
TraceId = key
});
return Task.FromException(ex);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ namespace edt.disclosure.ServiceEvents.DefenceUserAccountCreation.Handler;

using System.Diagnostics;
using AutoMapper;
using Common.Models.EDT;
using edt.disclosure.Data;
using edt.disclosure.HttpClients.Services.EdtDisclosure;
using edt.disclosure.Kafka.Interfaces;
Expand All @@ -12,7 +13,7 @@ namespace edt.disclosure.ServiceEvents.DefenceUserAccountCreation.Handler;
using Microsoft.Extensions.Logging;
using NodaTime;

public class PublicUserProvisioningHandler : BaseProvisioningHandler, IKafkaHandler<string, EdtDisclosureUserProvisioningModel>
public class PublicUserProvisioningHandler : BaseProvisioningHandler, IKafkaHandler<string, EdtDisclosurePublicUserProvisioningModel>
{

private readonly EdtDisclosureServiceConfiguration configuration;
Expand Down Expand Up @@ -45,7 +46,7 @@ public PublicUserProvisioningHandler(
this.processResponseProducer = processResponseProducer;
}

public async Task<Task> HandleAsync(string consumerName, string key, EdtDisclosureUserProvisioningModel accessRequestModel)
public async Task<Task> HandleAsync(string consumerName, string key, EdtDisclosurePublicUserProvisioningModel accessRequestModel)
{

// check this message is for us
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
using System.Net;
using edt.disclosure.HttpClients.Services.EdtDisclosure;
using Common.Models.EDT;
using edt.disclosure.Kafka.Interfaces;

namespace edt.disclosure.ServiceEvents.UserAccountCreation;

public class PublicUserProvisioningConsumer : BackgroundService
{
private readonly IKafkaConsumer<string, EdtDisclosureUserProvisioningModel> consumer;
private readonly IKafkaConsumer<string, EdtDisclosurePublicUserProvisioningModel> consumer;

private readonly EdtDisclosureServiceConfiguration config;
public PublicUserProvisioningConsumer(IKafkaConsumer<string, EdtDisclosureUserProvisioningModel> kafkaConsumer, EdtDisclosureServiceConfiguration config)
public PublicUserProvisioningConsumer(IKafkaConsumer<string, EdtDisclosurePublicUserProvisioningModel> kafkaConsumer, EdtDisclosureServiceConfiguration config)
{
this.consumer = kafkaConsumer;
this.config = config;
Expand All @@ -19,7 +19,7 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)

try
{
Serilog.Log.Information($"Consume from Public User Topic {this.config.KafkaCluster.CreatePublicUserTopic}");
Serilog.Log.Information($"Starting consumer from Public User Topic {this.config.KafkaCluster.CreatePublicUserTopic}");
await this.consumer.Consume(this.config.KafkaCluster.CreatePublicUserTopic, stoppingToken);
}
catch (Exception ex)
Expand Down
Loading

0 comments on commit bf5ff2e

Please sign in to comment.