Skip to content

Commit

Permalink
Merge pull request #51 from Tynab/develop
Browse files Browse the repository at this point in the history
231120
  • Loading branch information
Tynab committed Nov 20, 2023
2 parents 9221f70 + 574733e commit 6180d77
Show file tree
Hide file tree
Showing 8 changed files with 61 additions and 42 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace YANLib.Requests;
namespace YANLib.Requests.DeveloperType;

public sealed class DeveloperTypeRequest
public sealed class DeveloperTypeCreateRequest
{
public required int Code { get; set; }

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace YANLib.Requests.DeveloperType;

public sealed class DeveloperTypeUpdateRequest
{
public string Name { get; set; }

public bool? IsActive { get; set; }
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using YANLib.Requests;
using YANLib.Requests.DeveloperType;
using YANLib.Responses;

namespace YANLib.Services;
Expand All @@ -12,9 +12,9 @@ public interface IDeveloperTypeService : IApplicationService

public ValueTask<DeveloperTypeResponse> Get(int code);

public ValueTask<DeveloperTypeResponse> Create(DeveloperTypeRequest request);
public ValueTask<DeveloperTypeResponse> Create(DeveloperTypeCreateRequest request);

public ValueTask<DeveloperTypeResponse> Update(DeveloperTypeRequest request);
public ValueTask<DeveloperTypeResponse> Update(int code, DeveloperTypeUpdateRequest request);

public ValueTask<bool> SyncDbToRedis();
}
11 changes: 9 additions & 2 deletions src/YANLib.Application/Mappers/DeveloperTypeMapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
using Volo.Abp.AutoMapper;
using YANLib.Entities;
using YANLib.RedisDtos;
using YANLib.Requests;
using YANLib.Requests.DeveloperType;
using YANLib.Responses;

namespace YANLib.Mappers;
Expand All @@ -22,11 +22,18 @@ public DeveloperTypeMapper()
_ = CreateMap<DeveloperTypeRedisDto, DeveloperTypeResponse>()
.Ignore(d => d.Code);

_ = CreateMap<DeveloperTypeRequest, DeveloperType>()
_ = CreateMap<DeveloperTypeCreateRequest, DeveloperType>()
.ForMember(d => d.Id, o => o.MapFrom(s => s.Code))
.Ignore(d => d.CreatedAt)
.Ignore(d => d.UpdatedAt);

_ = CreateMap<(int, DeveloperTypeUpdateRequest), DeveloperType>()
.ForMember(d => d.Id, o => o.MapFrom(s => s.Item1))
.ForMember(d => d.Name, o => o.MapFrom(s => s.Item2.Name))
.ForMember(d => d.IsActive, o => o.MapFrom(s => s.Item2.IsActive))
.Ignore(d => d.CreatedAt)
.Ignore(d => d.UpdatedAt);

_ = CreateMap<DeveloperType, DeveloperTypeRedisDto>();

_ = CreateMap<DeveloperType, DeveloperTypeResponse>()
Expand Down
16 changes: 10 additions & 6 deletions src/YANLib.Application/Services/DeveloperTypeService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
using YANLib.Application.Redis.Services;
using YANLib.Entities;
using YANLib.RedisDtos;
using YANLib.Requests;
using YANLib.Requests.DeveloperType;
using YANLib.Responses;
using static System.DateTime;
using static System.Threading.Tasks.Task;
Expand Down Expand Up @@ -63,7 +63,7 @@ public async ValueTask<DeveloperTypeResponse> Get(int code)
}
}

public async ValueTask<DeveloperTypeResponse> Create(DeveloperTypeRequest request)
public async ValueTask<DeveloperTypeResponse> Create(DeveloperTypeCreateRequest request)
{
try
{
Expand All @@ -74,7 +74,7 @@ public async ValueTask<DeveloperTypeResponse> Create(DeveloperTypeRequest reques
throw new BusinessException(EXIST_ID).WithData("Code", request.Code);
}

var ent = ObjectMapper.Map<DeveloperTypeRequest, DeveloperType>(request);
var ent = ObjectMapper.Map<DeveloperTypeCreateRequest, DeveloperType>(request);

ent.CreatedAt = Now;

Expand All @@ -94,12 +94,16 @@ public async ValueTask<DeveloperTypeResponse> Create(DeveloperTypeRequest reques
}
}

public async ValueTask<DeveloperTypeResponse> Update(DeveloperTypeRequest request)
public async ValueTask<DeveloperTypeResponse> Update(int code, DeveloperTypeUpdateRequest request)
{
try
{
var dto = await _redisService.Get(DeveloperTypeGroup, request.Code.ToString()) ?? throw new BusinessException(NOT_FOUND_DEV_TYPE).WithData("Code", request.Code);
var ent = ObjectMapper.Map<DeveloperTypeRequest, DeveloperType>(request);
var dto = await _redisService.Get(DeveloperTypeGroup, code.ToString()) ?? throw new BusinessException(NOT_FOUND_DEV_TYPE).WithData("Code", code);

request.Name = request.Name.IsWhiteSpaceOrNull() ? dto.Name : request.Name;
request.IsActive ??= dto.IsActive;

var ent = ObjectMapper.Map<(int, DeveloperTypeUpdateRequest), DeveloperType>((code, request));

ent.CreatedAt = dto.CreatedAt;
ent.UpdatedAt = Now;
Expand Down
16 changes: 8 additions & 8 deletions src/YANLib.Application/Validations/DeveloperTypeValidation.cs
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
using FluentValidation;
using System.Collections.Generic;
using System.Linq;
using YANLib.Requests;
using YANLib.Requests.DeveloperType;
using static YANLib.YANLibDomainErrorCodes;

namespace YANLib.Validations;

public sealed class DeveloperTypeValidator : AbstractValidator<DeveloperTypeRequest>
public sealed class DeveloperTypeCreateValidator : AbstractValidator<DeveloperTypeCreateRequest>
{
public DeveloperTypeValidator()
public DeveloperTypeCreateValidator()
{
_ = RuleFor(x => x.Code).NotNull().NotEmpty().GreaterThanOrEqualTo(0).WithErrorCode(BAD_REQUEST_ID).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST_ID);
_ = RuleFor(x => x.Name).NotNull().NotEmpty().WithErrorCode(BAD_REQUEST_NAME).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST_NAME);
}
}

public sealed class DeveloperTypeValidators : AbstractValidator<List<DeveloperTypeRequest>>
public sealed class DeveloperTypeCreateValidators : AbstractValidator<List<DeveloperTypeCreateRequest>>
{
#region Constructors
public DeveloperTypeValidators()
public DeveloperTypeCreateValidators()
{
_ = RuleFor(x => x).NotNull().NotEmpty().WithErrorCode(BAD_REQUEST).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST);
_ = RuleForEach(s => s).SetValidator(new DeveloperTypeValidator());
_ = RuleForEach(s => s).SetValidator(new DeveloperTypeCreateValidator());
_ = RuleFor(x => x).Must(IsNotEmptyAndNull).WithErrorCode(BAD_REQUEST).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST);
_ = RuleFor(x => x).Must(NameIsNotWhiteSpace).WithErrorCode(BAD_REQUEST_NAME).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST_NAME);
}
#endregion

#region Methods
private bool IsNotEmptyAndNull(List<DeveloperTypeRequest> requests) => requests.IsNotEmptyAndNull();
private bool IsNotEmptyAndNull(List<DeveloperTypeCreateRequest> requests) => requests.IsNotEmptyAndNull();

private bool NameIsNotWhiteSpace(List<DeveloperTypeRequest> requests) => requests.Select(x => x.Name).AllNotWhiteSpaceAndNull();
private bool NameIsNotWhiteSpace(List<DeveloperTypeCreateRequest> requests) => requests.Select(x => x.Name).AllNotWhiteSpaceAndNull();
#endregion
}
30 changes: 15 additions & 15 deletions src/YANLib.Application/Validations/DeveloperValidation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,23 @@

namespace YANLib.Validations;

public sealed class DeveloperValidator : AbstractValidator<DeveloperCreateRequest>
public sealed class DeveloperCreateValidator : AbstractValidator<DeveloperCreateRequest>
{
public DeveloperValidator()
public DeveloperCreateValidator()
{
_ = RuleFor(x => x.Name).NotNull().NotEmpty().WithErrorCode(BAD_REQUEST_NAME).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST_NAME);
_ = RuleFor(x => x.IdCard).NotNull().NotEmpty().WithErrorCode(BAD_REQUEST_ID_CARD).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST_ID_CARD);
_ = RuleFor(x => x.DeveloperTypeCode).NotNull().NotEmpty().GreaterThanOrEqualTo(0).WithErrorCode(BAD_REQUEST_ID).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST_ID);
}
}

public sealed class DeveloperValidators : AbstractValidator<List<DeveloperCreateRequest>>
public sealed class DeveloperCreateValidators : AbstractValidator<List<DeveloperCreateRequest>>
{
#region Constructors
public DeveloperValidators()
public DeveloperCreateValidators()
{
_ = RuleFor(x => x).NotNull().NotEmpty().WithErrorCode(BAD_REQUEST).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST);
_ = RuleForEach(s => s).SetValidator(new DeveloperValidator());
_ = RuleForEach(s => s).SetValidator(new DeveloperCreateValidator());
_ = RuleFor(x => x).Must(IsNotEmptyAndNull).WithErrorCode(BAD_REQUEST).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST);
_ = RuleFor(x => x).Must(NameIsNotWhiteSpace).WithErrorCode(BAD_REQUEST_NAME).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST_NAME);
_ = RuleFor(x => x).Must(IdCardIsNotWhiteSpace).WithErrorCode(BAD_REQUEST_ID_CARD).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST_ID_CARD);
Expand All @@ -38,22 +38,22 @@ public DeveloperValidators()
#endregion
}

public sealed class DeveloperCertificateValidator : AbstractValidator<DeveloperCreateRequest.Certificate>
public sealed class DeveloperCreateCertificateValidator : AbstractValidator<DeveloperCreateRequest.Certificate>
{
public DeveloperCertificateValidator()
public DeveloperCreateCertificateValidator()
{
_ = RuleFor(x => x.Name).NotNull().NotEmpty().WithErrorCode(BAD_REQUEST_NAME).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST_NAME);
_ = RuleFor(x => x.GPA).GreaterThan(0).WithErrorCode(BAD_REQUEST_GPA).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST_GPA);
}
}

public sealed class DeveloperCertificateValidators : AbstractValidator<List<DeveloperCreateRequest.Certificate>>
public sealed class DeveloperCreateCertificateValidators : AbstractValidator<List<DeveloperCreateRequest.Certificate>>
{
#region Constructors
public DeveloperCertificateValidators()
public DeveloperCreateCertificateValidators()
{
_ = RuleFor(x => x).NotNull().NotEmpty().WithErrorCode(BAD_REQUEST).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST);
_ = RuleForEach(s => s).SetValidator(new DeveloperCertificateValidator());
_ = RuleForEach(s => s).SetValidator(new DeveloperCreateCertificateValidator());
_ = RuleFor(x => x).Must(IsNotEmptyAndNull).WithErrorCode(BAD_REQUEST).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST);
_ = RuleFor(x => x).Must(NameIsNotWhiteSpace).WithErrorCode(BAD_REQUEST_NAME).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST_NAME);
}
Expand All @@ -66,22 +66,22 @@ public DeveloperCertificateValidators()
#endregion
}

public sealed class DeveloperDtoCertificateValidator : AbstractValidator<DeveloperUpdateRequest.Certificate>
public sealed class DeveloperUpdateCertificateValidator : AbstractValidator<DeveloperUpdateRequest.Certificate>
{
public DeveloperDtoCertificateValidator()
public DeveloperUpdateCertificateValidator()
{
_ = RuleFor(x => x.Name).NotNull().NotEmpty().WithErrorCode(BAD_REQUEST_NAME).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST_NAME);
_ = RuleFor(x => x.GPA).GreaterThan(0).WithErrorCode(BAD_REQUEST_GPA).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST_GPA);
}
}

public sealed class DeveloperDtoCertificateValidators : AbstractValidator<List<DeveloperUpdateRequest.Certificate>>
public sealed class DeveloperUpdateCertificateValidators : AbstractValidator<List<DeveloperUpdateRequest.Certificate>>
{
#region Constructors
public DeveloperDtoCertificateValidators()
public DeveloperUpdateCertificateValidators()
{
_ = RuleFor(x => x).NotNull().NotEmpty().WithErrorCode(BAD_REQUEST).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST);
_ = RuleForEach(s => s).SetValidator(new DeveloperDtoCertificateValidator());
_ = RuleForEach(s => s).SetValidator(new DeveloperUpdateCertificateValidator());
_ = RuleFor(x => x).Must(IsNotEmptyAndNull).WithErrorCode(BAD_REQUEST).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST);
_ = RuleFor(x => x).Must(NameIsNotWhiteSpace).WithErrorCode(BAD_REQUEST_NAME).WithMessage(YANLibDomainErrorMessages.BAD_REQUEST_NAME);
}
Expand Down
12 changes: 6 additions & 6 deletions src/YANLib.HttpApi/Controllers/DeveloperTypeController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Volo.Abp;
using YANLib.Requests;
using YANLib.Requests.DeveloperType;
using YANLib.Services;

namespace YANLib.Controllers;
Expand Down Expand Up @@ -35,20 +35,20 @@ public async ValueTask<IActionResult> Get(int code)

[HttpPost]
[SwaggerOperation(Summary = "Thêm mới định nghĩa Developer Type")]
public async ValueTask<IActionResult> Create([Required] DeveloperTypeRequest request)
public async ValueTask<IActionResult> Create([Required] DeveloperTypeCreateRequest request)
{
_logger.LogInformation("CreateDeveloperTypeController: {Request}", request.CamelSerialize());

return Ok(await _service.Create(request));
}

[HttpPut]
[HttpPut("{code}")]
[SwaggerOperation(Summary = "Cập nhật định nghĩa Developer Type")]
public async ValueTask<IActionResult> Update([Required] DeveloperTypeRequest request)
public async ValueTask<IActionResult> Update(int code, [Required] DeveloperTypeUpdateRequest request)
{
_logger.LogInformation("UpdateDeveloperTypeController: {Request}", request.CamelSerialize());
_logger.LogInformation("UpdateDeveloperTypeController: {Code} - {Request}", code, request.CamelSerialize());

return Ok(await _service.Update(request));
return Ok(await _service.Update(code, request));
}

[SwaggerOperation(Summary = "Đồng bộ tất cả định nghĩa Developer Types từ Database sang Redis")]
Expand Down

0 comments on commit 6180d77

Please sign in to comment.