initial commit
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
using Indotalent.Infrastructure.Database;
|
||||
using MediatR;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Indotalent.Features.Setting.AutoNumberSequence.Cqrs;
|
||||
|
||||
public record GetAutoNumberSequenceByIdResponse(
|
||||
string Id, string EntityName, int? Year, int? Month,
|
||||
long CurrentSequence, string PrefixTemplate, string SuffixTemplate, int PaddingLength);
|
||||
|
||||
public record GetAutoNumberSequenceByIdQuery(string Id) : IRequest<GetAutoNumberSequenceByIdResponse?>;
|
||||
|
||||
public class GetAutoNumberSequenceByIdHandler : IRequestHandler<GetAutoNumberSequenceByIdQuery, GetAutoNumberSequenceByIdResponse?>
|
||||
{
|
||||
private readonly AppDbContext _context;
|
||||
public GetAutoNumberSequenceByIdHandler(AppDbContext context) => _context = context;
|
||||
|
||||
public async Task<GetAutoNumberSequenceByIdResponse?> Handle(GetAutoNumberSequenceByIdQuery request, CancellationToken cancellationToken)
|
||||
{
|
||||
return await _context.Set<Data.Entities.AutoNumberSequence>()
|
||||
.AsNoTracking()
|
||||
.Where(x => x.Id == request.Id)
|
||||
.Select(x => new GetAutoNumberSequenceByIdResponse(
|
||||
x.Id, x.EntityName ?? "", x.Year, x.Month,
|
||||
x.CurrentSequence ?? 0, x.PrefixTemplate ?? "", x.SuffixTemplate ?? "", x.PaddingLength ?? 0))
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using Indotalent.Infrastructure.Database;
|
||||
using MediatR;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Indotalent.Features.Setting.AutoNumberSequence.Cqrs;
|
||||
|
||||
public class GetAutoNumberSequenceListResponse
|
||||
{
|
||||
public string? Id { get; set; }
|
||||
public string? EntityName { get; set; }
|
||||
public int? Year { get; set; }
|
||||
public int? Month { get; set; }
|
||||
public long? CurrentSequence { get; set; }
|
||||
public string? PrefixTemplate { get; set; }
|
||||
public string? SuffixTemplate { get; set; }
|
||||
public int? PaddingLength { get; set; }
|
||||
}
|
||||
|
||||
public record GetAutoNumberSequenceListQuery() : IRequest<List<GetAutoNumberSequenceListResponse>>;
|
||||
|
||||
public class GetAutoNumberSequenceListHandler : IRequestHandler<GetAutoNumberSequenceListQuery, List<GetAutoNumberSequenceListResponse>>
|
||||
{
|
||||
private readonly AppDbContext _context;
|
||||
|
||||
public GetAutoNumberSequenceListHandler(AppDbContext context) => _context = context;
|
||||
|
||||
public async Task<List<GetAutoNumberSequenceListResponse>> Handle(GetAutoNumberSequenceListQuery request, CancellationToken cancellationToken)
|
||||
{
|
||||
return await _context.AutoNumberSequence
|
||||
.AsNoTracking()
|
||||
.OrderBy(x => x.EntityName)
|
||||
.Select(x => new GetAutoNumberSequenceListResponse
|
||||
{
|
||||
Id = x.Id,
|
||||
EntityName = x.EntityName,
|
||||
Year = x.Year,
|
||||
Month = x.Month,
|
||||
CurrentSequence = x.CurrentSequence,
|
||||
PrefixTemplate = x.PrefixTemplate,
|
||||
SuffixTemplate = x.SuffixTemplate,
|
||||
PaddingLength = x.PaddingLength
|
||||
})
|
||||
.ToListAsync(cancellationToken);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
using Indotalent.Infrastructure.Database;
|
||||
using MediatR;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace Indotalent.Features.Setting.AutoNumberSequence.Cqrs;
|
||||
|
||||
public class UpdateAutoNumberSequenceRequest
|
||||
{
|
||||
public string? Id { get; set; }
|
||||
public string? EntityName { get; set; }
|
||||
public string? PrefixTemplate { get; set; }
|
||||
public string? SuffixTemplate { get; set; }
|
||||
}
|
||||
|
||||
public class UpdateAutoNumberSequenceResponse
|
||||
{
|
||||
public string? Id { get; set; }
|
||||
public bool Success { get; set; }
|
||||
}
|
||||
|
||||
public record UpdateAutoNumberSequenceCommand(UpdateAutoNumberSequenceRequest Data) : IRequest<UpdateAutoNumberSequenceResponse>;
|
||||
|
||||
public class UpdateAutoNumberSequenceHandler : IRequestHandler<UpdateAutoNumberSequenceCommand, UpdateAutoNumberSequenceResponse>
|
||||
{
|
||||
private readonly AppDbContext _context;
|
||||
public UpdateAutoNumberSequenceHandler(AppDbContext context) => _context = context;
|
||||
|
||||
public async Task<UpdateAutoNumberSequenceResponse> Handle(UpdateAutoNumberSequenceCommand request, CancellationToken cancellationToken)
|
||||
{
|
||||
var entity = await _context.Set<Data.Entities.AutoNumberSequence>()
|
||||
.FirstOrDefaultAsync(x => x.Id == request.Data.Id, cancellationToken);
|
||||
|
||||
if (entity == null) return new UpdateAutoNumberSequenceResponse { Id = request.Data.Id, Success = false };
|
||||
|
||||
entity.PrefixTemplate = request.Data.PrefixTemplate;
|
||||
entity.SuffixTemplate = request.Data.SuffixTemplate;
|
||||
|
||||
await _context.SaveChangesAsync(cancellationToken);
|
||||
return new UpdateAutoNumberSequenceResponse { Id = entity.Id, Success = true };
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using FluentValidation;
|
||||
using Indotalent.Shared.Consts;
|
||||
|
||||
namespace Indotalent.Features.Setting.AutoNumberSequence.Cqrs;
|
||||
|
||||
public class UpdateAutoNumberSequenceValidator : AbstractValidator<UpdateAutoNumberSequenceRequest>
|
||||
{
|
||||
public UpdateAutoNumberSequenceValidator()
|
||||
{
|
||||
RuleFor(x => x.Id).NotEmpty().WithMessage("ID is required");
|
||||
RuleFor(x => x.PrefixTemplate).MaximumLength(GlobalConsts.StringLengthShort);
|
||||
RuleFor(x => x.SuffixTemplate).MaximumLength(GlobalConsts.StringLengthShort);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user