Enhance code readability and maintainability by refactoring various components. Update formatting commands in CLAUDE.md for csharpier integration. Simplify method signatures in SegmentFiles, UploadLimits, and multiple endpoint classes for improved clarity. Adjust query handlers and command handlers to streamline parameter handling and enhance consistency across the application.
ci / build-backend (push) Successful in 2m8s
ci / build-frontend (push) Failing after 32s
ci / tests (push) Skipped
ci / sonar (push) Skipped

This commit is contained in:
Leonid Pershin
2026-07-27 01:20:55 +03:00
parent 5449c05b5b
commit 9d1c6d2fc3
81 changed files with 716 additions and 461 deletions
@@ -6,10 +6,8 @@ using TeleWave.Domain.Programming;
namespace TeleWave.Application.Programming.Groups.AddGroupElements;
public sealed class AddGroupElementsCommandHandler(
IAppDbContext dbContext,
GroupStatsService stats
) : ICommandHandler<AddGroupElementsCommand, Result<int>>
public sealed class AddGroupElementsCommandHandler(IAppDbContext dbContext, GroupStatsService stats)
: ICommandHandler<AddGroupElementsCommand, Result<int>>
{
public async Task<Result<int>> Handle(
AddGroupElementsCommand command,
@@ -8,7 +8,10 @@ namespace TeleWave.Application.Programming.Groups.CreateGroup;
public sealed class CreateGroupCommandHandler(IAppDbContext dbContext)
: ICommandHandler<CreateGroupCommand, Result<Guid>>
{
public Task<Result<Guid>> Handle(CreateGroupCommand command, CancellationToken cancellationToken)
public Task<Result<Guid>> Handle(
CreateGroupCommand command,
CancellationToken cancellationToken
)
{
var group = Group.Create(command.Name, command.Description);
dbContext.Groups.Add(group);
@@ -8,7 +8,10 @@ namespace TeleWave.Application.Programming.Groups.DeleteGroup;
public sealed class DeleteGroupCommandHandler(IAppDbContext dbContext)
: ICommandHandler<DeleteGroupCommand, Result>
{
public async Task<Result> Handle(DeleteGroupCommand command, CancellationToken cancellationToken)
public async Task<Result> Handle(
DeleteGroupCommand command,
CancellationToken cancellationToken
)
{
var group = await dbContext.Groups.FirstOrDefaultAsync(
g => g.Id == command.GroupId,
@@ -58,9 +58,7 @@ public sealed class FindGroupCandidatesQueryHandler(
}
var info = await resolver.ResolveAsync(elements, cancellationToken);
var inGroup = group
.Items.Select(i => (i.ElementKind, i.ElementId))
.ToHashSet();
var inGroup = group.Items.Select(i => (i.ElementKind, i.ElementId)).ToHashSet();
var result = new List<GroupCandidateDto>();
foreach (var (kind, id) in elements)
@@ -36,7 +36,8 @@ public sealed class GetGroupQueryHandler(IAppDbContext dbContext, GroupElementRe
i.ElementId,
// Элемент мог исчезнуть из библиотеки между чисткой и чтением — показываем прочерк,
// а не роняем весь экран группы.
element?.Name ?? "—",
element?.Name
?? "—",
i.Weight,
i.Position,
element?.UnitCount ?? 0,
@@ -27,7 +27,9 @@ public sealed record GroupElementInfo(
/// </summary>
public sealed class GroupElementResolver(IAppDbContext dbContext)
{
public async Task<IReadOnlyDictionary<(GroupElementKind Kind, Guid Id), GroupElementInfo>> ResolveAsync(
public async Task<
IReadOnlyDictionary<(GroupElementKind Kind, Guid Id), GroupElementInfo>
> ResolveAsync(
IEnumerable<(GroupElementKind Kind, Guid Id)> elements,
CancellationToken cancellationToken
)
@@ -126,7 +128,9 @@ public sealed class GroupElementResolver(IAppDbContext dbContext)
DurationOf(partAssets),
null,
// Рейтинг коллекции — самый строгий среди частей: по нему отбирают в детское время.
parts.Count == 0 ? null : parts.Max(p => p!.Audience),
parts.Count == 0
? null
: parts.Max(p => p!.Audience),
parts.Count == 0 ? null : parts.Min(p => p!.Year),
collection.PosterImageId
);
@@ -8,7 +8,10 @@ namespace TeleWave.Application.Programming.Groups.UpdateGroup;
public sealed class UpdateGroupCommandHandler(IAppDbContext dbContext)
: ICommandHandler<UpdateGroupCommand, Result>
{
public async Task<Result> Handle(UpdateGroupCommand command, CancellationToken cancellationToken)
public async Task<Result> Handle(
UpdateGroupCommand command,
CancellationToken cancellationToken
)
{
var group = await dbContext.Groups.FirstOrDefaultAsync(
g => g.Id == command.GroupId,
@@ -13,10 +13,18 @@ public sealed class UpdateGroupCommandValidator : AbstractValidator<UpdateGroupC
x => x.Filter is not null,
() =>
{
RuleFor(x => x.Filter!.YearMin).InclusiveBetween(1870, 2200).When(x => x.Filter!.YearMin is not null);
RuleFor(x => x.Filter!.YearMax).InclusiveBetween(1870, 2200).When(x => x.Filter!.YearMax is not null);
RuleFor(x => x.Filter!.UnitMinutesMin).GreaterThanOrEqualTo(0).When(x => x.Filter!.UnitMinutesMin is not null);
RuleFor(x => x.Filter!.UnitMinutesMax).GreaterThanOrEqualTo(0).When(x => x.Filter!.UnitMinutesMax is not null);
RuleFor(x => x.Filter!.YearMin)
.InclusiveBetween(1870, 2200)
.When(x => x.Filter!.YearMin is not null);
RuleFor(x => x.Filter!.YearMax)
.InclusiveBetween(1870, 2200)
.When(x => x.Filter!.YearMax is not null);
RuleFor(x => x.Filter!.UnitMinutesMin)
.GreaterThanOrEqualTo(0)
.When(x => x.Filter!.UnitMinutesMin is not null);
RuleFor(x => x.Filter!.UnitMinutesMax)
.GreaterThanOrEqualTo(0)
.When(x => x.Filter!.UnitMinutesMax is not null);
}
);
}