Skip to content

refactor(config): make service defaults REST-only - #338

Merged
DIvanCode merged 3 commits into
masterfrom
codex/issue-119-duely-production-config
Aug 10, 2026
Merged

refactor(config): make service defaults REST-only#338
DIvanCode merged 3 commits into
masterfrom
codex/issue-119-duely-production-config

Conversation

@DIvanCode

@DIvanCodeDIvanCode commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Что изменено

  • удалён Duely/src/Duely/appsettings.Production.json;
  • production-отличия Duely перенесены в Ansible deploy без дублирования базовых значений;
  • базовая конфигурация Duely использует REST polling для Taski и Exesh и больше не содержит Kafka-секцию;
  • Taski default config использует event_consumer.mode: rest и message_dispatcher.kafka_enabled: false;
  • Exesh default config использует dispatcher.kafka_enabled: false;
  • неиспользуемые Kafka brokers/topics/SASL удалены из default и e2e configs;
  • Kafka-overrides удалены из production playbooks Duely, Taski и Exesh.

Зачем

REST является безопасным default transport для образов и deployment-конфигураций. Box и production больше не должны перечислять неиспользуемые Kafka endpoints и credentials.

Проверка

  • Taski: go test ./...;
  • Exesh: go test ./...;
  • Duely: dotnet test --configuration Release -m:1 — 445 тестов;
  • Taski–Exesh e2e — Accepted, exit 0;
  • изменённые YAML/Ansible-файлы успешно разобраны YAML parser.

Поддерживает DIvanCode/CoDuels#119.

@DIvanCodeDIvanCode changed the title refactor(duely): move production settings to deploymentrefactor(config): make service defaults REST-onlyAug 10, 2026
@DIvanCode
DIvanCode marked this pull request as ready for review August 10, 2026 10:34
@github-actions

Copy link
Copy Markdown

Summary

Summary
Generated on:08/10/2026 - 10:35:58
Coverage date:08/10/2026 - 10:35:10 - 08/10/2026 - 10:35:55
Parser:MultiReport (3x Cobertura)
Assemblies:4
Classes:252
Files:169
Line coverage:92.2% (4058 of 4399)
Covered lines:4058
Uncovered lines:341
Coverable lines:4399
Total lines:8949
Branch coverage:84.8% (848 of 999)
Covered branches:848
Total branches:999
Method coverage:Feature is only available for sponsors
Tag:158_31379724128

Coverage

Duely.Application.Services - 88.3%
NameLineBranch
Duely.Application.Services88.3%100%
Duely.Application.Services.Errors.AuthenticationError100%
Duely.Application.Services.Errors.EntityAlreadyExistsError33.3%
Duely.Application.Services.Errors.EntityNotFoundError33.3%
Duely.Application.Services.Errors.ForbiddenError66.6%
Duely.Application.Services.Errors.RateLimitExceededError100%
Duely.Application.Services.Outbox.ExecuteOutboxMessageCommand100%
Duely.Application.Services.Outbox.ExecuteOutboxMessageHandler100%
Duely.Application.Services.Outbox.Handlers.RunCodeOutboxHandler100%100%
Duely.Application.Services.Outbox.Handlers.SendMessageOutboxHandler100%
Duely.Application.Services.Outbox.Handlers.TestSolutionHandler100%
Duely.Application.Services.Outbox.Relay.OutboxDispatcher100%100%
Duely.Application.Services.RateLimiting.RateLimitingOptions100%
Duely.Application.Services.RateLimiting.RunUserCodeLimiter100%
Duely.Application.Services.RateLimiting.SubmissionRateLimiter100%
Duely.Application.UseCases - 92.4%
NameLineBranch
Duely.Application.UseCases92.4%85.3%
Duely.Application.UseCases.Dtos.AdminSubmissionListItemDto100%
Duely.Application.UseCases.Dtos.CodeRunDto100%
Duely.Application.UseCases.Dtos.DuelConfigurationDto100%
Duely.Application.UseCases.Dtos.DuelDto100%
Duely.Application.UseCases.Dtos.DuelInvitationDto100%
Duely.Application.UseCases.Dtos.DuelTaskConfigurationDto100%
Duely.Application.UseCases.Dtos.DuelTaskDto100%
Duely.Application.UseCases.Dtos.DuelTaskSolutionDto100%
Duely.Application.UseCases.Dtos.GroupDto100%
Duely.Application.UseCases.Dtos.GroupDuelDto100%
Duely.Application.UseCases.Dtos.GroupDuelInvitationDto100%
Duely.Application.UseCases.Dtos.GroupInvitationDto100%
Duely.Application.UseCases.Dtos.GroupListItemDto100%
Duely.Application.UseCases.Dtos.GroupStageDto0%
Duely.Application.UseCases.Dtos.GroupStageDuelDto0%
Duely.Application.UseCases.Dtos.GroupStageStandingDto0%
Duely.Application.UseCases.Dtos.GroupUserDto100%
Duely.Application.UseCases.Dtos.PendingDuelDto100%
Duely.Application.UseCases.Dtos.RankedDuelSearcherDto100%
Duely.Application.UseCases.Dtos.SingleEliminationBracketDto100%
Duely.Application.UseCases.Dtos.SingleEliminationBracketNodeDto100%
Duely.Application.UseCases.Dtos.SubmissionDto100%
Duely.Application.UseCases.Dtos.SubmissionListItemDto100%
Duely.Application.UseCases.Dtos.TicketDto100%
Duely.Application.UseCases.Dtos.TokenDto100%
Duely.Application.UseCases.Dtos.TournamentDetailsDto66.6%
Duely.Application.UseCases.Dtos.TournamentDto100%
Duely.Application.UseCases.Dtos.TournamentDuelInvitationDto100%
Duely.Application.UseCases.Dtos.UserDto100%
Duely.Application.UseCases.Features.CodeRuns.CreateCodeRunCommand100%
Duely.Application.UseCases.Features.CodeRuns.CreateCodeRunCommandValidator0%0%
Duely.Application.UseCases.Features.CodeRuns.CreateCodeRunHandler100%100%
Duely.Application.UseCases.Features.CodeRuns.GetCodeRunHandler100%100%
Duely.Application.UseCases.Features.CodeRuns.GetCodeRunQuery100%
Duely.Application.UseCases.Features.CodeRuns.UpdateCodeRunCommand100%
Duely.Application.UseCases.Features.CodeRuns.UpdateCodeRunHandler98.1%94.7%
Duely.Application.UseCases.Features.DuelConfigurations.CreateDuelConfigurat
ionCommand
100%
Duely.Application.UseCases.Features.DuelConfigurations.CreateDuelConfigurat
ionCommandValidator
96.7%66.6%
Duely.Application.UseCases.Features.DuelConfigurations.CreateDuelConfigurat
ionHandler
100%100%
Duely.Application.UseCases.Features.DuelConfigurations.DeleteDuelConfigurat
ionCommand
100%
Duely.Application.UseCases.Features.DuelConfigurations.DeleteDuelConfigurat
ionHandler
100%100%
Duely.Application.UseCases.Features.DuelConfigurations.GetDuelConfiguration
Handler
100%100%
Duely.Application.UseCases.Features.DuelConfigurations.GetDuelConfiguration
Query
100%
Duely.Application.UseCases.Features.DuelConfigurations.GetUserDuelConfigura
tionsHandler
100%
Duely.Application.UseCases.Features.DuelConfigurations.GetUserDuelConfigura
tionsQuery
100%
Duely.Application.UseCases.Features.DuelConfigurations.UpdateDuelConfigurat
ionCommand
100%
Duely.Application.UseCases.Features.DuelConfigurations.UpdateDuelConfigurat
ionCommandValidator
96.7%50%
Duely.Application.UseCases.Features.DuelConfigurations.UpdateDuelConfigurat
ionHandler
100%100%
Duely.Application.UseCases.Features.Duels.CancelPendingDuelsCommand100%
Duely.Application.UseCases.Features.Duels.CancelPendingDuelsHandler97.3%80%
Duely.Application.UseCases.Features.Duels.CheckDuelsForAnticheatCommand100%
Duely.Application.UseCases.Features.Duels.CheckDuelsForAnticheatHandler89.7%75%
Duely.Application.UseCases.Features.Duels.CheckDuelsForFinishHandler100%89.2%
Duely.Application.UseCases.Features.Duels.GetActiveDuelHandler100%100%
Duely.Application.UseCases.Features.Duels.GetActiveDuelQuery100%
Duely.Application.UseCases.Features.Duels.GetDuelHandler95%77.2%
Duely.Application.UseCases.Features.Duels.GetDuelQuery100%
Duely.Application.UseCases.Features.Duels.GetDuelsByStatusHandler100%
Duely.Application.UseCases.Features.Duels.GetDuelsByStatusQuery100%
Duely.Application.UseCases.Features.Duels.GetDuelsHistoryHandler100%100%
Duely.Application.UseCases.Features.Duels.GetDuelsHistoryQuery100%
Duely.Application.UseCases.Features.Duels.GetGroupDuelsHandler98.3%75%
Duely.Application.UseCases.Features.Duels.GetGroupDuelsQuery100%
Duely.Application.UseCases.Features.Duels.GetPendingDuelsHandler100%
Duely.Application.UseCases.Features.Duels.GetRankedDuelSearchersHandler100%
Duely.Application.UseCases.Features.Duels.Invitations.AcceptDuelInvitationC
ommand
100%
Duely.Application.UseCases.Features.Duels.Invitations.AcceptDuelInvitationH
andler
100%92.8%
Duely.Application.UseCases.Features.Duels.Invitations.AcceptGroupDuelInvita
tionCommand
100%
Duely.Application.UseCases.Features.Duels.Invitations.AcceptGroupDuelInvita
tionHandler
100%92.8%
Duely.Application.UseCases.Features.Duels.Invitations.CancelDuelInvitationC
ommand
100%
Duely.Application.UseCases.Features.Duels.Invitations.CancelDuelInvitationH
andler
100%100%
Duely.Application.UseCases.Features.Duels.Invitations.CancelGroupDuelInvita
tionCommand
100%
Duely.Application.UseCases.Features.Duels.Invitations.CancelGroupDuelInvita
tionHandler
100%100%
Duely.Application.UseCases.Features.Duels.Invitations.CreateDuelInvitationC
ommand
100%
Duely.Application.UseCases.Features.Duels.Invitations.CreateDuelInvitationH
andler
100%91.6%
Duely.Application.UseCases.Features.Duels.Invitations.CreateGroupDuelInvita
tionCommand
100%
Duely.Application.UseCases.Features.Duels.Invitations.CreateGroupDuelInvita
tionHandler
100%100%
Duely.Application.UseCases.Features.Duels.Invitations.DenyDuelInvitationCom
mand
100%
Duely.Application.UseCases.Features.Duels.Invitations.DenyDuelInvitationHan
dler
100%100%
Duely.Application.UseCases.Features.Duels.Invitations.GetIncomingDuelInvita
tionsHandler
100%
Duely.Application.UseCases.Features.Duels.Invitations.GetIncomingDuelInvita
tionsQuery
100%
Duely.Application.UseCases.Features.Duels.Invitations.GetIncomingGroupDuelI
nvitationsHandler
100%
Duely.Application.UseCases.Features.Duels.Invitations.GetIncomingGroupDuelI
nvitationsQuery
100%
Duely.Application.UseCases.Features.Duels.Search.AddInactiveBotsToRankedSea
rchHandler
0%0%
Duely.Application.UseCases.Features.Duels.Search.StartDuelSearchCommand100%
Duely.Application.UseCases.Features.Duels.Search.StartDuelSearchHandler100%83.3%
Duely.Application.UseCases.Features.Duels.TryCreateDuelHandler94.6%90.9%
Duely.Application.UseCases.Features.Duels.UpdateDuelTaskSolutionCommand100%
Duely.Application.UseCases.Features.Duels.UpdateDuelTaskSolutionCommandVali
dator
0%
Duely.Application.UseCases.Features.Duels.UpdateDuelTaskSolutionHandler83.6%85.7%
Duely.Application.UseCases.Features.Groups.AcceptInviteCommand100%
Duely.Application.UseCases.Features.Groups.AcceptInviteHandler100%100%
Duely.Application.UseCases.Features.Groups.CancelInviteCommand100%
Duely.Application.UseCases.Features.Groups.CancelInviteHandler96.6%75%
Duely.Application.UseCases.Features.Groups.ChangeRoleCommand100%
Duely.Application.UseCases.Features.Groups.ChangeRoleHandler90.4%78.5%
Duely.Application.UseCases.Features.Groups.CreateGroupCommand100%
Duely.Application.UseCases.Features.Groups.CreateGroupCommandValidator0%
Duely.Application.UseCases.Features.Groups.CreateGroupHandler100%100%
Duely.Application.UseCases.Features.Groups.DenyInviteCommand100%
Duely.Application.UseCases.Features.Groups.DenyInviteHandler100%100%
Duely.Application.UseCases.Features.Groups.ExcludeUserCommand100%
Duely.Application.UseCases.Features.Groups.ExcludeUserHandler88.8%75%
Duely.Application.UseCases.Features.Groups.GetAllGroupsHandler100%
Duely.Application.UseCases.Features.Groups.GetGroupHandler100%100%
Duely.Application.UseCases.Features.Groups.GetGroupInvitationsHandler100%
Duely.Application.UseCases.Features.Groups.GetGroupInvitationsQuery100%
Duely.Application.UseCases.Features.Groups.GetGroupQuery100%
Duely.Application.UseCases.Features.Groups.GetGroupUsersHandler97.6%91.6%
Duely.Application.UseCases.Features.Groups.GetGroupUsersQuery100%
Duely.Application.UseCases.Features.Groups.GetUserGroupsHandler100%
Duely.Application.UseCases.Features.Groups.GetUserGroupsQuery100%
Duely.Application.UseCases.Features.Groups.InviteUserCommand100%
Duely.Application.UseCases.Features.Groups.InviteUserHandler95.9%83.3%
Duely.Application.UseCases.Features.Groups.LeaveGroupCommand100%
Duely.Application.UseCases.Features.Groups.LeaveGroupHandler100%100%
Duely.Application.UseCases.Features.Groups.UpdateGroupCommand100%
Duely.Application.UseCases.Features.Groups.UpdateGroupCommandValidator0%
Duely.Application.UseCases.Features.Groups.UpdateGroupHandler100%100%
Duely.Application.UseCases.Features.Submissions.GetAllSubmissionsHandler100%100%
Duely.Application.UseCases.Features.Submissions.GetAllSubmissionsQuery100%
Duely.Application.UseCases.Features.Submissions.GetSubmissionHandler95.2%87.5%
Duely.Application.UseCases.Features.Submissions.GetSubmissionQuery100%
Duely.Application.UseCases.Features.Submissions.GetUserSubmissionsHandler100%94.4%
Duely.Application.UseCases.Features.Submissions.GetUserSubmissionsQuery100%
Duely.Application.UseCases.Features.Submissions.SendSubmissionCommand83.3%
Duely.Application.UseCases.Features.Submissions.SendSubmissionHandler92.8%56.2%
Duely.Application.UseCases.Features.Submissions.UpdateSubmissionStatusComma
nd
100%
Duely.Application.UseCases.Features.Submissions.UpdateSubmissionStatusHandl
er
96%80%
Duely.Application.UseCases.Features.Tournaments.AcceptTournamentDuelCommand100%
Duely.Application.UseCases.Features.Tournaments.AcceptTournamentDuelHandler100%92.8%
Duely.Application.UseCases.Features.Tournaments.CreateTournamentCommand100%
Duely.Application.UseCases.Features.Tournaments.CreateTournamentCommandVali
dator
100%
Duely.Application.UseCases.Features.Tournaments.CreateTournamentHandler87.8%81.2%
Duely.Application.UseCases.Features.Tournaments.GetGroupTournamentsHandler96.2%90%
Duely.Application.UseCases.Features.Tournaments.GetGroupTournamentsQuery100%
Duely.Application.UseCases.Features.Tournaments.GetIncomingTournamentDuelIn
vitationsHandler
100%
Duely.Application.UseCases.Features.Tournaments.GetIncomingTournamentDuelIn
vitationsQuery
100%
Duely.Application.UseCases.Features.Tournaments.GetTournamentHandler94.2%62.5%
Duely.Application.UseCases.Features.Tournaments.GetTournamentQuery100%
Duely.Application.UseCases.Features.Tournaments.GetTournamentsByStateHandle
r
100%100%
Duely.Application.UseCases.Features.Tournaments.GetTournamentsByStateQuery100%
Duely.Application.UseCases.Features.Tournaments.StartTournamentCommand100%
Duely.Application.UseCases.Features.Tournaments.StartTournamentHandler95%87.5%
Duely.Application.UseCases.Features.Tournaments.SyncActiveTournamentsHandle
r
99.3%83.3%
Duely.Application.UseCases.Features.UserActions.GetUserActionsHandler100%
Duely.Application.UseCases.Features.UserActions.GetUserActionsQuery75%
Duely.Application.UseCases.Features.UserActions.GetUserActionsQueryValidato
r
0%
Duely.Application.UseCases.Features.UserActions.SaveUserActionsCommand66.6%
Duely.Application.UseCases.Features.UserActions.SaveUserActionsCommandValid
ator
0%
Duely.Application.UseCases.Features.UserActions.SaveUserActionsHandler100%100%
Duely.Application.UseCases.Features.UserActions.UserActionValidator0%
Duely.Application.UseCases.Features.Users.CreateTicketCommand100%
Duely.Application.UseCases.Features.Users.CreateTicketHandler94.7%66.6%
Duely.Application.UseCases.Features.Users.GetByNicknameHandler100%100%
Duely.Application.UseCases.Features.Users.GetHandler100%100%
Duely.Application.UseCases.Features.Users.GetUserByNicknameQuery100%
Duely.Application.UseCases.Features.Users.GetUserByTicketCommand100%
Duely.Application.UseCases.Features.Users.GetUserByTicketCommandValidator100%
Duely.Application.UseCases.Features.Users.GetUserByTicketHandler100%100%
Duely.Application.UseCases.Features.Users.GetUserQuery100%
Duely.Application.UseCases.Features.Users.GetUsersHandler100%100%
Duely.Application.UseCases.Features.Users.GetUsersQuery100%
Duely.Application.UseCases.Features.Users.LoginCommand100%
Duely.Application.UseCases.Features.Users.LoginHandler100%100%
Duely.Application.UseCases.Features.Users.RefreshTokenCommand100%
Duely.Application.UseCases.Features.Users.RefreshTokenHandler100%100%
Duely.Application.UseCases.Features.Users.RegisterCommand100%
Duely.Application.UseCases.Features.Users.RegisterCommandValidator100%
Duely.Application.UseCases.Features.Users.RegisterHandler100%100%
Duely.Application.UseCases.Helpers.DuelDtoMapper96%87.5%
Duely.Application.UseCases.Helpers.GroupStageTournamentDetailsMapper0%0%
Duely.Application.UseCases.Helpers.SingleEliminationBracketTournamentDetail
sMapper
100%100%
Duely.Application.UseCases.Helpers.TournamentDetailsMapperResolver100%
Duely.Application.UseCases.Helpers.TournamentDtoMapper100%100%
Duely.Domain.Models - 89%
NameLineBranch
Duely.Domain.Models89%****
Duely.Domain.Models.AnticheatScore100%
Duely.Domain.Models.CodeRun100%
Duely.Domain.Models.Duels.Duel100%
Duely.Domain.Models.Duels.DuelConfiguration100%
Duely.Domain.Models.Duels.DuelTask100%
Duely.Domain.Models.Duels.DuelTaskConfiguration100%
Duely.Domain.Models.Duels.DuelTaskSolution100%
Duely.Domain.Models.Duels.Pending.FriendlyPendingDuel100%
Duely.Domain.Models.Duels.Pending.GroupPendingDuel100%
Duely.Domain.Models.Duels.Pending.PendingDuel100%
Duely.Domain.Models.Duels.Pending.RankedPendingDuel100%
Duely.Domain.Models.Duels.Pending.TournamentPendingDuel100%
Duely.Domain.Models.Groups.Group100%
Duely.Domain.Models.Groups.GroupDuel100%
Duely.Domain.Models.Groups.GroupMembership100%
Duely.Domain.Models.Messages.CodeRunStatusUpdatedMessage100%
Duely.Domain.Models.Messages.DuelChangedMessage100%
Duely.Domain.Models.Messages.DuelFinishedMessage100%
Duely.Domain.Models.Messages.DuelInvitationCanceledMessage100%
Duely.Domain.Models.Messages.DuelInvitationDeniedMessage100%
Duely.Domain.Models.Messages.DuelInvitationMessage100%
Duely.Domain.Models.Messages.DuelStartedMessage100%
Duely.Domain.Models.Messages.GroupDuelInvitationCanceledMessage100%
Duely.Domain.Models.Messages.GroupDuelInvitationMessage100%
Duely.Domain.Models.Messages.GroupInvitationCanceledMessage100%
Duely.Domain.Models.Messages.GroupInvitationMessage100%
Duely.Domain.Models.Messages.OpponentSolutionUpdatedMessage100%
Duely.Domain.Models.Messages.SubmissionStatusUpdatedMessage100%
Duely.Domain.Models.Messages.TournamentDuelInvitationMessage100%
Duely.Domain.Models.Outbox.OutboxMessage71.4%
Duely.Domain.Models.Outbox.Payloads.RunCodePayload100%
Duely.Domain.Models.Outbox.Payloads.SendMessagePayload100%
Duely.Domain.Models.Outbox.Payloads.TestSolutionPayload100%
Duely.Domain.Models.Submission100%
Duely.Domain.Models.Tournaments.GroupStageTournament100%
Duely.Domain.Models.Tournaments.SingleEliminationBracketNode100%
Duely.Domain.Models.Tournaments.SingleEliminationBracketTournament100%
Duely.Domain.Models.Tournaments.Tournament100%
Duely.Domain.Models.Tournaments.TournamentParticipant100%
Duely.Domain.Models.User100%
Duely.Domain.Models.UserActions.ChooseLanguageUserAction50%
Duely.Domain.Models.UserActions.CutCodeUserAction0%
Duely.Domain.Models.UserActions.DeleteCodeUserAction0%
Duely.Domain.Models.UserActions.MoveCursorUserAction75%
Duely.Domain.Models.UserActions.PasteCodeUserAction0%
Duely.Domain.Models.UserActions.RunCustomTestUserAction0%
Duely.Domain.Models.UserActions.RunSampleTestUserAction0%
Duely.Domain.Models.UserActions.SubmitSolutionUserAction0%
Duely.Domain.Models.UserActions.UserAction85.7%
Duely.Domain.Models.UserActions.WriteCodeUserAction66.6%
Duely.Domain.Services - 93.1%
NameLineBranch
Duely.Domain.Services93.1%83.5%
Duely.Domain.Services.Duels.DuelManager95.9%91.3%
Duely.Domain.Services.Duels.DuelOptions100%
Duely.Domain.Services.Duels.DuelPair100%
Duely.Domain.Services.Duels.RatingManager96.3%86.3%
Duely.Domain.Services.Duels.RatingToTaskLevelMappingItem100%
Duely.Domain.Services.Duels.TaskService84.5%86.7%
Duely.Domain.Services.Groups.GroupPermissionsService97.1%82.6%
Duely.Domain.Services.Tournaments.GroupStageMatchmakingStrategy95.1%80%
Duely.Domain.Services.Tournaments.SingleEliminationBracketMatchmakingStrate
gy
93.6%77.4%
Duely.Domain.Services.Tournaments.TournamentMatchmakingStrategyResolver100%
Duely.Domain.Services.Tournaments.TournamentPendingDuelCandidate100%
Duely.Domain.Services.Users.JwtTokenOptions100%
Duely.Domain.Services.Users.TokenService100%

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:ca6cf8db32

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadExesh/config/coordinator.yml
@github-actions

Copy link
Copy Markdown

Summary

Summary
Generated on:08/10/2026 - 11:24:11
Coverage date:08/10/2026 - 11:23:22 - 08/10/2026 - 11:24:08
Parser:MultiReport (3x Cobertura)
Assemblies:4
Classes:252
Files:169
Line coverage:92.2% (4058 of 4399)
Covered lines:4058
Uncovered lines:341
Coverable lines:4399
Total lines:8949
Branch coverage:84.8% (848 of 999)
Covered branches:848
Total branches:999
Method coverage:Feature is only available for sponsors
Tag:158_31379724128

Coverage

Duely.Application.Services - 88.3%
NameLineBranch
Duely.Application.Services88.3%100%
Duely.Application.Services.Errors.AuthenticationError100%
Duely.Application.Services.Errors.EntityAlreadyExistsError33.3%
Duely.Application.Services.Errors.EntityNotFoundError33.3%
Duely.Application.Services.Errors.ForbiddenError66.6%
Duely.Application.Services.Errors.RateLimitExceededError100%
Duely.Application.Services.Outbox.ExecuteOutboxMessageCommand100%
Duely.Application.Services.Outbox.ExecuteOutboxMessageHandler100%
Duely.Application.Services.Outbox.Handlers.RunCodeOutboxHandler100%100%
Duely.Application.Services.Outbox.Handlers.SendMessageOutboxHandler100%
Duely.Application.Services.Outbox.Handlers.TestSolutionHandler100%
Duely.Application.Services.Outbox.Relay.OutboxDispatcher100%100%
Duely.Application.Services.RateLimiting.RateLimitingOptions100%
Duely.Application.Services.RateLimiting.RunUserCodeLimiter100%
Duely.Application.Services.RateLimiting.SubmissionRateLimiter100%
Duely.Application.UseCases - 92.4%
NameLineBranch
Duely.Application.UseCases92.4%85.3%
Duely.Application.UseCases.Dtos.AdminSubmissionListItemDto100%
Duely.Application.UseCases.Dtos.CodeRunDto100%
Duely.Application.UseCases.Dtos.DuelConfigurationDto100%
Duely.Application.UseCases.Dtos.DuelDto100%
Duely.Application.UseCases.Dtos.DuelInvitationDto100%
Duely.Application.UseCases.Dtos.DuelTaskConfigurationDto100%
Duely.Application.UseCases.Dtos.DuelTaskDto100%
Duely.Application.UseCases.Dtos.DuelTaskSolutionDto100%
Duely.Application.UseCases.Dtos.GroupDto100%
Duely.Application.UseCases.Dtos.GroupDuelDto100%
Duely.Application.UseCases.Dtos.GroupDuelInvitationDto100%
Duely.Application.UseCases.Dtos.GroupInvitationDto100%
Duely.Application.UseCases.Dtos.GroupListItemDto100%
Duely.Application.UseCases.Dtos.GroupStageDto0%
Duely.Application.UseCases.Dtos.GroupStageDuelDto0%
Duely.Application.UseCases.Dtos.GroupStageStandingDto0%
Duely.Application.UseCases.Dtos.GroupUserDto100%
Duely.Application.UseCases.Dtos.PendingDuelDto100%
Duely.Application.UseCases.Dtos.RankedDuelSearcherDto100%
Duely.Application.UseCases.Dtos.SingleEliminationBracketDto100%
Duely.Application.UseCases.Dtos.SingleEliminationBracketNodeDto100%
Duely.Application.UseCases.Dtos.SubmissionDto100%
Duely.Application.UseCases.Dtos.SubmissionListItemDto100%
Duely.Application.UseCases.Dtos.TicketDto100%
Duely.Application.UseCases.Dtos.TokenDto100%
Duely.Application.UseCases.Dtos.TournamentDetailsDto66.6%
Duely.Application.UseCases.Dtos.TournamentDto100%
Duely.Application.UseCases.Dtos.TournamentDuelInvitationDto100%
Duely.Application.UseCases.Dtos.UserDto100%
Duely.Application.UseCases.Features.CodeRuns.CreateCodeRunCommand100%
Duely.Application.UseCases.Features.CodeRuns.CreateCodeRunCommandValidator0%0%
Duely.Application.UseCases.Features.CodeRuns.CreateCodeRunHandler100%100%
Duely.Application.UseCases.Features.CodeRuns.GetCodeRunHandler100%100%
Duely.Application.UseCases.Features.CodeRuns.GetCodeRunQuery100%
Duely.Application.UseCases.Features.CodeRuns.UpdateCodeRunCommand100%
Duely.Application.UseCases.Features.CodeRuns.UpdateCodeRunHandler98.1%94.7%
Duely.Application.UseCases.Features.DuelConfigurations.CreateDuelConfigurat
ionCommand
100%
Duely.Application.UseCases.Features.DuelConfigurations.CreateDuelConfigurat
ionCommandValidator
96.7%66.6%
Duely.Application.UseCases.Features.DuelConfigurations.CreateDuelConfigurat
ionHandler
100%100%
Duely.Application.UseCases.Features.DuelConfigurations.DeleteDuelConfigurat
ionCommand
100%
Duely.Application.UseCases.Features.DuelConfigurations.DeleteDuelConfigurat
ionHandler
100%100%
Duely.Application.UseCases.Features.DuelConfigurations.GetDuelConfiguration
Handler
100%100%
Duely.Application.UseCases.Features.DuelConfigurations.GetDuelConfiguration
Query
100%
Duely.Application.UseCases.Features.DuelConfigurations.GetUserDuelConfigura
tionsHandler
100%
Duely.Application.UseCases.Features.DuelConfigurations.GetUserDuelConfigura
tionsQuery
100%
Duely.Application.UseCases.Features.DuelConfigurations.UpdateDuelConfigurat
ionCommand
100%
Duely.Application.UseCases.Features.DuelConfigurations.UpdateDuelConfigurat
ionCommandValidator
96.7%50%
Duely.Application.UseCases.Features.DuelConfigurations.UpdateDuelConfigurat
ionHandler
100%100%
Duely.Application.UseCases.Features.Duels.CancelPendingDuelsCommand100%
Duely.Application.UseCases.Features.Duels.CancelPendingDuelsHandler97.3%80%
Duely.Application.UseCases.Features.Duels.CheckDuelsForAnticheatCommand100%
Duely.Application.UseCases.Features.Duels.CheckDuelsForAnticheatHandler89.7%75%
Duely.Application.UseCases.Features.Duels.CheckDuelsForFinishHandler100%89.2%
Duely.Application.UseCases.Features.Duels.GetActiveDuelHandler100%100%
Duely.Application.UseCases.Features.Duels.GetActiveDuelQuery100%
Duely.Application.UseCases.Features.Duels.GetDuelHandler95%77.2%
Duely.Application.UseCases.Features.Duels.GetDuelQuery100%
Duely.Application.UseCases.Features.Duels.GetDuelsByStatusHandler100%
Duely.Application.UseCases.Features.Duels.GetDuelsByStatusQuery100%
Duely.Application.UseCases.Features.Duels.GetDuelsHistoryHandler100%100%
Duely.Application.UseCases.Features.Duels.GetDuelsHistoryQuery100%
Duely.Application.UseCases.Features.Duels.GetGroupDuelsHandler98.3%75%
Duely.Application.UseCases.Features.Duels.GetGroupDuelsQuery100%
Duely.Application.UseCases.Features.Duels.GetPendingDuelsHandler100%
Duely.Application.UseCases.Features.Duels.GetRankedDuelSearchersHandler100%
Duely.Application.UseCases.Features.Duels.Invitations.AcceptDuelInvitationC
ommand
100%
Duely.Application.UseCases.Features.Duels.Invitations.AcceptDuelInvitationH
andler
100%92.8%
Duely.Application.UseCases.Features.Duels.Invitations.AcceptGroupDuelInvita
tionCommand
100%
Duely.Application.UseCases.Features.Duels.Invitations.AcceptGroupDuelInvita
tionHandler
100%92.8%
Duely.Application.UseCases.Features.Duels.Invitations.CancelDuelInvitationC
ommand
100%
Duely.Application.UseCases.Features.Duels.Invitations.CancelDuelInvitationH
andler
100%100%
Duely.Application.UseCases.Features.Duels.Invitations.CancelGroupDuelInvita
tionCommand
100%
Duely.Application.UseCases.Features.Duels.Invitations.CancelGroupDuelInvita
tionHandler
100%100%
Duely.Application.UseCases.Features.Duels.Invitations.CreateDuelInvitationC
ommand
100%
Duely.Application.UseCases.Features.Duels.Invitations.CreateDuelInvitationH
andler
100%91.6%
Duely.Application.UseCases.Features.Duels.Invitations.CreateGroupDuelInvita
tionCommand
100%
Duely.Application.UseCases.Features.Duels.Invitations.CreateGroupDuelInvita
tionHandler
100%100%
Duely.Application.UseCases.Features.Duels.Invitations.DenyDuelInvitationCom
mand
100%
Duely.Application.UseCases.Features.Duels.Invitations.DenyDuelInvitationHan
dler
100%100%
Duely.Application.UseCases.Features.Duels.Invitations.GetIncomingDuelInvita
tionsHandler
100%
Duely.Application.UseCases.Features.Duels.Invitations.GetIncomingDuelInvita
tionsQuery
100%
Duely.Application.UseCases.Features.Duels.Invitations.GetIncomingGroupDuelI
nvitationsHandler
100%
Duely.Application.UseCases.Features.Duels.Invitations.GetIncomingGroupDuelI
nvitationsQuery
100%
Duely.Application.UseCases.Features.Duels.Search.AddInactiveBotsToRankedSea
rchHandler
0%0%
Duely.Application.UseCases.Features.Duels.Search.StartDuelSearchCommand100%
Duely.Application.UseCases.Features.Duels.Search.StartDuelSearchHandler100%83.3%
Duely.Application.UseCases.Features.Duels.TryCreateDuelHandler94.6%90.9%
Duely.Application.UseCases.Features.Duels.UpdateDuelTaskSolutionCommand100%
Duely.Application.UseCases.Features.Duels.UpdateDuelTaskSolutionCommandVali
dator
0%
Duely.Application.UseCases.Features.Duels.UpdateDuelTaskSolutionHandler83.6%85.7%
Duely.Application.UseCases.Features.Groups.AcceptInviteCommand100%
Duely.Application.UseCases.Features.Groups.AcceptInviteHandler100%100%
Duely.Application.UseCases.Features.Groups.CancelInviteCommand100%
Duely.Application.UseCases.Features.Groups.CancelInviteHandler96.6%75%
Duely.Application.UseCases.Features.Groups.ChangeRoleCommand100%
Duely.Application.UseCases.Features.Groups.ChangeRoleHandler90.4%78.5%
Duely.Application.UseCases.Features.Groups.CreateGroupCommand100%
Duely.Application.UseCases.Features.Groups.CreateGroupCommandValidator0%
Duely.Application.UseCases.Features.Groups.CreateGroupHandler100%100%
Duely.Application.UseCases.Features.Groups.DenyInviteCommand100%
Duely.Application.UseCases.Features.Groups.DenyInviteHandler100%100%
Duely.Application.UseCases.Features.Groups.ExcludeUserCommand100%
Duely.Application.UseCases.Features.Groups.ExcludeUserHandler88.8%75%
Duely.Application.UseCases.Features.Groups.GetAllGroupsHandler100%
Duely.Application.UseCases.Features.Groups.GetGroupHandler100%100%
Duely.Application.UseCases.Features.Groups.GetGroupInvitationsHandler100%
Duely.Application.UseCases.Features.Groups.GetGroupInvitationsQuery100%
Duely.Application.UseCases.Features.Groups.GetGroupQuery100%
Duely.Application.UseCases.Features.Groups.GetGroupUsersHandler97.6%91.6%
Duely.Application.UseCases.Features.Groups.GetGroupUsersQuery100%
Duely.Application.UseCases.Features.Groups.GetUserGroupsHandler100%
Duely.Application.UseCases.Features.Groups.GetUserGroupsQuery100%
Duely.Application.UseCases.Features.Groups.InviteUserCommand100%
Duely.Application.UseCases.Features.Groups.InviteUserHandler95.9%83.3%
Duely.Application.UseCases.Features.Groups.LeaveGroupCommand100%
Duely.Application.UseCases.Features.Groups.LeaveGroupHandler100%100%
Duely.Application.UseCases.Features.Groups.UpdateGroupCommand100%
Duely.Application.UseCases.Features.Groups.UpdateGroupCommandValidator0%
Duely.Application.UseCases.Features.Groups.UpdateGroupHandler100%100%
Duely.Application.UseCases.Features.Submissions.GetAllSubmissionsHandler100%100%
Duely.Application.UseCases.Features.Submissions.GetAllSubmissionsQuery100%
Duely.Application.UseCases.Features.Submissions.GetSubmissionHandler95.2%87.5%
Duely.Application.UseCases.Features.Submissions.GetSubmissionQuery100%
Duely.Application.UseCases.Features.Submissions.GetUserSubmissionsHandler100%94.4%
Duely.Application.UseCases.Features.Submissions.GetUserSubmissionsQuery100%
Duely.Application.UseCases.Features.Submissions.SendSubmissionCommand83.3%
Duely.Application.UseCases.Features.Submissions.SendSubmissionHandler92.8%56.2%
Duely.Application.UseCases.Features.Submissions.UpdateSubmissionStatusComma
nd
100%
Duely.Application.UseCases.Features.Submissions.UpdateSubmissionStatusHandl
er
96%80%
Duely.Application.UseCases.Features.Tournaments.AcceptTournamentDuelCommand100%
Duely.Application.UseCases.Features.Tournaments.AcceptTournamentDuelHandler100%92.8%
Duely.Application.UseCases.Features.Tournaments.CreateTournamentCommand100%
Duely.Application.UseCases.Features.Tournaments.CreateTournamentCommandVali
dator
100%
Duely.Application.UseCases.Features.Tournaments.CreateTournamentHandler87.8%81.2%
Duely.Application.UseCases.Features.Tournaments.GetGroupTournamentsHandler96.2%90%
Duely.Application.UseCases.Features.Tournaments.GetGroupTournamentsQuery100%
Duely.Application.UseCases.Features.Tournaments.GetIncomingTournamentDuelIn
vitationsHandler
100%
Duely.Application.UseCases.Features.Tournaments.GetIncomingTournamentDuelIn
vitationsQuery
100%
Duely.Application.UseCases.Features.Tournaments.GetTournamentHandler94.2%62.5%
Duely.Application.UseCases.Features.Tournaments.GetTournamentQuery100%
Duely.Application.UseCases.Features.Tournaments.GetTournamentsByStateHandle
r
100%100%
Duely.Application.UseCases.Features.Tournaments.GetTournamentsByStateQuery100%
Duely.Application.UseCases.Features.Tournaments.StartTournamentCommand100%
Duely.Application.UseCases.Features.Tournaments.StartTournamentHandler95%87.5%
Duely.Application.UseCases.Features.Tournaments.SyncActiveTournamentsHandle
r
99.3%83.3%
Duely.Application.UseCases.Features.UserActions.GetUserActionsHandler100%
Duely.Application.UseCases.Features.UserActions.GetUserActionsQuery75%
Duely.Application.UseCases.Features.UserActions.GetUserActionsQueryValidato
r
0%
Duely.Application.UseCases.Features.UserActions.SaveUserActionsCommand66.6%
Duely.Application.UseCases.Features.UserActions.SaveUserActionsCommandValid
ator
0%
Duely.Application.UseCases.Features.UserActions.SaveUserActionsHandler100%100%
Duely.Application.UseCases.Features.UserActions.UserActionValidator0%
Duely.Application.UseCases.Features.Users.CreateTicketCommand100%
Duely.Application.UseCases.Features.Users.CreateTicketHandler94.7%66.6%
Duely.Application.UseCases.Features.Users.GetByNicknameHandler100%100%
Duely.Application.UseCases.Features.Users.GetHandler100%100%
Duely.Application.UseCases.Features.Users.GetUserByNicknameQuery100%
Duely.Application.UseCases.Features.Users.GetUserByTicketCommand100%
Duely.Application.UseCases.Features.Users.GetUserByTicketCommandValidator100%
Duely.Application.UseCases.Features.Users.GetUserByTicketHandler100%100%
Duely.Application.UseCases.Features.Users.GetUserQuery100%
Duely.Application.UseCases.Features.Users.GetUsersHandler100%100%
Duely.Application.UseCases.Features.Users.GetUsersQuery100%
Duely.Application.UseCases.Features.Users.LoginCommand100%
Duely.Application.UseCases.Features.Users.LoginHandler100%100%
Duely.Application.UseCases.Features.Users.RefreshTokenCommand100%
Duely.Application.UseCases.Features.Users.RefreshTokenHandler100%100%
Duely.Application.UseCases.Features.Users.RegisterCommand100%
Duely.Application.UseCases.Features.Users.RegisterCommandValidator100%
Duely.Application.UseCases.Features.Users.RegisterHandler100%100%
Duely.Application.UseCases.Helpers.DuelDtoMapper96%87.5%
Duely.Application.UseCases.Helpers.GroupStageTournamentDetailsMapper0%0%
Duely.Application.UseCases.Helpers.SingleEliminationBracketTournamentDetail
sMapper
100%100%
Duely.Application.UseCases.Helpers.TournamentDetailsMapperResolver100%
Duely.Application.UseCases.Helpers.TournamentDtoMapper100%100%
Duely.Domain.Models - 89%
NameLineBranch
Duely.Domain.Models89%****
Duely.Domain.Models.AnticheatScore100%
Duely.Domain.Models.CodeRun100%
Duely.Domain.Models.Duels.Duel100%
Duely.Domain.Models.Duels.DuelConfiguration100%
Duely.Domain.Models.Duels.DuelTask100%
Duely.Domain.Models.Duels.DuelTaskConfiguration100%
Duely.Domain.Models.Duels.DuelTaskSolution100%
Duely.Domain.Models.Duels.Pending.FriendlyPendingDuel100%
Duely.Domain.Models.Duels.Pending.GroupPendingDuel100%
Duely.Domain.Models.Duels.Pending.PendingDuel100%
Duely.Domain.Models.Duels.Pending.RankedPendingDuel100%
Duely.Domain.Models.Duels.Pending.TournamentPendingDuel100%
Duely.Domain.Models.Groups.Group100%
Duely.Domain.Models.Groups.GroupDuel100%
Duely.Domain.Models.Groups.GroupMembership100%
Duely.Domain.Models.Messages.CodeRunStatusUpdatedMessage100%
Duely.Domain.Models.Messages.DuelChangedMessage100%
Duely.Domain.Models.Messages.DuelFinishedMessage100%
Duely.Domain.Models.Messages.DuelInvitationCanceledMessage100%
Duely.Domain.Models.Messages.DuelInvitationDeniedMessage100%
Duely.Domain.Models.Messages.DuelInvitationMessage100%
Duely.Domain.Models.Messages.DuelStartedMessage100%
Duely.Domain.Models.Messages.GroupDuelInvitationCanceledMessage100%
Duely.Domain.Models.Messages.GroupDuelInvitationMessage100%
Duely.Domain.Models.Messages.GroupInvitationCanceledMessage100%
Duely.Domain.Models.Messages.GroupInvitationMessage100%
Duely.Domain.Models.Messages.OpponentSolutionUpdatedMessage100%
Duely.Domain.Models.Messages.SubmissionStatusUpdatedMessage100%
Duely.Domain.Models.Messages.TournamentDuelInvitationMessage100%
Duely.Domain.Models.Outbox.OutboxMessage71.4%
Duely.Domain.Models.Outbox.Payloads.RunCodePayload100%
Duely.Domain.Models.Outbox.Payloads.SendMessagePayload100%
Duely.Domain.Models.Outbox.Payloads.TestSolutionPayload100%
Duely.Domain.Models.Submission100%
Duely.Domain.Models.Tournaments.GroupStageTournament100%
Duely.Domain.Models.Tournaments.SingleEliminationBracketNode100%
Duely.Domain.Models.Tournaments.SingleEliminationBracketTournament100%
Duely.Domain.Models.Tournaments.Tournament100%
Duely.Domain.Models.Tournaments.TournamentParticipant100%
Duely.Domain.Models.User100%
Duely.Domain.Models.UserActions.ChooseLanguageUserAction50%
Duely.Domain.Models.UserActions.CutCodeUserAction0%
Duely.Domain.Models.UserActions.DeleteCodeUserAction0%
Duely.Domain.Models.UserActions.MoveCursorUserAction75%
Duely.Domain.Models.UserActions.PasteCodeUserAction0%
Duely.Domain.Models.UserActions.RunCustomTestUserAction0%
Duely.Domain.Models.UserActions.RunSampleTestUserAction0%
Duely.Domain.Models.UserActions.SubmitSolutionUserAction0%
Duely.Domain.Models.UserActions.UserAction85.7%
Duely.Domain.Models.UserActions.WriteCodeUserAction66.6%
Duely.Domain.Services - 93.1%
NameLineBranch
Duely.Domain.Services93.1%83.5%
Duely.Domain.Services.Duels.DuelManager95.9%91.3%
Duely.Domain.Services.Duels.DuelOptions100%
Duely.Domain.Services.Duels.DuelPair100%
Duely.Domain.Services.Duels.RatingManager96.3%86.3%
Duely.Domain.Services.Duels.RatingToTaskLevelMappingItem100%
Duely.Domain.Services.Duels.TaskService84.5%86.7%
Duely.Domain.Services.Groups.GroupPermissionsService97.1%82.6%
Duely.Domain.Services.Tournaments.GroupStageMatchmakingStrategy95.1%80%
Duely.Domain.Services.Tournaments.SingleEliminationBracketMatchmakingStrate
gy
93.6%77.4%
Duely.Domain.Services.Tournaments.TournamentMatchmakingStrategyResolver100%
Duely.Domain.Services.Tournaments.TournamentPendingDuelCandidate100%
Duely.Domain.Services.Users.JwtTokenOptions100%
Duely.Domain.Services.Users.TokenService100%

@DIvanCode
DIvanCode merged commit eae9253 into masterAug 10, 2026
25 of 27 checks passed
@DIvanCode
DIvanCode deleted the codex/issue-119-duely-production-config branch August 10, 2026 11:31
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@DIvanCode