add deliverycode , add version 0.20.23.40
parent
3cba0d598a
commit
803d26082f
|
@ -24,6 +24,7 @@ public class OrderController : ICarterModule
|
||||||
group.MapDelete("{id}", DeleteAsync)
|
group.MapDelete("{id}", DeleteAsync)
|
||||||
.WithDisplayName("DeleteOneOrder")
|
.WithDisplayName("DeleteOneOrder")
|
||||||
.HasApiVersion(1.0);
|
.HasApiVersion(1.0);
|
||||||
|
|
||||||
group.MapGet("{id}/invoice", GetOrderInvoiceAsync)
|
group.MapGet("{id}/invoice", GetOrderInvoiceAsync)
|
||||||
.WithDisplayName("GetOrderInvoice")
|
.WithDisplayName("GetOrderInvoice")
|
||||||
.AllowAnonymous()
|
.AllowAnonymous()
|
||||||
|
@ -31,8 +32,8 @@ public class OrderController : ICarterModule
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<IResult> ConfirmOrderStepAsync(Guid id, [FromQuery] OrderStatus nextOrderStatus, [FromServices] IMediator mediator, CancellationToken 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), 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)
|
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));
|
=> 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;
|
namespace NetinaShop.Core.EntityServices.OrderHandlers;
|
||||||
|
|
||||||
public class ConfirmOrderStepCommandHandler : IRequestHandler<ConfirmOrderStepCommand,bool>
|
public class ConfirmOrderStepCommandHandler : IRequestHandler<ConfirmOrderStepCommand, bool>
|
||||||
{
|
{
|
||||||
private readonly IRepositoryWrapper _repositoryWrapper;
|
private readonly IRepositoryWrapper _repositoryWrapper;
|
||||||
|
|
||||||
|
@ -18,6 +18,22 @@ public class ConfirmOrderStepCommandHandler : IRequestHandler<ConfirmOrderStepCo
|
||||||
|
|
||||||
order.SetOrderStatus(request.NextOrderStatus);
|
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>()
|
_repositoryWrapper.SetRepository<Order>()
|
||||||
.Update(order);
|
.Update(order);
|
||||||
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
public sealed record CreateBaseOrderCommand(Guid UserId) : IRequest<Order>;
|
public sealed record CreateBaseOrderCommand(Guid UserId) : IRequest<Order>;
|
||||||
|
|
||||||
public sealed record CalculateOrderCommand(Guid OrderId , bool NamoosiCalculate = false) : 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 GetOrderInvoiceCommand(Guid OrderId) : IRequest<byte[]>;
|
||||||
public sealed record DeleteOrderCommand(Guid OrderId) : IRequest<bool>;
|
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 float LocationLong { get; set; }
|
||||||
public string Address { get; set; } = string.Empty;
|
public string Address { get; set; } = string.Empty;
|
||||||
public string PostalCode { 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 ReceiverPhoneNumber { get; set; } = string.Empty;
|
||||||
public string ReceiverFullName { get; set; } = string.Empty;
|
public string ReceiverFullName { get; set; } = string.Empty;
|
||||||
public string ShippingMethod { 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);
|
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 UserAddress? Address { get; set; }
|
||||||
|
|
||||||
public double DeliveryCost { get; internal set; }
|
public double DeliveryCost { get; internal set; }
|
||||||
|
public string TrackingCode { get; internal set; } = string.Empty;
|
||||||
public Guid ShippingId { get; internal set; }
|
public Guid ShippingId { get; internal set; }
|
||||||
public Shipping? Shipping { get; internal set; }
|
public Shipping? Shipping { get; internal set; }
|
||||||
public Guid OrderId { get; internal set; }
|
public Guid OrderId { get; internal set; }
|
||||||
|
|
|
@ -41,6 +41,7 @@ namespace NetinaShop.Domain.Mappers
|
||||||
AddressId = p1.OrderDelivery.AddressId,
|
AddressId = p1.OrderDelivery.AddressId,
|
||||||
Address = p1.OrderDelivery.Address == null ? null : (UserAddress)Convert.ChangeType((object)p1.OrderDelivery.Address, typeof(UserAddress)),
|
Address = p1.OrderDelivery.Address == null ? null : (UserAddress)Convert.ChangeType((object)p1.OrderDelivery.Address, typeof(UserAddress)),
|
||||||
DeliveryCost = p1.OrderDelivery.DeliveryCost,
|
DeliveryCost = p1.OrderDelivery.DeliveryCost,
|
||||||
|
TrackingCode = p1.OrderDelivery.TrackingCode,
|
||||||
ShippingId = p1.OrderDelivery.ShippingId,
|
ShippingId = p1.OrderDelivery.ShippingId,
|
||||||
Shipping = new Shipping() {Id = p1.OrderDelivery.ShippingId},
|
Shipping = new Shipping() {Id = p1.OrderDelivery.ShippingId},
|
||||||
OrderId = p1.OrderDelivery.OrderId,
|
OrderId = p1.OrderDelivery.OrderId,
|
||||||
|
@ -111,6 +112,7 @@ namespace NetinaShop.Domain.Mappers
|
||||||
AddressId = p18.OrderDelivery.AddressId,
|
AddressId = p18.OrderDelivery.AddressId,
|
||||||
Address = p18.OrderDelivery.Address == null ? null : (UserAddress)Convert.ChangeType((object)p18.OrderDelivery.Address, typeof(UserAddress)),
|
Address = p18.OrderDelivery.Address == null ? null : (UserAddress)Convert.ChangeType((object)p18.OrderDelivery.Address, typeof(UserAddress)),
|
||||||
DeliveryCost = p18.OrderDelivery.DeliveryCost,
|
DeliveryCost = p18.OrderDelivery.DeliveryCost,
|
||||||
|
TrackingCode = p18.OrderDelivery.TrackingCode,
|
||||||
ShippingId = p18.OrderDelivery.ShippingId,
|
ShippingId = p18.OrderDelivery.ShippingId,
|
||||||
Shipping = new Shipping() {Id = p18.OrderDelivery.ShippingId},
|
Shipping = new Shipping() {Id = p18.OrderDelivery.ShippingId},
|
||||||
OrderId = p18.OrderDelivery.OrderId,
|
OrderId = p18.OrderDelivery.OrderId,
|
||||||
|
@ -196,6 +198,7 @@ namespace NetinaShop.Domain.Mappers
|
||||||
LocationLong = p21.OrderDelivery.Address != null ? p21.OrderDelivery.Address.LocationLong : 0f,
|
LocationLong = p21.OrderDelivery.Address != null ? p21.OrderDelivery.Address.LocationLong : 0f,
|
||||||
Address = p21.OrderDelivery.Address != null ? p21.OrderDelivery.Address.Address : string.Empty,
|
Address = p21.OrderDelivery.Address != null ? p21.OrderDelivery.Address.Address : string.Empty,
|
||||||
PostalCode = p21.OrderDelivery.Address != null ? p21.OrderDelivery.Address.PostalCode : 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,
|
ReceiverPhoneNumber = p21.OrderDelivery.Address != null ? p21.OrderDelivery.Address.ReceiverPhoneNumber : string.Empty,
|
||||||
ReceiverFullName = p21.OrderDelivery.Address != null ? p21.OrderDelivery.Address.ReceiverFullName : string.Empty,
|
ReceiverFullName = p21.OrderDelivery.Address != null ? p21.OrderDelivery.Address.ReceiverFullName : string.Empty,
|
||||||
ShippingMethod = p21.OrderDelivery.Shipping != null ? p21.OrderDelivery.Shipping.Name : 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,
|
LocationLong = p32.OrderDelivery.Address != null ? p32.OrderDelivery.Address.LocationLong : 0f,
|
||||||
Address = p32.OrderDelivery.Address != null ? p32.OrderDelivery.Address.Address : string.Empty,
|
Address = p32.OrderDelivery.Address != null ? p32.OrderDelivery.Address.Address : string.Empty,
|
||||||
PostalCode = p32.OrderDelivery.Address != null ? p32.OrderDelivery.Address.PostalCode : 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,
|
ReceiverPhoneNumber = p32.OrderDelivery.Address != null ? p32.OrderDelivery.Address.ReceiverPhoneNumber : string.Empty,
|
||||||
ReceiverFullName = p32.OrderDelivery.Address != null ? p32.OrderDelivery.Address.ReceiverFullName : string.Empty,
|
ReceiverFullName = p32.OrderDelivery.Address != null ? p32.OrderDelivery.Address.ReceiverFullName : string.Empty,
|
||||||
ShippingMethod = p32.OrderDelivery.Shipping != null ? p32.OrderDelivery.Shipping.Name : 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.AddressId = p8.AddressId;
|
||||||
result.Address = p8.Address == null ? null : (UserAddress)Convert.ChangeType((object)p8.Address, typeof(UserAddress));
|
result.Address = p8.Address == null ? null : (UserAddress)Convert.ChangeType((object)p8.Address, typeof(UserAddress));
|
||||||
result.DeliveryCost = p8.DeliveryCost;
|
result.DeliveryCost = p8.DeliveryCost;
|
||||||
|
result.TrackingCode = p8.TrackingCode;
|
||||||
result.ShippingId = p8.ShippingId;
|
result.ShippingId = p8.ShippingId;
|
||||||
result.Shipping = funcMain5(new Never(), result.Shipping, p8);
|
result.Shipping = funcMain5(new Never(), result.Shipping, p8);
|
||||||
result.OrderId = p8.OrderId;
|
result.OrderId = p8.OrderId;
|
||||||
|
@ -824,6 +829,7 @@ namespace NetinaShop.Domain.Mappers
|
||||||
result.LocationLong = p30.Address != null ? p30.Address.LocationLong : 0f;
|
result.LocationLong = p30.Address != null ? p30.Address.LocationLong : 0f;
|
||||||
result.Address = p30.Address != null ? p30.Address.Address : string.Empty;
|
result.Address = p30.Address != null ? p30.Address.Address : string.Empty;
|
||||||
result.PostalCode = p30.Address != null ? p30.Address.PostalCode : 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.ReceiverPhoneNumber = p30.Address != null ? p30.Address.ReceiverPhoneNumber : string.Empty;
|
||||||
result.ReceiverFullName = p30.Address != null ? p30.Address.ReceiverFullName : string.Empty;
|
result.ReceiverFullName = p30.Address != null ? p30.Address.ReceiverFullName : string.Empty;
|
||||||
result.ShippingMethod = p30.Shipping != null ? p30.Shipping.Name : string.Empty;
|
result.ShippingMethod = p30.Shipping != null ? p30.Shipping.Name : string.Empty;
|
||||||
|
|
|
@ -12,8 +12,9 @@ public class ExternalFilesService : IExternalFilesService
|
||||||
_restApiWrapper = restApiWrapper;
|
_restApiWrapper = restApiWrapper;
|
||||||
_siteSetting = snapshot.Value;
|
_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
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasDefaultSchema("public")
|
.HasDefaultSchema("public")
|
||||||
.HasAnnotation("ProductVersion", "8.0.1")
|
.HasAnnotation("ProductVersion", "8.0.3")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
.HasAnnotation("Relational:MaxIdentifierLength", 63);
|
||||||
|
|
||||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||||
|
@ -591,6 +591,10 @@ namespace NetinaShop.Repository.Migrations
|
||||||
b.Property<Guid>("ShippingId")
|
b.Property<Guid>("ShippingId")
|
||||||
.HasColumnType("uuid");
|
.HasColumnType("uuid");
|
||||||
|
|
||||||
|
b.Property<string>("TrackingCode")
|
||||||
|
.IsRequired()
|
||||||
|
.HasColumnType("text");
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.HasIndex("AddressId");
|
b.HasIndex("AddressId");
|
||||||
|
|
Loading…
Reference in New Issue