Модуль заказов

This commit is contained in:
Халимов Рустам
2026-02-10 22:32:28 +03:00
parent 12c86f9937
commit 3b2c0029a1
33 changed files with 1370 additions and 33 deletions
@@ -1,11 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<ProjectReference Include="..\Application\Nashel.Modules.Order.Application.csproj" />
</ItemGroup>
<PropertyGroup>
<RootNamespace>Nashel.Modules.Order.Presentation</RootNamespace>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="MediatR" Version="14.0.0" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Application\Nashel.Modules.Order.Application.csproj" />
</ItemGroup>
</Project>
@@ -0,0 +1,87 @@
using MediatR;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Nashel.Modules.Order.Application.Commands;
using Nashel.Modules.Order.Domain.Enums;
namespace Nashel.Modules.Order.Presentation;
public static class OrderEndpoints
{
public static void MapOrderEndpoints(this IEndpointRouteBuilder app)
{
var group = app.MapGroup("/api/orders").WithTags("Orders");
group.MapPost("/", async (CreateOrderRequest request, ISender sender) =>
{
var command = new CreateOrderCommand(
request.CustomerId,
request.ServiceId,
request.Type,
request.Address,
request.Latitude,
request.Longitude,
request.Deadline,
request.PerformerId
);
var orderId = await sender.Send(command);
return Results.Ok(orderId);
})
.WithName("CreateOrder")
.WithOpenApi(operation => new(operation) { Summary = "Создание нового заказа.", Description = "Создает прямой или публичный заказ." });
group.MapPost("/{id:guid}/applications", async (Guid id, AddApplicationRequest request, ISender sender) =>
{
var command = new AddApplicationCommand(
id,
request.PerformerId,
request.Amount,
request.Currency,
request.Comment
);
await sender.Send(command);
return Results.Ok();
})
.WithName("AddOrderApplication")
.WithOpenApi(operation => new(operation) { Summary = "Добавление отклика на заказ." });
group.MapPost("/{id:guid}/select-performer", async (Guid id, SelectPerformerRequest request, ISender sender) =>
{
var command = new SelectPerformerCommand(id, request.PerformerId);
await sender.Send(command);
return Results.Ok();
})
.WithName("SelectPerformer")
.WithOpenApi(operation => new(operation) { Summary = "Выбор исполнителя для заказа." });
}
}
/// <summary>
/// Запрос на создание заказа.
/// </summary>
public record CreateOrderRequest(
Guid CustomerId,
Guid ServiceId,
OrderType Type,
string Address,
double Latitude,
double Longitude,
DateTime? Deadline,
Guid? PerformerId
);
/// <summary>
/// Запрос на добавление отклика.
/// </summary>
public record AddApplicationRequest(
Guid PerformerId,
decimal Amount,
string Currency,
string Comment
);
/// <summary>
/// Запрос на выбор исполнителя.
/// </summary>
public record SelectPerformerRequest(Guid PerformerId);