1+ using CaseManagement . CMMN . Extensions ;
2+ using CaseManagement . Workflow . Domains ;
3+ using CaseManagement . Workflow . Persistence ;
4+ using CaseManagement . Workflow . Persistence . Parameters ;
5+ using CaseManagement . Workflow . Persistence . Responses ;
6+ using Microsoft . AspNetCore . Authorization ;
7+ using Microsoft . AspNetCore . Http ;
8+ using Microsoft . AspNetCore . Mvc ;
9+ using Newtonsoft . Json . Linq ;
10+ using System ;
11+ using System . Collections . Generic ;
12+ using System . Linq ;
13+ using System . Threading . Tasks ;
14+
15+ namespace CaseManagement . CMMN . Apis
16+ {
17+ [ Route ( CMMNConstants . RouteNames . CaseFormInstances ) ]
18+ public class CaseFormInstancesController : Controller
19+ {
20+ private readonly IFormInstanceQueryRepository _formInstanceQueryRepository ;
21+ private readonly IRoleQueryRepository _roleQueryRepository ;
22+
23+ public CaseFormInstancesController ( IFormInstanceQueryRepository formInstanceQueryRepository , IRoleQueryRepository roleQueryRepository )
24+ {
25+ _formInstanceQueryRepository = formInstanceQueryRepository ;
26+ _roleQueryRepository = roleQueryRepository ;
27+ }
28+
29+ [ HttpGet ( ".me/search" ) ]
30+ [ Authorize ( "IsConnected" ) ]
31+ public async Task < IActionResult > Search ( )
32+ {
33+ var nameIdentifier = this . GetNameIdentifier ( ) ;
34+ var userRoles = await _roleQueryRepository . FindRolesByUser ( nameIdentifier ) ;
35+ var roleIds = userRoles . Select ( r => r . Id ) ;
36+ var query = HttpContext . Request . Query ;
37+ var result = await _formInstanceQueryRepository . Find ( ExtractFindFormInstanceParameter ( query , roleIds ) ) ;
38+ return new OkObjectResult ( ToDto ( result ) ) ;
39+ }
40+
41+ private static JObject ToDto ( FindResponse < FormInstanceAggregate > resp )
42+ {
43+ return new JObject
44+ {
45+ { "start_index" , resp . StartIndex } ,
46+ { "total_length" , resp . TotalLength } ,
47+ { "count" , resp . Count } ,
48+ { "content" , new JArray ( resp . Content . Select ( r => {
49+ var result = new JObject
50+ {
51+ { "create_datetime" , r . CreateDateTime } ,
52+ { "update_datetime" , r . UpdateDateTime } ,
53+ { "status" , Enum . GetName ( typeof ( FormInstanceStatus ) , r . Status ) . ToLowerInvariant ( ) } ,
54+ { "form_id" , r . FormId }
55+ } ;
56+ foreach ( var title in r . Titles )
57+ {
58+ result . Add ( $ "title#{ title . Language } ", title . Value ) ;
59+ }
60+
61+ var content = new JArray ( ) ;
62+ foreach ( var formElt in r . Content )
63+ {
64+ var record = new JObject
65+ {
66+ { "form_element_id" , formElt . FormElementId } ,
67+ { "is_required" , formElt . IsRequired } ,
68+ { "value" , formElt . Value } ,
69+ { "type" , Enum . GetName ( typeof ( FormElementTypes ) , formElt . Type ) . ToLowerInvariant ( ) }
70+ } ;
71+ foreach ( var name in formElt . Names )
72+ {
73+ record . Add ( $ "name#{ name . Language } ", name . Value ) ;
74+ }
75+
76+ foreach ( var description in formElt . Descriptions )
77+ {
78+ record . Add ( $ "description#{ description . Language } ", description . Value ) ;
79+ }
80+
81+ content . Add ( record ) ;
82+ }
83+
84+ result . Add ( "content" , content ) ;
85+ return result ;
86+ } ) ) }
87+ } ;
88+ }
89+
90+ private static FindFormInstanceParameter ExtractFindFormInstanceParameter ( IQueryCollection query , IEnumerable < string > roleIds )
91+ {
92+ var parameter = new FindFormInstanceParameter
93+ {
94+ RoleIds = roleIds
95+ } ;
96+ parameter . ExtractFindParameter ( query ) ;
97+ return parameter ;
98+ }
99+ }
100+ }
0 commit comments