Compare commits
220
Commits
garages3
...
bbba869cdd
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bbba869cdd | ||
|
|
1b586da2ab | ||
|
|
5ae2622454 | ||
|
|
4735551e06 | ||
|
|
a28caa5c69 | ||
|
|
bd0f03344d | ||
|
|
c3cc21f334 | ||
|
|
9a0371fb08 | ||
|
|
381d5b7e94 | ||
|
|
d3566c5e43 | ||
|
|
0352d154a4 | ||
|
|
8eca793f5f | ||
|
|
343f405982 | ||
|
|
2ee7a49122 | ||
|
|
1ebd83a2f4 | ||
|
|
da2c0f9a34 | ||
|
|
1af860fdc1 | ||
|
|
34ddfc1d73 | ||
|
|
c04ae9a933 | ||
|
|
236f6f0f9d | ||
|
|
0e853811a9 | ||
|
|
c9deba0427 | ||
|
|
84a171d4a4 | ||
|
|
06539236a1 | ||
|
|
3a3d5daefc | ||
|
|
b3957f4af4 | ||
|
|
fe9b9052e9 | ||
|
|
d8a95f3f92 | ||
|
|
d25545ddad | ||
|
|
13712be13b | ||
|
|
7effc32498 | ||
|
|
681ed99fea | ||
|
|
8909bcf5c4 | ||
|
|
5fb67df9ac | ||
|
|
411e603f51 | ||
|
|
8fed46961a | ||
|
|
138ef84973 | ||
|
|
8100518549 | ||
|
|
312721bf51 | ||
|
|
8d069c2da0 | ||
|
|
dd59294911 | ||
|
|
8643b2625b | ||
|
|
28a3a17a15 | ||
|
|
c805a31824 | ||
|
|
4c2b0cd7d5 | ||
|
|
67fa99c64a | ||
|
|
275fd109e6 | ||
|
|
9f6c1e505b | ||
|
|
c4f57b92ef | ||
|
|
7d510d9fbc | ||
|
|
248cc2fa2d | ||
|
|
242a4c6fbb | ||
|
|
761d14beb9 | ||
|
|
891801c73d | ||
|
|
931e1a8698 | ||
|
|
8b68f7b99c | ||
|
|
aff58caeb0 | ||
|
|
93b3416d2c | ||
|
|
1c5080bf04 | ||
|
|
ef13117042 | ||
|
|
1fb157aa0a | ||
|
|
8eae097e8b | ||
|
|
ea71e55e2d | ||
|
|
0adfae1616 | ||
|
|
7037ea72ca | ||
|
|
4856b6e6f4 | ||
|
|
104f01e515 | ||
|
|
0ba47269aa | ||
|
|
0d626fd84a | ||
|
|
9ba48de55b | ||
|
|
5e25fd7a11 | ||
|
|
6107de3e53 | ||
|
|
f8fff04065 | ||
|
|
df167caf55 | ||
|
|
aca5882ad3 | ||
|
|
8afceda1cd | ||
|
|
6b027193d1 | ||
|
|
c1c5641d1e | ||
|
|
81702a4bf8 | ||
|
|
2efd2859c7 | ||
|
|
5eeb1cbfc7 | ||
|
|
dd6996bdb1 | ||
|
|
fb00986f59 | ||
|
|
1df0b97daf | ||
|
|
0338737385 | ||
|
|
e6fdcf3d0d | ||
|
|
82c0936b4c | ||
|
|
36e5d3d7c8 | ||
|
|
5d2a886f6f | ||
|
|
fb27cc8c92 | ||
|
|
dc4047ca6d | ||
|
|
6ab01830f3 | ||
|
|
46fe14d9ef | ||
|
|
6e6419ab51 | ||
|
|
f17368d939 | ||
|
|
ed6e57ffa9 | ||
|
|
7aea3fa8de | ||
|
|
6be74e9a24 | ||
|
|
d43eb17aa3 | ||
|
|
2949d6218b | ||
|
|
01547d8c3f | ||
|
|
15a8d8f449 | ||
|
|
18dd9131cb | ||
|
|
db07ad1a82 | ||
|
|
f82a5cef76 | ||
|
|
11967e3252 | ||
|
|
614730caab | ||
|
|
f3a8f78144 | ||
|
|
9823cd7ea6 | ||
|
|
b2688867f3 | ||
|
|
a7a68fc290 | ||
|
|
0f903a58b5 | ||
|
|
86e2bad4fe | ||
|
|
1efbf9d99f | ||
|
|
24697776d0 | ||
|
|
4b806a3202 | ||
|
|
26df423180 | ||
|
|
4dbc74e488 | ||
|
|
f39eb9d8fe | ||
|
|
593219db8c | ||
|
|
d658497545 | ||
|
|
020bdee36f | ||
|
|
8e0c099867 | ||
|
|
ef134a5b3c | ||
|
|
b947959724 | ||
|
|
717b891554 | ||
|
|
58126e7573 | ||
|
|
91d325ce4e | ||
|
|
2fede443cc | ||
|
|
3cc8514136 | ||
|
|
11311421ad | ||
|
|
f4024d563a | ||
|
|
78b03b6996 | ||
|
|
80f220fcae | ||
|
|
06e2c3ee6a | ||
|
|
3c0fd8844c | ||
|
|
b7c135f0fc | ||
|
|
db053e3e5f | ||
|
|
d7177e1a72 | ||
|
|
c67041faea | ||
|
|
0e8a5e1169 | ||
|
|
41fdb067fe | ||
|
|
b4b687dfcc | ||
|
|
f200ccbf60 | ||
|
|
27f57150e1 | ||
|
|
79c63107e9 | ||
|
|
d945731252 | ||
|
|
c979a4632e | ||
|
|
9eed3cff6b | ||
|
|
6db1a2f367 | ||
|
|
06d9952cd7 | ||
|
|
92d481f75d | ||
|
|
1c36602995 | ||
|
|
5ae0c500ac | ||
|
|
db04f800e9 | ||
|
|
e7a19611f0 | ||
|
|
5ad24da7cf | ||
|
|
156dae40b7 | ||
|
|
1b67d9cf8b | ||
|
|
1bd05e64e5 | ||
|
|
303dba3c6f | ||
|
|
1dd4f54a1d | ||
|
|
fae1e080c4 | ||
|
|
4de23d27b3 | ||
|
|
d4bce12dbb | ||
|
|
299b876e1c | ||
|
|
dde1dbe056 | ||
|
|
b81e6feb45 | ||
|
|
4138a1941f | ||
|
|
17af31d810 | ||
|
|
b85cf6a1cb | ||
|
|
81ddc11746 | ||
|
|
5b94672ff5 | ||
|
|
c535392ef1 | ||
|
|
0607de1802 | ||
|
|
4c1e52e452 | ||
|
|
2414d74d1c | ||
|
|
93d9661a7f | ||
|
|
dba401fe94 | ||
|
|
42d73fe6cb | ||
|
|
1475887a7f | ||
|
|
730664d9c4 | ||
|
|
f38e569a34 | ||
|
|
7e79171f97 | ||
|
|
d7b868f2c1 | ||
|
|
d43a09b371 | ||
|
|
0dc0de1502 | ||
|
|
de47dd4a4f | ||
|
|
2810cc669b | ||
|
|
734af8c86f | ||
|
|
a754c42d14 | ||
|
|
bd7ca9372f | ||
|
|
0d01d91ab4 | ||
|
|
2c817a8818 | ||
|
|
4c3a96917b | ||
|
|
e5c3a75795 | ||
|
|
1bc7e65960 | ||
|
|
094126d84b | ||
|
|
2506241a25 | ||
|
|
cfe3530639 | ||
|
|
985557bee4 | ||
|
|
f0b8b3051a | ||
|
|
6c88b9e533 | ||
|
|
7d67408d2c | ||
|
|
d1d58a6183 | ||
|
|
60ad154841 | ||
|
|
2c13170859 | ||
|
|
d87c8aa3c9 | ||
|
|
6af7815ad1 | ||
|
|
a169f6c3f6 | ||
|
|
65ea753c19 | ||
|
|
e6d2663265 | ||
|
|
91b5814b60 | ||
|
|
0c4c848568 | ||
|
|
fb05150ebf | ||
|
|
2f9c20020b | ||
|
|
a771957db3 | ||
|
|
46267a2a34 | ||
|
|
a7f360cc2a | ||
|
|
67c08b40ca |
@@ -12,6 +12,7 @@
|
|||||||
*.env
|
*.env
|
||||||
*.env.json
|
*.env.json
|
||||||
certificates/
|
certificates/
|
||||||
|
package-lock.json
|
||||||
|
|
||||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||||
*.userprefs
|
*.userprefs
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Communications;
|
namespace PostFundManagement.Api.Endpoints.Communications;
|
||||||
|
|
||||||
@@ -14,12 +12,12 @@ public sealed class GetApplicantInviteEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
public void Map(IEndpointRouteBuilder builder)
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
{
|
{
|
||||||
builder.MapGet("api/communications/invites/applicant/{applicantUserId:Guid}", async (Guid applicantUserId, ICommunicationsService service,
|
builder.MapGet("api/communications/invites/applicants/{applicantUserId:Guid}", async (Guid applicantUserId, ICommunicationsService service,
|
||||||
HttpContext context, CancellationToken cancellationToken = default) =>
|
HttpContext context, CancellationToken cancellationToken = default) =>
|
||||||
await service.GetApplicantInviteAsync(applicantUserId, cancellationToken) switch
|
await service.GetApplicantInviteAsync(applicantUserId, cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var invite } => Results.Ok(invite),
|
{ IsSuccess: true, Value: var invite } => Results.Ok(invite),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
||||||
})
|
})
|
||||||
.WithDescription("Gets an applicant's invite")
|
.WithDescription("Gets an applicant's invite")
|
||||||
@@ -27,8 +25,8 @@ public sealed class GetApplicantInviteEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetApplicantInviteEndpoint).ToEndpointName())
|
.WithName(typeof(GetApplicantInviteEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Invite>(StatusCodes.Status200OK)
|
.Produces<Invite>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Communications)
|
.WithTags(EndpointTags.Communications)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Communications;
|
namespace PostFundManagement.Api.Endpoints.Communications;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public sealed class GetApplicantInvitesEndpoint : IEndpoint
|
|||||||
await service.GetApplicantInvitesAsync(applicantUserId, cancellationToken) switch
|
await service.GetApplicantInvitesAsync(applicantUserId, cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var invite } => Results.Ok(invite),
|
{ IsSuccess: true, Value: var invite } => Results.Ok(invite),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
||||||
})
|
})
|
||||||
.WithDescription("Gets an applicant's invite list")
|
.WithDescription("Gets an applicant's invite list")
|
||||||
@@ -27,8 +25,8 @@ public sealed class GetApplicantInvitesEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetApplicantInvitesEndpoint).ToEndpointName())
|
.WithName(typeof(GetApplicantInvitesEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Invite[]>(StatusCodes.Status200OK)
|
.Produces<Invite[]>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Communications)
|
.WithTags(EndpointTags.Communications)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Communications;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetIApplicantDataEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/communications/applicants/{applicantUserId:Guid}/all", async (Guid applicantUserId,
|
||||||
|
ICommunicationsService service, CancellationToken cancellationtToken = default ) =>
|
||||||
|
await service.GetApplicantDataAsync(applicantUserId, cancellationtToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var applicantData } => Results.Ok(applicantData),
|
||||||
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
|
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
||||||
|
})
|
||||||
|
.WithDescription("Gets an applicant's data")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetIApplicantDataEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<Invite>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Communications)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,9 +4,6 @@ using PostFundManagement.Domain;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using static PostFundManagement.Application.Extensions.General;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Communications;
|
namespace PostFundManagement.Api.Endpoints.Communications;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Communications;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetNotificationsEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/communications/notifications/{organisationId}", async (string organisationId,
|
||||||
|
ICommunicationsService service, CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetNotificationsAsync(organisationId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var notifications } => Results.Ok(notifications),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
||||||
|
})
|
||||||
|
.WithDescription("Retrieves the notification system report")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetNotificationsEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<Notification[]>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Notification[]>(StatusCodes.Status404NotFound)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Communications)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,8 +5,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Communications;
|
namespace PostFundManagement.Api.Endpoints.Communications;
|
||||||
|
|
||||||
@@ -15,11 +13,12 @@ public sealed class SendInviteEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
public void Map(IEndpointRouteBuilder builder)
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
{
|
{
|
||||||
builder.MapPost("api/communications/invite", async (InviteRequest request,
|
builder.MapPost("api/communications/invites", async (InviteRequest request,
|
||||||
HttpContext context, ICommunicationsService service, CancellationToken cancellationToken = default) =>
|
HttpContext context, ICommunicationsService service, CancellationToken cancellationToken = default) =>
|
||||||
await service.SendInviteAsync(request, context.GetUserId(), cancellationToken) switch
|
await service.SendInviteAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var invite } => Results.Ok(invite),
|
{ IsSuccess: true, Value: var invite } => Results.Ok(invite),
|
||||||
|
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
@@ -29,6 +28,7 @@ public sealed class SendInviteEndpoint : IEndpoint
|
|||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Invite>(StatusCodes.Status200OK)
|
.Produces<Invite>(StatusCodes.Status200OK)
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.WithTags(EndpointTags.Communications);
|
.WithTags(EndpointTags.Communications);
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ using PostFundManagement.Application.Extensions;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Evidence;
|
namespace PostFundManagement.Api.Endpoints.Evidence;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Evidence;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Evidence;
|
namespace PostFundManagement.Api.Endpoints.Evidence;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public class CreateIndicatorEndpoint : IEndpoint
|
|||||||
await service.CreateIndicatorAsync(request, context.GetUserId(), cancellationToken) switch
|
await service.CreateIndicatorAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true } => Results.Ok(),
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
@@ -28,8 +26,8 @@ public class CreateIndicatorEndpoint : IEndpoint
|
|||||||
.WithName(typeof(CreateIndicatorEndpoint).ToEndpointName())
|
.WithName(typeof(CreateIndicatorEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Evidence);
|
.WithTags(EndpointTags.Evidence);
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Evidence;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Evidence;
|
namespace PostFundManagement.Api.Endpoints.Evidence;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public class CreateMilestoneEndpoint : IEndpoint
|
|||||||
await service.CreateMilestoneAsync(request, context.GetUserId(), cancellationToken) switch
|
await service.CreateMilestoneAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true } => Results.Ok(),
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
@@ -30,6 +28,7 @@ public class CreateMilestoneEndpoint : IEndpoint
|
|||||||
.Produces(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Evidence);
|
.WithTags(EndpointTags.Evidence);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ using PostFundManagement.Application.Extensions;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Evidence;
|
namespace PostFundManagement.Api.Endpoints.Evidence;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public sealed class GetEvidenceEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var evidence } => Results.Ok(evidence),
|
{ IsSuccess: true, Value: var evidence } => Results.Ok(evidence),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Get a specific evidence record and assiciated file URLs")
|
.WithDescription("Get a specific evidence record and assiciated file URLs")
|
||||||
@@ -27,9 +25,9 @@ public sealed class GetEvidenceEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetEvidenceEndpoint).ToEndpointName())
|
.WithName(typeof(GetEvidenceEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Domain.Models.Evidence>(StatusCodes.Status200OK)
|
.Produces<Domain.Models.Evidence>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Evidence)
|
.WithTags(EndpointTags.Evidence)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ using PostFundManagement.Application.Extensions;
|
|||||||
using PostFundManagement.Domain;
|
using PostFundManagement.Domain;
|
||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Evidence;
|
namespace PostFundManagement.Api.Endpoints.Evidence;
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ using PostFundManagement.Application.Extensions;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Evidence;
|
namespace PostFundManagement.Api.Endpoints.Evidence;
|
||||||
|
|
||||||
@@ -19,17 +17,17 @@ public sealed class GetEvidenceUrlEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var evidenceUrl } => Results.Ok(evidenceUrl),
|
{ IsSuccess: true, Value: var evidenceUrl } => Results.Ok(evidenceUrl),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Gets a secure download URL of the evidence file, URL expires (default: 15min)")
|
.WithDescription("Gets a secure download URL of the evidence file, URL expires (default: 15min)")
|
||||||
.RequireAuthorization(Constants.MainScope)
|
.RequireAuthorization(Constants.MainScope)
|
||||||
.WithName(typeof(GetEvidenceUrlEndpoint).ToEndpointName())
|
.WithName(typeof(GetEvidenceUrlEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<string>(StatusCodes.Status200OK)
|
|
||||||
.Produces<string>(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<string>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Grants)
|
.WithTags(EndpointTags.Grants)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Evidence;
|
namespace PostFundManagement.Api.Endpoints.Evidence;
|
||||||
|
|
||||||
@@ -20,7 +18,7 @@ public sealed class GetIndicatorEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var indicator } => Results.Ok(indicator),
|
{ IsSuccess: true, Value: var indicator } => Results.Ok(indicator),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Get a specific indicator.")
|
.WithDescription("Get a specific indicator.")
|
||||||
@@ -28,9 +26,9 @@ public sealed class GetIndicatorEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetIndicatorEndpoint).ToEndpointName())
|
.WithName(typeof(GetIndicatorEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Indicator>(StatusCodes.Status200OK)
|
.Produces<Indicator>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Evidence)
|
.WithTags(EndpointTags.Evidence)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Evidence;
|
namespace PostFundManagement.Api.Endpoints.Evidence;
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ using PostFundManagement.Application.Extensions;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Evidence;
|
namespace PostFundManagement.Api.Endpoints.Evidence;
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ using PostFundManagement.Application.Extensions;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Evidence;
|
namespace PostFundManagement.Api.Endpoints.Evidence;
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ using PostFundManagement.Application.Extensions;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Evidence;
|
namespace PostFundManagement.Api.Endpoints.Evidence;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Evidence;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Evidence;
|
namespace PostFundManagement.Api.Endpoints.Evidence;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public sealed class UpdateEvidenceEndpoint : IEndpoint
|
|||||||
await service.UpdateEvidenceAsync(request, context.GetUserId(), cancellationToken) switch
|
await service.UpdateEvidenceAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true } => Results.Ok(),
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<UpdateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<UpdateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
@@ -29,9 +27,9 @@ public sealed class UpdateEvidenceEndpoint : IEndpoint
|
|||||||
.WithName(typeof(UpdateEvidenceEndpoint).ToEndpointName())
|
.WithName(typeof(UpdateEvidenceEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Evidence);
|
.WithTags(EndpointTags.Evidence);
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ using PostFundManagement.Application.Extensions;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Execution;
|
namespace PostFundManagement.Api.Endpoints.Execution;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Execution;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Execution;
|
namespace PostFundManagement.Api.Endpoints.Execution;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public class CreateDisbursementEndpoint : IEndpoint
|
|||||||
await service.CreateDisbursementAsync(request, context.GetUserId(), cancellationToken) switch
|
await service.CreateDisbursementAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true } => Results.Ok(),
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
||||||
})
|
})
|
||||||
@@ -28,9 +26,9 @@ public class CreateDisbursementEndpoint : IEndpoint
|
|||||||
.WithName(typeof(CreateDisbursementEndpoint).ToEndpointName())
|
.WithName(typeof(CreateDisbursementEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Execution);
|
.WithTags(EndpointTags.Execution);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Execution;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Execution;
|
namespace PostFundManagement.Api.Endpoints.Execution;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public class CreateRiskEndpoint : IEndpoint
|
|||||||
await service.CreateRiskAsync(request, context.GetUserId(), cancellationToken) switch
|
await service.CreateRiskAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true } => Results.Ok(),
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
@@ -28,9 +26,9 @@ public class CreateRiskEndpoint : IEndpoint
|
|||||||
.WithName(typeof(CreateRiskEndpoint).ToEndpointName())
|
.WithName(typeof(CreateRiskEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Execution);
|
.WithTags(EndpointTags.Execution);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Application.Services.Execution;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Execution;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class CreateRuleEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapPost("api/execution/rules", async (CreateRuleRequest request, HttpContext context,
|
||||||
|
IExecutionService service, CancellationToken cancellationToken = default) =>
|
||||||
|
await service.CreateRuleAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
|
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
||||||
|
})
|
||||||
|
.WithDescription("Add rule against a programme")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(CreateRuleEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Execution);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Execution;
|
namespace PostFundManagement.Api.Endpoints.Execution;
|
||||||
|
|
||||||
@@ -20,7 +18,7 @@ public sealed class GetDisbursementEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var disbursement } => Results.Ok(disbursement),
|
{ IsSuccess: true, Value: var disbursement } => Results.Ok(disbursement),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Get a specific disbursement")
|
.WithDescription("Get a specific disbursement")
|
||||||
@@ -28,9 +26,9 @@ public sealed class GetDisbursementEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetDisbursementEndpoint).ToEndpointName())
|
.WithName(typeof(GetDisbursementEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Disbursement>(StatusCodes.Status200OK)
|
.Produces<Disbursement>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Execution)
|
.WithTags(EndpointTags.Execution)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Execution;
|
namespace PostFundManagement.Api.Endpoints.Execution;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Execution;
|
namespace PostFundManagement.Api.Endpoints.Execution;
|
||||||
|
|
||||||
@@ -20,7 +18,7 @@ public sealed class GetRiskEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var risk } => Results.Ok(risk),
|
{ IsSuccess: true, Value: var risk } => Results.Ok(risk),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Get a specific risk")
|
.WithDescription("Get a specific risk")
|
||||||
@@ -28,8 +26,8 @@ public sealed class GetRiskEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetRiskEndpoint).ToEndpointName())
|
.WithName(typeof(GetRiskEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Risk>(StatusCodes.Status200OK)
|
.Produces<Risk>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Execution)
|
.WithTags(EndpointTags.Execution)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -3,8 +3,7 @@ using PostFundManagement.Application.Extensions;
|
|||||||
using PostFundManagement.Domain;
|
using PostFundManagement.Domain;
|
||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
using PostFundManagement.Domain.Models;
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Execution;
|
namespace PostFundManagement.Api.Endpoints.Execution;
|
||||||
|
|
||||||
@@ -24,7 +23,7 @@ public class GetRisksEndpoint : IEndpoint
|
|||||||
.RequireAuthorization(Constants.MainScope)
|
.RequireAuthorization(Constants.MainScope)
|
||||||
.WithName(typeof(GetRisksEndpoint).ToEndpointName())
|
.WithName(typeof(GetRisksEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces(StatusCodes.Status200OK)
|
.Produces<Risk[]>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Execution)
|
.WithTags(EndpointTags.Execution)
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Execution;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetRuleEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/execution/rules/{ruleId}", async (string ruleId, IExecutionService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetRuleAsync(ruleId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var rules } => Results.Ok(rules),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Get a specific programme rule")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetRuleEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<Rule>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Execution)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Execution;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetRulesEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapPost("api/execution/programmes/rules", async (Pagination pagination, IExecutionService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetRulesAsync(pagination, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var rules } => Results.Ok(rules),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Get a list of all programme rules")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetRulesEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<Rule[]>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Execution)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Execution;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Execution;
|
namespace PostFundManagement.Api.Endpoints.Execution;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Execution;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Execution;
|
namespace PostFundManagement.Api.Endpoints.Execution;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Application.Services.Execution;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Execution;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class UpdateRuleEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapPut("api/execution/rules", async (UpdateRuleRequest request, HttpContext context,
|
||||||
|
IExecutionService service, CancellationToken cancellationToken = default) =>
|
||||||
|
await service.UpdateRuleAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
|
var r when r.HasError<UpdateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Update the details of a specific programme rule (supplied version auto-increment)")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(UpdateRuleEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Execution);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Application.Services.Governance;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class CreateInstrumentEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapPost("api/governance/instruments", async (CreateInstrumentRequest request, HttpContext context,
|
||||||
|
IGovernanceService service, CancellationToken cancellationToken = default) =>
|
||||||
|
await service.CreateInstrumentAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true} => Results.Ok(),
|
||||||
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Creates a new programme funding instrument")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(CreateInstrumentEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Governance)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Governance;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Governance;
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
@@ -19,6 +17,7 @@ public sealed class CreateOrganisationEndpoint : IEndpoint
|
|||||||
await service.CreateOrganisationAsync(request, context.GetUserId(), cancellationToken) switch
|
await service.CreateOrganisationAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true } => Results.Ok(),
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
|
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Governance;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Governance;
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Application.Services.Governance;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class CreateTenantEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapPost("api/governance/tenants", async (CreateTenantRequest request, IGovernanceService service, HttpContext context,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.CreateTenantAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
|
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Create a new tenant")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(CreateTenantEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Governance);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,8 +3,6 @@ using PostFundManagement.Application.Extensions;
|
|||||||
using PostFundManagement.Application.Services.Governance;
|
using PostFundManagement.Application.Services.Governance;
|
||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Governance;
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Application.Services.Shared;
|
||||||
|
using PostFundManagement.Domain;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetAuditLogsEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapPost("api/governance/auditlog", async (Pagination pagination, AuditService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetAuditLogsAsync(pagination, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var logs } => Results.Ok(logs),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Retrieves audit logs based on pagination parameters")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetAuditLogsEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<AuditLog[]>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Governance)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Governance;
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
@@ -18,7 +16,7 @@ public class GetInstrumentsEndpoint : IEndpoint
|
|||||||
CancellationToken cancellationToken = default) =>
|
CancellationToken cancellationToken = default) =>
|
||||||
await service.GetInstrumentsAsync(programmeId, cancellationToken) switch
|
await service.GetInstrumentsAsync(programmeId, cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var instrumenrs } => Results.Ok(instrumenrs),
|
{ IsSuccess: true, Value: var instruments } => Results.Ok(instruments),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Governance;
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
@@ -20,7 +18,7 @@ public class GetOrganisationEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var organisation } => Results.Ok(organisation),
|
{ IsSuccess: true, Value: var organisation } => Results.Ok(organisation),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Get organization profile by ID")
|
.WithDescription("Get organization profile by ID")
|
||||||
@@ -28,9 +26,9 @@ public class GetOrganisationEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetOrganisationEndpoint).ToEndpointName())
|
.WithName(typeof(GetOrganisationEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Organisation>(StatusCodes.Status200OK)
|
.Produces<Organisation>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Governance)
|
.WithTags(EndpointTags.Governance)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public class GetOrganisationPortfoliosEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/governance/organisations/{organisationId}/portfolio", async (string organisationId,
|
||||||
|
IGovernanceService service, CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetOrganisationPorfoliosAsync(organisationId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var portfolios } => Results.Ok(portfolios),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Get all portfolios belonging to a specific organisation")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetOrganisationPortfoliosEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<Portfolio[]>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Governance)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Governance;
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetPorfolioValueEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/governance/portfolios/{portfolioId}/value", async (string portfolioId, IGovernanceService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetPorfolioValueAsync(portfolioId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var amount } => Results.Ok(amount),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Calculates and returns a portfolio's total project's budget value")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetPorfolioValueEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<decimal>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Governance)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Governance;
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public sealed class GetPortfolioEndpoint : IEndpoint
|
|||||||
await service.GetPortfolioAsync(portfolioIdHash: portfolioId, cancellationToken) switch
|
await service.GetPortfolioAsync(portfolioIdHash: portfolioId, cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var portfolio } => Results.Ok(portfolio),
|
{ IsSuccess: true, Value: var portfolio } => Results.Ok(portfolio),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Get a specific portfolios")
|
.WithDescription("Get a specific portfolios")
|
||||||
@@ -27,9 +25,9 @@ public sealed class GetPortfolioEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetPortfolioEndpoint).ToEndpointName())
|
.WithName(typeof(GetPortfolioEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Portfolio[]>(StatusCodes.Status200OK)
|
.Produces<Portfolio[]>(StatusCodes.Status200OK)
|
||||||
.Produces<Portfolio[]>(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Governance)
|
.WithTags(EndpointTags.Governance)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Governance;
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public sealed class GetPortfolioProgrammesEndpoint : IEndpoint
|
|||||||
await service.GetPortfolioProgrammesAsync(portfolioId, cancellationToken) switch
|
await service.GetPortfolioProgrammesAsync(portfolioId, cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var portfolios } => Results.Ok(portfolios),
|
{ IsSuccess: true, Value: var portfolios } => Results.Ok(portfolios),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
@@ -28,9 +26,9 @@ public sealed class GetPortfolioProgrammesEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetPortfolioProgrammesEndpoint).ToEndpointName())
|
.WithName(typeof(GetPortfolioProgrammesEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Programme[]>(StatusCodes.Status200OK)
|
.Produces<Programme[]>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Governance)
|
.WithTags(EndpointTags.Governance)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -1,25 +1,22 @@
|
|||||||
using PostFundManagement.Application.Abstractions.Services;
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
using PostFundManagement.Application.Extensions;
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain;
|
||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Governance;
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
[ApiVersionTarget(1)]
|
[ApiVersionTarget(1)]
|
||||||
public class GetPortfoliosEndpoint : IEndpoint
|
public sealed class GetPortfoliosEndpoint : IEndpoint
|
||||||
{
|
{
|
||||||
public void Map(IEndpointRouteBuilder builder)
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
{
|
{
|
||||||
builder.MapGet("api/governance/organisations/{organisationId}/portfolio", async (string organisationId,
|
builder.MapPost("api/governance/organisations/portfolios", async (Pagination pagination, IGovernanceService service,
|
||||||
IGovernanceService service, CancellationToken cancellationToken = default) =>
|
CancellationToken cancellationToken = default) =>
|
||||||
await service.GetPorfoliosAsync(organisationId, cancellationToken) switch
|
await service.GetPorfoliosAsync(pagination, cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var portfolios } => Results.Ok(portfolios),
|
{ IsSuccess: true, Value: var portfolios } => Results.Ok(portfolios),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Get all portfolios")
|
.WithDescription("Get all portfolios")
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetProgrammeValueEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/governance/programmes/{programmeId}/value", async (string programmeId, IGovernanceService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetProgrammeValueAsync(programmeId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var amount } => Results.Ok(amount),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Calculates and returns a programme's total project budget value")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetProgrammeValueEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<decimal>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Governance)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Governance;
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetTenantEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/governance/tenants/{tenantId}", async (string tenantId, IGovernanceService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetTenantAsync(tenantId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var tenant } => Results.Ok(tenant),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Gets a single tenant")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetTenantsEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<Tenant>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Governance);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetTenantOrganisationsEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/governance/tenants/{tenantIdHash}/organisations", async (IGovernanceService service, string tenantIdHash,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetTenantOrganisationsAsync(tenantIdHash, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var tenantOrganisations } => Results.Ok(tenantOrganisations),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Gets organisations created and managed by one tenant")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetTenantOrganisationsEndpoint).ToEndpointName("Retrieval"))
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<TenantOrganisation[]>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Governance);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Entities;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetTenantsEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/governance/tenants", async (IGovernanceService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetTenantsAsync(cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var tenants } => Results.Ok(tenants),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Gets system tenants")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetTenantsEndpoint).ToEndpointName("Retrieval"))
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<Tenant[]>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Governance);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Application.Services.Governance;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class UpdateInstrumentEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapPut("api/governance/instruments", async (UpdateInstrumentRequest request, HttpContext context,
|
||||||
|
IGovernanceService service, CancellationToken cancellationToken = default) =>
|
||||||
|
await service.UpdateInstrumentAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
|
var r when r.HasError<UpdateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
||||||
|
})
|
||||||
|
.WithDescription("Updates a programme funding instrument")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(UpdateInstrumentEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Governance)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Governance;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Governance;
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
@@ -15,11 +13,13 @@ public sealed class UpdateOrganisationEndpoint : IEndpoint
|
|||||||
public void Map(IEndpointRouteBuilder builder)
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
{
|
{
|
||||||
builder.MapPut("api/governance/organisations", async (UpdateOrganisationRequest request,
|
builder.MapPut("api/governance/organisations", async (UpdateOrganisationRequest request,
|
||||||
IGovernanceService service, CancellationToken cancellationToken = default) =>
|
IGovernanceService service, HttpContext context, CancellationToken cancellationToken = default) =>
|
||||||
await service.UpdateOrganisationAsync(request, cancellationToken) switch
|
await service.UpdateOrganisationAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true } => Results.Ok(),
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r when r.HasError<UpdateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<UpdateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Update an existing organization profile")
|
.WithDescription("Update an existing organization profile")
|
||||||
@@ -27,10 +27,10 @@ public sealed class UpdateOrganisationEndpoint : IEndpoint
|
|||||||
.WithName(typeof(UpdateOrganisationEndpoint).ToEndpointName())
|
.WithName(typeof(UpdateOrganisationEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
|
||||||
.WithTags(EndpointTags.Governance);
|
.WithTags(EndpointTags.Governance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Governance;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Governance;
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
|
|||||||
+12
-14
@@ -1,36 +1,34 @@
|
|||||||
using PostFundManagement.Application.Abstractions.Services;
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
using PostFundManagement.Application.Extensions;
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Application.Services.Governance;
|
||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Tools;
|
namespace PostFundManagement.Api.Endpoints.Governance;
|
||||||
|
|
||||||
[ApiVersionTarget(1)]
|
[ApiVersionTarget(1)]
|
||||||
public sealed class EncodeIdEndpoint : IEndpoint
|
public sealed class UpdateTenantEndpoint : IEndpoint
|
||||||
{
|
{
|
||||||
public void Map(IEndpointRouteBuilder builder)
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
{
|
{
|
||||||
builder.MapGet("api/tools/hashid/{id64:long}", async (long id64, IToolService service,
|
builder.MapPut("api/governance/tenants", async (UpdateTenantRequest request, HttpContext context,
|
||||||
CancellationToken cancellationToken) =>
|
IGovernanceService service, CancellationToken cancellationToken = default) =>
|
||||||
await service.EncodeLong(id64, cancellationToken) switch
|
await service.UpdateTenantAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var hash } => Results.Ok(hash),
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r when r.HasError<UpdateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Hashes an int64 identifier")
|
.WithDescription("Updates a specific tenant")
|
||||||
.RequireAuthorization(Constants.MainScope)
|
.RequireAuthorization(Constants.MainScope)
|
||||||
.WithName(typeof(EncodeIdEndpoint).ToEndpointName())
|
.WithName(typeof(UpdateTenantEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<string>(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Tools)
|
.WithTags(EndpointTags.Governance);
|
||||||
.CacheOutput();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Grants;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Grants;
|
namespace PostFundManagement.Api.Endpoints.Grants;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public class CreateAwardEndpoint : IEndpoint
|
|||||||
await service.CreateAwardAsync(request, context.GetUserId(), cancellationToken) switch
|
await service.CreateAwardAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true } => Results.Ok(),
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
@@ -30,7 +28,7 @@ public class CreateAwardEndpoint : IEndpoint
|
|||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Grants);
|
.WithTags(EndpointTags.Grants);
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Grants;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Grants;
|
namespace PostFundManagement.Api.Endpoints.Grants;
|
||||||
|
|
||||||
@@ -20,8 +18,8 @@ public class CreateBudgetEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
{ IsSuccess: true } => Results.Ok(),
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<CreateError>() => Results.BadRequest(),
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Create a new budget line (M05)")
|
.WithDescription("Create a new budget line (M05)")
|
||||||
@@ -29,8 +27,8 @@ public class CreateBudgetEndpoint : IEndpoint
|
|||||||
.WithName(typeof(CreateBudgetEndpoint).ToEndpointName())
|
.WithName(typeof(CreateBudgetEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status400BadRequest)
|
.Produces(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Grants;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Grants;
|
namespace PostFundManagement.Api.Endpoints.Grants;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public class CreateContractEndpoint : IEndpoint
|
|||||||
await service.CreateContractAsync(request, context.GetUserId(), cancellationToken) switch
|
await service.CreateContractAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true } => Results.Ok(),
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
@@ -29,6 +27,7 @@ public class CreateContractEndpoint : IEndpoint
|
|||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.WithTags(EndpointTags.Grants);
|
.WithTags(EndpointTags.Grants);
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Grants;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Grants;
|
namespace PostFundManagement.Api.Endpoints.Grants;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Grants;
|
namespace PostFundManagement.Api.Endpoints.Grants;
|
||||||
|
|
||||||
@@ -20,7 +18,7 @@ public class GetAwardEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var award } => Results.Ok(award),
|
{ IsSuccess: true, Value: var award } => Results.Ok(award),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Get award by ID")
|
.WithDescription("Get award by ID")
|
||||||
@@ -30,7 +28,7 @@ public class GetAwardEndpoint : IEndpoint
|
|||||||
.Produces<Award>(StatusCodes.Status200OK)
|
.Produces<Award>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Grants)
|
.WithTags(EndpointTags.Grants)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Grants;
|
namespace PostFundManagement.Api.Endpoints.Grants;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Grants;
|
namespace PostFundManagement.Api.Endpoints.Grants;
|
||||||
|
|
||||||
@@ -20,7 +18,7 @@ public class GetBudgetEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var budget } => Results.Ok(budget),
|
{ IsSuccess: true, Value: var budget } => Results.Ok(budget),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Get budget by ID")
|
.WithDescription("Get budget by ID")
|
||||||
@@ -28,7 +26,7 @@ public class GetBudgetEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetBudgetEndpoint).ToEndpointName())
|
.WithName(typeof(GetBudgetEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Budget>(StatusCodes.Status200OK)
|
.Produces<Budget>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Grants;
|
namespace PostFundManagement.Api.Endpoints.Grants;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Grants;
|
namespace PostFundManagement.Api.Endpoints.Grants;
|
||||||
|
|
||||||
@@ -20,7 +18,7 @@ public class GetContractEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var contract } => Results.Ok(contract),
|
{ IsSuccess: true, Value: var contract } => Results.Ok(contract),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Get contract by ID")
|
.WithDescription("Get contract by ID")
|
||||||
@@ -28,7 +26,7 @@ public class GetContractEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetContractEndpoint).ToEndpointName())
|
.WithName(typeof(GetContractEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Contract>(StatusCodes.Status200OK)
|
.Produces<Contract>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ using PostFundManagement.Application.Extensions;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Grants;
|
namespace PostFundManagement.Api.Endpoints.Grants;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public sealed class GetContractUrlEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var contractUrl} => Results.Ok(contractUrl),
|
{ IsSuccess: true, Value: var contractUrl} => Results.Ok(contractUrl),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Gets a secure download URL, has expiry period (default 15min)")
|
.WithDescription("Gets a secure download URL, has expiry period (default 15min)")
|
||||||
@@ -29,7 +27,7 @@ public sealed class GetContractUrlEndpoint : IEndpoint
|
|||||||
.Produces<string>(StatusCodes.Status200OK)
|
.Produces<string>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Grants)
|
.WithTags(EndpointTags.Grants)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Grants;
|
namespace PostFundManagement.Api.Endpoints.Grants;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Application.Services.Grants;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Grants;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class UpdateBudgetEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapPut("api/grants/budgets", async (UpdateBudgetRequest request, HttpContext context,
|
||||||
|
IGrantsService service, CancellationToken cancellationToken = default) =>
|
||||||
|
await service.UpdateBudgetAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
|
var r when r.HasError<UpdateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Updates a specific budget")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(UpdateBudgetEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Governance)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Grants;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Grants;
|
namespace PostFundManagement.Api.Endpoints.Grants;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public sealed class UpdateContractEndpoint : IEndpoint
|
|||||||
await service.UpdateContractAsync(request, cancellationToken) switch
|
await service.UpdateContractAsync(request, cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true } => Results.Ok(),
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<UpdateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<UpdateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
@@ -30,7 +28,7 @@ public sealed class UpdateContractEndpoint : IEndpoint
|
|||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Grants)
|
.WithTags(EndpointTags.Grants)
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ using PostFundManagement.Application.Extensions;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Grants;
|
namespace PostFundManagement.Api.Endpoints.Grants;
|
||||||
|
|
||||||
@@ -40,7 +38,6 @@ public sealed class UploadContractEndpoint : IEndpoint
|
|||||||
.Produces(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Grants)
|
.WithTags(EndpointTags.Grants)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Projects;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public class CreateActivityEndpoint : IEndpoint
|
|||||||
await service.CreateActivityAsync(request, context.GetUserId(), cancellationToken) switch
|
await service.CreateActivityAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true } result => Results.Ok(),
|
{ IsSuccess: true } result => Results.Ok(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
@@ -28,6 +26,7 @@ public class CreateActivityEndpoint : IEndpoint
|
|||||||
.WithName(typeof(CreateActivityEndpoint).ToEndpointName())
|
.WithName(typeof(CreateActivityEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Application.Services.Projects;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class CreateBeneficiaryEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapPost("api/projects/beneficiaries", async (CreateBeneficiaryRequest request, HttpContext context,
|
||||||
|
IProjectService service, CancellationToken cancellationToken = default) =>
|
||||||
|
await service.CreateBeneficiaryAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Add a new project beneficiary")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(CreateBeneficiaryEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces(StatusCodes.Status200OK)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.WithTags(EndpointTags.Projects);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Application.Services.Projects;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class CreateChangeRequestEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapPost("api/projects/changerequests", async (CreateChangeRequest request, IProjectService service,
|
||||||
|
HttpContext context, CancellationToken cancellationToken = default) =>
|
||||||
|
await service.CreateChangeRequestAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
||||||
|
})
|
||||||
|
.WithDescription("Create a new change request against an existing project")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(CreateChangeRequestEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Projects);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Application.Services.Projects;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class CreateComplianceItemEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapPost("api/projects/complianceitems", async (CreateComplianceItemRequest request, HttpContext context,
|
||||||
|
IProjectService service, CancellationToken cancellationToken = default) =>
|
||||||
|
await service.CreateComplianceItemAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
|
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Add a new beneficiary compliance item")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(CreateComplianceItemEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces(StatusCodes.Status200OK)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.WithTags(EndpointTags.Projects);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Application.Services.Projects;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class CreateIssueEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapPost("api/projects/issues", async (CreateIssueRequest request, HttpContext context,
|
||||||
|
IProjectService service, CancellationToken cancellationToken = default) =>
|
||||||
|
await service.CreateIssueAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Add a new project issue")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(CreateIssueEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces(StatusCodes.Status200OK)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.WithTags(EndpointTags.Projects);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Application.Services.Projects;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class CreateOutcomeEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapPost("api/projects/beneficiaris/outcomes", async (CreateOutcomeRequest request, HttpContext context,
|
||||||
|
IProjectService service, CancellationToken cancellationToken = default) =>
|
||||||
|
await service.CreateOutcomeAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Add a new beneficiary outcome")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(CreateOutcomeEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces(StatusCodes.Status200OK)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.WithTags(EndpointTags.Projects);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Projects;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public sealed class CreateProgrammeEndpoint : IEndpoint
|
|||||||
await service.CreateProgrammeAsync(request, userId: context.GetUserId(), cancellationToken) switch
|
await service.CreateProgrammeAsync(request, userId: context.GetUserId(), cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true } => Results.Ok(),
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<CreateError>() => Results.BadRequest(),
|
var r when r.HasError<CreateError>() => Results.BadRequest(),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
@@ -29,9 +27,9 @@ public sealed class CreateProgrammeEndpoint : IEndpoint
|
|||||||
.WithName(typeof(CreateProgrammeEndpoint).ToEndpointName())
|
.WithName(typeof(CreateProgrammeEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Projects);
|
.WithTags(EndpointTags.Projects);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Application.Services.Projects;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public class CreateProjectEndpoint : IEndpoint
|
|||||||
await service.CreateProjectAsync(request, context.GetUserId(), cancellationToken) switch
|
await service.CreateProjectAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true } result => Results.Ok(),
|
{ IsSuccess: true } result => Results.Ok(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<ValidationError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
@@ -29,9 +27,9 @@ public class CreateProjectEndpoint : IEndpoint
|
|||||||
.WithName(typeof(CreateProjectEndpoint).ToEndpointName())
|
.WithName(typeof(CreateProjectEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces(StatusCodes.Status200OK)
|
.Produces(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
.WithTags(EndpointTags.Projects);
|
.WithTags(EndpointTags.Projects);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Application.Services.Projects;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class CreateSiteVisitEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapPost("api/projects/sitevisits", async (CreateSiteVisitRequest request, HttpContext context,
|
||||||
|
IProjectService service, CancellationToken cancellationToken = default) =>
|
||||||
|
await service.CreateSiteVisitAsync(request, context.GetUserId(), cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true } => Results.Ok(),
|
||||||
|
var r when r.HasError<CreateError>() => Results.BadRequest(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Add a new project site visit")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(CreateSiteVisitEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces(StatusCodes.Status200OK)
|
||||||
|
.Produces<Problems>(StatusCodes.Status400BadRequest)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.WithTags(EndpointTags.Projects);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,8 +3,6 @@ using PostFundManagement.Application.Extensions;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ using PostFundManagement.Application.Extensions;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public class GetActivityEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var activity } => Results.Ok(activity),
|
{ IsSuccess: true, Value: var activity } => Results.Ok(activity),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Gets a specific activity by it's id")
|
.WithDescription("Gets a specific activity by it's id")
|
||||||
@@ -27,9 +25,9 @@ public class GetActivityEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetActivityEndpoint).ToEndpointName())
|
.WithName(typeof(GetActivityEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Domain.Models.Activity>(StatusCodes.Status200OK)
|
.Produces<Domain.Models.Activity>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Projects)
|
.WithTags(EndpointTags.Projects)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetBeneficiariesEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/projects/{projectId}/beneficiaries", async (string projectId, IProjectService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetBeneficiariesAsync(projectId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var beneficiaries } => Results.Ok(beneficiaries),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Gets project beneficiaries")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetBeneficiariesEndpoint).ToEndpointName("Retrieval"))
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<Beneficiary[]>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Projects)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetBeneficiaryEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/projects/beneficiaries/{beneficiaryId}", async (string beneficiaryId, IProjectService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetBeneficiaryAsync(beneficiaryId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var beneficiary } => Results.Ok(beneficiary),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Gets project beneficiaries")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetBeneficiariesEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<Beneficiary>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Projects)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetChangeRequestEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/projects/changerequests/{changeRequestId}", async (string changeRequestId, IProjectService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetChangeRequestAsync(changeRequestId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var changeRequest } => Results.Ok(changeRequest),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Gets a specific project change request")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetChangeRequestEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<ChangeRequest>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Projects)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetChangeRequestsEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/projects/{projectId}/changerequests", async (string projectId, IProjectService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetChangeRequestsAsync(projectId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var changeRequests } => Results.Ok(changeRequests),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Gets project change requests")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetChangeRequestsEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<ChangeRequest[]>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Projects)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetComplianceItemEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/projects/complianceitems/{complianceItemId}", async (string complianceItemId, IProjectService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetComplianceItemAsync(complianceItemId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var complianceItem } => Results.Ok(complianceItem),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Gets a specific project compliance item")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetComplianceItemEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<ComplianceItem>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Projects)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetComplianceItemsEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/projects/{projectId}/complianceitems", async (string projectId, IProjectService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetComplianceItemsAsync(projectId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var complianceItems } => Results.Ok(complianceItems),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Gets project compliance items")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetComplianceItemsEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<ComplianceItem[]>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Projects)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetIssueEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/projects/issues/{issueId}", async (string issueId, IProjectService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetIssueAsync(issueId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var issue } => Results.Ok(issue),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Gets a specific project issue")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetIssueEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<Issue>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Projects)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetIssuesEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/projects/{projectId}/issues", async (string projectId, IProjectService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetIssuesAsync(projectId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var issues } => Results.Ok(issues),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Gets project issues")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetIssuesEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<Issue[]>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Projects)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
@@ -20,7 +18,7 @@ public class GetMilestoneEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var milestone } => Results.Ok(milestone),
|
{ IsSuccess: true, Value: var milestone } => Results.Ok(milestone),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Gets a specific milestone")
|
.WithDescription("Gets a specific milestone")
|
||||||
@@ -28,9 +26,9 @@ public class GetMilestoneEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetMilestoneEndpoint).ToEndpointName())
|
.WithName(typeof(GetMilestoneEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Milestone>(StatusCodes.Status200OK)
|
.Produces<Milestone>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Projects)
|
.WithTags(EndpointTags.Projects)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetOutcomeEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/projects/outcomes/{outcomeId}", async (string outcomeId, IProjectService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetOutcomeAsync(outcomeId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var outcome } => Results.Ok(outcome),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Gets a specific project outcome")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetOutcomeEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<Outcome>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Projects)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using PostFundManagement.Application.Abstractions.Services;
|
||||||
|
using PostFundManagement.Application.Extensions;
|
||||||
|
using PostFundManagement.Domain.Abstractions;
|
||||||
|
using PostFundManagement.Domain.Errors;
|
||||||
|
using PostFundManagement.Domain.Extensions;
|
||||||
|
using PostFundManagement.Domain.Models;
|
||||||
|
|
||||||
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
[ApiVersionTarget(1)]
|
||||||
|
public sealed class GetOutcomesEndpoint : IEndpoint
|
||||||
|
{
|
||||||
|
public void Map(IEndpointRouteBuilder builder)
|
||||||
|
{
|
||||||
|
builder.MapGet("api/projects/outcomes/{beneficiatyId}", async (string beneficiatyId, IProjectService service,
|
||||||
|
CancellationToken cancellationToken = default) =>
|
||||||
|
await service.GetOutcomesAsync(beneficiatyId, cancellationToken) switch
|
||||||
|
{
|
||||||
|
{ IsSuccess: true, Value: var outcomes } => Results.Ok(outcomes),
|
||||||
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
|
})
|
||||||
|
.WithDescription("Gets project beneficiary outcomes")
|
||||||
|
.RequireAuthorization(Constants.MainScope)
|
||||||
|
.WithName(typeof(GetOutcomesEndpoint).ToEndpointName())
|
||||||
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
|
.Produces<Outcome[]>(StatusCodes.Status200OK)
|
||||||
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
|
.WithTags(EndpointTags.Projects)
|
||||||
|
.CacheOutput();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public sealed class GetProgrammeEndpoint : IEndpoint
|
|||||||
await service.GetProgrammeAsync(programmeId, cancellationToken) switch
|
await service.GetProgrammeAsync(programmeId, cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var programme } => Results.Ok(programme),
|
{ IsSuccess: true, Value: var programme } => Results.Ok(programme),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
@@ -30,6 +28,7 @@ public sealed class GetProgrammeEndpoint : IEndpoint
|
|||||||
.Produces<Programme>(StatusCodes.Status200OK)
|
.Produces<Programme>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Projects)
|
.WithTags(EndpointTags.Projects)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
@@ -19,7 +17,7 @@ public sealed class GetProgrammeProjectsEndpoint : IEndpoint
|
|||||||
await service.GetProgrammeProjectsAsync(programmeId, cancellationToken) switch
|
await service.GetProgrammeProjectsAsync(programmeId, cancellationToken) switch
|
||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var projects } => Results.Ok(projects),
|
{ IsSuccess: true, Value: var projects } => Results.Ok(projects),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
var r => Results.InternalServerError(r.Errors.ToProblems()),
|
||||||
})
|
})
|
||||||
@@ -28,9 +26,9 @@ public sealed class GetProgrammeProjectsEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetProgrammeProjectsEndpoint).ToEndpointName())
|
.WithName(typeof(GetProgrammeProjectsEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Project[]>(StatusCodes.Status200OK)
|
.Produces<Project[]>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Projects)
|
.WithTags(EndpointTags.Projects)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
@@ -20,7 +18,7 @@ public class GetProjectEndpoint : IEndpoint
|
|||||||
{
|
{
|
||||||
{ IsSuccess: true, Value: var project } => Results.Ok(project),
|
{ IsSuccess: true, Value: var project } => Results.Ok(project),
|
||||||
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
var r when r.HasError<IdDecodeError>() => Results.Forbid(),
|
||||||
var r when r.HasError<NotFoundError>() => Results.NotFound(),
|
var r when r.HasError<NotFoundError>() => Results.NotFound(r.Errors.ToProblems()),
|
||||||
var r => Results.InternalServerError(r.Errors.ToProblems())
|
var r => Results.InternalServerError(r.Errors.ToProblems())
|
||||||
})
|
})
|
||||||
.WithDescription("Get project by ID")
|
.WithDescription("Get project by ID")
|
||||||
@@ -28,9 +26,9 @@ public class GetProjectEndpoint : IEndpoint
|
|||||||
.WithName(typeof(GetProjectEndpoint).ToEndpointName())
|
.WithName(typeof(GetProjectEndpoint).ToEndpointName())
|
||||||
.MapToApiVersion(new ApiVersion(1))
|
.MapToApiVersion(new ApiVersion(1))
|
||||||
.Produces<Project[]>(StatusCodes.Status200OK)
|
.Produces<Project[]>(StatusCodes.Status200OK)
|
||||||
.Produces(StatusCodes.Status404NotFound)
|
|
||||||
.Produces(StatusCodes.Status403Forbidden)
|
.Produces(StatusCodes.Status403Forbidden)
|
||||||
.Produces(StatusCodes.Status401Unauthorized)
|
.Produces(StatusCodes.Status401Unauthorized)
|
||||||
|
.Produces<Problems>(StatusCodes.Status404NotFound)
|
||||||
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
.Produces<Problems>(StatusCodes.Status500InternalServerError)
|
||||||
.WithTags(EndpointTags.Projects)
|
.WithTags(EndpointTags.Projects)
|
||||||
.CacheOutput();
|
.CacheOutput();
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain.Abstractions;
|
|||||||
using PostFundManagement.Domain.Errors;
|
using PostFundManagement.Domain.Errors;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ using PostFundManagement.Domain;
|
|||||||
using PostFundManagement.Domain.Abstractions;
|
using PostFundManagement.Domain.Abstractions;
|
||||||
using PostFundManagement.Domain.Extensions;
|
using PostFundManagement.Domain.Extensions;
|
||||||
using PostFundManagement.Domain.Models;
|
using PostFundManagement.Domain.Models;
|
||||||
using PostFundManagement.Domain.Security;
|
|
||||||
using Problems = Microsoft.AspNetCore.Mvc.ProblemDetails;
|
|
||||||
|
|
||||||
namespace PostFundManagement.Api.Endpoints.Projects;
|
namespace PostFundManagement.Api.Endpoints.Projects;
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user