feat : add ver 0.10.16.23 , complete coperate slae system
parent
6ac4024ea9
commit
07982e63ad
|
@ -16,6 +16,10 @@ public class DiscountController : ICarterModule
|
||||||
.WithDisplayName("GetDiscount")
|
.WithDisplayName("GetDiscount")
|
||||||
.HasApiVersion(1.0);
|
.HasApiVersion(1.0);
|
||||||
|
|
||||||
|
group.MapGet("corporate", GetCorporateDiscountAsync)
|
||||||
|
.WithDisplayName("GetDiscount")
|
||||||
|
.HasApiVersion(1.0);
|
||||||
|
|
||||||
group.MapPost("", Post)
|
group.MapPost("", Post)
|
||||||
.HasApiVersion(1.0);
|
.HasApiVersion(1.0);
|
||||||
|
|
||||||
|
@ -26,26 +30,30 @@ public class DiscountController : ICarterModule
|
||||||
.HasApiVersion(1.0);
|
.HasApiVersion(1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<IResult> GetCorporateDiscountAsync([FromQuery] Guid? corporateUserId, [FromServices] IMediator mediator, CancellationToken cancellationToken)
|
||||||
|
=> TypedResults.Ok(await mediator.Send(
|
||||||
|
new CreateSaleCooperationDiscount(CorporateUserId: corporateUserId ?? default), cancellationToken));
|
||||||
|
|
||||||
// GET:Get All Entity
|
// GET:Get All Entity
|
||||||
public async Task<IResult> GetAllAsync([FromQuery] int page, IMediator mediator,
|
private async Task<IResult> GetAllAsync([FromQuery] int page, IMediator mediator,
|
||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
=> TypedResults.Ok(await mediator.Send(new GetDiscountsQuery(page), cancellationToken));
|
=> TypedResults.Ok(await mediator.Send(new GetDiscountsQuery(page), cancellationToken));
|
||||||
|
|
||||||
// GET:Get An Entity By Id
|
// GET:Get An Entity By Id
|
||||||
public async Task<IResult> GetAsync(Guid id, IMediator mediator, CancellationToken cancellationToken)
|
private async Task<IResult> GetAsync(Guid id, IMediator mediator, CancellationToken cancellationToken)
|
||||||
=> TypedResults.Ok(await mediator.Send(new GetDiscountQuery(id), cancellationToken));
|
=> TypedResults.Ok(await mediator.Send(new GetDiscountQuery(id), cancellationToken));
|
||||||
|
|
||||||
// POST:Create Entity
|
// POST:Create Entity
|
||||||
public async Task<IResult> Post([FromBody] CreateDiscountCommand request, IMediator mediator,
|
private async Task<IResult> Post([FromBody] CreateDiscountCommand request, IMediator mediator,
|
||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
=> TypedResults.Ok(await mediator.Send(request, cancellationToken));
|
=> TypedResults.Ok(await mediator.Send(request, cancellationToken));
|
||||||
|
|
||||||
// PUT:Update Entity
|
// PUT:Update Entity
|
||||||
public async Task<IResult> Put([FromBody] UpdateDiscountCommand request, IMediator mediator,
|
private async Task<IResult> Put([FromBody] UpdateDiscountCommand request, IMediator mediator,
|
||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
=> TypedResults.Ok(await mediator.Send(request, cancellationToken));
|
=> TypedResults.Ok(await mediator.Send(request, cancellationToken));
|
||||||
|
|
||||||
// DELETE:Delete Entity
|
// DELETE:Delete Entity
|
||||||
public async Task<IResult> Delete(Guid id, IMediator mediator, CancellationToken cancellationToken)
|
private async Task<IResult> Delete(Guid id, IMediator mediator, CancellationToken cancellationToken)
|
||||||
=> TypedResults.Ok(await mediator.Send(new DeleteDiscountCommand(id), cancellationToken));
|
=> TypedResults.Ok(await mediator.Send(new DeleteDiscountCommand(id), cancellationToken));
|
||||||
}
|
}
|
|
@ -6,8 +6,8 @@
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<InvariantGlobalization>true</InvariantGlobalization>
|
<InvariantGlobalization>true</InvariantGlobalization>
|
||||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||||
<AssemblyVersion>0.9.16.23</AssemblyVersion>
|
<AssemblyVersion>0.10.16.23</AssemblyVersion>
|
||||||
<FileVersion>0.9.16.23</FileVersion>
|
<FileVersion>0.10.16.23</FileVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -9,6 +9,7 @@ DiscountType Type,
|
||||||
int Count,
|
int Count,
|
||||||
DateTime StartDate,
|
DateTime StartDate,
|
||||||
DateTime ExpireDate,
|
DateTime ExpireDate,
|
||||||
|
bool IsImmortal,
|
||||||
long PriceFloor,
|
long PriceFloor,
|
||||||
bool HasPriceFloor,
|
bool HasPriceFloor,
|
||||||
long PriceCeiling,
|
long PriceCeiling,
|
||||||
|
@ -20,7 +21,8 @@ bool IsSpecialOffer,
|
||||||
Guid ProductId,
|
Guid ProductId,
|
||||||
Guid CategoryId) : IRequest<DiscountLDto>;
|
Guid CategoryId) : IRequest<DiscountLDto>;
|
||||||
|
|
||||||
public sealed record UpdateDiscountCommand(Guid Id,
|
public sealed record UpdateDiscountCommand(
|
||||||
|
Guid Id,
|
||||||
string Code,
|
string Code,
|
||||||
int DiscountPercent,
|
int DiscountPercent,
|
||||||
long DiscountAmount,
|
long DiscountAmount,
|
||||||
|
@ -30,6 +32,7 @@ public sealed record UpdateDiscountCommand(Guid Id,
|
||||||
int Count,
|
int Count,
|
||||||
DateTime StartDate,
|
DateTime StartDate,
|
||||||
DateTime ExpireDate,
|
DateTime ExpireDate,
|
||||||
|
bool IsImmortal,
|
||||||
long PriceFloor,
|
long PriceFloor,
|
||||||
bool HasPriceFloor,
|
bool HasPriceFloor,
|
||||||
long PriceCeiling,
|
long PriceCeiling,
|
||||||
|
@ -41,6 +44,8 @@ public sealed record UpdateDiscountCommand(Guid Id,
|
||||||
Guid ProductId,
|
Guid ProductId,
|
||||||
Guid CategoryId) : IRequest<bool>;
|
Guid CategoryId) : IRequest<bool>;
|
||||||
|
|
||||||
|
public sealed record CreateSaleCooperationDiscount(Guid CorporateUserId) : IRequest<string>;
|
||||||
|
|
||||||
public sealed record DeleteDiscountCommand(Guid Id) : IRequest<bool>;
|
public sealed record DeleteDiscountCommand(Guid Id) : IRequest<bool>;
|
||||||
|
|
||||||
public sealed record CalculateOrderDiscountCommand(string DiscountCode,Order Order) : IRequest<double>;
|
public sealed record CalculateOrderDiscountCommand(string DiscountCode,Order Order) : IRequest<double>;
|
|
@ -11,6 +11,7 @@ public class DiscountLDto : BaseDto<DiscountLDto,Discount>
|
||||||
public int Count { get; set; }
|
public int Count { get; set; }
|
||||||
public DateTime StartDate { get; set; }
|
public DateTime StartDate { get; set; }
|
||||||
public DateTime ExpireDate { get; set; }
|
public DateTime ExpireDate { get; set; }
|
||||||
|
public bool Immortal { get; set; }
|
||||||
public long PriceFloor { get; set; }
|
public long PriceFloor { get; set; }
|
||||||
public bool HasPriceFloor { get; set; }
|
public bool HasPriceFloor { get; set; }
|
||||||
public long PriceCeiling { get; set; }
|
public long PriceCeiling { get; set; }
|
||||||
|
|
|
@ -9,9 +9,9 @@ public partial class CategoryDiscount : Discount
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public CategoryDiscount(string code, int discountPercent, long discountAmount, bool hasCode, DiscountAmountType amountType, DiscountType type, int count, DateTime startDate, DateTime expireDate, long priceFloor, bool hasPriceFloor, long priceCeiling, bool hasPriceCeiling, bool isInfinity, long useCount, bool isForInvitation,bool isSpecialOffer, Guid categoryId)
|
public CategoryDiscount(string code, int discountPercent, long discountAmount, bool hasCode, DiscountAmountType amountType, DiscountType type, int count,bool immortal, DateTime startDate, DateTime expireDate, long priceFloor, bool hasPriceFloor, long priceCeiling, bool hasPriceCeiling, bool isInfinity, long useCount, bool isForInvitation,bool isSpecialOffer, Guid categoryId)
|
||||||
: base(code, discountPercent, discountAmount, hasCode, amountType, type, count, startDate, expireDate, priceFloor, hasPriceFloor, priceCeiling, hasPriceCeiling, isInfinity, useCount,
|
: base(code, discountPercent, discountAmount, hasCode, amountType, type, count, startDate, expireDate, priceFloor, hasPriceFloor, priceCeiling, hasPriceCeiling, isInfinity, useCount,
|
||||||
isForInvitation, isSpecialOffer)
|
isForInvitation, isSpecialOffer, immortal)
|
||||||
{
|
{
|
||||||
CategoryId = categoryId;
|
CategoryId = categoryId;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
public partial class Discount
|
public partial class Discount
|
||||||
{
|
{
|
||||||
public static Discount Create(string code, int discountPercent, long discountAmount, bool hasCode, DiscountAmountType amountType, DiscountType type, int count, DateTime startDate, DateTime expireDate, long priceFloor, bool hasPriceFloor, long priceCeiling, bool hasPriceCeiling, bool isInfinity, long useCount, bool isForInvitation,bool isSpecialOffer)
|
public static Discount Create(string code, int discountPercent, long discountAmount, bool hasCode, DiscountAmountType amountType, DiscountType type, int count,bool immortal, DateTime startDate, DateTime expireDate, long priceFloor, bool hasPriceFloor, long priceCeiling, bool hasPriceCeiling, bool isInfinity, long useCount, bool isForInvitation,bool isSpecialOffer)
|
||||||
{
|
{
|
||||||
return new Discount(code,
|
return new Discount(code,
|
||||||
discountPercent,
|
discountPercent,
|
||||||
|
@ -20,18 +20,25 @@ public partial class Discount
|
||||||
isInfinity,
|
isInfinity,
|
||||||
useCount,
|
useCount,
|
||||||
isForInvitation,
|
isForInvitation,
|
||||||
isSpecialOffer);
|
isSpecialOffer,
|
||||||
|
immortal);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsExpired()
|
public bool IsExpired()
|
||||||
=> ExpireDate.Date < DateTime.Today.Date;
|
=> !Immortal && ExpireDate.Date < DateTime.Today.Date;
|
||||||
|
|
||||||
|
public void SetCorporate(Guid userId)
|
||||||
|
{
|
||||||
|
IsForSaleCooperation = true;
|
||||||
|
CorporateUserId = userId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public partial class ProductDiscount
|
public partial class ProductDiscount
|
||||||
{
|
{
|
||||||
public static ProductDiscount Create(string code, int discountPercent, long discountAmount, bool hasCode, DiscountAmountType amountType, DiscountType type, int count, DateTime startDate, DateTime expireDate, long priceFloor, bool hasPriceFloor, long priceCeiling, bool hasPriceCeiling, bool isInfinity, long useCount, bool isForInvitation ,bool isSpecialOffer, Guid productId)
|
public static ProductDiscount Create(string code, int discountPercent, long discountAmount, bool hasCode, DiscountAmountType amountType, DiscountType type, int count, bool immortal, DateTime startDate, DateTime expireDate, long priceFloor, bool hasPriceFloor, long priceCeiling, bool hasPriceCeiling, bool isInfinity, long useCount, bool isForInvitation ,bool isSpecialOffer, Guid productId)
|
||||||
{
|
{
|
||||||
return new ProductDiscount(code, discountPercent, discountAmount, hasCode, amountType, type, count, startDate,
|
return new ProductDiscount(code, discountPercent, discountAmount, hasCode, amountType, type, count,immortal, startDate,
|
||||||
expireDate, priceFloor, hasPriceFloor, priceCeiling, hasPriceCeiling, isInfinity, useCount,
|
expireDate, priceFloor, hasPriceFloor, priceCeiling, hasPriceCeiling, isInfinity, useCount,
|
||||||
isForInvitation, isSpecialOffer, productId);
|
isForInvitation, isSpecialOffer, productId);
|
||||||
}
|
}
|
||||||
|
@ -39,9 +46,9 @@ public partial class ProductDiscount
|
||||||
|
|
||||||
public partial class CategoryDiscount
|
public partial class CategoryDiscount
|
||||||
{
|
{
|
||||||
public static CategoryDiscount Create(string code, int discountPercent, long discountAmount, bool hasCode, DiscountAmountType amountType, DiscountType type, int count, DateTime startDate, DateTime expireDate, long priceFloor, bool hasPriceFloor, long priceCeiling, bool hasPriceCeiling, bool isInfinity, long useCount, bool isForInvitation, bool isSpecialOffer, Guid categoryId)
|
public static CategoryDiscount Create(string code, int discountPercent, long discountAmount, bool hasCode, DiscountAmountType amountType, DiscountType type, int count, bool immortal, DateTime startDate, DateTime expireDate, long priceFloor, bool hasPriceFloor, long priceCeiling, bool hasPriceCeiling, bool isInfinity, long useCount, bool isForInvitation, bool isSpecialOffer, Guid categoryId)
|
||||||
{
|
{
|
||||||
return new CategoryDiscount(code, discountPercent, discountAmount, hasCode, amountType, type, count, startDate,
|
return new CategoryDiscount(code, discountPercent, discountAmount, hasCode, amountType, type, count,immortal, startDate,
|
||||||
expireDate, priceFloor, hasPriceFloor, priceCeiling, hasPriceCeiling, isInfinity, useCount,
|
expireDate, priceFloor, hasPriceFloor, priceCeiling, hasPriceCeiling, isInfinity, useCount,
|
||||||
isForInvitation,isSpecialOffer, categoryId);
|
isForInvitation,isSpecialOffer, categoryId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,8 @@ public partial class Discount : ApiEntity
|
||||||
bool isInfinity,
|
bool isInfinity,
|
||||||
long useCount,
|
long useCount,
|
||||||
bool isForInvitation,
|
bool isForInvitation,
|
||||||
bool isSpecialOffer)
|
bool isSpecialOffer,
|
||||||
|
bool immortal)
|
||||||
{
|
{
|
||||||
Code = code;
|
Code = code;
|
||||||
DiscountPercent = discountPercent;
|
DiscountPercent = discountPercent;
|
||||||
|
@ -47,6 +48,7 @@ public partial class Discount : ApiEntity
|
||||||
UseCount = useCount;
|
UseCount = useCount;
|
||||||
IsForInvitation = isForInvitation;
|
IsForInvitation = isForInvitation;
|
||||||
IsSpecialOffer = isSpecialOffer;
|
IsSpecialOffer = isSpecialOffer;
|
||||||
|
Immortal = immortal;
|
||||||
}
|
}
|
||||||
public string Code { get; internal set; } = string.Empty;
|
public string Code { get; internal set; } = string.Empty;
|
||||||
public int DiscountPercent { get; internal set; }
|
public int DiscountPercent { get; internal set; }
|
||||||
|
@ -57,6 +59,7 @@ public partial class Discount : ApiEntity
|
||||||
public int Count { get; internal set; }
|
public int Count { get; internal set; }
|
||||||
public DateTime StartDate { get; internal set; }
|
public DateTime StartDate { get; internal set; }
|
||||||
public DateTime ExpireDate { get; internal set; }
|
public DateTime ExpireDate { get; internal set; }
|
||||||
|
public bool Immortal { get; internal set; }
|
||||||
public long PriceFloor { get; internal set; }
|
public long PriceFloor { get; internal set; }
|
||||||
public bool HasPriceFloor { get; internal set; }
|
public bool HasPriceFloor { get; internal set; }
|
||||||
public long PriceCeiling { get; internal set; }
|
public long PriceCeiling { get; internal set; }
|
||||||
|
@ -65,6 +68,11 @@ public partial class Discount : ApiEntity
|
||||||
public long UseCount { get; internal set; }
|
public long UseCount { get; internal set; }
|
||||||
public bool IsSpecialOffer { get; internal set; }
|
public bool IsSpecialOffer { get; internal set; }
|
||||||
public bool IsForInvitation { get; internal set; }
|
public bool IsForInvitation { get; internal set; }
|
||||||
|
public bool IsForSaleCooperation { get; internal set; }
|
||||||
|
|
||||||
|
|
||||||
|
public Guid? CorporateUserId { get; internal set; }
|
||||||
|
public ApplicationUser? CorporateUser { get; internal set; }
|
||||||
|
|
||||||
public List<Order> Orders { get; internal set; } = new();
|
public List<Order> Orders { get; internal set; } = new();
|
||||||
}
|
}
|
|
@ -7,8 +7,8 @@ public partial class ProductDiscount : Discount
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProductDiscount(string code, int discountPercent, long discountAmount, bool hasCode, DiscountAmountType amountType, DiscountType type, int count, DateTime startDate, DateTime expireDate, long priceFloor, bool hasPriceFloor, long priceCeiling, bool hasPriceCeiling, bool isInfinity, long useCount, bool isForInvitation,bool isSpecialOffer,Guid productId)
|
public ProductDiscount(string code, int discountPercent, long discountAmount, bool hasCode, DiscountAmountType amountType, DiscountType type, int count, bool immortal, DateTime startDate, DateTime expireDate, long priceFloor, bool hasPriceFloor, long priceCeiling, bool hasPriceCeiling, bool isInfinity, long useCount, bool isForInvitation,bool isSpecialOffer,Guid productId)
|
||||||
: base(code, discountPercent, discountAmount, hasCode, amountType, type, count, startDate, expireDate, priceFloor, hasPriceFloor, priceCeiling, hasPriceCeiling, isInfinity, useCount, isForInvitation, isSpecialOffer)
|
: base(code, discountPercent, discountAmount, hasCode, amountType, type, count, startDate, expireDate, priceFloor, hasPriceFloor, priceCeiling, hasPriceCeiling, isInfinity, useCount, isForInvitation, isSpecialOffer, immortal)
|
||||||
{
|
{
|
||||||
ProductId = productId;
|
ProductId = productId;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ namespace NetinaShop.Domain.Mappers
|
||||||
Count = p1.Count,
|
Count = p1.Count,
|
||||||
StartDate = p1.StartDate,
|
StartDate = p1.StartDate,
|
||||||
ExpireDate = p1.ExpireDate,
|
ExpireDate = p1.ExpireDate,
|
||||||
|
Immortal = p1.Immortal,
|
||||||
PriceFloor = p1.PriceFloor,
|
PriceFloor = p1.PriceFloor,
|
||||||
HasPriceFloor = p1.HasPriceFloor,
|
HasPriceFloor = p1.HasPriceFloor,
|
||||||
PriceCeiling = p1.PriceCeiling,
|
PriceCeiling = p1.PriceCeiling,
|
||||||
|
@ -50,6 +51,7 @@ namespace NetinaShop.Domain.Mappers
|
||||||
result.Count = p2.Count;
|
result.Count = p2.Count;
|
||||||
result.StartDate = p2.StartDate;
|
result.StartDate = p2.StartDate;
|
||||||
result.ExpireDate = p2.ExpireDate;
|
result.ExpireDate = p2.ExpireDate;
|
||||||
|
result.Immortal = p2.Immortal;
|
||||||
result.PriceFloor = p2.PriceFloor;
|
result.PriceFloor = p2.PriceFloor;
|
||||||
result.HasPriceFloor = p2.HasPriceFloor;
|
result.HasPriceFloor = p2.HasPriceFloor;
|
||||||
result.PriceCeiling = p2.PriceCeiling;
|
result.PriceCeiling = p2.PriceCeiling;
|
||||||
|
@ -74,6 +76,7 @@ namespace NetinaShop.Domain.Mappers
|
||||||
Count = p4.Count,
|
Count = p4.Count,
|
||||||
StartDate = p4.StartDate,
|
StartDate = p4.StartDate,
|
||||||
ExpireDate = p4.ExpireDate,
|
ExpireDate = p4.ExpireDate,
|
||||||
|
Immortal = p4.Immortal,
|
||||||
PriceFloor = p4.PriceFloor,
|
PriceFloor = p4.PriceFloor,
|
||||||
HasPriceFloor = p4.HasPriceFloor,
|
HasPriceFloor = p4.HasPriceFloor,
|
||||||
PriceCeiling = p4.PriceCeiling,
|
PriceCeiling = p4.PriceCeiling,
|
||||||
|
@ -98,6 +101,7 @@ namespace NetinaShop.Domain.Mappers
|
||||||
Count = p5.Count,
|
Count = p5.Count,
|
||||||
StartDate = p5.StartDate,
|
StartDate = p5.StartDate,
|
||||||
ExpireDate = p5.ExpireDate,
|
ExpireDate = p5.ExpireDate,
|
||||||
|
Immortal = p5.Immortal,
|
||||||
PriceFloor = p5.PriceFloor,
|
PriceFloor = p5.PriceFloor,
|
||||||
HasPriceFloor = p5.HasPriceFloor,
|
HasPriceFloor = p5.HasPriceFloor,
|
||||||
PriceCeiling = p5.PriceCeiling,
|
PriceCeiling = p5.PriceCeiling,
|
||||||
|
@ -127,6 +131,7 @@ namespace NetinaShop.Domain.Mappers
|
||||||
result.Count = p6.Count;
|
result.Count = p6.Count;
|
||||||
result.StartDate = p6.StartDate;
|
result.StartDate = p6.StartDate;
|
||||||
result.ExpireDate = p6.ExpireDate;
|
result.ExpireDate = p6.ExpireDate;
|
||||||
|
result.Immortal = p6.Immortal;
|
||||||
result.PriceFloor = p6.PriceFloor;
|
result.PriceFloor = p6.PriceFloor;
|
||||||
result.HasPriceFloor = p6.HasPriceFloor;
|
result.HasPriceFloor = p6.HasPriceFloor;
|
||||||
result.PriceCeiling = p6.PriceCeiling;
|
result.PriceCeiling = p6.PriceCeiling;
|
||||||
|
@ -151,6 +156,7 @@ namespace NetinaShop.Domain.Mappers
|
||||||
Count = p8.Count,
|
Count = p8.Count,
|
||||||
StartDate = p8.StartDate,
|
StartDate = p8.StartDate,
|
||||||
ExpireDate = p8.ExpireDate,
|
ExpireDate = p8.ExpireDate,
|
||||||
|
Immortal = p8.Immortal,
|
||||||
PriceFloor = p8.PriceFloor,
|
PriceFloor = p8.PriceFloor,
|
||||||
HasPriceFloor = p8.HasPriceFloor,
|
HasPriceFloor = p8.HasPriceFloor,
|
||||||
PriceCeiling = p8.PriceCeiling,
|
PriceCeiling = p8.PriceCeiling,
|
||||||
|
|
|
@ -13,12 +13,12 @@ public class CreateDiscountCommandHandler : IRequestHandler<CreateDiscountComman
|
||||||
switch (request.Type)
|
switch (request.Type)
|
||||||
{
|
{
|
||||||
case DiscountType.All:
|
case DiscountType.All:
|
||||||
var ent = Discount.Create(request.Code, request.DiscountPercent, request.DiscountAmount, request.HasCode, request.AmountType, request.Type, request.Count, request.StartDate, request.ExpireDate, request.PriceFloor, request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount, request.IsForInvitation,request.IsSpecialOffer);
|
var ent = Discount.Create(request.Code, request.DiscountPercent, request.DiscountAmount, request.HasCode, request.AmountType, request.Type, request.Count,request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor, request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount, request.IsForInvitation,request.IsSpecialOffer);
|
||||||
_repositoryWrapper.SetRepository<Discount>().Add(ent);
|
_repositoryWrapper.SetRepository<Discount>().Add(ent);
|
||||||
break;
|
break;
|
||||||
case DiscountType.Category:
|
case DiscountType.Category:
|
||||||
var catDis = CategoryDiscount.Create(request.Code, request.DiscountPercent, request.DiscountAmount, request.HasCode,
|
var catDis = CategoryDiscount.Create(request.Code, request.DiscountPercent, request.DiscountAmount, request.HasCode,
|
||||||
request.AmountType, request.Type, request.Count, request.StartDate, request.ExpireDate, request.PriceFloor,
|
request.AmountType, request.Type, request.Count,request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor,
|
||||||
request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount,
|
request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount,
|
||||||
request.IsForInvitation,request.IsSpecialOffer, request.CategoryId);
|
request.IsForInvitation,request.IsSpecialOffer, request.CategoryId);
|
||||||
_repositoryWrapper.SetRepository<CategoryDiscount>().Add(catDis);
|
_repositoryWrapper.SetRepository<CategoryDiscount>().Add(catDis);
|
||||||
|
@ -26,14 +26,14 @@ public class CreateDiscountCommandHandler : IRequestHandler<CreateDiscountComman
|
||||||
|
|
||||||
case DiscountType.Product:
|
case DiscountType.Product:
|
||||||
var productDis = ProductDiscount.Create(request.Code, request.DiscountPercent, request.DiscountAmount, request.HasCode,
|
var productDis = ProductDiscount.Create(request.Code, request.DiscountPercent, request.DiscountAmount, request.HasCode,
|
||||||
request.AmountType, request.Type, request.Count, request.StartDate, request.ExpireDate, request.PriceFloor,
|
request.AmountType, request.Type, request.Count, request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor,
|
||||||
request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount,
|
request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount,
|
||||||
request.IsForInvitation, request.IsSpecialOffer,request.ProductId);
|
request.IsForInvitation, request.IsSpecialOffer,request.ProductId);
|
||||||
_repositoryWrapper.SetRepository<ProductDiscount>().Add(productDis);
|
_repositoryWrapper.SetRepository<ProductDiscount>().Add(productDis);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
var def = Discount.Create(request.Code, request.DiscountPercent, request.DiscountAmount, request.HasCode,
|
var def = Discount.Create(request.Code, request.DiscountPercent, request.DiscountAmount, request.HasCode,
|
||||||
request.AmountType, request.Type, request.Count, request.StartDate, request.ExpireDate, request.PriceFloor,
|
request.AmountType, request.Type, request.Count, request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor,
|
||||||
request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount,
|
request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount,
|
||||||
request.IsForInvitation,request.IsSpecialOffer);
|
request.IsForInvitation,request.IsSpecialOffer);
|
||||||
_repositoryWrapper.SetRepository<Discount>().Add(def);
|
_repositoryWrapper.SetRepository<Discount>().Add(def);
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace NetinaShop.Repository.Handlers.Discounts;
|
||||||
|
|
||||||
|
public class CreateSaleCooperationDiscountHandler : IRequestHandler<CreateSaleCooperationDiscount,string>
|
||||||
|
{
|
||||||
|
private readonly UserManager<ApplicationUser> _userManager;
|
||||||
|
private readonly IRepositoryWrapper _repositoryWrapper;
|
||||||
|
private readonly ICurrentUserService _currentUserService;
|
||||||
|
|
||||||
|
public CreateSaleCooperationDiscountHandler(UserManager<ApplicationUser> userManager,IRepositoryWrapper repositoryWrapper,ICurrentUserService currentUserService)
|
||||||
|
{
|
||||||
|
_userManager = userManager;
|
||||||
|
_repositoryWrapper = repositoryWrapper;
|
||||||
|
_currentUserService = currentUserService;
|
||||||
|
}
|
||||||
|
public async Task<string> Handle(CreateSaleCooperationDiscount request, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var userId = request.CorporateUserId;
|
||||||
|
if (userId == default)
|
||||||
|
{
|
||||||
|
if (_currentUserService.UserId == null)
|
||||||
|
throw new AppException("User id is null");
|
||||||
|
if (!Guid.TryParse(_currentUserService.UserId, out userId))
|
||||||
|
throw new AppException("User id is wrong");
|
||||||
|
}
|
||||||
|
var user = await _userManager.FindByIdAsync(request.CorporateUserId.ToString());
|
||||||
|
if (user == null)
|
||||||
|
throw new AppException("User not found", ApiResultStatusCode.NotFound);
|
||||||
|
|
||||||
|
var foundedDiscount = await _repositoryWrapper.SetRepository<Discount>()
|
||||||
|
.TableNoTracking
|
||||||
|
.FirstOrDefaultAsync(d => d.IsForSaleCooperation && d.CorporateUserId == userId, cancellationToken);
|
||||||
|
if (foundedDiscount == null)
|
||||||
|
{
|
||||||
|
var code = StringExtensions.GetId();
|
||||||
|
foundedDiscount = Discount.Create(code, 10, 0, true,
|
||||||
|
DiscountAmountType.Percent, DiscountType.All, 0, true, DateTime.Today, DateTime.Today.AddYears(10), 0,
|
||||||
|
false, 0, false, true, 0, false, false);
|
||||||
|
foundedDiscount.SetCorporate(userId);
|
||||||
|
|
||||||
|
_repositoryWrapper.SetRepository<Discount>().Add(foundedDiscount);
|
||||||
|
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||||
|
return foundedDiscount.Code;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return foundedDiscount.Code;
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,7 +18,7 @@ public class UpdateDiscountCommandHandler : IRequestHandler<UpdateDiscountComman
|
||||||
var ent = await _repositoryWrapper.SetRepository<Discount>().TableNoTracking.FirstOrDefaultAsync(d=>d.Id==request.Id,cancellationToken);
|
var ent = await _repositoryWrapper.SetRepository<Discount>().TableNoTracking.FirstOrDefaultAsync(d=>d.Id==request.Id,cancellationToken);
|
||||||
if (ent == null)
|
if (ent == null)
|
||||||
throw new AppException("Discount not found", ApiResultStatusCode.NotFound);
|
throw new AppException("Discount not found", ApiResultStatusCode.NotFound);
|
||||||
var newEnt = Discount.Create(request.Code, request.DiscountPercent, request.DiscountAmount, request.HasCode, request.AmountType, request.Type, request.Count, request.StartDate, request.ExpireDate, request.PriceFloor, request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount, request.IsForInvitation, request.IsSpecialOffer);
|
var newEnt = Discount.Create(request.Code, request.DiscountPercent, request.DiscountAmount, request.HasCode, request.AmountType, request.Type, request.Count,request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor, request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount, request.IsForInvitation, request.IsSpecialOffer);
|
||||||
newEnt.Id = ent.Id;
|
newEnt.Id = ent.Id;
|
||||||
newEnt.CreatedAt = ent.CreatedAt;
|
newEnt.CreatedAt = ent.CreatedAt;
|
||||||
newEnt.CreatedBy = ent.CreatedBy;
|
newEnt.CreatedBy = ent.CreatedBy;
|
||||||
|
@ -30,7 +30,7 @@ public class UpdateDiscountCommandHandler : IRequestHandler<UpdateDiscountComman
|
||||||
throw new AppException("Discount not found", ApiResultStatusCode.NotFound);
|
throw new AppException("Discount not found", ApiResultStatusCode.NotFound);
|
||||||
|
|
||||||
var catDis = CategoryDiscount.Create(request.Code, request.DiscountPercent, request.DiscountAmount, request.HasCode,
|
var catDis = CategoryDiscount.Create(request.Code, request.DiscountPercent, request.DiscountAmount, request.HasCode,
|
||||||
request.AmountType, request.Type, request.Count, request.StartDate, request.ExpireDate, request.PriceFloor,
|
request.AmountType, request.Type, request.Count, request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor,
|
||||||
request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount,
|
request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount,
|
||||||
request.IsForInvitation,request.IsSpecialOffer, request.CategoryId);
|
request.IsForInvitation,request.IsSpecialOffer, request.CategoryId);
|
||||||
catDis.Id = catEnt.Id;
|
catDis.Id = catEnt.Id;
|
||||||
|
@ -45,7 +45,7 @@ public class UpdateDiscountCommandHandler : IRequestHandler<UpdateDiscountComman
|
||||||
throw new AppException("Discount not found", ApiResultStatusCode.NotFound);
|
throw new AppException("Discount not found", ApiResultStatusCode.NotFound);
|
||||||
|
|
||||||
var productDis = ProductDiscount.Create(request.Code, request.DiscountPercent, request.DiscountAmount, request.HasCode,
|
var productDis = ProductDiscount.Create(request.Code, request.DiscountPercent, request.DiscountAmount, request.HasCode,
|
||||||
request.AmountType, request.Type, request.Count, request.StartDate, request.ExpireDate, request.PriceFloor,
|
request.AmountType, request.Type, request.Count, request.IsImmortal, request.StartDate, request.ExpireDate, request.PriceFloor,
|
||||||
request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount,
|
request.HasPriceFloor, request.PriceCeiling, request.HasPriceCeiling, request.IsInfinity, request.UseCount,
|
||||||
request.IsForInvitation, request.IsSpecialOffer, request.ProductId);
|
request.IsForInvitation, request.IsSpecialOffer, request.ProductId);
|
||||||
productDis.Id = productEnt.Id;
|
productDis.Id = productEnt.Id;
|
||||||
|
|
1749
NetinaShop.Repository/Migrations/20240224163606_EditDiscountAddCorporate.Designer.cs
generated
100644
1749
NetinaShop.Repository/Migrations/20240224163606_EditDiscountAddCorporate.Designer.cs
generated
100644
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,82 @@
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
#nullable disable
|
||||||
|
|
||||||
|
namespace NetinaShop.Repository.Migrations
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public partial class EditDiscountAddCorporate : Migration
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AddColumn<Guid>(
|
||||||
|
name: "CorporateUserId",
|
||||||
|
schema: "public",
|
||||||
|
table: "Discounts",
|
||||||
|
type: "uuid",
|
||||||
|
nullable: true);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<bool>(
|
||||||
|
name: "Immortal",
|
||||||
|
schema: "public",
|
||||||
|
table: "Discounts",
|
||||||
|
type: "boolean",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: false);
|
||||||
|
|
||||||
|
migrationBuilder.AddColumn<bool>(
|
||||||
|
name: "IsForSaleCooperation",
|
||||||
|
schema: "public",
|
||||||
|
table: "Discounts",
|
||||||
|
type: "boolean",
|
||||||
|
nullable: false,
|
||||||
|
defaultValue: false);
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_Discounts_CorporateUserId",
|
||||||
|
schema: "public",
|
||||||
|
table: "Discounts",
|
||||||
|
column: "CorporateUserId");
|
||||||
|
|
||||||
|
migrationBuilder.AddForeignKey(
|
||||||
|
name: "FK_Discounts_Users_CorporateUserId",
|
||||||
|
schema: "public",
|
||||||
|
table: "Discounts",
|
||||||
|
column: "CorporateUserId",
|
||||||
|
principalSchema: "public",
|
||||||
|
principalTable: "Users",
|
||||||
|
principalColumn: "Id");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropForeignKey(
|
||||||
|
name: "FK_Discounts_Users_CorporateUserId",
|
||||||
|
schema: "public",
|
||||||
|
table: "Discounts");
|
||||||
|
|
||||||
|
migrationBuilder.DropIndex(
|
||||||
|
name: "IX_Discounts_CorporateUserId",
|
||||||
|
schema: "public",
|
||||||
|
table: "Discounts");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "CorporateUserId",
|
||||||
|
schema: "public",
|
||||||
|
table: "Discounts");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "Immortal",
|
||||||
|
schema: "public",
|
||||||
|
table: "Discounts");
|
||||||
|
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "IsForSaleCooperation",
|
||||||
|
schema: "public",
|
||||||
|
table: "Discounts");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -360,6 +360,9 @@ namespace NetinaShop.Repository.Migrations
|
||||||
.IsRequired()
|
.IsRequired()
|
||||||
.HasColumnType("text");
|
.HasColumnType("text");
|
||||||
|
|
||||||
|
b.Property<Guid?>("CorporateUserId")
|
||||||
|
.HasColumnType("uuid");
|
||||||
|
|
||||||
b.Property<int>("Count")
|
b.Property<int>("Count")
|
||||||
.HasColumnType("integer");
|
.HasColumnType("integer");
|
||||||
|
|
||||||
|
@ -392,9 +395,15 @@ namespace NetinaShop.Repository.Migrations
|
||||||
b.Property<bool>("HasPriceFloor")
|
b.Property<bool>("HasPriceFloor")
|
||||||
.HasColumnType("boolean");
|
.HasColumnType("boolean");
|
||||||
|
|
||||||
|
b.Property<bool>("Immortal")
|
||||||
|
.HasColumnType("boolean");
|
||||||
|
|
||||||
b.Property<bool>("IsForInvitation")
|
b.Property<bool>("IsForInvitation")
|
||||||
.HasColumnType("boolean");
|
.HasColumnType("boolean");
|
||||||
|
|
||||||
|
b.Property<bool>("IsForSaleCooperation")
|
||||||
|
.HasColumnType("boolean");
|
||||||
|
|
||||||
b.Property<bool>("IsInfinity")
|
b.Property<bool>("IsInfinity")
|
||||||
.HasColumnType("boolean");
|
.HasColumnType("boolean");
|
||||||
|
|
||||||
|
@ -433,6 +442,8 @@ namespace NetinaShop.Repository.Migrations
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
|
b.HasIndex("CorporateUserId");
|
||||||
|
|
||||||
b.ToTable("Discounts", "public");
|
b.ToTable("Discounts", "public");
|
||||||
|
|
||||||
b.HasDiscriminator<string>("Discriminator").HasValue("Discount");
|
b.HasDiscriminator<string>("Discriminator").HasValue("Discount");
|
||||||
|
@ -1461,6 +1472,15 @@ namespace NetinaShop.Repository.Migrations
|
||||||
b.Navigation("Category");
|
b.Navigation("Category");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity("NetinaShop.Domain.Entities.Discounts.Discount", b =>
|
||||||
|
{
|
||||||
|
b.HasOne("NetinaShop.Domain.Entities.Users.ApplicationUser", "CorporateUser")
|
||||||
|
.WithMany()
|
||||||
|
.HasForeignKey("CorporateUserId");
|
||||||
|
|
||||||
|
b.Navigation("CorporateUser");
|
||||||
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("NetinaShop.Domain.Entities.Orders.Order", b =>
|
modelBuilder.Entity("NetinaShop.Domain.Entities.Orders.Order", b =>
|
||||||
{
|
{
|
||||||
b.HasOne("NetinaShop.Domain.Entities.Discounts.Discount", null)
|
b.HasOne("NetinaShop.Domain.Entities.Discounts.Discount", null)
|
||||||
|
|
Loading…
Reference in New Issue