Skip to content

Commit d509f52

Browse files
Thierry Habarthabarthierry-hue
authored andcommitted
Ticket 24 : Display case plan instances
1 parent aeb1166 commit d509f52

File tree

116 files changed

+1639
-571
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

116 files changed

+1639
-571
lines changed

Architecture.pptx

5.2 KB
Binary file not shown.

src/CaseManagement.CMMN.AspNetCore/Apis/CasePlanInstancesController.cs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ public class CasePlanInstancesController : Controller
3535
private readonly IActivateCommandHandler _activateCommandHandler;
3636
private readonly ICasePlanInstanceQueryRepository _cmmnWorkflowInstanceQueryRepository;
3737
private readonly ICaseFileItemRepository _caseFileItemRepository;
38+
private readonly IRoleQueryRepository _roleQueryRepository;
3839

39-
public CasePlanInstancesController(ICreateCaseInstanceCommandHandler createCaseInstanceCommandHandler, ILaunchCaseInstanceCommandHandler launchCaseInstanceCommandHandler, ISuspendCommandHandler suspendCommandHandler, IResumeCommandHandler resumeCommandHandler, ITerminateCommandHandler terminateCommandHandler, IReactivateCommandHandler reactivateCommandHandler, ICloseCommandHandler closeCommandHandler, IConfirmFormCommandHandler confirmFormCommandHandler, IActivateCommandHandler activateCommandHandler, ICasePlanInstanceQueryRepository cmmnWorkflowInstanceQueryRepository, ICaseFileItemRepository caseFileItemRepository)
40+
public CasePlanInstancesController(ICreateCaseInstanceCommandHandler createCaseInstanceCommandHandler, ILaunchCaseInstanceCommandHandler launchCaseInstanceCommandHandler, ISuspendCommandHandler suspendCommandHandler, IResumeCommandHandler resumeCommandHandler, ITerminateCommandHandler terminateCommandHandler, IReactivateCommandHandler reactivateCommandHandler, ICloseCommandHandler closeCommandHandler, IConfirmFormCommandHandler confirmFormCommandHandler, IActivateCommandHandler activateCommandHandler, ICasePlanInstanceQueryRepository cmmnWorkflowInstanceQueryRepository, ICaseFileItemRepository caseFileItemRepository, IRoleQueryRepository roleQueryRepository)
4041
{
4142
_createCaseInstanceCommandHandler = createCaseInstanceCommandHandler;
4243
_launchCaseInstanceCommandHandler = launchCaseInstanceCommandHandler;
@@ -49,6 +50,7 @@ public CasePlanInstancesController(ICreateCaseInstanceCommandHandler createCaseI
4950
_activateCommandHandler = activateCommandHandler;
5051
_cmmnWorkflowInstanceQueryRepository = cmmnWorkflowInstanceQueryRepository;
5152
_caseFileItemRepository = caseFileItemRepository;
53+
_roleQueryRepository = roleQueryRepository;
5254
}
5355

5456
[HttpGet("search")]
@@ -60,6 +62,18 @@ public async Task<IActionResult> Search()
6062
return new OkObjectResult(ToDto(result));
6163
}
6264

65+
[HttpGet("me/search")]
66+
[Authorize("me_search_caseplaninstance")]
67+
public async Task<IActionResult> SearchMe()
68+
{
69+
var query = HttpContext.Request.Query.ToEnumerable();
70+
var roles = await _roleQueryRepository.FindRolesByUser(this.GetNameIdentifier());
71+
var parameter = ExtractFindParameter(query);
72+
parameter.Roles = roles.Select(r => r.Id).ToList();
73+
var result = await _cmmnWorkflowInstanceQueryRepository.Find(parameter);
74+
return new OkObjectResult(ToDto(result));
75+
}
76+
6377
[HttpGet("me/{id}")]
6478
[Authorize("me_get_caseplaninstance")]
6579
public async Task<IActionResult> GetMe(string id)
@@ -417,6 +431,13 @@ private async Task<IActionResult> InternalSuspend(SuspendCommand suspendCommand)
417431
{ "bad_request", "case instance doesn't exist" }
418432
}, HttpStatusCode.NotFound, Request);
419433
}
434+
catch (UnknownCaseInstanceElementException)
435+
{
436+
return this.ToError(new Dictionary<string, string>
437+
{
438+
{ "bad_request", "case instance element doesn't exist" }
439+
}, HttpStatusCode.NotFound, Request);
440+
}
420441
catch (AggregateValidationException ex)
421442
{
422443
return this.ToError(ex.Errors, HttpStatusCode.BadRequest, Request);
@@ -444,6 +465,13 @@ private async Task<IActionResult> InternalReactivate(ReactivateCommand cmd)
444465
{ "bad_request", "case instance doesn't exist" }
445466
}, HttpStatusCode.NotFound, Request);
446467
}
468+
catch(UnknownCaseInstanceElementException)
469+
{
470+
return this.ToError(new Dictionary<string, string>
471+
{
472+
{ "bad_request", "case instance element doesn't exist" }
473+
}, HttpStatusCode.NotFound, Request);
474+
}
447475
catch (AggregateValidationException ex)
448476
{
449477
return this.ToError(ex.Errors, HttpStatusCode.BadRequest, Request);

src/CaseManagement.CMMN.Host/Startup.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,12 @@ public void ConfigureServices(IServiceCollection services)
105105
policy.AddPolicy("get_forminstances", p => p.RequireClaim("scope", "get_forminstances"));
106106
// Case plan instance
107107
policy.AddPolicy("search_caseplaninstance", p => p.RequireClaim("scope", "search_caseplaninstance"));
108+
policy.AddPolicy("me_search_caseplaninstance", p =>
109+
{
110+
p.AuthenticationSchemes.Clear();
111+
p.AuthenticationSchemes.Add("IdentityServer");
112+
p.RequireAuthenticatedUser();
113+
});
108114
policy.AddPolicy("me_get_caseplaninstance", p =>
109115
{
110116
p.AuthenticationSchemes.Clear();

src/CaseManagement.CMMN/Builders/WorkflowBuilder.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public class WorkflowBuilder
1010
private readonly string _name;
1111
private readonly string _description;
1212
private readonly CaseFileAggregate _caseFile;
13+
private readonly ICollection<string> _roles;
1314
private ICollection<CasePlanElement> _elements { get; set; }
1415
private ICollection<Criteria> _exitCriterias { get; set; }
1516
private string _caseOwner;
@@ -19,6 +20,7 @@ private WorkflowBuilder(string casePlanId, string name, string description, Case
1920
_casePlanId = casePlanId;
2021
_name = name;
2122
_caseFile = caseFile;
23+
_roles = new List<string>();
2224
_elements = new List<CasePlanElement>();
2325
_exitCriterias = new List<Criteria>();
2426
}
@@ -167,9 +169,15 @@ public WorkflowBuilder SetCaseOwner(string caseOwner)
167169
return this;
168170
}
169171

172+
public WorkflowBuilder AddRole(string role)
173+
{
174+
this._roles.Add(role);
175+
return this;
176+
}
177+
170178
public CasePlanAggregate Build()
171179
{
172-
var result = CasePlanAggregate.New(_casePlanId, _name, _description, _caseOwner, _caseFile.Id, _caseFile.Version, _exitCriterias, _elements);
180+
var result = CasePlanAggregate.New(_casePlanId, _name, _description, _caseOwner, _caseFile.Id, _caseFile.Version, _exitCriterias, _elements, _roles);
173181
return result;
174182
}
175183

src/CaseManagement.CMMN/CMMNConstants.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public static class QueueNames
1616
public const string CasePlans = "caseplans";
1717
public const string FormInstances = "forminstances";
1818
public const string CaseWorkerTasks = "caseworkertasks";
19+
public const string Roles = "roles";
1920
}
2021

2122
public static class RouteNames

src/CaseManagement.CMMN/CaseFile/CommandHandlers/PublishCaseFileCommandHandler.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using CaseManagement.CMMN.Domains;
44
using CaseManagement.CMMN.Infrastructures;
55
using CaseManagement.CMMN.Infrastructures.EvtStore;
6-
using CaseManagement.CMMN.Parser;
76
using System.Threading.Tasks;
87

98
namespace CaseManagement.CMMN.CaseFile.CommandHandlers
@@ -30,12 +29,6 @@ public async Task<string> Handle(PublishCaseFileCommand publishCaseFileCommand)
3029
var newCaseFile = caseFile.Publish(publishCaseFileCommand.Performer, publishCaseFileCommand.BypassUserValidation);
3130
await _commitAggregateHelper.Commit(caseFile, CaseFileAggregate.GetStreamName(caseFile.Id), CMMNConstants.QueueNames.CaseFiles);
3231
await _commitAggregateHelper.Commit(newCaseFile, CaseFileAggregate.GetStreamName(newCaseFile.Id), CMMNConstants.QueueNames.CaseFiles);
33-
var tDefinitions = CMMNParser.ParseWSDL(caseFile.Payload);
34-
foreach (var casePlan in CMMNParser.ExtractCasePlans(tDefinitions, caseFile))
35-
{
36-
await _commitAggregateHelper.Commit(casePlan, CasePlanAggregate.GetStreamName(casePlan.Id), CMMNConstants.QueueNames.CasePlans);
37-
}
38-
3932
return newCaseFile.Id;
4033
}
4134
}

src/CaseManagement.CMMN/CasePlan/EventHandlers/CasePlanEventHandler.cs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,38 @@
22
using CaseManagement.CMMN.Domains.Events;
33
using CaseManagement.CMMN.Infrastructures;
44
using CaseManagement.CMMN.Infrastructures.Bus;
5+
using CaseManagement.CMMN.Parser;
56
using CaseManagement.CMMN.Persistence;
6-
using System.Collections.Generic;
77
using System.Threading;
88
using System.Threading.Tasks;
99

1010
namespace CaseManagement.CMMN.CasePlan.EventHandlers
1111
{
12-
public class CasePlanEventHandler : IMessageBrokerConsumerGeneric<CasePlanAddedEvent>
12+
public class CasePlanEventHandler : IMessageBrokerConsumerGeneric<CaseFilePublishedEvent>
1313
{
14+
private readonly ICaseFileQueryRepository _caseFileQueryRepository;
1415
private readonly ICasePlanCommandRepository _casePlanCommandRepository;
16+
private readonly ICommitAggregateHelper _commitAggregateHelper;
1517

16-
public CasePlanEventHandler(ICasePlanCommandRepository casePlanCommandRepository)
18+
public CasePlanEventHandler(ICaseFileQueryRepository caseFileQueryRepository, ICasePlanCommandRepository casePlanCommandRepository, ICommitAggregateHelper commitAggregateHelper)
1719
{
20+
_caseFileQueryRepository = caseFileQueryRepository;
1821
_casePlanCommandRepository = casePlanCommandRepository;
22+
_commitAggregateHelper = commitAggregateHelper;
1923
}
2024

21-
public string QueueName => CMMNConstants.QueueNames.CasePlans;
25+
public string QueueName => CMMNConstants.QueueNames.CaseFiles;
2226

23-
public async Task Handle(CasePlanAddedEvent @event, CancellationToken cancellationToken)
27+
public async Task Handle(CaseFilePublishedEvent @event, CancellationToken cancellationToken)
2428
{
25-
var casePlan = CasePlanAggregate.New(new List<DomainEvent> { @event });
26-
_casePlanCommandRepository.Add(casePlan);
29+
var caseFile = await _caseFileQueryRepository.FindById(@event.AggregateId);
30+
var tDefinitions = CMMNParser.ParseWSDL(caseFile.Payload);
31+
foreach (var casePlan in CMMNParser.ExtractCasePlans(tDefinitions, caseFile))
32+
{
33+
_casePlanCommandRepository.Add(casePlan);
34+
await _commitAggregateHelper.Commit(casePlan, CasePlanAggregate.GetStreamName(casePlan.Id), CMMNConstants.QueueNames.CasePlans);
35+
}
36+
2737
await _casePlanCommandRepository.SaveChanges();
2838
}
2939
}

src/CaseManagement.CMMN/CasePlanInstance/CommandHandlers/ActivateCommandHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public async Task Handle(ActivateCommand activateCommand)
4242
else
4343
{
4444
var roles = await _roleQueryRepository.FindRolesByUser(activateCommand.Performer);
45-
activation.Confirm(roles.Select(r => r.Name));
45+
activation.Confirm(roles.Select(r => r.Id));
4646
}
4747

4848
await _commitAggregateHelper.Commit(activation, CaseWorkerTaskAggregate.GetStreamName(id), CMMNConstants.QueueNames.CasePlanInstances);

src/CaseManagement.CMMN/CasePlanInstance/CommandHandlers/ConfirmFormCommandHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public async Task Handle(ConfirmFormCommand confirmFormCommand)
4545
else
4646
{
4747
var roles = await _roleQueryRepository.FindRolesByUser(confirmFormCommand.Performer);
48-
formInstance.Submit(roles.Select(r => r.Name), form, confirmFormCommand.Content);
48+
formInstance.Submit(roles.Select(r => r.Id), form, confirmFormCommand.Content);
4949
}
5050

5151
await _commitAggregateHelper.Commit(formInstance, FormInstanceAggregate.GetStreamName(id), CMMNConstants.QueueNames.FormInstances);

src/CaseManagement.CMMN/CasePlanInstance/CommandHandlers/CreateCaseInstanceCommandHandler.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,12 @@ public CreateCaseInstanceCommandHandler(ICasePlanQueryRepository casePlanQueryRe
2525
throw new UnknownCaseDefinitionException();
2626
}
2727

28-
if (workflowDefinition.CaseOwner != command.Performer)
28+
if (!command.BypassUserValidation)
2929
{
30-
throw new UnauthorizedCaseWorkerException(command.Performer, null, null);
30+
if (workflowDefinition.CaseOwner != command.Performer)
31+
{
32+
throw new UnauthorizedCaseWorkerException(command.Performer, null, null);
33+
}
3134
}
3235

3336
var workflowInstance = Domains.CasePlanInstanceAggregate.New(workflowDefinition);

0 commit comments

Comments
 (0)