Переписаны модули, тесты, обработка ошибок
This commit is contained in:
@@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
using Nashel.Modules.Order.Application.Commands;
|
||||
using Nashel.Modules.Order.Application.Queries;
|
||||
using Nashel.Modules.Order.Domain.Entities;
|
||||
using Nashel.Modules.Order.Domain.Enums;
|
||||
|
||||
namespace Nashel.Modules.Order.Presentation;
|
||||
@@ -78,9 +79,9 @@ public static class OrderEndpoints
|
||||
});
|
||||
|
||||
// ─── Принять заказ (мастер) ──────────────────────────────────────────────────
|
||||
group.MapPost("/{id:guid}/accept", async (Guid id, AcceptOrderRequest request, ISender sender) =>
|
||||
group.MapPost("/{id:guid}/accept", async (Guid id, ISender sender) =>
|
||||
{
|
||||
var command = new AcceptOrderCommand(id, request.PerformerId);
|
||||
var command = new AcceptOrderCommand(id);
|
||||
await sender.Send(command);
|
||||
return Results.Ok();
|
||||
})
|
||||
@@ -91,18 +92,104 @@ public static class OrderEndpoints
|
||||
Description = "Исполнитель принимает заказ. Переводит заказ в статус «В работе»."
|
||||
});
|
||||
|
||||
// ─── Завершить заказ ─────────────────────────────────────────────────────────
|
||||
group.MapPost("/{id:guid}/complete", async (Guid id, CompleteOrderRequest request, ISender sender) =>
|
||||
// ─── Пометить выполненным (мастер) ──────────────────────────────────────────
|
||||
group.MapPost("/{id:guid}/finish", async (Guid id, FinishOrderRequest request, ISender sender) =>
|
||||
{
|
||||
var command = new CompleteOrderCommand(id, request.RequesterId);
|
||||
var command = new FinishOrderCommand(id, request.PerformerId);
|
||||
await sender.Send(command);
|
||||
return Results.Ok();
|
||||
})
|
||||
.WithName("CompleteOrder")
|
||||
.WithName("FinishOrder")
|
||||
.WithOpenApi(op => new(op)
|
||||
{
|
||||
Summary = "Завершить заказ",
|
||||
Description = "Заказчик или исполнитель завершает заказ. Переводит в статус «Завершён»."
|
||||
Summary = "Завершить работу (мастер)",
|
||||
Description = "Исполнитель помечает работу как выполненную. Заказ переходит в статус подтверждения заказчиком."
|
||||
});
|
||||
|
||||
// ─── Подтвердить выполнение (заказчик) ───────────────────────────────────────
|
||||
group.MapPost("/{id:guid}/confirm", async (Guid id, ConfirmOrderCompletionRequest request, ISender sender) =>
|
||||
{
|
||||
var command = new ConfirmOrderCompletionCommand(id, request.CustomerId);
|
||||
await sender.Send(command);
|
||||
return Results.Ok();
|
||||
})
|
||||
.WithName("ConfirmOrderCompletion")
|
||||
.WithOpenApi(op => new(op)
|
||||
{
|
||||
Summary = "Подтвердить выполнение (заказчик)",
|
||||
Description = "Заказчик подтверждает, что работа выполнена успешно. Статус заказа становится «Завершён»."
|
||||
});
|
||||
|
||||
// ─── Открыть спор (заказчик) ──────────────────────────────────────────────────
|
||||
group.MapPost("/{id:guid}/dispute", async (Guid id, OpenDisputeRequest request, ISender sender) =>
|
||||
{
|
||||
var command = new OpenOrderDisputeCommand(
|
||||
id,
|
||||
request.CustomerId,
|
||||
request.Reason,
|
||||
request.Description,
|
||||
request.ProposedSolution,
|
||||
request.Evidence);
|
||||
await sender.Send(command);
|
||||
return Results.Ok();
|
||||
})
|
||||
.WithName("OpenOrderDispute")
|
||||
.WithOpenApi(op => new(op)
|
||||
{
|
||||
Summary = "Открыть спор",
|
||||
Description = "Заказчик открывает спор, если работа выполнена некачественно или не в полном объеме."
|
||||
});
|
||||
|
||||
// ─── Ответить на спор (мастер) ───────────────────────────────────────────────
|
||||
group.MapPost("/{id:guid}/dispute/respond", async (Guid id, RespondToDisputeRequest request, ISender sender) =>
|
||||
{
|
||||
var command = new RespondToOrderDisputeCommand(
|
||||
id,
|
||||
request.PerformerId,
|
||||
request.Position,
|
||||
request.Evidence,
|
||||
request.CounterSolution);
|
||||
await sender.Send(command);
|
||||
return Results.Ok();
|
||||
})
|
||||
.WithName("RespondToDispute")
|
||||
.WithOpenApi(op => new(op)
|
||||
{
|
||||
Summary = "Ответить на спор",
|
||||
Description = "Исполнитель предоставляет свою позицию и доказательства в рамках открытого спора."
|
||||
});
|
||||
|
||||
// ─── Возразить на ответ исполнителя (заказчик) ──────────────────────────────
|
||||
group.MapPost("/{id:guid}/dispute/rebut", async (Guid id, RebutDisputeRequest request, ISender sender) =>
|
||||
{
|
||||
var command = new RebutDisputeCommand(
|
||||
id,
|
||||
request.CustomerId,
|
||||
request.Comment,
|
||||
request.Evidence,
|
||||
request.CounterSolution);
|
||||
await sender.Send(command);
|
||||
return Results.Ok();
|
||||
})
|
||||
.WithName("RebutDispute")
|
||||
.WithOpenApi(op => new(op)
|
||||
{
|
||||
Summary = "Возразить на ответ исполнителя",
|
||||
Description = "Заказчик добавляет новые доказательства или требования в ответ на позицию исполнителя."
|
||||
});
|
||||
|
||||
// ─── Принять условия спора (заказчик) ──────────────────────────────────────
|
||||
group.MapPost("/{id:guid}/dispute/accept", async (Guid id, AcceptDisputeTermsRequest request, ISender sender) =>
|
||||
{
|
||||
var command = new AcceptDisputeTermsCommand(id, request.CustomerId);
|
||||
await sender.Send(command);
|
||||
return Results.Ok();
|
||||
})
|
||||
.WithName("AcceptDisputeTerms")
|
||||
.WithOpenApi(op => new(op)
|
||||
{
|
||||
Summary = "Принять условия спора",
|
||||
Description = "Заказчик принимает предложенное исполнителем решение. Заказ завершается."
|
||||
});
|
||||
|
||||
// ─── Отменить заказ ──────────────────────────────────────────────────────────
|
||||
@@ -199,15 +286,9 @@ public record CreateOrderRequest
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Запрос принятия заказа исполнителем.
|
||||
/// Запрос принятия заказа исполнителем (Пустой, так как ID берется из токена).
|
||||
/// </summary>
|
||||
public record AcceptOrderRequest
|
||||
{
|
||||
/// <summary>Идентификатор исполнителя, принимающего заказ.</summary>
|
||||
public Guid PerformerId { get; init; }
|
||||
|
||||
public AcceptOrderRequest() { }
|
||||
}
|
||||
public record AcceptOrderRequest();
|
||||
|
||||
/// <summary>
|
||||
/// Запрос завершения заказа.
|
||||
@@ -264,3 +345,45 @@ public record SelectPerformerRequest
|
||||
|
||||
public SelectPerformerRequest() { }
|
||||
}
|
||||
/// <summary>
|
||||
/// Запрос пометки выполнения заказа.
|
||||
/// </summary>
|
||||
public record FinishOrderRequest(Guid PerformerId);
|
||||
|
||||
/// <summary>
|
||||
/// Запрос подтверждения выполнения.
|
||||
/// </summary>
|
||||
public record ConfirmOrderCompletionRequest(Guid CustomerId);
|
||||
|
||||
/// <summary>
|
||||
/// Запрос открытия спора.
|
||||
/// </summary>
|
||||
public record OpenDisputeRequest(
|
||||
Guid CustomerId,
|
||||
DisputeReason Reason,
|
||||
string Description,
|
||||
string ProposedSolution,
|
||||
List<string> Evidence);
|
||||
|
||||
/// <summary>
|
||||
/// Запрос ответа на спор.
|
||||
/// </summary>
|
||||
public record RespondToDisputeRequest(
|
||||
Guid PerformerId,
|
||||
string Position,
|
||||
List<string> Evidence,
|
||||
string? CounterSolution);
|
||||
|
||||
/// <summary>
|
||||
/// Запрос на возражение по спору.
|
||||
/// </summary>
|
||||
public record RebutDisputeRequest(
|
||||
Guid CustomerId,
|
||||
string Comment,
|
||||
List<string> Evidence,
|
||||
string? CounterSolution);
|
||||
|
||||
/// <summary>
|
||||
/// Запрос на принятие условий спора.
|
||||
/// </summary>
|
||||
public record AcceptDisputeTermsRequest(Guid CustomerId);
|
||||
|
||||
Reference in New Issue
Block a user