Skip to content

Commit af8b5fe

Browse files
feature(#20): this commit introduces a new POST action that allows you to associate an audience with a client via the /{id}/audiences route. It includes permission-based authorization and returns appropriate status codes for success, a non-existent client, or an audience that is already associated.
1 parent 3fada7f commit af8b5fe

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

Applications/Backend/Source/HttpsRichardy.Federation.WebApi/Controllers/ClientsController.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,24 @@ public async Task<IActionResult> RevokePermissionAsync([FromRoute] string id, [F
141141
StatusCode(StatusCodes.Status409Conflict, result.Error)
142142
};
143143
}
144+
145+
[HttpPost("{id}/audiences")]
146+
[Stability(Stability.Stable)]
147+
[Authorize(Roles = Permissions.EditClient)]
148+
public async Task<IActionResult> AssignAudienceAsync([FromRoute] string id, [FromBody] AssignClientAudienceScheme request, CancellationToken cancellation)
149+
{
150+
var result = await dispatcher.DispatchAsync(request with { Id = id }, cancellation);
151+
152+
return result switch
153+
{
154+
{ IsSuccess: true } when result.Data is not null =>
155+
StatusCode(StatusCodes.Status200OK, result.Data),
156+
157+
{ IsFailure: true } when result.Error == ClientErrors.ClientDoesNotExist =>
158+
StatusCode(StatusCodes.Status404NotFound, result.Error),
159+
160+
{ IsFailure: true } when result.Error == ClientErrors.ClientAlreadyHasAudience =>
161+
StatusCode(StatusCodes.Status409Conflict, result.Error),
162+
};
163+
}
144164
}

0 commit comments

Comments
 (0)