add deliverycode , add version 0.20.23.40
parent
3cba0d598a
commit
803d26082f
|
@ -24,6 +24,7 @@ public class OrderController : ICarterModule
|
|||
group.MapDelete("{id}", DeleteAsync)
|
||||
.WithDisplayName("DeleteOneOrder")
|
||||
.HasApiVersion(1.0);
|
||||
|
||||
group.MapGet("{id}/invoice", GetOrderInvoiceAsync)
|
||||
.WithDisplayName("GetOrderInvoice")
|
||||
.AllowAnonymous()
|
||||
|
@ -31,8 +32,8 @@ public class OrderController : ICarterModule
|
|||
|
||||
}
|
||||
|
||||
private async Task<IResult> ConfirmOrderStepAsync(Guid id, [FromQuery] OrderStatus nextOrderStatus, [FromServices] IMediator mediator, CancellationToken cancellationToken)
|
||||
=> TypedResults.Ok(await mediator.Send(new ConfirmOrderStepCommand(id, nextOrderStatus), cancellationToken));
|
||||
private async Task<IResult> ConfirmOrderStepAsync(Guid id, [FromQuery] OrderStatus nextOrderStatus, [FromQuery]string? trackingCode, [FromServices] IMediator mediator, CancellationToken cancellationToken)
|
||||
=> TypedResults.Ok(await mediator.Send(new ConfirmOrderStepCommand(id, nextOrderStatus,TrackingCode:trackingCode), cancellationToken));
|
||||
|
||||
public async Task<IResult> GetAllAsync(IMediator mediator, [FromQuery]long? selectedDate, [FromQuery] OrderStatus? orderStatus, [FromQuery] OrderQueryDateFilter? dateFilter, [FromQuery] int page = 0, CancellationToken cancellationToken = default)
|
||||
=> TypedResults.Ok(await mediator.Send(new GetOrdersQuery(Page:page, SelectedDate: selectedDate, OrderStatus:orderStatus, DateFilter:dateFilter), cancellationToken));
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
namespace NetinaShop.Api.Controller;
|
||||
|
||||
public class SearchController : ICarterModule
|
||||
{
|
||||
public void AddRoutes(IEndpointRouteBuilder app)
|
||||
{
|
||||
var group = app.NewVersionedApi("Search").MapGroup("api/search");
|
||||
|
||||
group.MapGet("", SearchAsync)
|
||||
.WithDisplayName("Search Async")
|
||||
.HasApiVersion(1.0);
|
||||
}
|
||||
|
||||
private async Task<IResult> SearchAsync([FromQuery] string name, [FromServices] ISearchService searchService, CancellationToken cancellationToken)
|
||||
=> TypedResults.Ok(await searchService.SearchAsync(name, cancellationToken));
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
namespace NetinaShop.Core.CoreServices.Abstracts;
|
||||
|
||||
public interface ISearchService : IScopedDependency
|
||||
{
|
||||
public Task<SearchResponseDto> SearchAsync(string name,CancellationToken cancellationToken = default);
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
using NetinaShop.Domain.Entities.ProductCategories;
|
||||
|
||||
namespace NetinaShop.Core.CoreServices;
|
||||
|
||||
public class SearchService : ISearchService
|
||||
{
|
||||
private readonly IRepositoryWrapper _repositoryWrapper;
|
||||
|
||||
public SearchService(IRepositoryWrapper repositoryWrapper)
|
||||
{
|
||||
_repositoryWrapper = repositoryWrapper;
|
||||
}
|
||||
public async Task<SearchResponseDto> SearchAsync(string name, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var products = await _repositoryWrapper.SetRepository<Product>()
|
||||
.TableNoTracking
|
||||
.Where(p => p.PersianName.Trim().ToLower().Contains(name.Trim().ToLower()))
|
||||
.Select(ProductMapper.ProjectToSDto)
|
||||
.ToListAsync(cancellationToken);
|
||||
|
||||
var categories = await _repositoryWrapper.SetRepository<ProductCategory>()
|
||||
.TableNoTracking
|
||||
.Where(p => p.Name.Trim().ToLower().Contains(name.Trim().ToLower()))
|
||||
.Select(ProductCategoryMapper.ProjectToSDto)
|
||||
.ToListAsync(cancellationToken);
|
||||
|
||||
return new SearchResponseDto
|
||||
{
|
||||
Products = products.Select(p => p.Adapt<SearchedProductResponseDto>()).ToList(),
|
||||
Categories = categories.Select(c => c.Adapt<SearchedProductCategoryResponseDto>()).ToList()
|
||||
};
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
namespace NetinaShop.Core.EntityServices.OrderHandlers;
|
||||
|
||||
public class ConfirmOrderStepCommandHandler : IRequestHandler<ConfirmOrderStepCommand,bool>
|
||||
public class ConfirmOrderStepCommandHandler : IRequestHandler<ConfirmOrderStepCommand, bool>
|
||||
{
|
||||
private readonly IRepositoryWrapper _repositoryWrapper;
|
||||
|
||||
|
@ -18,6 +18,22 @@ public class ConfirmOrderStepCommandHandler : IRequestHandler<ConfirmOrderStepCo
|
|||
|
||||
order.SetOrderStatus(request.NextOrderStatus);
|
||||
|
||||
if (request.NextOrderStatus == OrderStatus.Delivered)
|
||||
{
|
||||
var delivery = await _repositoryWrapper.SetRepository<OrderDelivery>()
|
||||
.TableNoTracking
|
||||
.FirstOrDefaultAsync(od => od.OrderId == order.Id, cancellationToken);
|
||||
if (delivery != null)
|
||||
{
|
||||
if (request.TrackingCode == null || request.TrackingCode.IsNullOrEmpty())
|
||||
throw new AppException("لطفا کد پیگیری ارسال را پر کنید");
|
||||
delivery.SetTrackingCode(request.TrackingCode);
|
||||
_repositoryWrapper.SetRepository<OrderDelivery>()
|
||||
.Update(delivery);
|
||||
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||
}
|
||||
}
|
||||
|
||||
_repositoryWrapper.SetRepository<Order>()
|
||||
.Update(order);
|
||||
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
public sealed record CreateBaseOrderCommand(Guid UserId) : IRequest<Order>;
|
||||
|
||||
public sealed record CalculateOrderCommand(Guid OrderId , bool NamoosiCalculate = false) : IRequest<Order>;
|
||||
public sealed record ConfirmOrderStepCommand(Guid OrderId , OrderStatus NextOrderStatus) : IRequest<bool>;
|
||||
public sealed record ConfirmOrderStepCommand(Guid OrderId , OrderStatus NextOrderStatus,string? TrackingCode) : IRequest<bool>;
|
||||
|
||||
public sealed record GetOrderInvoiceCommand(Guid OrderId) : IRequest<byte[]>;
|
||||
public sealed record DeleteOrderCommand(Guid OrderId) : IRequest<bool>;
|
|
@ -0,0 +1,20 @@
|
|||
namespace NetinaShop.Domain.Dtos.ResponseDtos;
|
||||
|
||||
public class SearchResponseDto
|
||||
{
|
||||
public List<SearchedProductCategoryResponseDto> Categories { get; set; } = new();
|
||||
public List<SearchedProductResponseDto> Products { get; set; } = new();
|
||||
}
|
||||
public class SearchedProductResponseDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string PersianName { get; set; } = string.Empty;
|
||||
public string EnglishName { get; set; } = string.Empty;
|
||||
public string MainImage { get; set; } = string.Empty;
|
||||
}
|
||||
|
||||
public class SearchedProductCategoryResponseDto
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; } = string.Empty;
|
||||
}
|
|
@ -9,6 +9,7 @@ public class OrderDeliverySDto : BaseDto<OrderDeliverySDto, OrderDelivery>
|
|||
public float LocationLong { get; set; }
|
||||
public string Address { get; set; } = string.Empty;
|
||||
public string PostalCode { get; set; } = string.Empty;
|
||||
public string TrackingCode { get; set; } = string.Empty;
|
||||
public string ReceiverPhoneNumber { get; set; } = string.Empty;
|
||||
public string ReceiverFullName { get; set; } = string.Empty;
|
||||
public string ShippingMethod { get; set; } = string.Empty;
|
||||
|
|
|
@ -183,4 +183,9 @@ public partial class OrderDelivery
|
|||
{
|
||||
return new OrderDelivery(addressId, deliveryCost, shippingId, orderId);
|
||||
}
|
||||
|
||||
public void SetTrackingCode(string code)
|
||||
{
|
||||
this.TrackingCode = code;
|
||||
}
|
||||
}
|
|
@ -18,6 +18,7 @@ public partial class OrderDelivery : ApiEntity
|
|||
public UserAddress? Address { get; set; }
|
||||
|
||||
public double DeliveryCost { get; internal set; }
|
||||
public string TrackingCode { get; internal set; } = string.Empty;
|
||||
public Guid ShippingId { get; internal set; }
|
||||
public Shipping? Shipping { get; internal set; }
|
||||
public Guid OrderId { get; internal set; }
|
||||
|
|
|
@ -41,6 +41,7 @@ namespace NetinaShop.Domain.Mappers
|
|||
AddressId = p1.OrderDelivery.AddressId,
|
||||
Address = p1.OrderDelivery.Address == null ? null : (UserAddress)Convert.ChangeType((object)p1.OrderDelivery.Address, typeof(UserAddress)),
|
||||
DeliveryCost = p1.OrderDelivery.DeliveryCost,
|
||||
TrackingCode = p1.OrderDelivery.TrackingCode,
|
||||
ShippingId = p1.OrderDelivery.ShippingId,
|
||||
Shipping = new Shipping() {Id = p1.OrderDelivery.ShippingId},
|
||||
OrderId = p1.OrderDelivery.OrderId,
|
||||
|
@ -111,6 +112,7 @@ namespace NetinaShop.Domain.Mappers
|
|||
AddressId = p18.OrderDelivery.AddressId,
|
||||
Address = p18.OrderDelivery.Address == null ? null : (UserAddress)Convert.ChangeType((object)p18.OrderDelivery.Address, typeof(UserAddress)),
|
||||
DeliveryCost = p18.OrderDelivery.DeliveryCost,
|
||||
TrackingCode = p18.OrderDelivery.TrackingCode,
|
||||
ShippingId = p18.OrderDelivery.ShippingId,
|
||||
Shipping = new Shipping() {Id = p18.OrderDelivery.ShippingId},
|
||||
OrderId = p18.OrderDelivery.OrderId,
|
||||
|
@ -196,6 +198,7 @@ namespace NetinaShop.Domain.Mappers
|
|||
LocationLong = p21.OrderDelivery.Address != null ? p21.OrderDelivery.Address.LocationLong : 0f,
|
||||
Address = p21.OrderDelivery.Address != null ? p21.OrderDelivery.Address.Address : string.Empty,
|
||||
PostalCode = p21.OrderDelivery.Address != null ? p21.OrderDelivery.Address.PostalCode : string.Empty,
|
||||
TrackingCode = p21.OrderDelivery.TrackingCode,
|
||||
ReceiverPhoneNumber = p21.OrderDelivery.Address != null ? p21.OrderDelivery.Address.ReceiverPhoneNumber : string.Empty,
|
||||
ReceiverFullName = p21.OrderDelivery.Address != null ? p21.OrderDelivery.Address.ReceiverFullName : string.Empty,
|
||||
ShippingMethod = p21.OrderDelivery.Shipping != null ? p21.OrderDelivery.Shipping.Name : string.Empty,
|
||||
|
@ -306,6 +309,7 @@ namespace NetinaShop.Domain.Mappers
|
|||
LocationLong = p32.OrderDelivery.Address != null ? p32.OrderDelivery.Address.LocationLong : 0f,
|
||||
Address = p32.OrderDelivery.Address != null ? p32.OrderDelivery.Address.Address : string.Empty,
|
||||
PostalCode = p32.OrderDelivery.Address != null ? p32.OrderDelivery.Address.PostalCode : string.Empty,
|
||||
TrackingCode = p32.OrderDelivery.TrackingCode,
|
||||
ReceiverPhoneNumber = p32.OrderDelivery.Address != null ? p32.OrderDelivery.Address.ReceiverPhoneNumber : string.Empty,
|
||||
ReceiverFullName = p32.OrderDelivery.Address != null ? p32.OrderDelivery.Address.ReceiverFullName : string.Empty,
|
||||
ShippingMethod = p32.OrderDelivery.Shipping != null ? p32.OrderDelivery.Shipping.Name : string.Empty,
|
||||
|
@ -571,6 +575,7 @@ namespace NetinaShop.Domain.Mappers
|
|||
result.AddressId = p8.AddressId;
|
||||
result.Address = p8.Address == null ? null : (UserAddress)Convert.ChangeType((object)p8.Address, typeof(UserAddress));
|
||||
result.DeliveryCost = p8.DeliveryCost;
|
||||
result.TrackingCode = p8.TrackingCode;
|
||||
result.ShippingId = p8.ShippingId;
|
||||
result.Shipping = funcMain5(new Never(), result.Shipping, p8);
|
||||
result.OrderId = p8.OrderId;
|
||||
|
@ -824,6 +829,7 @@ namespace NetinaShop.Domain.Mappers
|
|||
result.LocationLong = p30.Address != null ? p30.Address.LocationLong : 0f;
|
||||
result.Address = p30.Address != null ? p30.Address.Address : string.Empty;
|
||||
result.PostalCode = p30.Address != null ? p30.Address.PostalCode : string.Empty;
|
||||
result.TrackingCode = p30.TrackingCode;
|
||||
result.ReceiverPhoneNumber = p30.Address != null ? p30.Address.ReceiverPhoneNumber : string.Empty;
|
||||
result.ReceiverFullName = p30.Address != null ? p30.Address.ReceiverFullName : string.Empty;
|
||||
result.ShippingMethod = p30.Shipping != null ? p30.Shipping.Name : string.Empty;
|
||||
|
|
|
@ -12,8 +12,9 @@ public class ExternalFilesService : IExternalFilesService
|
|||
_restApiWrapper = restApiWrapper;
|
||||
_siteSetting = snapshot.Value;
|
||||
}
|
||||
public Task<AdminChangeLogResponseDto> GetAdminChangeLogAsync(CancellationToken cancellationToken = default)
|
||||
public async Task<AdminChangeLogResponseDto> GetAdminChangeLogAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
return _restApiWrapper.FileRestApi(_siteSetting.AdminPanelBaseUrl).GetAdminChangeLog();
|
||||
var changeLog = await _restApiWrapper.FileRestApi(_siteSetting.AdminPanelBaseUrl).GetAdminChangeLog();
|
||||
return changeLog;
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,31 @@
|
|||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace NetinaShop.Repository.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class EditOrderDeliveryAddTrackingCode : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "TrackingCode",
|
||||
schema: "public",
|
||||
table: "OrderDeliveries",
|
||||
type: "text",
|
||||
nullable: false,
|
||||
defaultValue: "");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "TrackingCode",
|
||||
schema: "public",
|
||||
table: "OrderDeliveries");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -18,7 +18,7 @@ namespace NetinaShop.Repository.Migrations
|
|||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasDefaultSchema("public")
|
||||
.HasAnnotation("ProductVersion", "8.0.1")
|
||||
.HasAnnotation("ProductVersion", "8.0.3")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
||||
|
||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||
|
@ -591,6 +591,10 @@ namespace NetinaShop.Repository.Migrations
|
|||
b.Property<Guid>("ShippingId")
|
||||
.HasColumnType("uuid");
|
||||
|
||||
b.Property<string>("TrackingCode")
|
||||
.IsRequired()
|
||||
.HasColumnType("text");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("AddressId");
|
||||
|
|
Loading…
Reference in New Issue