-
-
Notifications
You must be signed in to change notification settings - Fork 512
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Sliced endpoints in Helpdesk Marten+Wolverine example
- Loading branch information
1 parent
07ff838
commit ea07ddf
Showing
31 changed files
with
491 additions
and
400 deletions.
There are no files selected for viewing
1 change: 1 addition & 0 deletions
1
Sample/Helpdesk.Wolverine/Helpdesk.Api.Tests/Incidents/CategoriseIncidentTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
...e/Helpdesk.Wolverine/Helpdesk.Api.Tests/Incidents/Fixtures/ApiWithAcknowledgedIncident.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
Sample/Helpdesk.Wolverine/Helpdesk.Api.Tests/Incidents/Fixtures/ApiWithLoggedIncident.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
Sample/Helpdesk.Wolverine/Helpdesk.Api.Tests/Incidents/Fixtures/ApiWithResolvedIncident.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 3 additions & 1 deletion
4
Sample/Helpdesk.Wolverine/Helpdesk.Api.Tests/Incidents/Fixtures/Scenarios.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 2 additions & 1 deletion
3
Sample/Helpdesk.Wolverine/Helpdesk.Api.Tests/Incidents/LogIncidentsTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 1 addition & 0 deletions
1
Sample/Helpdesk.Wolverine/Helpdesk.Api.Tests/Incidents/PrioritiseIncidentTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 2 additions & 1 deletion
3
Sample/Helpdesk.Wolverine/Helpdesk.Api.Tests/Incidents/RecordAgentResponseToIncidentTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 2 additions & 1 deletion
3
.../Helpdesk.Wolverine/Helpdesk.Api.Tests/Incidents/RecordCustomerResponseToIncidentTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 1 addition & 0 deletions
1
Sample/Helpdesk.Wolverine/Helpdesk.Api.Tests/Incidents/ResolveIncidentTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
48 changes: 48 additions & 0 deletions
48
...elpdesk.Wolverine/Helpdesk.Api/Incidents/AcknowledgingResolution/AcknowledgeResolution.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
using Helpdesk.Api.Core.Http; | ||
using Helpdesk.Api.Core.Marten; | ||
using Marten; | ||
using Wolverine.Http; | ||
using static Microsoft.AspNetCore.Http.TypedResults; | ||
using static Helpdesk.Api.Incidents.IncidentService; | ||
using static Helpdesk.Api.Core.Http.ETagExtensions; | ||
using static System.DateTimeOffset; | ||
|
||
namespace Helpdesk.Api.Incidents.AcknowledgingResolution; | ||
|
||
public static class AcknowledgeResolutionEndpoint | ||
{ | ||
[WolverinePost("/api/customers/{customerId:guid}/incidents/{incidentId:guid}/acknowledge")] | ||
public static async Task<IResult> AcknowledgeResolution | ||
( | ||
IDocumentSession documentSession, | ||
Guid incidentId, | ||
Guid customerId, | ||
[FromIfMatchHeader] string eTag, | ||
CancellationToken ct | ||
) | ||
{ | ||
await documentSession.GetAndUpdate<Incident>(incidentId, ToExpectedVersion(eTag), | ||
state => Handle(state, new AcknowledgeResolution(incidentId, customerId, Now)), ct); | ||
|
||
return Ok(); | ||
} | ||
|
||
public static ResolutionAcknowledgedByCustomer Handle( | ||
Incident current, | ||
AcknowledgeResolution command | ||
) | ||
{ | ||
if (current.Status is not IncidentStatus.Resolved) | ||
throw new InvalidOperationException("Only resolved incident can be acknowledged"); | ||
|
||
var (incidentId, acknowledgedBy, now) = command; | ||
|
||
return new ResolutionAcknowledgedByCustomer(incidentId, acknowledgedBy, now); | ||
} | ||
} | ||
|
||
public record AcknowledgeResolution( | ||
Guid IncidentId, | ||
Guid AcknowledgedBy, | ||
DateTimeOffset Now | ||
); |
45 changes: 45 additions & 0 deletions
45
Sample/Helpdesk.Wolverine/Helpdesk.Api/Incidents/AssigningAgent/AssignAgent.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
using Helpdesk.Api.Core.Http; | ||
using Helpdesk.Api.Core.Marten; | ||
using Marten; | ||
using Wolverine.Http; | ||
using static Microsoft.AspNetCore.Http.TypedResults; | ||
using static Helpdesk.Api.Incidents.IncidentService; | ||
using static Helpdesk.Api.Core.Http.ETagExtensions; | ||
using static System.DateTimeOffset; | ||
|
||
namespace Helpdesk.Api.Incidents.AssigningAgent; | ||
|
||
public static class AssignAgentEndpoint | ||
{ | ||
[WolverinePost("/api/agents/{agentId:guid}/incidents/{incidentId:guid}/assign")] | ||
public static async Task<IResult> AssignAgent | ||
( | ||
IDocumentSession documentSession, | ||
Guid incidentId, | ||
Guid agentId, | ||
[FromIfMatchHeader] string eTag, | ||
CancellationToken ct | ||
) | ||
{ | ||
await documentSession.GetAndUpdate<Incident>(incidentId, ToExpectedVersion(eTag), | ||
state => Handle(state, new AssignAgentToIncident(incidentId, agentId, Now)), ct); | ||
|
||
return Ok(); | ||
} | ||
|
||
public static AgentAssignedToIncident Handle(Incident current, AssignAgentToIncident command) | ||
{ | ||
if (current.Status == IncidentStatus.Closed) | ||
throw new InvalidOperationException("Incident is already closed"); | ||
|
||
var (incidentId, agentId, now) = command; | ||
|
||
return new AgentAssignedToIncident(incidentId, agentId, now); | ||
} | ||
} | ||
|
||
public record AssignAgentToIncident( | ||
Guid IncidentId, | ||
Guid AgentId, | ||
DateTimeOffset Now | ||
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
51 changes: 51 additions & 0 deletions
51
Sample/Helpdesk.Wolverine/Helpdesk.Api/Incidents/Closing/Close.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
using Helpdesk.Api.Core.Http; | ||
using Helpdesk.Api.Core.Marten; | ||
using Marten; | ||
using Wolverine.Http; | ||
using static Microsoft.AspNetCore.Http.TypedResults; | ||
using static Helpdesk.Api.Incidents.IncidentService; | ||
using static Helpdesk.Api.Core.Http.ETagExtensions; | ||
using static System.DateTimeOffset; | ||
|
||
namespace Helpdesk.Api.Incidents.Closing; | ||
|
||
public static class CloseEndpoint | ||
{ | ||
[WolverinePost("/api/agents/{agentId:guid}/incidents/{incidentId:guid}/close")] | ||
public static async Task<IResult> CloseIncident | ||
( | ||
IDocumentSession documentSession, | ||
Guid incidentId, | ||
Guid agentId, | ||
[FromIfMatchHeader] string eTag, | ||
CancellationToken ct | ||
) | ||
{ | ||
await documentSession.GetAndUpdate<Incident>(incidentId, ToExpectedVersion(eTag), | ||
state => Handle(state, new CloseIncident(incidentId, agentId, Now)), ct); | ||
|
||
return Ok(); | ||
} | ||
|
||
public static IncidentClosed Handle( | ||
Incident current, | ||
CloseIncident command | ||
) | ||
{ | ||
if (current.Status is not IncidentStatus.ResolutionAcknowledgedByCustomer) | ||
throw new InvalidOperationException("Only incident with acknowledged resolution can be closed"); | ||
|
||
if (current.HasOutstandingResponseToCustomer) | ||
throw new InvalidOperationException("Cannot close incident that has outstanding responses to customer"); | ||
|
||
var (incidentId, acknowledgedBy, now) = command; | ||
|
||
return new IncidentClosed(incidentId, acknowledgedBy, now); | ||
} | ||
} | ||
|
||
public record CloseIncident( | ||
Guid IncidentId, | ||
Guid ClosedBy, | ||
DateTimeOffset Now | ||
); |
17 changes: 17 additions & 0 deletions
17
...elpdesk.Wolverine/Helpdesk.Api/Incidents/GettingCustomerIncidents/GetCustomerIncidents.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
using Helpdesk.Api.Incidents.GettingShortInfo; | ||
using Marten; | ||
using Marten.Pagination; | ||
using Microsoft.AspNetCore.Mvc; | ||
using Wolverine.Http; | ||
|
||
namespace Helpdesk.Api.Incidents.GettingCustomerIncidents; | ||
|
||
public static class GetCustomerIncidentsEndpoints | ||
{ | ||
[WolverineGet("/api/customers/{customerId:guid}/incidents/")] | ||
public static Task<IPagedList<IncidentShortInfo>> GetCustomerIncidents | ||
(IQuerySession querySession, [FromRoute] Guid customerId, [FromQuery] int? pageNumber, [FromQuery] int? pageSize, | ||
CancellationToken ct) => | ||
querySession.Query<IncidentShortInfo>().Where(i => i.CustomerId == customerId) | ||
.ToPagedListAsync(pageNumber ?? 1, pageSize ?? 10, ct); | ||
} |
2 changes: 1 addition & 1 deletion
2
...GetIncidentShortInfo/IncidentShortInfo.cs → ...ingCustomerIncidents/IncidentShortInfo.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
23 changes: 23 additions & 0 deletions
23
...ine/Helpdesk.Api/Incidents/GettingCustomerIncidentsSummary/GetCustomerIncidentsSummary.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
using Marten; | ||
using Microsoft.AspNetCore.Mvc; | ||
using Wolverine.Http; | ||
|
||
namespace Helpdesk.Api.Incidents.GettingCustomerIncidentsSummary; | ||
|
||
public static class GetCustomerIncidentsSummaryEndpoint | ||
{ | ||
// That for some reason doesn't work for me | ||
// [WolverineGet("/api/customers/{customerId:guid}/incidents/incidents-summary")] | ||
// public static Task GetCustomerIncidentsSummary([FromRoute] Guid customerId, HttpContext context, | ||
// IQuerySession querySession) => | ||
// querySession.Json.WriteById<CustomerIncidentsSummary>(customerId, context); | ||
|
||
[WolverineGet("/api/customers/{customerId:guid}/incidents/incidents-summary")] | ||
public static Task<CustomerIncidentsSummary?> GetCustomerIncidentsSummary( | ||
[FromRoute] Guid customerId, | ||
IQuerySession querySession, | ||
CancellationToken ct | ||
) => | ||
querySession.LoadAsync<CustomerIncidentsSummary>(customerId, ct); | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
18 changes: 18 additions & 0 deletions
18
Sample/Helpdesk.Wolverine/Helpdesk.Api/Incidents/GettingDetails/GetIncidentDetails.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
using Marten; | ||
using Microsoft.AspNetCore.Mvc; | ||
using Wolverine.Http; | ||
|
||
namespace Helpdesk.Api.Incidents.GettingDetails; | ||
|
||
public static class GetDetailsEndpoints | ||
{ | ||
// That for some reason doesn't work for me | ||
// [WolverineGet("/api/incidents/{incidentId:guid}")] | ||
// public static Task GetIncidentById([FromRoute] Guid incidentId, IQuerySession querySession, HttpContext context) => | ||
// querySession.Json.WriteById<IncidentDetails>(incidentId, context); | ||
|
||
[WolverineGet("/api/incidents/{incidentId:guid}")] | ||
public static Task<IncidentDetails?> GetDetails([FromRoute] Guid incidentId, IQuerySession querySession, | ||
CancellationToken ct) => | ||
querySession.LoadAsync<IncidentDetails>(incidentId, ct); | ||
} |
2 changes: 1 addition & 1 deletion
2
...nts/GetIncidentDetails/IncidentDetails.cs → ...cidents/GettingDetails/IncidentDetails.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21 changes: 21 additions & 0 deletions
21
Sample/Helpdesk.Wolverine/Helpdesk.Api/Incidents/GettingHistory/GetHistory.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
using Marten; | ||
using Microsoft.AspNetCore.Mvc; | ||
using Wolverine.Http; | ||
|
||
namespace Helpdesk.Api.Incidents.GettingHistory; | ||
|
||
public static class GetHistoryEndpoint | ||
{ | ||
//That for some reason doesn't work for me | ||
// [WolverineGet("/api/incidents/{incidentId:guid}/history")] | ||
// public static Task GetIncidentHistory([FromRoute]Guid incidentId, HttpContext context, IQuerySession querySession) => | ||
// querySession.Query<IncidentHistory>().Where(i => i.IncidentId == incidentId).WriteArray(context); | ||
|
||
[WolverineGet("/api/incidents/{incidentId:guid}/history")] | ||
public static Task<IReadOnlyList<IncidentHistory>> GetHistory( | ||
[FromRoute] Guid incidentId, | ||
IQuerySession querySession, | ||
CancellationToken ct | ||
) => | ||
querySession.Query<IncidentHistory>().Where(i => i.IncidentId == incidentId).ToListAsync(ct); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.