Skip to content

Commit 9691b51

Browse files
authored
Rewrite RequestService.Create with new params (#2590)
1 parent b9dead2 commit 9691b51

File tree

27 files changed

+529
-504
lines changed

27 files changed

+529
-504
lines changed

src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Api.Enduser/Controllers/RequestController.cs

Lines changed: 68 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
using Altinn.AccessMgmt.Core.Audit;
1010
using Altinn.AccessMgmt.Core.Services;
1111
using Altinn.AccessMgmt.Core.Services.Contracts;
12-
using Altinn.AccessMgmt.Core.Utils;
1312
using Altinn.AccessMgmt.PersistenceEF.Constants;
1413
using Altinn.AccessMgmt.PersistenceEF.Queries.Connection;
1514
using Altinn.AccessMgmt.PersistenceEF.Utils;
@@ -33,7 +32,6 @@ public class RequestController(
3332
IConnectionService connectionService,
3433
ConnectionQuery connectionQuery,
3534
IResourceService resourceService,
36-
IPackageService packageService,
3735
IEntityService entityService
3836
) : ControllerBase
3937
{
@@ -56,19 +54,20 @@ IEntityService entityService
5654
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
5755
[ProducesResponseType(StatusCodes.Status403Forbidden)]
5856
public async Task<IActionResult> GetSentRequests(
59-
[FromQuery][Required] Guid party,
57+
[FromQuery][Required] Guid party,
6058
[FromQuery] Guid? to,
6159
[FromQuery] RequestStatus[]? status,
6260
[FromQuery] string type,
63-
[FromQuery, FromHeader] PagingInput paging,
61+
[FromQuery, FromHeader] PagingInput paging,
6462
CancellationToken ct = default
6563
)
6664
{
6765
var statusFilter = status == null || !status.Any()
6866
? new List<RequestStatus>() { RequestStatus.Draft, RequestStatus.Pending, RequestStatus.Approved, RequestStatus.Rejected, RequestStatus.Withdrawn }
6967
: status.ToList();
7068

71-
var result = await requestService.GetRequests(fromId: to, toId: party, status: statusFilter, type, ct);
69+
var result = await requestService.GetSentRequests(party, to, statusFilter, type, ct);
70+
7271
return result.IsSuccess ? Ok(PaginatedResult.Create(result.Value, null)) : result.Problem.ToActionResult();
7372
}
7473

@@ -85,15 +84,15 @@ public async Task<IActionResult> GetReceivedRequests(
8584
[FromQuery] Guid? from,
8685
[FromQuery] RequestStatus[]? status,
8786
[FromQuery] string type,
88-
[FromQuery, FromHeader] PagingInput paging,
87+
[FromQuery, FromHeader] PagingInput paging,
8988
CancellationToken ct = default
9089
)
9190
{
9291
var statusFilter = status == null || !status.Any()
9392
? new List<RequestStatus>() { RequestStatus.Draft, RequestStatus.Pending, RequestStatus.Approved, RequestStatus.Rejected, RequestStatus.Withdrawn }
9493
: status.ToList();
9594

96-
var result = await requestService.GetRequests(fromId: party, toId: from, status: statusFilter, type, ct);
95+
var result = await requestService.GetReceivedRequests(party, from, statusFilter, type, ct);
9796
return result.IsSuccess ? Ok(PaginatedResult.Create(result.Value, null)) : result.Problem.ToActionResult();
9897
}
9998

@@ -106,9 +105,9 @@ public async Task<IActionResult> GetReceivedRequests(
106105
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
107106
[ProducesResponseType(StatusCodes.Status403Forbidden)]
108107
public async Task<IActionResult> GetRequest(
109-
[FromQuery][Required] Guid party,
108+
[FromQuery][Required] Guid party,
110109
[FromQuery][Required] Guid id,
111-
[FromQuery, FromHeader] PagingInput paging,
110+
[FromQuery, FromHeader] PagingInput paging,
112111
CancellationToken ct = default
113112
)
114113
{
@@ -133,48 +132,46 @@ public async Task<IActionResult> GetRequest(
133132
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
134133
[ProducesResponseType(StatusCodes.Status403Forbidden)]
135134
public async Task<IActionResult> CreateResourceRequest(
136-
[FromQuery][Required] Guid party,
137-
[FromQuery][Required] Guid to,
138-
[FromQuery][Required] string resource,
139-
[FromBody] string[]? rightKeys,
135+
[FromQuery][Required] Guid party,
136+
[FromQuery][Required] Guid to,
137+
[FromQuery][Required] string resource,
138+
[FromBody] string[]? rightKeys,
140139
CancellationToken ct = default
141140
)
142141
{
143142
ValidationErrorBuilder errorBuilder = default;
144143

145-
/*
146-
Person1 vil be FirmaA om en rettighet, derfor er to = FirmaA i queryparam.
147-
Men da blir Assignment.From = FirmaA og Assignment.To = Party (Person1)
148-
GLHF
149-
*/
150-
151144
var authUserUuid = AuthenticationHelper.GetPartyUuid(HttpContext);
152-
var connections = await connectionQuery.HasConnection(to, authUserUuid);
153-
if (!connections.Result)
145+
var (hasConnections, _) = await connectionQuery.HasConnection(to, authUserUuid);
146+
if (!hasConnections)
154147
{
155148
errorBuilder.Add(ValidationErrors.RequestConnectionNotFound, "$QUERY/to", [new("to", $"No connection between party:'{party}' and to:'{to}'")]);
156-
errorBuilder.TryBuild(out var problem);
157-
return problem.ToActionResult();
158149
}
159150

160151
var resourceObj = await resourceService.GetResource(resource, ct);
161152
if (resourceObj is not { })
162153
{
163154
errorBuilder.Add(ValidationErrors.ResourceNotExists, "$QUERY/resource", [new("resource", $"Unable to get resource '{resource}'")]);
164-
errorBuilder.TryBuild(out var problem);
155+
}
156+
157+
if (errorBuilder.TryBuild(out var problem))
158+
{
165159
return problem.ToActionResult();
166160
}
167161

168-
var result = await requestService.CreateRequest(
169-
new CreateRequestDto()
170-
{
171-
From = to, // YES, this is correct
172-
To = party,
173-
Role = RoleConstants.Rightholder.Id,
174-
Status = RequestStatus.Pending,
175-
Resource = resourceObj.Id,
176-
},
177-
ct
162+
/*
163+
Per (authUserUuid) ber om tilgang for Kari (party) til App (resource) hos Org (to).
164+
==
165+
Per (by) ber om tilgang for Kari (for) til App (resource) hos Org (at).
166+
*/
167+
var result = await requestService.CreateResourceRequest(
168+
toId: to,
169+
fromId: party,
170+
byId: authUserUuid,
171+
roleId: RoleConstants.Rightholder.Id,
172+
resourceId: resourceObj.Id,
173+
status: RequestStatus.Pending,
174+
ct: ct
178175
);
179176

180177
if (result.IsProblem)
@@ -197,52 +194,44 @@ public async Task<IActionResult> CreateResourceRequest(
197194
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
198195
[ProducesResponseType(StatusCodes.Status403Forbidden)]
199196
public async Task<IActionResult> CreatePackageRequest(
200-
[FromQuery][Required] Guid party,
201-
[FromQuery][Required] Guid to,
202-
[FromQuery] Guid? packageId,
203-
[FromQuery] string? package,
197+
[FromQuery][Required] Guid party,
198+
[FromQuery][Required] Guid to,
199+
[FromQuery][Required] string package,
204200
CancellationToken ct = default
205201
)
206202
{
207203
ValidationErrorBuilder errorBuilder = default;
208204

209-
/*
210-
Person1 vil be FirmaA om en rettighet, derfor er to = FirmaA i queryparam.
211-
Men da blir Assignment.From = FirmaA og Assignment.To = Party (Person1)
212-
GLHF
213-
*/
214-
215205
var authUserUuid = AuthenticationHelper.GetPartyUuid(HttpContext);
216-
var connections = await connectionQuery.HasConnection(to, authUserUuid);
206+
var (hasConnections, _) = await connectionQuery.HasConnection(to, authUserUuid);
207+
if (!hasConnections)
208+
{
209+
errorBuilder.Add(ValidationErrors.RequestConnectionNotFound, "$QUERY/to", [new("to", $"No connection exists between the authenticated user and party '{to}'.")]);
210+
}
217211

218-
if (!connections.Result)
212+
if (!PackageConstants.TryGetByAll(package, out var packageObj))
219213
{
220-
errorBuilder.Add(ValidationErrors.RequestConnectionNotFound, "$QUERY/to", [new("to", $"No connection between party:'{party}' and to:'{to}'")]);
221-
errorBuilder.TryBuild(out var problem);
222-
return problem.ToActionResult();
214+
errorBuilder.Add(ValidationErrors.PackageNotExists, "$QUERY/package", [new("package", $"No package was found with value '{package}'.")]);
223215
}
224216

225-
var packageObj = packageId.HasValue ? await packageService.GetPackage(packageId.Value, ct) : await packageService.GetPackageByUrnValue(package, ct);
226-
if (packageObj is not { })
217+
if (errorBuilder.TryBuild(out var problem))
227218
{
228-
var paramName = packageId.HasValue ? "packageId" : "package";
229-
var paramValue = packageId.HasValue ? packageId.ToString() : package;
230-
errorBuilder.Add(ValidationErrors.PackageNotExists, $"$QUERY/{paramName}", [new(paramName, $"Unable to get package '{paramValue}'")]);
231-
errorBuilder.TryBuild(out var problem);
232219
return problem.ToActionResult();
233220
}
234221

235-
var result = await requestService.CreateRequest(
236-
new CreateRequestDto()
237-
{
238-
From = to, // YES, this is correct
239-
To = party,
240-
Role = RoleConstants.Rightholder.Id,
241-
Status = RequestStatus.Pending,
242-
Package = packageObj?.Id,
243-
},
244-
ct
245-
);
222+
/*
223+
A Request from Kari by NAV to BakerAS for AppResource01.
224+
Will create an Assignment from BakerAS to Kari with an AssignmentResource for AppResource01.
225+
*/
226+
var result = await requestService.CreatePackageRequest(
227+
toId: to,
228+
fromId: party,
229+
byId: authUserUuid,
230+
roleId: RoleConstants.Rightholder.Id,
231+
packageId: packageObj.Id,
232+
status: RequestStatus.Pending,
233+
ct: ct
234+
);
246235

247236
if (result.IsProblem)
248237
{
@@ -262,8 +251,8 @@ public async Task<IActionResult> CreatePackageRequest(
262251
[ProducesResponseType<RequestDto>(StatusCodes.Status200OK)]
263252
[ProducesResponseType(StatusCodes.Status404NotFound)]
264253
public async Task<IActionResult> ConfirmRequest(
265-
[FromQuery][Required] Guid party,
266-
[FromQuery][Required] Guid id,
254+
[FromQuery][Required] Guid party,
255+
[FromQuery][Required] Guid id,
267256
CancellationToken ct = default
268257
)
269258
{
@@ -280,8 +269,8 @@ public async Task<IActionResult> ConfirmRequest(
280269
[ProducesResponseType<RequestDto>(StatusCodes.Status200OK)]
281270
[ProducesResponseType(StatusCodes.Status404NotFound)]
282271
public async Task<IActionResult> WithdrawRequest(
283-
[FromQuery][Required] Guid party,
284-
[FromQuery][Required] Guid id,
272+
[FromQuery][Required] Guid party,
273+
[FromQuery][Required] Guid id,
285274
CancellationToken ct = default
286275
)
287276
{
@@ -301,8 +290,8 @@ public async Task<IActionResult> WithdrawRequest(
301290
[ProducesResponseType(StatusCodes.Status403Forbidden)]
302291
[ProducesResponseType(StatusCodes.Status404NotFound)]
303292
public async Task<IActionResult> RejectRequest(
304-
[FromQuery][Required] Guid party,
305-
[FromQuery][Required] Guid id,
293+
[FromQuery][Required] Guid party,
294+
[FromQuery][Required] Guid id,
306295
CancellationToken ct = default
307296
)
308297
{
@@ -322,9 +311,9 @@ public async Task<IActionResult> RejectRequest(
322311
[ProducesResponseType(StatusCodes.Status403Forbidden)]
323312
[ProducesResponseType(StatusCodes.Status404NotFound)]
324313
public async Task<IActionResult> ApproveRequest(
325-
[FromQuery][Required] Guid party,
326-
[FromQuery][Required] Guid id,
327-
[FromBody] string[]? rightKeys,
314+
[FromQuery][Required] Guid party,
315+
[FromQuery][Required] Guid id,
316+
[FromBody] string[]? rightKeys,
328317
CancellationToken ct = default
329318
)
330319
{
@@ -358,7 +347,10 @@ private async Task<IActionResult> ApprovePackageRequest(Guid partyUuid, RequestD
358347
if (assignment is null)
359348
{
360349
errorBuilder.Add(ValidationErrors.RequestFailedToApprove, "Approve", [new("Approve", $"Unable to get or create rightholder assignment")]);
361-
errorBuilder.TryBuild(out var problem);
350+
}
351+
352+
if (errorBuilder.TryBuild(out var problem))
353+
{
362354
return problem.ToActionResult();
363355
}
364356

0 commit comments

Comments
 (0)