Skip to content

Commit 7b6b3ac

Browse files
Ticket 24 : Start to display the list of case plans
1 parent 47b210c commit 7b6b3ac

125 files changed

Lines changed: 309 additions & 121 deletions

File tree

Some content is hidden

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

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ private static FindCasePlansParameter ExtractFindParameter(IEnumerable<KeyValueP
8686
string text;
8787
string caseOwner;
8888
string casePlanId;
89+
bool takeLatest = false;
8990
var parameter = new FindCasePlansParameter();
9091
parameter.ExtractFindParameter(query);
9192
if (query.TryGet("case_file", out caseFile))
@@ -108,6 +109,11 @@ private static FindCasePlansParameter ExtractFindParameter(IEnumerable<KeyValueP
108109
parameter.CasePlanId = casePlanId;
109110
}
110111

112+
if (query.TryGet("take_latest", out takeLatest))
113+
{
114+
parameter.TakeLatest = takeLatest;
115+
}
116+
111117
return parameter;
112118
}
113119
}

src/CaseManagement.CMMN/Persistence/InMemory/InMemoryCasePlanQueryRepository.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ public Task<CasePlanAggregate> FindById(string id)
3333
public Task<FindResponse<CasePlanAggregate>> Find(FindCasePlansParameter parameter)
3434
{
3535
IQueryable<CasePlanAggregate> result = _definitions.AsQueryable();
36+
if (parameter.TakeLatest)
37+
{
38+
result = result.OrderByDescending(r => r.Version);
39+
result = result.GroupBy(r => r.CasePlanId).Select(r => r.First());
40+
}
41+
3642
if (MAPPING_WORKFLOWDEFINITION_TO_PROPERTYNAME.ContainsKey(parameter.OrderBy))
3743
{
3844
result = result.InvokeOrderBy(MAPPING_WORKFLOWDEFINITION_TO_PROPERTYNAME[parameter.OrderBy], parameter.Order);

src/CaseManagement.CMMN/Persistence/Parameters/FindCasePlansParameter.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ public class FindCasePlansParameter : BaseFindParameter
66
public string Text { get; set; }
77
public string CaseOwner { get; set; }
88
public string CasePlanId { get; set; }
9+
public bool TakeLatest { get; set; }
910
}
1011
}

src/CaseManagement.Gateway.Website.AspNetCore/Apis/CaseFilesController.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using CaseManagement.Gateway.Website.CaseFile.DTOs;
55
using CaseManagement.Gateway.Website.CaseFile.Queries;
66
using CaseManagement.Gateway.Website.CaseFile.QueryHandlers;
7+
using CaseManagement.Gateway.Website.CasePlans.QueryHandlers;
78
using Microsoft.AspNetCore.Authorization;
89
using Microsoft.AspNetCore.Mvc;
910
using Newtonsoft.Json.Linq;
@@ -22,8 +23,8 @@ public class CaseFilesController : Controller
2223
private readonly IGetCaseFileQueryHandler _getCaseFileQueryHandler;
2324
private readonly IUpdateCaseFileCommandHandler _updateCaseFileCommandHandler;
2425
private readonly IPublishCaseFileCommandHandler _publishCaseFileCommandHandler;
25-
26-
public CaseFilesController(IAddCaseFileCommandHandler addCaseFileCommandHandler, ISearchMyLatestCaseFileQueryHandler searchMyLatestPublishedCaseFileQueryHandler, ISearchCaseFileHistoryQueryHandler searchCaseFileHistoryQueryHandler, IGetCaseFileQueryHandler getCaseFileQueryHandler, IUpdateCaseFileCommandHandler updateCaseFileCommandHandler, IPublishCaseFileCommandHandler publishCaseFileCommandHandler)
26+
27+
public CaseFilesController(IAddCaseFileCommandHandler addCaseFileCommandHandler, ISearchMyLatestCaseFileQueryHandler searchMyLatestPublishedCaseFileQueryHandler, ISearchCaseFileHistoryQueryHandler searchCaseFileHistoryQueryHandler, IGetCaseFileQueryHandler getCaseFileQueryHandler, IUpdateCaseFileCommandHandler updateCaseFileCommandHandler, IPublishCaseFileCommandHandler publishCaseFileCommandHandler, ISearchMyLatestCasePlanQueryHandler searchMyLatestCasePlanQueryHandler)
2728
{
2829
_addCaseFileCommandHandler = addCaseFileCommandHandler;
2930
_searchMyLatestPublishedCaseFileQueryHandler = searchMyLatestPublishedCaseFileQueryHandler;
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
using CaseManagement.Gateway.Website.AspNetCore.Extensions;
2+
using CaseManagement.Gateway.Website.CasePlans.DTOs;
3+
using CaseManagement.Gateway.Website.CasePlans.Queries;
4+
using CaseManagement.Gateway.Website.CasePlans.QueryHandlers;
5+
using Microsoft.AspNetCore.Authorization;
6+
using Microsoft.AspNetCore.Mvc;
7+
using Newtonsoft.Json.Linq;
8+
using System.Linq;
9+
using System.Threading.Tasks;
10+
11+
namespace CaseManagement.Gateway.Website.AspNetCore.Apis
12+
{
13+
[Route(ServerConstants.RouteNames.CasePlans)]
14+
public class CasePlansController : Controller
15+
{
16+
private readonly ISearchMyLatestCasePlanQueryHandler _searchMyLatestCasePlanQueryHandler;
17+
18+
public CasePlansController(ISearchMyLatestCasePlanQueryHandler searchMyLatestCasePlanQueryHandler)
19+
{
20+
_searchMyLatestCasePlanQueryHandler = searchMyLatestCasePlanQueryHandler;
21+
}
22+
23+
[HttpGet("me/search")]
24+
[Authorize("get_caseplan")]
25+
public async Task<IActionResult> SearchMyLatest()
26+
{
27+
var query = Request.Query.ToEnumerable();
28+
var nameIdentifier = this.GetNameIdentifier();
29+
var result = await _searchMyLatestCasePlanQueryHandler.Handle(new SearchMyLatestCasePlanQuery { Queries = query, NameIdentifier = nameIdentifier });
30+
return new OkObjectResult(ToDto(result));
31+
}
32+
33+
private static JObject ToDto(FindResponse<CasePlanResponse> resp)
34+
{
35+
return new JObject
36+
{
37+
{ "start_index", resp.StartIndex },
38+
{ "total_length", resp.TotalLength },
39+
{ "count", resp.Count },
40+
{ "content", new JArray(resp.Content.Select(r => ToDto(r))) }
41+
};
42+
}
43+
44+
private static JObject ToDto(CasePlanResponse def)
45+
{
46+
return new JObject
47+
{
48+
{ "id", def.Id },
49+
{ "name", def.Name },
50+
{ "description", def.Description },
51+
{ "case_file", def.CaseFileId },
52+
{ "create_datetime", def.CreateDateTime }
53+
};
54+
}
55+
}
56+
}

src/CaseManagement.Gateway.Website.Host/Startup.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ public void ConfigureServices(IServiceCollection services)
5959
policy.AddPolicy("get_casefile", p => p.RequireRole("businessanalyst"));
6060
policy.AddPolicy("update_casefile", p => p.RequireRole("businessanalyst"));
6161
policy.AddPolicy("publish_casefile", p => p.RequireRole("businessanalyst"));
62+
policy.AddPolicy("get_caseplan", p => p.RequireRole("businessanalyst"));
6263
});
6364
services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()
6465
.AllowAnyMethod()

src/CaseManagement.Gateway.Website/CaseManagement.Gateway.Website.csproj

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
<Description>Gateway for CMMN website.</Description>
55
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
66
</PropertyGroup>
7+
<ItemGroup>
8+
<Compile Remove="Persistence\**" />
9+
<EmbeddedResource Remove="Persistence\**" />
10+
<None Remove="Persistence\**" />
11+
</ItemGroup>
712
<ItemGroup>
813
<PackageReference Include="Microsoft.Extensions.Options" Version="2.1.0" />
914
<PackageReference Include="Microsoft.Extensions.Http" Version="2.1.0" />
@@ -16,7 +21,4 @@
1621
<Reference Include="System.Web.Http" />
1722
<Reference Include="System.Net.Http" />
1823
</ItemGroup>
19-
<ItemGroup>
20-
<Folder Include="Persistence\" />
21-
</ItemGroup>
2224
</Project>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System;
2+
using System.Runtime.Serialization;
3+
4+
namespace CaseManagement.Gateway.Website.CasePlans.DTOs
5+
{
6+
[DataContract]
7+
public class CasePlanResponse
8+
{
9+
[DataMember(Name = "id")]
10+
public string Id { get; set; }
11+
[DataMember(Name = "name")]
12+
public string Name { get; set; }
13+
[DataMember(Name = "description")]
14+
public string Description { get; set; }
15+
[DataMember(Name = "case_file")]
16+
public string CaseFileId { get; set; }
17+
[DataMember(Name = "create_datetime")]
18+
public DateTime CreateDateTime { get; set; }
19+
}
20+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.Collections.Generic;
2+
3+
namespace CaseManagement.Gateway.Website.CasePlans.Queries
4+
{
5+
public class SearchMyLatestCasePlanQuery
6+
{
7+
public IEnumerable<KeyValuePair<string, string>> Queries { get; set; }
8+
public string NameIdentifier { get; set; }
9+
}
10+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using CaseManagement.Gateway.Website.CasePlans.DTOs;
2+
using CaseManagement.Gateway.Website.CasePlans.Queries;
3+
using System.Threading.Tasks;
4+
5+
namespace CaseManagement.Gateway.Website.CasePlans.QueryHandlers
6+
{
7+
public interface ISearchMyLatestCasePlanQueryHandler
8+
{
9+
Task<FindResponse<CasePlanResponse>> Handle(SearchMyLatestCasePlanQuery searchMyLatestCasePlanQuery);
10+
}
11+
}

0 commit comments

Comments
 (0)