├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github ├── pull_request_template.md └── workflows │ ├── admin-dev-deploy.yml │ ├── admin-prod-deploy.yml │ ├── build-and-push.yml │ ├── deploy-dev-all.yml │ ├── deploy-prod-all.yml │ ├── deploy.yml │ ├── fe-dev-deploy.yml │ ├── fe-prod-deploy.yml │ ├── intergration-tests.yml │ ├── on_pr_build_all.yml │ ├── on_pr_merge_to_development.yml │ ├── on_pr_open.yml │ ├── on_pr_requested_changes.yml │ ├── playwright-tests.yml │ ├── ui-dev-deploy.yml │ ├── ui-prod-deploy.yml │ ├── update-linked-issues-status.yml │ ├── worker-dev-deploy.yml │ └── worker-prod-deploy.yml ├── .gitignore ├── Common └── OJS.Common │ ├── Constants │ └── ServiceConstants.cs │ ├── Enumerations │ ├── ContestExportResultType.cs │ ├── ContestQuestionType.cs │ ├── ContestType.cs │ ├── CrudOperationType.cs │ ├── MentorMessageRole.cs │ ├── OpenAiModels.cs │ ├── ProblemGroupType.cs │ ├── ProblemResourceType.cs │ ├── SettingType.cs │ ├── SimilarityCheckType.cs │ ├── SubmissionExportType.cs │ ├── SubmissionProcessingState.cs │ └── SubmissionStatus.cs │ ├── Exceptions │ ├── ExceptionResponse.cs │ └── ExceptionResponseModel.cs │ ├── Extensions │ ├── AssemblyExtensions.cs │ ├── DictionaryExtensions.cs │ ├── EnumExtensions.cs │ ├── EnumerableExtensions.cs │ ├── ExpressionExtensions.cs │ ├── FormFileExtensions.cs │ ├── NumbersExtensions.cs │ ├── OpenAiModelExtensions.cs │ ├── PrincipalExtensions.cs │ ├── RuleBuilderExtensions.cs │ ├── SimilarityCheckExtensions.cs │ ├── StreamExtensions.cs │ ├── Strings │ │ └── StringExtensions.cs │ ├── TypeExtensions.cs │ ├── ValidationResultExtensions.cs │ └── ZipArchiveExtensions.cs │ ├── GlobalConstants.cs │ ├── Helpers │ └── TransactionsHelper.cs │ ├── OJS.Common.csproj │ ├── Resources.cs │ └── Utils │ ├── CacheKeyGenerator.cs │ ├── Calculator.cs │ ├── EnumUtils.cs │ ├── ExpressionBuilder.cs │ └── TaskUtils.cs ├── Data ├── OJS.Data.Models │ ├── AccessLog.cs │ ├── Checkers │ │ └── Checker.cs │ ├── Common │ │ ├── AuditInfoEntity.cs │ │ ├── AuditInfoEntity{TId}.cs │ │ ├── DeletableAuditInfoEntity{TId}.cs │ │ ├── Entity{TId}.cs │ │ ├── IAuditInfoEntity.cs │ │ ├── IAuditInfoEntity{TId}.cs │ │ ├── IDeletableAuditInfoEntity.cs │ │ ├── IDeletableAuditInfoEntity{TId}.cs │ │ ├── IDeletableEntity.cs │ │ ├── IDeletableEntity{TId}.cs │ │ ├── IEntity.cs │ │ ├── IEntity{TId}.cs │ │ ├── IOrderableEntity.cs │ │ ├── IProcessedEntity.cs │ │ └── IVisibleEntity.cs │ ├── Contests │ │ ├── Contest.cs │ │ ├── ContestCategory.cs │ │ └── ExamGroup.cs │ ├── FeedbackReport.cs │ ├── Ip.cs │ ├── IpInContest.cs │ ├── LecturerInContest.cs │ ├── LecturerInContestCategory.cs │ ├── Mentor │ │ ├── MentorPromptTemplate.cs │ │ └── UserMentor.cs │ ├── OJS.Data.Models.csproj │ ├── Participants │ │ ├── Participant.cs │ │ └── ParticipantScore.cs │ ├── ProblemForParticipant.cs │ ├── Problems │ │ ├── Problem.cs │ │ ├── ProblemGroup.cs │ │ └── ProblemResource.cs │ ├── Setting.cs │ ├── SubmissionTypeInProblem.cs │ ├── SubmissionTypeInSubmissionDocument.cs │ ├── Submissions │ │ ├── Submission.cs │ │ ├── SubmissionForProcessing.cs │ │ ├── SubmissionType.cs │ │ └── SubmissionTypeDocument.cs │ ├── Tests │ │ ├── Test.cs │ │ └── TestRun.cs │ ├── UserInExamGroup.cs │ └── Users │ │ ├── Role.cs │ │ ├── UserInRole.cs │ │ ├── UserProfile.cs │ │ └── UserSettings.cs ├── OJS.Data.Validation │ ├── ConstraintConstants.cs │ └── OJS.Data.Validation.csproj └── OJS.Data │ ├── BaseAuthDbContext.cs │ ├── BaseIdentityDbContext.cs │ ├── Extensions │ └── ModelBuilderExtensions.cs │ ├── Migrations │ ├── 20240522120540_InitialMigration.Designer.cs │ ├── 20240522120540_InitialMigration.cs │ ├── 20240612123014_AddedWorkerNameToSubmission.Designer.cs │ ├── 20240612123014_AddedWorkerNameToSubmission.cs │ ├── 20240711203649_AddedTimeAndMemoryConstraintsInSubmissionType.Designer.cs │ ├── 20240711203649_AddedTimeAndMemoryConstraintsInSubmissionType.cs │ ├── 20240716061041_AddIsTrialToTestRun.Designer.cs │ ├── 20240716061041_AddIsTrialToTestRun.cs │ ├── 20240723131316_RemovedSerializedExecutionDetailsFromSubmissionForProcessingcessing.Designer.cs │ ├── 20240723131316_RemovedSerializedExecutionDetailsFromSubmissionForProcessingcessing.cs │ ├── 20240813115813_AddSubmissionTypeDocumentAndMappingTable.Designer.cs │ ├── 20240813115813_AddSubmissionTypeDocumentAndMappingTable.cs │ ├── 20240827161142_SetNullForEmptyFilesInProblemResources.Designer.cs │ ├── 20240827161142_SetNullForEmptyFilesInProblemResources.cs │ ├── 20240912125851_AddedProcessingStateToSubmissionForProcessing.Designer.cs │ ├── 20240912125851_AddedProcessingStateToSubmissionForProcessing.cs │ ├── 20241017040120_AddMaxTimeAndMemoryInTestRunsCache.Designer.cs │ ├── 20241017040120_AddMaxTimeAndMemoryInTestRunsCache.cs │ ├── 20241104103413_AddedDefaultSubmissionTypeForProblem.Designer.cs │ ├── 20241104103413_AddedDefaultSubmissionTypeForProblem.cs │ ├── 20241113191333_AddedLastSubmissionTimeInParticipant.Designer.cs │ ├── 20241113191333_AddedLastSubmissionTimeInParticipant.cs │ ├── 20241203094250_AddMentorTables.Designer.cs │ ├── 20241203094250_AddMentorTables.cs │ ├── 20241209065758_SetResourcesType3To1.Designer.cs │ ├── 20241209065758_SetResourcesType3To1.cs │ ├── 20250130064459_RemoveProblemShowResultsProperty.Designer.cs │ ├── 20250130064459_RemoveProblemShowResultsProperty.cs │ ├── 20250217074047_AddExceptionTypeToSubmission.Designer.cs │ ├── 20250217074047_AddExceptionTypeToSubmission.cs │ ├── 20250227163019_AddAutoLimitBetweenSubmissionsToContest.Designer.cs │ ├── 20250227163019_AddAutoLimitBetweenSubmissionsToContest.cs │ ├── 20250403075718_AddMentorTotalRequestsMade.Designer.cs │ ├── 20250403075718_AddMentorTotalRequestsMade.cs │ ├── 20250414073034_RemoveContestNumberOfProblemGroups.Designer.cs │ ├── 20250414073034_RemoveContestNumberOfProblemGroups.cs │ └── OjsDbContextModelSnapshot.cs │ ├── OJS.Data.csproj │ └── OjsDbContext.cs ├── Directory.Build.props ├── Docker ├── Dockerfile.administration ├── Dockerfile.fe ├── Dockerfile.ui ├── Dockerfile.worker ├── applications │ └── fe │ │ ├── conf.d │ │ ├── default.conf │ │ └── upstreams.conf │ │ └── ngnix.conf ├── envs │ ├── common.env │ └── worker.env └── worker_base │ ├── .gitignore │ ├── Dockerfile │ ├── java-21-spring-and-hibernate │ └── pom.xml │ ├── java-spring-and-hibernate │ └── pom.xml │ ├── java │ ├── build.gradle │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ └── gradlew.bat │ ├── js │ ├── chromium-scripts │ │ ├── LICENSE │ │ ├── README.md │ │ ├── run.sh │ │ ├── update-and-run.sh │ │ └── update.sh │ ├── setup_node.sh │ ├── v12 │ │ ├── js-run-spa-in-docker-and-execute-mocha-tests │ │ │ └── package.json │ │ └── package.json │ └── v20 │ │ ├── js-run-spa-in-docker-and-execute-mocha-tests │ │ └── package.json │ │ └── package.json │ └── python │ └── requirements.txt ├── OpenJudgeSystem.sln ├── PubSub └── OJS.PubSub.Worker.Models │ ├── OJS.PubSub.Worker.Models.csproj │ └── Submissions │ ├── ProcessedSubmissionPubSubModel.cs │ ├── RetestSubmissionPubSubModel.cs │ ├── SubmissionForProcessingPubSubModel.cs │ └── SubmissionStartedProcessingPubSubModel.cs ├── Servers ├── Administration │ └── OJS.Servers.Administration │ │ ├── Attributes │ │ └── ProtectedEntityActionAttribute.cs │ │ ├── Consumers │ │ └── RetestSubmissionConsumer.cs │ │ ├── ContestLimitBetweenSubmissionsHostedService.cs │ │ ├── Controllers │ │ ├── AccessLogsController.cs │ │ ├── BaseAdminApiController.cs │ │ ├── BaseAdminViewController.cs │ │ ├── CheckersController.cs │ │ ├── ContestCategoriesController.cs │ │ ├── ContestsController.cs │ │ ├── ContestsExternalController.cs │ │ ├── ExamGroupsController.cs │ │ ├── MentorController.cs │ │ ├── MentorPromptTemplatesController.cs │ │ ├── ParticipantsController.cs │ │ ├── ProblemGroupsController.cs │ │ ├── ProblemResourcesController.cs │ │ ├── ProblemsController.cs │ │ ├── RolesController.cs │ │ ├── SettingsController.cs │ │ ├── SubmissionTypeDocumentsController.cs │ │ ├── SubmissionTypesController.cs │ │ ├── SubmissionTypesInSubmissionDocumentsController.cs │ │ ├── SubmissionsController.cs │ │ ├── SubmissionsForProcessingController.cs │ │ ├── TestsController.cs │ │ └── UsersController.cs │ │ ├── Extensions │ │ ├── ServiceCollectionExtensions.cs │ │ ├── ServiceProviderExtensions.cs │ │ └── WebApplicationExtensions.cs │ │ ├── Filters │ │ └── EntityPermissionsFilter.cs │ │ ├── Middleware │ │ └── AdministrationExceptionMiddleware.cs │ │ ├── Models │ │ └── Problems │ │ │ ├── CopyAllToAnotherContestViewModel.cs │ │ │ ├── CopyToAnotherContestViewModel.cs │ │ │ └── DeleteAllProblemsInContestViewModel.cs │ │ ├── OJS.Servers.Administration.csproj │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── appsettings.Development.json │ │ ├── appsettings.json │ │ └── wwwroot │ │ └── contest-import.html ├── Infrastructure │ └── OJS.Servers.Infrastructure │ │ ├── Configurations │ │ ├── CircuitBreakerResilienceStrategyConfig.cs │ │ └── RetryResilienceStrategyConfig.cs │ │ ├── Controllers │ │ ├── BaseApiController.cs │ │ └── BaseViewController.cs │ │ ├── Extensions │ │ ├── ConfigurationExtensions.cs │ │ ├── FormFileExtensions.cs │ │ ├── GlobalDateFormatExtensions.cs │ │ ├── HostEnvironmentExtensions.cs │ │ ├── HttpExtensions.cs │ │ ├── ServiceCollectionExtensions.cs │ │ ├── ServiceProviderExtensions.cs │ │ ├── StringExtensions.cs │ │ ├── TaskExtensions.cs │ │ ├── ViewContextExtensions.cs │ │ ├── WebApplicationBuilderExtensions.cs │ │ └── WebApplicationExtensions.cs │ │ ├── Filters │ │ └── HangfireAuthorizationFilter.cs │ │ ├── Handlers │ │ ├── ApiKeyHandler.cs │ │ └── GlobalExceptionHandler.cs │ │ ├── Middleware │ │ └── CorrelationIdMiddleware.cs │ │ ├── OJS.Servers.Infrastructure.csproj │ │ ├── Policy │ │ └── ApiKeyRequirement.cs │ │ └── ServerConstants.cs ├── UI │ └── OJS.Servers.Ui │ │ ├── ClientApp │ │ ├── .dockerignore │ │ ├── .env.development.local │ │ ├── .env.production │ │ ├── .env.staging │ │ ├── .eslintrc.cjs │ │ ├── .stylelintrc.cjs │ │ ├── .swp │ │ ├── README.md │ │ ├── admin.html │ │ ├── build │ │ │ └── .gitignore │ │ ├── dist │ │ │ ├── .gitignore │ │ │ └── assets │ │ │ │ ├── index.1229d14f.js │ │ │ │ ├── index.8c6cad63.css │ │ │ │ └── index.a0428a88.js │ │ ├── index.html │ │ ├── package.json │ │ ├── public │ │ │ ├── admin-theme-init.js │ │ │ ├── client-theme-init.js │ │ │ ├── favicon.ico │ │ │ ├── manifest.json │ │ │ └── robots.txt │ │ ├── src │ │ │ ├── AdminApp.tsx │ │ │ ├── App.tsx │ │ │ ├── admin.tsx │ │ │ ├── assets │ │ │ │ ├── mentor.png │ │ │ │ ├── my-profile.svg │ │ │ │ ├── softuni-logo-horizontal-colored.svg │ │ │ │ └── softuni-logo-horizontal-white.svg │ │ │ ├── common │ │ │ │ ├── app-url-types.tsx │ │ │ │ ├── common-types.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── contest-helpers.ts │ │ │ │ ├── contest-types.ts │ │ │ │ ├── enums.ts │ │ │ │ ├── labels.ts │ │ │ │ ├── messages.ts │ │ │ │ ├── reduxNames.tsx │ │ │ │ ├── strategy-types.ts │ │ │ │ ├── submissions-utils.ts │ │ │ │ ├── types.ts │ │ │ │ ├── url-types.ts │ │ │ │ └── urls │ │ │ │ │ ├── administration-urls.ts │ │ │ │ │ ├── client-urls.ts │ │ │ │ │ └── compose-client-urls.ts │ │ │ ├── components │ │ │ │ ├── administration │ │ │ │ │ ├── checkers │ │ │ │ │ │ └── checker-form │ │ │ │ │ │ │ └── CheckerForm.tsx │ │ │ │ │ ├── common │ │ │ │ │ │ ├── administration-form-buttons │ │ │ │ │ │ │ └── AdministrationFormButtons.tsx │ │ │ │ │ │ ├── administration-grid-dropdown │ │ │ │ │ │ │ └── AdministrationGridDropdown.tsx │ │ │ │ │ │ ├── create │ │ │ │ │ │ │ └── CreateButton.tsx │ │ │ │ │ │ ├── delete │ │ │ │ │ │ │ └── DeleteButton.tsx │ │ │ │ │ │ ├── download │ │ │ │ │ │ │ └── DownloadIconButton.tsx │ │ │ │ │ │ ├── edit │ │ │ │ │ │ │ ├── QuickEditButton.tsx │ │ │ │ │ │ │ └── RedirectButton.tsx │ │ │ │ │ │ ├── export-excel │ │ │ │ │ │ │ ├── ExportExcel.module.scss │ │ │ │ │ │ │ └── ExportExcel.tsx │ │ │ │ │ │ ├── file-upload │ │ │ │ │ │ │ ├── FileUpload.module.scss │ │ │ │ │ │ │ └── FileUpload.tsx │ │ │ │ │ │ ├── lecturer-actions │ │ │ │ │ │ │ └── LecturerActions.tsx │ │ │ │ │ │ ├── lecturer │ │ │ │ │ │ │ └── lecturer-form │ │ │ │ │ │ │ │ └── LecturerForm.tsx │ │ │ │ │ │ ├── legend-box │ │ │ │ │ │ │ ├── LegendBox.module.scss │ │ │ │ │ │ │ └── LegendBox.tsx │ │ │ │ │ │ ├── modals │ │ │ │ │ │ │ └── administration-modal │ │ │ │ │ │ │ │ ├── AdministrationModal.module.scss │ │ │ │ │ │ │ │ └── AdministrationModal.tsx │ │ │ │ │ │ ├── styled-tooltip │ │ │ │ │ │ │ └── StyledTooltip.tsx │ │ │ │ │ │ ├── styles │ │ │ │ │ │ │ └── FormStyles.module.scss │ │ │ │ │ │ ├── submit-solution │ │ │ │ │ │ │ └── SubmitSolution.tsx │ │ │ │ │ │ ├── tabs │ │ │ │ │ │ │ └── TabsInView.tsx │ │ │ │ │ │ ├── transfer-participants │ │ │ │ │ │ │ └── TransferParticipantsButton.tsx │ │ │ │ │ │ ├── user-actions │ │ │ │ │ │ │ ├── UserActions.module.scss │ │ │ │ │ │ │ └── UserActions.tsx │ │ │ │ │ │ └── view │ │ │ │ │ │ │ └── ViewButton.tsx │ │ │ │ │ ├── contest-categories │ │ │ │ │ │ ├── CategoryEdit.module.scss │ │ │ │ │ │ └── CategoryEdit.tsx │ │ │ │ │ ├── contests │ │ │ │ │ │ ├── AdministrationContestPage.module.scss │ │ │ │ │ │ ├── AdministrationContestPage.tsx │ │ │ │ │ │ ├── contest-compete-practce-buttons │ │ │ │ │ │ │ └── ContestCompetePracticeButtons.tsx │ │ │ │ │ │ ├── contest-download-submissions │ │ │ │ │ │ │ └── ContestDownloadSubmissions.tsx │ │ │ │ │ │ ├── contest-edit │ │ │ │ │ │ │ ├── ContestEdit.module.scss │ │ │ │ │ │ │ └── ContestEdit.tsx │ │ │ │ │ │ ├── participants-in-contest-view │ │ │ │ │ │ │ └── ParticipantsInContestView.tsx │ │ │ │ │ │ └── problems-in-contest-view │ │ │ │ │ │ │ └── ProblemsInContestView.tsx │ │ │ │ │ ├── exam-groups │ │ │ │ │ │ ├── AdministrationExamGroupPage.tsx │ │ │ │ │ │ ├── add-bulk-users-in-group-modal │ │ │ │ │ │ │ └── AddBulkUserInGroupModal.tsx │ │ │ │ │ │ ├── add-user-in-group-modal │ │ │ │ │ │ │ └── AddUserInGroupModal.tsx │ │ │ │ │ │ ├── delete-user-from-group-button │ │ │ │ │ │ │ └── DeleteUserFromGroupButton.tsx │ │ │ │ │ │ ├── exam-group-edit │ │ │ │ │ │ │ ├── ExamGroupEdit.module.scss │ │ │ │ │ │ │ └── ExamGroupEdit.tsx │ │ │ │ │ │ └── users-in-exam-group-view │ │ │ │ │ │ │ └── UsersInExamGroupView.tsx │ │ │ │ │ ├── form-action-button │ │ │ │ │ │ └── FormActionButton.tsx │ │ │ │ │ ├── mentor-prompt-templates │ │ │ │ │ │ └── MentorPromptTemplateEdit.tsx │ │ │ │ │ ├── participants │ │ │ │ │ │ ├── change-participants-time │ │ │ │ │ │ │ ├── ChangeParticipantsTime.module.scss │ │ │ │ │ │ │ └── ChangeParticipantsTime.tsx │ │ │ │ │ │ └── form │ │ │ │ │ │ │ └── ParticipantForm.tsx │ │ │ │ │ ├── problem-groups │ │ │ │ │ │ ├── AdministrationProblemGroup.tsx │ │ │ │ │ │ ├── problem-group-form │ │ │ │ │ │ │ └── ProblemGroupForm.tsx │ │ │ │ │ │ ├── problems-in-problem-group-view │ │ │ │ │ │ │ └── ProblemsInProblemGroupView.tsx │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── problem-resources │ │ │ │ │ │ ├── AdministrationProblemResource.tsx │ │ │ │ │ │ └── problem-resource-form │ │ │ │ │ │ │ └── ProblemResourceForm.tsx │ │ │ │ │ ├── problems │ │ │ │ │ │ ├── AdministrationProblem.tsx │ │ │ │ │ │ ├── copy │ │ │ │ │ │ │ └── CopyModal.tsx │ │ │ │ │ │ ├── problem-form-basic-info.tsx │ │ │ │ │ │ │ └── ProblemFormBasicInfo.tsx │ │ │ │ │ │ ├── problem-form │ │ │ │ │ │ │ ├── ProblemForm.module.scss │ │ │ │ │ │ │ └── ProblemForm.tsx │ │ │ │ │ │ ├── problem-resources-in-problem-view │ │ │ │ │ │ │ └── ResourcesInProblemView.tsx │ │ │ │ │ │ ├── problem-submission-types │ │ │ │ │ │ │ ├── ProblemSubmissionTypes.module.scss │ │ │ │ │ │ │ └── ProblemSubmissionTypes.tsx │ │ │ │ │ │ ├── retest │ │ │ │ │ │ │ └── ProblemRetest.tsx │ │ │ │ │ │ └── tests-in-problem-view │ │ │ │ │ │ │ └── TestsInProblemView.tsx │ │ │ │ │ ├── roles │ │ │ │ │ │ ├── AdministrationRole.tsx │ │ │ │ │ │ ├── form │ │ │ │ │ │ │ └── RoleForm.tsx │ │ │ │ │ │ └── users-in-role-view │ │ │ │ │ │ │ └── UsersInRoleView.tsx │ │ │ │ │ ├── settings │ │ │ │ │ │ └── form │ │ │ │ │ │ │ └── SettingForm.tsx │ │ │ │ │ ├── submission-type-documents │ │ │ │ │ │ ├── AdministrationSubmissionTypeDocumentPage.tsx │ │ │ │ │ │ └── submission-type-document-form │ │ │ │ │ │ │ ├── SubmissionTypeDocumentForm.module.scss │ │ │ │ │ │ │ └── SubmissionTypeDocumentForm.tsx │ │ │ │ │ ├── submission-types │ │ │ │ │ │ └── form │ │ │ │ │ │ │ └── SubmissionTypeForm.tsx │ │ │ │ │ ├── test-runs │ │ │ │ │ │ └── test-runs-in-tests-view │ │ │ │ │ │ │ └── TestRunsInTestView.tsx │ │ │ │ │ ├── tests │ │ │ │ │ │ ├── AdministrationTest.tsx │ │ │ │ │ │ ├── test-form │ │ │ │ │ │ │ └── TestForm.tsx │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── users-mentors │ │ │ │ │ │ └── UserMentorEdit.tsx │ │ │ │ │ ├── users │ │ │ │ │ │ ├── AdministrationUser.tsx │ │ │ │ │ │ ├── form │ │ │ │ │ │ │ └── UserForm.tsx │ │ │ │ │ │ └── lecturer │ │ │ │ │ │ │ ├── LecturerInCategories.tsx │ │ │ │ │ │ │ └── LecturerInContests.tsx │ │ │ │ │ └── utils │ │ │ │ │ │ └── mui-utils.ts │ │ │ │ ├── auth │ │ │ │ │ ├── LoginForm.module.scss │ │ │ │ │ └── LoginForm.tsx │ │ │ │ ├── code-editor │ │ │ │ │ ├── CodeEditor.module.scss │ │ │ │ │ └── CodeEditor.tsx │ │ │ │ ├── common │ │ │ │ │ ├── MetaTags.tsx │ │ │ │ │ ├── MultiLineTextDisplay.module.scss │ │ │ │ │ ├── MultiLineTextDisplay.tsx │ │ │ │ │ ├── Props.ts │ │ │ │ │ ├── RedirectExternal.ts │ │ │ │ │ ├── back-to-top │ │ │ │ │ │ ├── BackToTop.module.scss │ │ │ │ │ │ └── BackToTop.tsx │ │ │ │ │ └── colcollection-key-utils.ts │ │ │ │ ├── contests │ │ │ │ │ ├── contest-breadcrumbs │ │ │ │ │ │ └── ContestBreadcrumbs.tsx │ │ │ │ │ ├── contest-button │ │ │ │ │ │ ├── ContestButton.module.scss │ │ │ │ │ │ └── ContestButton.tsx │ │ │ │ │ ├── contest-card │ │ │ │ │ │ ├── ContestCard.module.scss │ │ │ │ │ │ └── ContestCard.tsx │ │ │ │ │ ├── contest-categories │ │ │ │ │ │ ├── ContestCategories.module.scss │ │ │ │ │ │ └── ContestCategories.tsx │ │ │ │ │ ├── contest-compete-modal │ │ │ │ │ │ ├── ContestCompeteModal.module.scss │ │ │ │ │ │ └── ContestCompeteModal.tsx │ │ │ │ │ ├── contest-password-form │ │ │ │ │ │ ├── ContestPasswordForm.module.scss │ │ │ │ │ │ └── ContestPasswordForm.tsx │ │ │ │ │ ├── contest-problems │ │ │ │ │ │ ├── ContestProblems.module.scss │ │ │ │ │ │ └── ContestProblems.tsx │ │ │ │ │ ├── contest-results-grid │ │ │ │ │ │ ├── ContestResultsGrid.module.scss │ │ │ │ │ │ └── ContestResultsGrid.tsx │ │ │ │ │ └── contest-strategies │ │ │ │ │ │ ├── ContestStrategies.module.scss │ │ │ │ │ │ └── ContestStrategies.tsx │ │ │ │ ├── diff │ │ │ │ │ ├── Diff.module.scss │ │ │ │ │ └── Diff.tsx │ │ │ │ ├── error │ │ │ │ │ ├── ErrorWithActionButtons.module.scss │ │ │ │ │ └── ErrorWithActionButtons.tsx │ │ │ │ ├── file-uploader │ │ │ │ │ ├── FileUploader.module.scss │ │ │ │ │ └── FileUploader.tsx │ │ │ │ ├── filters │ │ │ │ │ ├── Filter.module.scss │ │ │ │ │ └── Filter.tsx │ │ │ │ ├── guidelines │ │ │ │ │ ├── alert-box │ │ │ │ │ │ ├── AlertBox.module.scss │ │ │ │ │ │ └── AlertBox.tsx │ │ │ │ │ ├── alert │ │ │ │ │ │ ├── Alert.module.scss │ │ │ │ │ │ └── Alert.tsx │ │ │ │ │ ├── breadcrumb │ │ │ │ │ │ ├── Breadcrumbs.module.scss │ │ │ │ │ │ └── Breadcrumbs.tsx │ │ │ │ │ ├── buttons │ │ │ │ │ │ ├── AdministrationLink.tsx │ │ │ │ │ │ ├── Button.module.scss │ │ │ │ │ │ ├── Button.tsx │ │ │ │ │ │ ├── ExternalLink.module.scss │ │ │ │ │ │ └── ExternalLink.tsx │ │ │ │ │ ├── checkbox │ │ │ │ │ │ ├── CheckBox.module.scss │ │ │ │ │ │ └── CheckBox.tsx │ │ │ │ │ ├── dialog │ │ │ │ │ │ ├── ConfirmDialog.module.scss │ │ │ │ │ │ ├── ConfirmDialog.tsx │ │ │ │ │ │ ├── dialog-with-additional-protection │ │ │ │ │ │ │ └── ConfirmDialogWithAdditionalProtection.tsx │ │ │ │ │ │ └── simple-dialog │ │ │ │ │ │ │ └── SimpleDialog.tsx │ │ │ │ │ ├── dropdown │ │ │ │ │ │ ├── Dropdown.module.scss │ │ │ │ │ │ └── Dropdown.tsx │ │ │ │ │ ├── forms │ │ │ │ │ │ ├── Form.tsx │ │ │ │ │ │ ├── FormControl.module.scss │ │ │ │ │ │ ├── FormControl.tsx │ │ │ │ │ │ └── check-white.svg │ │ │ │ │ ├── headings │ │ │ │ │ │ ├── Heading.module.scss │ │ │ │ │ │ └── Heading.tsx │ │ │ │ │ ├── icons │ │ │ │ │ │ ├── DownloadIcon.tsx │ │ │ │ │ │ ├── ErrorIcon.module.scss │ │ │ │ │ │ ├── ErrorIcon.tsx │ │ │ │ │ │ ├── Icon.module.scss │ │ │ │ │ │ ├── Icon.tsx │ │ │ │ │ │ ├── MemoryIcon.tsx │ │ │ │ │ │ ├── MemoryLimitIcon.module.scss │ │ │ │ │ │ ├── MemoryLimitIcon.tsx │ │ │ │ │ │ ├── RefreshIcon.tsx │ │ │ │ │ │ ├── RuntimeErrorIcon.module.scss │ │ │ │ │ │ ├── RuntimeErrorIcon.tsx │ │ │ │ │ │ ├── TickIcon.module.scss │ │ │ │ │ │ ├── TickIcon.tsx │ │ │ │ │ │ ├── TimeLimitIcon.module.scss │ │ │ │ │ │ ├── TimeLimitIcon.tsx │ │ │ │ │ │ ├── WrongAnswerIcon.module.scss │ │ │ │ │ │ ├── WrongAnswerIcon.tsx │ │ │ │ │ │ ├── common │ │ │ │ │ │ │ ├── icon-base.scss │ │ │ │ │ │ │ └── icon-sizes.tsx │ │ │ │ │ │ └── strategies │ │ │ │ │ │ │ ├── CppIcon.tsx │ │ │ │ │ │ │ ├── DotNetIcon.tsx │ │ │ │ │ │ │ ├── FileUploadIcon.tsx │ │ │ │ │ │ │ ├── GoIcon.tsx │ │ │ │ │ │ │ ├── HtmlCssIcon.tsx │ │ │ │ │ │ │ ├── JavaIcon.tsx │ │ │ │ │ │ │ ├── JavaScriptIcon.tsx │ │ │ │ │ │ │ ├── MySqlIcon.tsx │ │ │ │ │ │ │ ├── PhpIcon.tsx │ │ │ │ │ │ │ ├── PlainTextIcon.tsx │ │ │ │ │ │ │ ├── PostgreSqlIcon.tsx │ │ │ │ │ │ │ ├── PythonIcon.tsx │ │ │ │ │ │ │ ├── RubyIcon.tsx │ │ │ │ │ │ │ ├── SqlServerIcon.tsx │ │ │ │ │ │ │ └── StrategyIcon.module.scss │ │ │ │ │ ├── legacy-info-message │ │ │ │ │ │ ├── LegacyInfoMessage.module.scss │ │ │ │ │ │ └── LegacyInfoMessage.tsx │ │ │ │ │ ├── lists │ │ │ │ │ │ ├── List.module.scss │ │ │ │ │ │ └── List.tsx │ │ │ │ │ ├── pagination │ │ │ │ │ │ ├── PaginationControls.module.scss │ │ │ │ │ │ └── PaginationControls.tsx │ │ │ │ │ └── spinning-loader │ │ │ │ │ │ ├── SpinningLoader.scss │ │ │ │ │ │ └── SpinningLoader.tsx │ │ │ │ ├── mentor │ │ │ │ │ ├── Mentor.module.scss │ │ │ │ │ └── Mentor.tsx │ │ │ │ ├── portals │ │ │ │ │ ├── administration │ │ │ │ │ │ ├── AdministrationPortal.module.scss │ │ │ │ │ │ └── AdministrationPortal.tsx │ │ │ │ │ └── client │ │ │ │ │ │ ├── ClientPortal.module.scss │ │ │ │ │ │ └── ClientPortal.tsx │ │ │ │ ├── problem-resources │ │ │ │ │ ├── ProblemResource.module.scss │ │ │ │ │ └── ProblemResource.tsx │ │ │ │ ├── profile │ │ │ │ │ ├── profile-about-info │ │ │ │ │ │ ├── ProfileAboutInfo.module.scss │ │ │ │ │ │ └── ProfileAboutInfo.tsx │ │ │ │ │ ├── profile-contest-participations │ │ │ │ │ │ ├── ProfileContestParticipations.module.scss │ │ │ │ │ │ └── ProfileContestParticipations.tsx │ │ │ │ │ └── profile-submissions │ │ │ │ │ │ ├── ProfileSubmissions.module.scss │ │ │ │ │ │ └── ProfileSubmisssions.tsx │ │ │ │ ├── search │ │ │ │ │ ├── profile-search-card │ │ │ │ │ │ ├── ProblemSearchCard.module.scss │ │ │ │ │ │ └── ProblemSearchCard.tsx │ │ │ │ │ ├── profile-search-list │ │ │ │ │ │ ├── ProfileSearchList.module.scss │ │ │ │ │ │ └── ProfileSearchList.tsx │ │ │ │ │ ├── search-bar │ │ │ │ │ │ ├── SearchBar.module.scss │ │ │ │ │ │ └── SearchBar.tsx │ │ │ │ │ └── user-search-card │ │ │ │ │ │ ├── UserSearchCard.module.scss │ │ │ │ │ │ └── UserSearchCard.tsx │ │ │ │ └── submissions │ │ │ │ │ ├── execution-result │ │ │ │ │ ├── ErrorResult.module.scss │ │ │ │ │ ├── ErrorResult.tsx │ │ │ │ │ ├── ExecutionResult.module.scss │ │ │ │ │ ├── ExecutionResult.tsx │ │ │ │ │ ├── TestRunIcon.module.scss │ │ │ │ │ └── TestRunIcon.tsx │ │ │ │ │ ├── recent-submissions │ │ │ │ │ ├── RecentSubmissions.module.scss │ │ │ │ │ ├── RecentSubmissions.tsx │ │ │ │ │ ├── SubmissionStateLink.module.scss │ │ │ │ │ └── SubmissionStateLink.tsx │ │ │ │ │ ├── submission-grid-row │ │ │ │ │ ├── SubmissionGridRow.module.scss │ │ │ │ │ └── SubmissionGridRow.tsx │ │ │ │ │ ├── submission-test-run │ │ │ │ │ ├── SubmissionTestRun.module.scss │ │ │ │ │ └── SubmissionTestRun.tsx │ │ │ │ │ ├── submission-test-runs │ │ │ │ │ ├── SubmissionTestRuns.module.scss │ │ │ │ │ └── SubmissionTestRuns.tsx │ │ │ │ │ └── submissions-grid │ │ │ │ │ ├── SubmissionsGrid.module.scss │ │ │ │ │ └── SubmissionsGrid.tsx │ │ │ ├── env.d.ts │ │ │ ├── hooks │ │ │ │ ├── common │ │ │ │ │ ├── use-delayed-success-effect.tsx │ │ │ │ │ ├── use-disable-mouse-wheel-on-number-inputs.tsx │ │ │ │ │ ├── use-routing.ts │ │ │ │ │ ├── use-scroll-to-tab.tsx │ │ │ │ │ ├── use-success-message-effect.tsx │ │ │ │ │ └── usePreserveScrollOnSearchParamsChange.tsx │ │ │ │ ├── contests │ │ │ │ │ └── types.tsx │ │ │ │ ├── submissions │ │ │ │ │ └── types.ts │ │ │ │ ├── use-administration-theme-provider.tsx │ │ │ │ ├── use-mui-ui-theme.tsx │ │ │ │ └── use-theme.tsx │ │ │ ├── index.tsx │ │ │ ├── layout │ │ │ │ ├── footer │ │ │ │ │ ├── FooterNavigation.module.scss │ │ │ │ │ ├── FooterNavigation.tsx │ │ │ │ │ ├── PageFooter.module.scss │ │ │ │ │ └── PageFooter.tsx │ │ │ │ └── header │ │ │ │ │ ├── AdministrationMenu.module.scss │ │ │ │ │ ├── AdministrationMenu.tsx │ │ │ │ │ ├── PageHeader.module.scss │ │ │ │ │ ├── PageHeader.tsx │ │ │ │ │ ├── ThemeToggle.module.scss │ │ │ │ │ ├── ThemeToggle.tsx │ │ │ │ │ ├── softuni-logo-horizontal.svg │ │ │ │ │ └── software-university-logo.png │ │ │ ├── pages │ │ │ │ ├── administration-new │ │ │ │ │ ├── AdministrationGridView.tsx │ │ │ │ │ ├── AdministrationStyles.module.scss │ │ │ │ │ ├── access-logs-view │ │ │ │ │ │ └── AdministrationAccessLogViewPage.tsx │ │ │ │ │ ├── access-logs │ │ │ │ │ │ ├── AdministrationAccessLogsPage.tsx │ │ │ │ │ │ └── accessLogsGridColumns.tsx │ │ │ │ │ ├── administration-filters │ │ │ │ │ │ ├── AdministrationFilters.module.scss │ │ │ │ │ │ └── AdministrationFilters.tsx │ │ │ │ │ ├── contest-categories-hierarchy │ │ │ │ │ │ ├── AdministrationContestCategoriesHierarchy.module.scss │ │ │ │ │ │ ├── AdministrationContestCategoriesHierarchy.tsx │ │ │ │ │ │ ├── Node │ │ │ │ │ │ │ └── Node.tsx │ │ │ │ │ │ └── ResizeableContainer │ │ │ │ │ │ │ ├── ResizableContainer.module.scss │ │ │ │ │ │ │ └── ResizableContainer.tsx │ │ │ │ │ ├── contest-categories │ │ │ │ │ │ ├── AdministrationContestCategories.module.scss │ │ │ │ │ │ ├── AdministrationContestCategories.tsx │ │ │ │ │ │ ├── contestCategoriesGridColumns.tsx │ │ │ │ │ │ └── contests-bulk-edit │ │ │ │ │ │ │ ├── ContestsBulkEdit.module.scss │ │ │ │ │ │ │ └── ContestsBulkEdit.tsx │ │ │ │ │ ├── contests │ │ │ │ │ │ ├── AdministrationContests.tsx │ │ │ │ │ │ └── contestsGridColumns.tsx │ │ │ │ │ ├── exam-groups │ │ │ │ │ │ ├── AdministrationExamGroups.tsx │ │ │ │ │ │ └── examGroupsGridColumns.tsx │ │ │ │ │ ├── lecturers-in-categories │ │ │ │ │ │ └── lecturersInCategoriesGridColumns.tsx │ │ │ │ │ ├── lecturers-in-contests │ │ │ │ │ │ └── lecturersInContestsGridColumns.tsx │ │ │ │ │ ├── mentor-prompt-templates │ │ │ │ │ │ ├── AdministrationMentorPromptTemplatesPage.tsx │ │ │ │ │ │ └── mentorPromptTemplates.tsx │ │ │ │ │ ├── participants │ │ │ │ │ │ ├── ParticipantsAdministrationPage.tsx │ │ │ │ │ │ └── participantsGridColumns.tsx │ │ │ │ │ ├── problem-groups │ │ │ │ │ │ ├── AdministrationProblemGroupsPage.tsx │ │ │ │ │ │ └── problemGroupGridColumns.tsx │ │ │ │ │ ├── problem-resources │ │ │ │ │ │ ├── AdministrationProblemResourcesPage.tsx │ │ │ │ │ │ └── problemResourcesGridColumns.tsx │ │ │ │ │ ├── problems │ │ │ │ │ │ ├── AdministrationProblemsPage.tsx │ │ │ │ │ │ └── problemGridColumns.tsx │ │ │ │ │ ├── roles │ │ │ │ │ │ ├── AdministrationRolesPage.module.scss │ │ │ │ │ │ ├── AdministrationRolesPage.tsx │ │ │ │ │ │ └── rolesGridColumns.tsx │ │ │ │ │ ├── settings │ │ │ │ │ │ ├── SettingsAdministrationPage.tsx │ │ │ │ │ │ └── settingsGridColumns.tsx │ │ │ │ │ ├── submission-type-documents-view │ │ │ │ │ │ ├── AdministrationSubmissionTypeDocumentViewPage.module.scss │ │ │ │ │ │ └── AdministrationSubmissionTypeDocumentViewPage.tsx │ │ │ │ │ ├── submission-type-documents │ │ │ │ │ │ ├── AdministrationSubmissionTypeDocumentsPage.tsx │ │ │ │ │ │ └── submissionTypeDocumentsGridColumns.tsx │ │ │ │ │ ├── submission-types │ │ │ │ │ │ ├── AdministrationReplaceDeleteSubmissionTypesPage.module.scss │ │ │ │ │ │ ├── AdministrationReplaceDeleteSubmissionTypesPage.tsx │ │ │ │ │ │ ├── AdministrationSubmissionTypesPage.tsx │ │ │ │ │ │ └── submissionTypesGridColumns.tsx │ │ │ │ │ ├── submissions-for-processing │ │ │ │ │ │ ├── AdminSubmissionForProcessingDetails.module.scss │ │ │ │ │ │ ├── AdministrationSubmissionForProcessing.tsx │ │ │ │ │ │ ├── AdministrationSubmissionsForProcessingPage.tsx │ │ │ │ │ │ └── admin-submissions-for-processing-grid-def.tsx │ │ │ │ │ ├── submissions-simillarity │ │ │ │ │ │ └── SubmissionsSimillarity.tsx │ │ │ │ │ ├── submissions │ │ │ │ │ │ ├── AdministrationSubmissionsPage.tsx │ │ │ │ │ │ └── admin-submissions-grid-def.tsx │ │ │ │ │ ├── test-runs │ │ │ │ │ │ └── testRunsGridColumns.tsx │ │ │ │ │ ├── tests │ │ │ │ │ │ ├── AdministrationTestsPage.tsx │ │ │ │ │ │ └── testsGridColumns.tsx │ │ │ │ │ ├── users-mentors │ │ │ │ │ │ ├── AdministrationUsersMentorsPage.tsx │ │ │ │ │ │ └── usersMentorsGridColumns.tsx │ │ │ │ │ └── users │ │ │ │ │ │ ├── AdministrationUsersPage.module.scss │ │ │ │ │ │ ├── AdministrationUsersPage.tsx │ │ │ │ │ │ └── usersGridColumns.tsx │ │ │ │ ├── administration │ │ │ │ │ └── SubmissionRetestPage.ts │ │ │ │ ├── auth │ │ │ │ │ ├── login │ │ │ │ │ │ └── LoginPage.tsx │ │ │ │ │ ├── logout │ │ │ │ │ │ ├── LogoutPage.module.scss │ │ │ │ │ │ └── LogoutPage.tsx │ │ │ │ │ └── register │ │ │ │ │ │ └── RegisterPage.tsx │ │ │ │ ├── checkers │ │ │ │ │ ├── AdministrationCheckersPage.tsx │ │ │ │ │ └── checkersGridColumns.tsx │ │ │ │ ├── contest-results │ │ │ │ │ ├── ContestResultPage.module.scss │ │ │ │ │ └── ContestResultsPage.tsx │ │ │ │ ├── contests │ │ │ │ │ ├── ContestsPage.module.scss │ │ │ │ │ ├── ContestsPage.tsx │ │ │ │ │ ├── contest-details │ │ │ │ │ │ ├── ContestDetailsPage.module.scss │ │ │ │ │ │ └── ContestDetailsPage.tsx │ │ │ │ │ ├── contest-register │ │ │ │ │ │ ├── ContestRegister.module.scss │ │ │ │ │ │ └── ContestRegister.tsx │ │ │ │ │ └── contest-solution-submit │ │ │ │ │ │ ├── ContestSolutionSubmitPage.module.scss │ │ │ │ │ │ └── ContestSolutionSubmitPage.tsx │ │ │ │ ├── error │ │ │ │ │ └── ErrorPage.tsx │ │ │ │ ├── home │ │ │ │ │ ├── HomeInfoPage.module.scss │ │ │ │ │ ├── HomeInfoPage.tsx │ │ │ │ │ ├── HomePage.module.scss │ │ │ │ │ └── HomePage.tsx │ │ │ │ ├── not-found │ │ │ │ │ ├── NotFoundPage.module.scss │ │ │ │ │ ├── NotFoundPage.tsx │ │ │ │ │ └── page-not-found.png │ │ │ │ ├── profile │ │ │ │ │ ├── ProfilePage.module.scss │ │ │ │ │ └── ProfilePage.tsx │ │ │ │ ├── search │ │ │ │ │ ├── SearchPage.module.scss │ │ │ │ │ └── SearchPage.tsx │ │ │ │ ├── shared │ │ │ │ │ ├── make-private.tsx │ │ │ │ │ ├── set-layout.module.scss │ │ │ │ │ ├── set-layout.tsx │ │ │ │ │ └── with-title.tsx │ │ │ │ └── submissions │ │ │ │ │ ├── SubmissionsPage.tsx │ │ │ │ │ └── submission-details │ │ │ │ │ ├── SubmissionDetailsPage.tsx │ │ │ │ │ └── SubmissionsDetailsPage.module.scss │ │ │ ├── redux │ │ │ │ ├── .eslintrc.cjs │ │ │ │ ├── cacheService.ts │ │ │ │ ├── features │ │ │ │ │ ├── authorizationSlice.ts │ │ │ │ │ ├── contestsSlice.ts │ │ │ │ │ ├── mentorSlice.ts │ │ │ │ │ ├── searchSlice.ts │ │ │ │ │ ├── themeSlice.ts │ │ │ │ │ └── usersSlice.ts │ │ │ │ ├── middlewares │ │ │ │ │ └── customBaseQuery.ts │ │ │ │ ├── services │ │ │ │ │ ├── admin │ │ │ │ │ │ ├── accessLogsAdminService.ts │ │ │ │ │ │ ├── checkersAdminService.ts │ │ │ │ │ │ ├── contestCategoriesAdminService.ts │ │ │ │ │ │ ├── contestsAdminService.ts │ │ │ │ │ │ ├── examGroupsAdminService.ts │ │ │ │ │ │ ├── mentorPromptTemplatesAdminService.ts │ │ │ │ │ │ ├── participantsAdminService.ts │ │ │ │ │ │ ├── problemGroupsAdminService.ts │ │ │ │ │ │ ├── problemResourcesAdminService.ts │ │ │ │ │ │ ├── problemsAdminService.ts │ │ │ │ │ │ ├── rolesAdminService.ts │ │ │ │ │ │ ├── settingsAdminService.ts │ │ │ │ │ │ ├── submissionTypeDocumentsAdminService.ts │ │ │ │ │ │ ├── submissionTypesAdminService.ts │ │ │ │ │ │ ├── submissionTypesInSubmissionDocumentsAdminService.ts │ │ │ │ │ │ ├── submissionsAdminService.ts │ │ │ │ │ │ ├── submissionsForProcessingAdminService.ts │ │ │ │ │ │ ├── testsAdminService.ts │ │ │ │ │ │ ├── usersAdminService.ts │ │ │ │ │ │ └── usersMentorsAdminService.ts │ │ │ │ │ ├── authorizationService.ts │ │ │ │ │ ├── contestsService.ts │ │ │ │ │ ├── homeStatisticsService.ts │ │ │ │ │ ├── mentorService.ts │ │ │ │ │ ├── searchService.ts │ │ │ │ │ ├── submissionsService.ts │ │ │ │ │ ├── testsService.ts │ │ │ │ │ └── usersService.ts │ │ │ │ └── store.ts │ │ │ ├── styles │ │ │ │ ├── _border-radiuses.scss │ │ │ │ ├── _colors.scss │ │ │ │ ├── _components.scss │ │ │ │ ├── _editor.scss │ │ │ │ ├── _font-weights.scss │ │ │ │ ├── _fonts.scss │ │ │ │ ├── _resets.scss │ │ │ │ ├── _responsive.scss │ │ │ │ ├── _shadows.scss │ │ │ │ ├── _spacings.scss │ │ │ │ ├── _variables.scss │ │ │ │ ├── global.scss │ │ │ │ └── theme-styles.module.scss │ │ │ ├── types │ │ │ │ └── redux-persist-indexeddb-storage.d.ts │ │ │ └── utils │ │ │ │ ├── administration │ │ │ │ └── administration-dates.ts │ │ │ │ ├── breadcrumb-utils.ts │ │ │ │ ├── check-utils.ts │ │ │ │ ├── class-names.ts │ │ │ │ ├── constants.ts │ │ │ │ ├── dates.ts │ │ │ │ ├── dom-element-utils.ts │ │ │ │ ├── file-download-utils.ts │ │ │ │ ├── http-utils.ts │ │ │ │ ├── id-generator.ts │ │ │ │ ├── messages-utils.ts │ │ │ │ ├── object-utils.ts │ │ │ │ ├── promise-utils.ts │ │ │ │ ├── render-utils.tsx │ │ │ │ ├── router-utils.ts │ │ │ │ ├── strategy-type-utils.ts │ │ │ │ ├── string-utils.ts │ │ │ │ ├── success-messages-utils.ts │ │ │ │ ├── url-utils.ts │ │ │ │ └── urls.ts │ │ ├── tsconfig.json │ │ ├── vite.config.js │ │ └── yarn.lock │ │ ├── Consumers │ │ ├── ExecutionResultConsumer.cs │ │ ├── ExecutionResultErrorConsumer.cs │ │ └── SubmissionStartedProcessingConsumer.cs │ │ ├── Controllers │ │ ├── AccountController.cs │ │ ├── CompeteController.cs │ │ ├── ContestCategoriesController.cs │ │ ├── ContestResultsController.cs │ │ ├── ContestsController.cs │ │ ├── MentorController.cs │ │ ├── ProblemResourcesController.cs │ │ ├── SearchController.cs │ │ ├── StatisticsPreviewController.cs │ │ ├── SubmissionTypesController.cs │ │ ├── SubmissionsController.cs │ │ ├── TestsController.cs │ │ └── UsersController.cs │ │ ├── Models │ │ ├── ContestRegisterRequestModel.cs │ │ ├── Contests │ │ │ ├── ContestFiltersRequestModel.cs │ │ │ ├── ContestForHomeIndexResponseModel.cs │ │ │ ├── ContestForListingResponseModel.cs │ │ │ ├── ContestParticipantResultResponseModel.cs │ │ │ ├── ContestsForHomeIndexResponseModel.cs │ │ │ └── SubmitContestPasswordRequestModel.cs │ │ ├── ErrorViewModel.cs │ │ ├── HomeViewModel.cs │ │ ├── LoginRequestModel.cs │ │ ├── PagedResultResponse.cs │ │ ├── Participations │ │ │ └── ParticipationResponseModel.cs │ │ ├── Problems │ │ │ └── ProblemResultResponseModel.cs │ │ ├── Search │ │ │ └── SearchRequestModel.cs │ │ ├── SubmissionTypes │ │ │ ├── SubmissionTypeFilterResponseModel.cs │ │ │ └── SubmissionTypeResponseModel.cs │ │ ├── Submissions │ │ │ ├── BaseSubmissionRequestModel.cs │ │ │ ├── CodeSubmissionRequestModel.cs │ │ │ ├── Compete │ │ │ │ ├── RegisterRequestModel.cs │ │ │ │ ├── SubmissionRequestModel.cs │ │ │ │ └── SubmitFileSubmissionRequestModel.cs │ │ │ ├── Details │ │ │ │ ├── SubmissionDetailsResponseModel.cs │ │ │ │ ├── SubmissionTypeForSubmissionDetailsResponseModel.cs │ │ │ │ ├── TestDetailsResponseModel.cs │ │ │ │ └── TestRunDetailsResponseModel.cs │ │ │ ├── FileSubmissionRequestModel.cs │ │ │ └── Profile │ │ │ │ ├── ProblemResponseModel.cs │ │ │ │ └── TestRunResponseModel.cs │ │ └── Users │ │ │ ├── UserProfileResponseModel.cs │ │ │ └── UserResponseModel.cs │ │ ├── OJS.Servers.Ui.csproj │ │ ├── Program.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── appsettings.Development.json │ │ └── appsettings.json └── Worker │ └── OJS.Servers.Worker │ ├── Consumers │ └── SubmissionsForProcessingConsumer.cs │ ├── Controllers │ └── Api │ │ └── SubmissionsController.cs │ ├── Models │ ├── ExecutionContext │ │ ├── ExecutionDetails │ │ │ ├── SimpleExecutionDetailsRequestModel.cs │ │ │ ├── TestContextRequestModel.cs │ │ │ └── TestsExecutionDetailsRequestModel.cs │ │ ├── ExecutionOptionsRequestModel.cs │ │ ├── SubmissionBaseRequestModel.cs │ │ ├── SubmissionCodeRequestModel.cs │ │ └── SubmissionFileRequestModel.cs │ └── ExecutionResult │ │ ├── ExecutionResultResponseModel.cs │ │ ├── FullExecutionResultResponseModel.cs │ │ └── Output │ │ ├── CheckerDetailsResponseModel.cs │ │ ├── OutputResultResponseModel.cs │ │ ├── TaskResultResponseModel.cs │ │ └── TestResultResponseModel.cs │ ├── OJS.Servers.Worker.csproj │ ├── Program.cs │ ├── Properties │ └── launchSettings.json │ ├── appsettings.Development.json │ └── appsettings.json ├── Services ├── Administration │ ├── OJS.Services.Administration.Business │ │ ├── AccessLogs │ │ │ ├── AccessLogsBusinessService.cs │ │ │ ├── IAccessLogsBusinessService.cs │ │ │ ├── Permissions │ │ │ │ └── AccessLogIdPermissionService.cs │ │ │ └── Validators │ │ │ │ └── AccessLogAdministrationModelValidator.cs │ │ ├── AdministrationOperationService.cs │ │ ├── Checkers │ │ │ ├── CheckersBusinessService.cs │ │ │ ├── ICheckersBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── CheckerIdPermissionService.cs │ │ │ │ └── CheckerUpdateModelPermissionService.cs │ │ │ └── Validators │ │ │ │ └── CheckerAdministrationModelValidator.cs │ │ ├── ContestCategories │ │ │ ├── ContestCategoriesBusinessService.cs │ │ │ ├── GridData │ │ │ │ ├── ContestCategoriesGridDataService.cs │ │ │ │ └── IContestCategoriesGridDataService.cs │ │ │ ├── IContestCategoriesBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── ContestCategoryIdPermissionsService.cs │ │ │ │ └── ContestCategoryUpdateModelPermissionsService.cs │ │ │ └── Validators │ │ │ │ └── ContestCategoryAdministrationModelValidator.cs │ │ ├── Contests │ │ │ ├── ContestsBusinessService.cs │ │ │ ├── ContestsImportBusinessService.cs │ │ │ ├── GridData │ │ │ │ ├── ContestsGridDataService.cs │ │ │ │ └── IContestsGridDataService.cs │ │ │ ├── IContestsBusinessService.cs │ │ │ ├── IContestsImportBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── ContestIdPermissionsService.cs │ │ │ │ ├── ContestSimilarityPermissionService.cs │ │ │ │ ├── ContestUpdateModelPermissionsService.cs │ │ │ │ └── ContestsBulkEditPermissionsService.cs │ │ │ └── Validators │ │ │ │ ├── ContestAdministrationModelValidator.cs │ │ │ │ ├── ContestSimilarityModelValidator.cs │ │ │ │ ├── ContestTransferParticipantsModelValidator.cs │ │ │ │ └── ContestsBulkEditModelValidator.cs │ │ ├── ExamGroups │ │ │ ├── ExamGroupBusinessService.cs │ │ │ ├── GridData │ │ │ │ ├── ExamGroupsGridDataService.cs │ │ │ │ └── IExamGroupsGridDataService.cs │ │ │ ├── IExamGroupsBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── ExamGroupIdPermissionsService.cs │ │ │ │ ├── ExamGroupUpdateModelPermissionService.cs │ │ │ │ ├── MultipleUsersToExamGroupPermissionService.cs │ │ │ │ └── UserToExamGroupPermissionService.cs │ │ │ └── Validators │ │ │ │ ├── ExamGroupAdministrationModelValidator.cs │ │ │ │ ├── MultipleUsersToExamGroupModelValidator.cs │ │ │ │ └── UserToExamGroupValidator.cs │ │ ├── IAdministrationOperationService.cs │ │ ├── IContestCategoriesCacheService.cs │ │ ├── IContestsCacheService.cs │ │ ├── IEntityPermissionsService.cs │ │ ├── IOrderableService.cs │ │ ├── IParticipantScoresBusinessService.cs │ │ ├── IProblemsCacheService.cs │ │ ├── IUserProviderService.cs │ │ ├── IWorkersBusyRatioMonitor.cs │ │ ├── IZippedTestsParserService.cs │ │ ├── Implementations │ │ │ ├── ContestCategoriesCacheService.cs │ │ │ ├── ContestResultsAggregatorService.cs │ │ │ ├── ContestsCacheService.cs │ │ │ ├── OrderableService.cs │ │ │ ├── ParticipantScoresBusinessService.cs │ │ │ ├── ProblemsCacheService.cs │ │ │ ├── RecurringBackgroundJobsBusinessService.cs │ │ │ ├── UserProviderService.cs │ │ │ ├── WorkersBusyRatioMonitor.cs │ │ │ └── ZippedTestsParserService.cs │ │ ├── LecturersInCategories │ │ │ ├── GridData │ │ │ │ ├── ILecturersInCategoriesGridDataService.cs │ │ │ │ └── LecturersInCategoriesGridDataService.cs │ │ │ ├── ILecturersInCategoriesBusinessService.cs │ │ │ ├── LecturerInCategoriesBusinessService.cs │ │ │ └── Permissions │ │ │ │ └── LecturerToCategoryPermissionService.cs │ │ ├── LecturersInContests │ │ │ ├── GridData │ │ │ │ ├── ILecturersInContestsGridDataService.cs │ │ │ │ └── LecturersInContestsGridDataService.cs │ │ │ ├── ILecturersInContestsBusinessService.cs │ │ │ ├── LecturersInContestsBusinessService.cs │ │ │ └── Permissions │ │ │ │ └── LecturerToContestPermissionService.cs │ │ ├── MentorPromptTemplates │ │ │ ├── IMentorPromptTemplateBusinessService.cs │ │ │ ├── MentorPromptTemplateBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── MentorPromptTemplateAdministrationModelPermissionsService.cs │ │ │ │ └── MentorPromptTemplateIdPermissionsService.cs │ │ │ └── Validators │ │ │ │ └── MentorPromptTemplateAdministrationValidator.cs │ │ ├── OJS.Services.Administration.Business.csproj │ │ ├── Participants │ │ │ ├── GridData │ │ │ │ ├── IParticipantsGridDataService.cs │ │ │ │ └── ParticipantsGridDataService.cs │ │ │ ├── IParticipantsBusinessService.cs │ │ │ ├── ParticipantsBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── ChangeParticipationTimeForMultipleParticipantsPermissionsService.cs │ │ │ │ ├── ChangeParticipationTimeForSingleParticipantPermissionsService.cs │ │ │ │ ├── ParticipantIdPermissionService.cs │ │ │ │ └── ParticipantUpdateModelPermissionService.cs │ │ │ └── Validators │ │ │ │ ├── ChangeParticipationTimeValidator.cs │ │ │ │ └── ParticipantAdministrationModelValidator.cs │ │ ├── ProblemGroups │ │ │ ├── GridData │ │ │ │ ├── IProblemGroupsGridDataService.cs │ │ │ │ └── ProblemGroupsGridDataService.cs │ │ │ ├── IProblemGroupsBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── ProblemGroupIdPermissionService.cs │ │ │ │ └── ProblemGroupUpdateModelPermissionService.cs │ │ │ ├── ProblemGroupsBusinessService.cs │ │ │ └── Validators │ │ │ │ └── ProblemGroupAdministrationModelValidator.cs │ │ ├── ProblemResources │ │ │ ├── GridData │ │ │ │ ├── IProblemResourcesGridDataService.cs │ │ │ │ └── ProblemResourcesGridDataService.cs │ │ │ ├── IProblemResourcesBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── ProblemResourceAdministrationModelPermissionService.cs │ │ │ │ └── ProblemResourceIdPermissionService.cs │ │ │ ├── ProblemResourceBusinessService.cs │ │ │ └── Validators │ │ │ │ └── ProblemResourceAdministrationModelValidator.cs │ │ ├── Problems │ │ │ ├── GridData │ │ │ │ ├── IProblemsGridDataService.cs │ │ │ │ └── ProblemsGridDataService.cs │ │ │ ├── IProblemsBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── CopyPermissionService.cs │ │ │ │ ├── ProblemCopyAllPermissionsService.cs │ │ │ │ ├── ProblemIdPermissionsService.cs │ │ │ │ ├── ProblemRetestPermissionsService.cs │ │ │ │ └── ProblemUpdateModelPermissionsService.cs │ │ │ ├── ProblemsBusinessService.cs │ │ │ └── Validators │ │ │ │ └── ProblemAdministrationValidator.cs │ │ ├── Roles │ │ │ ├── GridData │ │ │ │ ├── IRoleGridDataService.cs │ │ │ │ └── RoleGridDataService.cs │ │ │ ├── IRolesBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── RoleIdPermissionService.cs │ │ │ │ ├── RoleUpdateModelPermissionService.cs │ │ │ │ └── UserToRolePermissionService.cs │ │ │ ├── RolesBusinessService.cs │ │ │ └── Validators │ │ │ │ ├── RoleAdministrationModelValidator.cs │ │ │ │ └── UserToRoleModelValidator.cs │ │ ├── Settings │ │ │ ├── ISettingsBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── SettingIdPermissionService.cs │ │ │ │ └── SettingUpdateModelPermissionService.cs │ │ │ ├── SettingsBusinessService.cs │ │ │ └── Validators │ │ │ │ └── SettingAdministrationModelValidator.cs │ │ ├── Similarity │ │ │ ├── IDetectSimilarityVisitor.cs │ │ │ ├── ISimilarityDetector.cs │ │ │ ├── ISimilarityFinder.cs │ │ │ ├── ISimillarityService.cs │ │ │ ├── SimilarityDetector │ │ │ │ ├── ISimilarityDetectorFactory.cs │ │ │ │ ├── SimilarityDetectorFactory.cs │ │ │ │ └── TextSimilarityDetector.cs │ │ │ ├── SimilarityDetectorCreationContext.cs │ │ │ ├── SimilarityFinder.cs │ │ │ ├── SimilarityService.cs │ │ │ └── SortAndTrimLinesVisitor.cs │ │ ├── SubmissionTypeDocuments │ │ │ ├── GridData │ │ │ │ ├── ISubmissionTypeDocumentsGridDataService.cs │ │ │ │ └── SubmissionTypeDocumentsGridDataService.cs │ │ │ ├── ISubmissionTypeDocumentsBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── SubmissionTypeDocumentDeleteModelPermissionsService.cs │ │ │ │ ├── SubmissionTypeDocumentIdPermissionsService.cs │ │ │ │ └── SubmissionTypeDocumentUpdateModelPermissionsService.cs │ │ │ ├── SubmissionTypeDocumentsBusinessService.cs │ │ │ └── Validators │ │ │ │ └── SubmissionTypeDocumentsAdministrationValidator.cs │ │ ├── SubmissionTypes │ │ │ ├── ISubmissionTypesBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── SubmissionTypeIdPermissionService.cs │ │ │ │ └── SubmissionTypesUpdateModelPermissionService.cs │ │ │ ├── SubmissionTypesBusinessService.cs │ │ │ └── Validators │ │ │ │ ├── DeleteOrReplaceSubmissionTypeValidationService.cs │ │ │ │ ├── IDeleteOrReplaceSubmissionTypeValidationService.cs │ │ │ │ └── SubmissionTypeAdministrationModelValidator.cs │ │ ├── SubmissionTypesInSubmissionDocuments │ │ │ ├── GridData │ │ │ │ ├── ISubmissionTypesInSubmissionDocumentsGridDataService.cs │ │ │ │ └── SubmissionTypesInSubmissionDocumentsGridDataService.cs │ │ │ ├── ISubmissionTypesInSubmissionDocumentsBusinessService.cs │ │ │ └── SubmissionTypesInSubmissionDocumentsBusinessService.cs │ │ ├── Submissions │ │ │ ├── GridData │ │ │ │ ├── ISubmissionsGridDataService.cs │ │ │ │ └── SubmissionsGridDataService.cs │ │ │ ├── ISubmissionsBusinessService.cs │ │ │ ├── Permissions │ │ │ │ └── SubmissionsPermissionsService.cs │ │ │ ├── SubmissionsBusinessService.cs │ │ │ └── Validation │ │ │ │ └── SubmissionsAdministrationModelValidator.cs │ │ ├── SubmissionsForProcessing │ │ │ ├── ISubmissionsForProcessingBusinessService.cs │ │ │ ├── Permissions │ │ │ │ └── SubmissionsForProcessingPermissionsService.cs │ │ │ ├── SubmissionsForProcessingBusinessService.cs │ │ │ └── Validation │ │ │ │ └── SubmissionsForProcessingAdministrationModelValidator.cs │ │ ├── Tests │ │ │ ├── GridData │ │ │ │ ├── ITestsGridDataService.cs │ │ │ │ └── TestsGridDataService.cs │ │ │ ├── ITestsBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── TestIdPermissionService.cs │ │ │ │ ├── TestUpdateModelPermissionService.cs │ │ │ │ └── TestsImportPermissionService.cs │ │ │ ├── TestsBusinessService.cs │ │ │ └── Validators │ │ │ │ └── TestAdministrationModelValidator.cs │ │ ├── Users │ │ │ ├── GridData │ │ │ │ ├── IUsersGridDataService.cs │ │ │ │ └── UsersGridDataService.cs │ │ │ ├── IUsersBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── UserIdPermissionService.cs │ │ │ │ └── UserUpdateModelPermission.cs │ │ │ ├── UsersBusinessService.cs │ │ │ └── Validators │ │ │ │ └── UserAdministrationModelValidator.cs │ │ ├── UsersMentors │ │ │ ├── IUsersMentorsBusinessService.cs │ │ │ ├── Permissions │ │ │ │ ├── UserMentorAdministrationModelPermissionService.cs │ │ │ │ ├── UserMentorAdministrationModelPermissionsService.cs │ │ │ │ └── UserMentorIdPermissionsService.cs │ │ │ ├── UsersMentorsBusinessService.cs │ │ │ └── Validators │ │ │ │ └── UserMentorAdministrationValidator.cs │ │ └── Validation │ │ │ └── Helpers │ │ │ ├── IContestsValidationHelper.cs │ │ │ ├── IProblemsValidationHelper.cs │ │ │ └── Implementations │ │ │ ├── ContestsValidationHelper.cs │ │ │ └── ProblemsValidationHelper.cs │ ├── OJS.Services.Administration.Data │ │ ├── Excel │ │ │ ├── ExcelService.cs │ │ │ └── IExcelService.cs │ │ ├── ICheckersDataService.cs │ │ ├── IContestCategoriesDataService.cs │ │ ├── IContestsDataService.cs │ │ ├── IExamGroupsDataService.cs │ │ ├── IGridDataService.cs │ │ ├── IIpsDataService.cs │ │ ├── IParticipantScoresDataService.cs │ │ ├── IParticipantsDataService.cs │ │ ├── IProblemGroupsDataService.cs │ │ ├── IProblemResourcesDataService.cs │ │ ├── IProblemsDataService.cs │ │ ├── ISubmissionTypesDataService.cs │ │ ├── ISubmissionTypesInProblemsDataService.cs │ │ ├── ISubmissionsDataService.cs │ │ ├── ITestRunsDataService.cs │ │ ├── ITestsDataService.cs │ │ ├── IUsersDataService.cs │ │ ├── Implementations │ │ │ ├── AdministrationDataService.cs │ │ │ ├── CheckersDataService.cs │ │ │ ├── ContestCategoriesDataService.cs │ │ │ ├── ContestsDataService.cs │ │ │ ├── ExamGroupsDataService.cs │ │ │ ├── GridDataService.cs │ │ │ ├── IpsDataService.cs │ │ │ ├── ParticipantScoresDataService.cs │ │ │ ├── ParticipantsDataService.cs │ │ │ ├── ProblemGroupsDataService.cs │ │ │ ├── ProblemResourcesDataService.cs │ │ │ ├── ProblemsDataService.cs │ │ │ ├── SubmissionTypesDataService.cs │ │ │ ├── SubmissionTypesInProblemsDataService.cs │ │ │ ├── SubmissionsDataService.cs │ │ │ ├── TestRunsDataService.cs │ │ │ ├── TestsDataService.cs │ │ │ └── UsersDataService.cs │ │ └── OJS.Services.Administration.Data.csproj │ └── OJS.Services.Administration.Models │ │ ├── AccessLogs │ │ ├── AccessLogAdministrationModel.cs │ │ └── AccessLogInListModel.cs │ │ ├── AdditionalFormFields.cs │ │ ├── AdministrationConstants.cs │ │ ├── ApplicationConfig.cs │ │ ├── BaseDropdownModel.cs │ │ ├── Checkers │ │ ├── CheckerAdministrationModel.cs │ │ └── CheckerInListModel.cs │ │ ├── ContestCategories │ │ ├── ContestCategoriesHierarchyEditModel.cs │ │ ├── ContestCategoriesHierarchyModel.cs │ │ ├── ContestCategoriesInContestView.cs │ │ ├── ContestCategoryAdministrationModel.cs │ │ ├── ContestCategoryInListModel.cs │ │ └── LecturerInContestCategoryActionsModel.cs │ │ ├── ContestLimitBetweenSubmissionsAdjustSettings.cs │ │ ├── Contests │ │ ├── Categories │ │ │ └── ContestCategoriesValidationServiceModel.cs │ │ ├── ContestActivityModel.cs │ │ ├── ContestAdministrationModel.cs │ │ ├── ContestInListModel.cs │ │ ├── ContestLegacyExportServiceModel.cs │ │ ├── ContestResultsExportRequestModel.cs │ │ ├── ContestTransferParticipantsModel.cs │ │ ├── ContestsBulkEditModel.cs │ │ ├── ContestsGetExistingIdsRequestModel.cs │ │ ├── LecturerInContestActionsModel.cs │ │ ├── Participants │ │ │ └── ParticipantInListViewModel.cs │ │ ├── Problems │ │ │ ├── ContestCopyProblemsValidationServiceModel.cs │ │ │ ├── ContestDeleteProblemsValidationServiceModel.cs │ │ │ ├── ProblemRetestServiceModel.cs │ │ │ └── ProblemShortDetailsServiceModel.cs │ │ └── SimillarityCheckModel.cs │ │ ├── ExamGroups │ │ ├── ExamGroupAdministrationModel.cs │ │ ├── ExamGroupDeleteValidationServiceModel.cs │ │ ├── ExamGroupInListModel.cs │ │ ├── MultipleUsersToExamGroupModel.cs │ │ ├── UserInExamGroupCreateDeleteValidationServiceModel.cs │ │ └── UserToExamGroupModel.cs │ │ ├── LecturerInCategories │ │ ├── LecturerInCategoryInListModel.cs │ │ └── LecturerToCategoryModel.cs │ │ ├── LecturerInContests │ │ ├── LecturerInContestInListModel.cs │ │ └── LecturerToContestModel.cs │ │ ├── MentorPromptTemplates │ │ ├── MentorPromptTemplateAdministrationModel.cs │ │ └── MentorPromptTemplateInListModel.cs │ │ ├── OJS.Services.Administration.Models.csproj │ │ ├── ParticipantScoreModel.cs │ │ ├── ParticipantScores │ │ └── Models │ │ │ ├── ParticipantScoreDataModel.cs │ │ │ └── ParticipantSummarySubmissionInfoServiceModel.cs │ │ ├── Participants │ │ ├── ChangeParticipationTimeForMultipleParticipantsModel.cs │ │ ├── ChangeParticipationTimeForSingleParticipantModel.cs │ │ ├── ChangeParticipationTimeModel.cs │ │ ├── ParticipantAdministrationModel.cs │ │ ├── ParticipantModel.cs │ │ └── ParticipantServiceModel.cs │ │ ├── ProblemGroups │ │ ├── ProblemGroupDownloadModel.cs │ │ ├── ProblemGroupInListModel.cs │ │ └── ProblemGroupsAdministrationModel.cs │ │ ├── ProblemResources │ │ ├── ProblemResourceAdministrationModel.cs │ │ ├── ProblemResourceDownloadServiceModel.cs │ │ ├── ProblemResourceInListModel.cs │ │ └── ResourceServiceModel.cs │ │ ├── Problems │ │ ├── CopyAllToContestViewModel.cs │ │ ├── CopyProblemRequestModel.cs │ │ ├── ProblemAdministrationModel.cs │ │ ├── ProblemInListModel.cs │ │ ├── ProblemModel.cs │ │ ├── ProblemRetestValidationModel.cs │ │ ├── ProblemRetestViewModel.cs │ │ ├── ProblemServiceModel.cs │ │ └── ProblemSubmissionType.cs │ │ ├── Roles │ │ ├── RoleAdministrationModel.cs │ │ ├── RoleInListModel.cs │ │ ├── RoleResponseModel.cs │ │ └── UserToRoleModel.cs │ │ ├── Settings │ │ ├── SettingAdministrationModel.cs │ │ └── SettingInListModel.cs │ │ ├── Similarity │ │ ├── DiffData.cs │ │ ├── Difference.cs │ │ ├── ShortestMiddleSnakeReturnData.cs │ │ ├── SimilarityResult.cs │ │ └── SubmissionSimilarityViewModel.cs │ │ ├── SubmissionTypeDocuments │ │ ├── DeleteSubmissionTypeDocumentModel.cs │ │ ├── SubmissionTypeDocumentAdministrationModel.cs │ │ └── SubmissionTypeDocumentInListModel.cs │ │ ├── SubmissionTypes │ │ ├── ReplaceSubmissionTypeServiceModel.cs │ │ ├── SubmissionTypeAdministrationModel.cs │ │ ├── SubmissionTypeInDocument.cs │ │ ├── SubmissionTypeInListModel.cs │ │ └── SubmissionTypesInProblemView.cs │ │ ├── SubmissionTypesInSubmissionDocuments │ │ ├── SubmissionTypeInSubmissionDocumentAdministrationModel.cs │ │ ├── SubmissionTypeInSubmissionDocumentInListModel.cs │ │ └── SubmissionTypeInSubmissionDocumentInViewModel.cs │ │ ├── Submissions │ │ ├── DownloadSubmissionsModel.cs │ │ ├── SubmissionAdministrationServiceModel.cs │ │ └── SubmissionInListModel.cs │ │ ├── SubmissionsForProcessing │ │ └── SubmissionsForProcessingAdministrationServiceModel.cs │ │ ├── TestRuns │ │ └── TestRunInListModel.cs │ │ ├── Tests │ │ ├── ProblemDropdownModel.cs │ │ ├── TestAdministrationModel.cs │ │ ├── TestTypeEnum.cs │ │ ├── TestsImportRequestModel.cs │ │ ├── TestsInListModel.cs │ │ ├── TestsMappingUtils.cs │ │ └── TestsParseResult.cs │ │ ├── Users │ │ ├── UserAdministrationModel.cs │ │ ├── UserDropdownModel.cs │ │ ├── UserInListModel.cs │ │ └── UserSettingsAdministrationModel.cs │ │ ├── UsersMentors │ │ ├── UserMentorAdministrationModel.cs │ │ └── UserMentorInListModel.cs │ │ └── WorkersBusyRatioServiceModel.cs ├── Common │ ├── OJS.Services.Common.Data │ │ ├── IContestResultsAggregatorCommonService.cs │ │ ├── IContestsActivityService.cs │ │ ├── IDataService.cs │ │ ├── IParticipantScoresCommonDataService.cs │ │ ├── IParticipantsCommonDataService.cs │ │ ├── ISeederDataService.cs │ │ ├── ISettingsCacheService.cs │ │ ├── ISubmissionsCommonBusinessService.cs │ │ ├── ISubmissionsCommonDataService.cs │ │ ├── ISubmissionsForProcessingCommonDataService.cs │ │ ├── ITransactionsProvider.cs │ │ ├── Implementations │ │ │ ├── ContestResultsAggregatorCommonService.cs │ │ │ ├── ContestsActivityService.cs │ │ │ ├── DataService.cs │ │ │ ├── ParticipantScoresCommonDataService.cs │ │ │ ├── ParticipantsCommonDataService.cs │ │ │ ├── SeederDataService.cs │ │ │ ├── SettingsCacheService.cs │ │ │ ├── SubmissionsCommonBusinessService.cs │ │ │ ├── SubmissionsCommonDataService.cs │ │ │ ├── SubmissionsForProcessingCommonDataService.cs │ │ │ └── TransactionsProvider.cs │ │ ├── OJS.Services.Common.Data.csproj │ │ ├── Pagination │ │ │ ├── FilteringService.cs │ │ │ ├── IFilteringService.cs │ │ │ ├── ISortingService.cs │ │ │ └── SortingService.cs │ │ ├── PropertyInfoCache.cs │ │ └── Validation │ │ │ └── BaseAdministrationModelValidator.cs │ ├── OJS.Services.Common.Models │ │ ├── BaseAdministrationModel.cs │ │ ├── Cache │ │ │ ├── ContestCategoryListViewModel.cs │ │ │ └── ContestCategoryTreeViewModel.cs │ │ ├── Contests │ │ │ ├── ContestActivityServiceModel.cs │ │ │ ├── ContestForActivityServiceModel.cs │ │ │ ├── ICanBeCompetedAndPracticed.cs │ │ │ ├── IContestActivityServiceModel.cs │ │ │ ├── IContestForActivityServiceModel.cs │ │ │ ├── IParticipantForActivityServiceModel.cs │ │ │ ├── ParticipantActivityServiceModel.cs │ │ │ ├── ParticipantForActivityServiceModel.cs │ │ │ └── Results │ │ │ │ ├── ContestProblemListViewModel.cs │ │ │ │ ├── ContestResultsModel.cs │ │ │ │ ├── ContestResultsViewModel.cs │ │ │ │ ├── ParticipantResultViewModel.cs │ │ │ │ ├── ProblemResultPairViewModel.cs │ │ │ │ ├── TestRunFullResultsViewModel.cs │ │ │ │ └── UserPercentageResultsServiceModel.cs │ │ ├── Files │ │ │ └── FileResponseModel.cs │ │ ├── InMemoryFile.cs │ │ ├── Mappings │ │ │ └── CheckerTypeNameValueResolver.cs │ │ ├── MentorPromptTemplates │ │ │ └── MentorPromptTemplateServiceModel.cs │ │ ├── OJS.Services.Common.Models.csproj │ │ ├── Pagination │ │ │ ├── Enums │ │ │ │ └── OperatorType.cs │ │ │ ├── FilteringModel.cs │ │ │ └── PaginationRequestModel.cs │ │ ├── ServiceResult.cs │ │ ├── ServiceResult{T}.cs │ │ ├── Settings │ │ │ └── SettingsServiceModel.cs │ │ ├── Submissions │ │ │ ├── BestSubmissionViewModel.cs │ │ │ ├── ExecutionContext │ │ │ │ ├── ExecutionOptionsServiceModel.cs │ │ │ │ ├── Mapping │ │ │ │ │ ├── SubmissionInputValueResolver.cs │ │ │ │ │ └── TaskSkeletonValueResolver.cs │ │ │ │ └── SubmissionServiceModel.cs │ │ │ ├── ExecutionDetails │ │ │ │ ├── BaseExecutionDetailsServiceModel.cs │ │ │ │ ├── SimpleExecutionDetailsServiceModel.cs │ │ │ │ └── TestsExecutionDetailsServiceModel.cs │ │ │ ├── ExecutionResultServiceModel.cs │ │ │ ├── OutputResultServiceModel.cs │ │ │ ├── SubmissionExecutionResult.cs │ │ │ ├── TaskResultServiceModel.cs │ │ │ └── TestResultServiceModel.cs │ │ └── Users │ │ │ ├── ExternalUserInfoModel.cs │ │ │ └── UserInfoModel.cs │ ├── OJS.Services.Common │ │ ├── BackgroundJobsHostedService.cs │ │ ├── Constants │ │ │ └── PaginationConstants.cs │ │ ├── Exceptions │ │ │ └── MessageBusNotHealthyException.cs │ │ ├── Extensions │ │ │ ├── SubmissionServiceModelExtensions.cs │ │ │ └── UserInfoModelExtensions.cs │ │ ├── Filters │ │ │ └── MessageBusExceptionFilter.cs │ │ ├── Helpers │ │ │ ├── ExponentialMovingAverage.cs │ │ │ ├── MySqlStrategiesHelper.cs │ │ │ └── RollingAverage.cs │ │ ├── IFileIoService.cs │ │ ├── IFileSystemService.cs │ │ ├── INotDefaultValueValidationService.cs │ │ ├── IPublisherService.cs │ │ ├── IRecurringBackgroundJobsBusinessService.cs │ │ ├── IUserProviderService.cs │ │ ├── IZipArchivesService.cs │ │ ├── Implementations │ │ │ ├── FileIoService.cs │ │ │ ├── FileSystemService.cs │ │ │ ├── NotDefaultValueValidationService.cs │ │ │ ├── PublisherService.cs │ │ │ ├── UserProviderService.cs │ │ │ └── ZipArchivesService.cs │ │ ├── Mapping │ │ │ ├── CompilerTypeMemberValueResolver.cs │ │ │ ├── ExecutionStrategyValueResolver.cs │ │ │ ├── ExecutionTypeMemberValueResolver.cs │ │ │ └── ValuesMapOrDefaultMemberValueResolver.cs │ │ ├── OJS.Services.Common.csproj │ │ ├── Telemetry │ │ │ ├── ITracingService.cs │ │ │ ├── OjsActivitySources.cs │ │ │ ├── SimpleTracePropagation.cs │ │ │ └── TracingService.cs │ │ └── Validation │ │ │ ├── BaseValidator.cs │ │ │ ├── Helpers │ │ │ ├── INotDefaultValueValidationHelper.cs │ │ │ └── Implementations │ │ │ │ └── NotDefaultValueValidationHelper.cs │ │ │ ├── IValidationService.cs │ │ │ ├── IValidationServiceAsync.cs │ │ │ └── ValidationConstants.cs │ └── OJS.Workers │ │ ├── OJS.Workers.Checkers │ │ ├── CPlusPlusCodeChecker.cs │ │ ├── CSharpCodeChecker.cs │ │ ├── CSharpCodeCheckers │ │ │ └── CSharpCodeCheckerBase.cs │ │ ├── CSharpCoreCodeChecker.cs │ │ ├── CaseInsensitiveChecker.cs │ │ ├── Checker.cs │ │ ├── CheckerConstants.cs │ │ ├── ExactChecker.cs │ │ ├── OJS.Workers.Checkers.csproj │ │ ├── PrecisionChecker.cs │ │ ├── SortChecker.cs │ │ ├── TrimChecker.cs │ │ └── TrimEndChecker.cs │ │ ├── OJS.Workers.Common │ │ ├── CheckerDetails.cs │ │ ├── CheckerResult.cs │ │ ├── CheckerResultType.cs │ │ ├── CompileResult.cs │ │ ├── Constants.cs │ │ ├── Exceptions │ │ │ ├── ConfigurationException.cs │ │ │ ├── DerivedImplementationNotFoundException.cs │ │ │ ├── InvalidExecutionContextException.cs │ │ │ ├── InvalidProcessExecutionOutputException.cs │ │ │ ├── SolutionException.cs │ │ │ └── StrategyException.cs │ │ ├── ExecutionStrategiesConstants.cs │ │ ├── Extensions │ │ │ ├── ByteArrayExtensions.cs │ │ │ ├── CollectionExtensions.cs │ │ │ ├── CompilerTypeExtensions.cs │ │ │ ├── CompressStringExtensions.cs │ │ │ ├── ExceptionExtensions.cs │ │ │ ├── ExecutionStrategyTypeExtensions.cs │ │ │ ├── ExecutorExtensions.cs │ │ │ └── StringExtensions.cs │ │ ├── Helpers │ │ │ ├── CSharpPreprocessorHelper.cs │ │ │ ├── CodeHelpers.cs │ │ │ ├── DirectoryHelpers.cs │ │ │ ├── FileHelpers.cs │ │ │ ├── JavaCodePreprocessorHelper.cs │ │ │ └── OSPlatformHelpers.cs │ │ ├── IChecker.cs │ │ ├── ICompiler.cs │ │ ├── IDependencyContainer.cs │ │ ├── IExecutionContext.cs │ │ ├── IExecutionResult.cs │ │ ├── IExecutionStrategy.cs │ │ ├── IExecutor.cs │ │ ├── IOjsSubmission.cs │ │ ├── ISingleCodeRunResult.cs │ │ ├── LoggerMessageDefinitions.cs │ │ ├── Models │ │ │ ├── CompilerType.cs │ │ │ ├── ExceptionModel.cs │ │ │ ├── ExceptionType.cs │ │ │ ├── ExecutionStrategyType.cs │ │ │ ├── ExecutionType.cs │ │ │ ├── IExecutionStrategySettings.cs │ │ │ ├── LegacyExceptionModel.cs │ │ │ ├── PlagiarismDetectorType.cs │ │ │ ├── TestContext.cs │ │ │ └── TestRunResultType.cs │ │ ├── OJS.Workers.Common.csproj │ │ ├── OjsSubmission.cs │ │ ├── ProcessExecutionResult.cs │ │ └── ProcessExecutionResultType.cs │ │ ├── OJS.Workers.Compilers │ │ ├── CPlusPlusCompiler.cs │ │ ├── CPlusPlusZipCompiler.cs │ │ ├── CSharpDotNetCoreCompiler.cs │ │ ├── Compiler.cs │ │ ├── CompilerOutput.cs │ │ ├── DotNetCompiler.cs │ │ ├── GolangCompiler.cs │ │ ├── ICompilerFactory.cs │ │ ├── JavaCompiler.cs │ │ ├── JavaInPlaceFolderCompiler.cs │ │ ├── JavaZipCompiler.cs │ │ ├── OJS.Workers.Compilers.csproj │ │ └── TypeScriptCompiler.cs │ │ ├── OJS.Workers.ExecutionStrategies │ │ ├── BaseCodeExecutionStrategy.cs │ │ ├── BaseCompiledCodeExecutionStrategy.cs │ │ ├── BaseExecutionStrategy.cs │ │ ├── BaseInterpretedCodeExecutionStrategy.cs │ │ ├── CPlusPlus │ │ │ ├── CPlusPlusCompileExecuteAndCheckExecutionStrategy.cs │ │ │ └── CPlusPlusZipFileExecutionStrategy.cs │ │ ├── CSharp │ │ │ ├── CSharpProjectTestsExecutionStrategy.cs │ │ │ └── DotNetCore │ │ │ │ ├── DotNetCoreCompileExecuteAndCheckExecutionStrategy.cs │ │ │ │ ├── DotNetCoreProjectExecutionStrategy.cs │ │ │ │ ├── DotNetCoreProjectTestsExecutionStrategy.cs │ │ │ │ └── DotNetCoreUnitTestsExecutionStrategy.cs │ │ ├── CheckOnlyExecutionStrategy.cs │ │ ├── CodeSanitizers │ │ │ ├── BaseCodeSanitizer.cs │ │ │ ├── CPlusPlusSanitizer.cs │ │ │ └── DotNetCoreSanitizer.cs │ │ ├── CompileExecuteAndCheckExecutionStrategy.cs │ │ ├── DoNothingExecutionStrategy.cs │ │ ├── Extensions │ │ │ ├── CSharpProjectExtensions.cs │ │ │ ├── ExecutionContextExtensions.cs │ │ │ └── ExecutionResultExtensions.cs │ │ ├── Golang │ │ │ └── GolangCompileExecuteAndCheckExecutionStrategy.cs │ │ ├── Helpers │ │ │ ├── DotNetCoreStrategiesHelper.cs │ │ │ ├── JavaStrategiesHelper.cs │ │ │ ├── JsCodePreEvaluationCodeProvider.cs │ │ │ ├── PythonStrategiesHelper.cs │ │ │ └── UnitTestStrategiesHelper.cs │ │ ├── IExecutionStrategySettingsProvider.cs │ │ ├── Java │ │ │ ├── JavaPreprocessCompileExecuteAndCheckExecutionStrategy.cs │ │ │ ├── JavaProjectTestsExecutionStrategy.cs │ │ │ ├── JavaSpringAndHibernateProjectExecutionStrategy.cs │ │ │ ├── JavaUnitTestsExecutionStrategy.cs │ │ │ └── JavaZipFileCompileExecuteAndCheckExecutionStrategy.cs │ │ ├── Models │ │ │ ├── BaseInputModel.cs │ │ │ ├── ExecutionContext.cs │ │ │ ├── ExecutionResult.cs │ │ │ ├── JsonExecutionResult.cs │ │ │ ├── OutputResult.cs │ │ │ ├── SimpleInputModel.cs │ │ │ ├── SingleCodeRunResult.cs │ │ │ ├── TestResult.cs │ │ │ └── TestsInputModel.cs │ │ ├── NodeJs │ │ │ ├── NodeJsConstants.cs │ │ │ ├── NodeJsExecuteAndRunAsyncJsDomTestsWithReactExecutionStrategy.cs │ │ │ ├── NodeJsPreprocessExecuteAndCheckExecutionStrategy.cs │ │ │ ├── NodeJsPreprocessExecuteAndRunAllUnitTestsWithMochaExecutionStrategy.cs │ │ │ ├── NodeJsPreprocessExecuteAndRunCodeAgainstUnitTestsWithMochaExecutionStrategy.cs │ │ │ ├── NodeJsPreprocessExecuteAndRunJsDomUnitTestsExecutionStrategy.cs │ │ │ ├── NodeJsPreprocessExecuteAndRunUnitTestsWithMochaExecutionStrategy.cs │ │ │ ├── NodeJsZipExecuteHtmlAndCssStrategy.cs │ │ │ └── Typescript │ │ │ │ ├── TypeScriptPreprocessExecuteAndCheckExecutionStrategy.cs │ │ │ │ └── TypeScriptPreprocessExecuteAndRunUnitTestsWithMochaExecutionStrategy.cs │ │ ├── OJS.Workers.ExecutionStrategies.csproj │ │ ├── Python │ │ │ ├── PythonCodeExecuteAgainstUnitTestsExecutionStrategy.cs │ │ │ ├── PythonConstants.cs │ │ │ ├── PythonDjangoOrmExecutionStrategy.cs │ │ │ ├── PythonDjangoOrmParallelExecutionStrategy.cs │ │ │ ├── PythonExecuteAndCheckExecutionStrategy.cs │ │ │ ├── PythonProjectTestsExecutionStrategy.cs │ │ │ ├── PythonProjectUnitTestsExecutionStrategy.cs │ │ │ └── PythonUnitTestsExecutionStrategy.cs │ │ ├── RunSpaAndExecuteMochaTestsExecutionStrategy.cs │ │ ├── RunSpaAndExecuteMochaTestsExecutionStrategySeparateTests.cs │ │ └── Sql │ │ │ ├── BaseSqlExecutionStrategy.cs │ │ │ ├── MySql │ │ │ ├── BaseMySqlExecutionStrategy.cs │ │ │ ├── MySqlPrepareDatabaseAndRunQueriesExecutionStrategy.cs │ │ │ ├── MySqlRunQueriesAndCheckDatabaseExecutionStrategy.cs │ │ │ └── MySqlRunSkeletonRunQueriesAndCheckDatabaseExecutionStrategy.cs │ │ │ ├── PostgreSql │ │ │ ├── BasePostgreSqlExecutionStrategy.cs │ │ │ ├── PostgreSqlPrepareDatabaseAndRunQueriesExecutionStrategy.cs │ │ │ ├── PostgreSqlRunQueriesAndCheckDatabaseExecutionStrategy.cs │ │ │ └── PostgreSqlRunSkeletonRunQueriesAndCheckDatabaseExecutionStrategy.cs │ │ │ ├── SqlResult.cs │ │ │ ├── SqlServerLocalDb │ │ │ └── BaseSqlServerLocalDbExecutionStrategy.cs │ │ │ └── SqlServerSingleDatabase │ │ │ ├── BaseSqlServerSingleDatabaseExecutionStrategy.cs │ │ │ ├── SqlServerSingleDatabasePrepareDatabaseAndRunQueriesExecutionStrategy.cs │ │ │ ├── SqlServerSingleDatabaseRunQueriesAndCheckDatabaseExecutionStrategy.cs │ │ │ └── SqlServerSingleDatabaseRunSkeletonRunQueriesAndCheckDatabaseExecutionStrategy.cs │ │ └── OJS.Workers.Executors │ │ ├── IProcessExecutorFactory.cs │ │ ├── ITasksService.cs │ │ ├── Implementations │ │ ├── ProcessExecutorFactory.cs │ │ └── TasksService.cs │ │ ├── OJS.Workers.Executors.csproj │ │ ├── ProcessExecutor.cs │ │ ├── ProcessExecutorType.cs │ │ ├── StandardProcessExecutor.cs │ │ └── TaskInfo.cs ├── Infrastructure │ └── OJS.Services.Infrastructure │ │ ├── AutoMapperSingleton.cs │ │ ├── BackgroundJobs │ │ ├── IHangfireBackgroundJobsService.cs │ │ └── Implementations │ │ │ └── HangfireBackgroundJobsService.cs │ │ ├── Cache │ │ ├── ICacheService.cs │ │ └── Implementations │ │ │ └── CacheService.cs │ │ ├── CompositeValidationResult.cs │ │ ├── Configurations │ │ ├── ApplicationConfig.cs │ │ ├── ApplicationUrlsConfig.cs │ │ ├── BaseConfig.cs │ │ ├── EmailServiceConfig.cs │ │ ├── HealthCheckConfig.cs │ │ ├── HttpConfig.cs │ │ ├── MentorConfig.cs │ │ ├── MessageQueueConfig.cs │ │ ├── RedisConfig.cs │ │ └── SvnConfig.cs │ │ ├── Constants │ │ ├── CacheConstants.cs │ │ ├── EmailConstants.cs │ │ ├── LoggerMessageDefinitions.cs │ │ └── ResilienceStrategyConstants.cs │ │ ├── Emails │ │ └── IEmailService.cs │ │ ├── Exceptions │ │ ├── BusinessServiceException.cs │ │ └── CircuitBreakerNotOpenException.cs │ │ ├── Extensions │ │ ├── AutoMapperServiceCollectionExtensions.cs │ │ ├── MappingExtensions.cs │ │ ├── QueryableExtensions.cs │ │ ├── ServiceRegistrationServiceCollectionExtensions.cs │ │ └── ValidationResultExtensions.cs │ │ ├── ExternalDataRetrievalResult.cs │ │ ├── HttpClients │ │ ├── IHttpClientService.cs │ │ ├── IRabbitMqHttpClient.cs │ │ ├── ISulsPlatformHttpClientService.cs │ │ ├── Implementations │ │ │ ├── HttpClientService.cs │ │ │ ├── RabbitMqHttpClient.cs │ │ │ └── SulsPlatformHttpClientService.cs │ │ └── Models │ │ │ ├── RabbitMqChannelModel.cs │ │ │ ├── RabbitMqConsumerChannelDetails.cs │ │ │ ├── RabbitMqConsumerModel.cs │ │ │ ├── RabbitMqConsumerQueueModel.cs │ │ │ └── RabbitMqQueueModel.cs │ │ ├── IDatesService.cs │ │ ├── IRandomProvider.cs │ │ ├── IScopedService.cs │ │ ├── IService.cs │ │ ├── ISingletonService.cs │ │ ├── Implementations │ │ ├── DatesService.cs │ │ ├── EmailService.cs │ │ └── RandomProvider.cs │ │ ├── Models │ │ ├── ExceptionCacheEntry.cs │ │ ├── Mapping │ │ │ ├── IMapExplicitly.cs │ │ │ ├── IMapFrom.cs │ │ │ └── IMapTo.cs │ │ ├── ModelHelpers.cs │ │ ├── PagedResult.cs │ │ └── ValidationResult.cs │ │ ├── OJS.Services.Infrastructure.csproj │ │ └── ResilienceStrategies │ │ ├── Enums │ │ └── ResilienceStrategyEventType.cs │ │ ├── IRedisResilienceStrategiesService.cs │ │ ├── IResilienceStrategiesService.cs │ │ ├── Implementations │ │ ├── RedisResilienceStrategiesService.cs │ │ └── ResilienceStrategiesService.cs │ │ └── Listeners │ │ └── RedisCircuitBreakerListener.cs ├── Mentor │ ├── OJS.Services.Mentor.Business │ │ ├── IMentorBusinessService.cs │ │ ├── Implementations │ │ │ └── MentorBusinessService.cs │ │ └── OJS.Services.Mentor.Business.csproj │ └── OJS.Services.Mentor.Models │ │ ├── ConversationMessageModel.cs │ │ ├── ConversationMessageResponseModel.cs │ │ ├── ConversationRequestModel.cs │ │ ├── ConversationResponseModel.cs │ │ └── OJS.Services.Mentor.Models.csproj ├── UI │ ├── OJS.Services.Ui.Business │ │ ├── Cache │ │ │ ├── IContestCategoriesCacheService.cs │ │ │ ├── IContestParticipantsCacheService.cs │ │ │ ├── IContestsCacheService.cs │ │ │ ├── ILecturersInContestsCacheService.cs │ │ │ ├── IProblemsCacheService.cs │ │ │ ├── ISubmissionTypesCacheService.cs │ │ │ └── Implementations │ │ │ │ ├── ContestCategoriesCacheService.cs │ │ │ │ ├── ContestParticipantsCacheService.cs │ │ │ │ ├── ContestsCacheService.cs │ │ │ │ ├── LecturersInContestsCacheService.cs │ │ │ │ ├── ProblemsCache.cs │ │ │ │ └── SubmissionTypesCacheService.cs │ │ ├── Constants.cs │ │ ├── IContestCategoriesBusinessService.cs │ │ ├── IContestResultsBusinessService.cs │ │ ├── IContestsBusinessService.cs │ │ ├── IExamGroupsBusinessService.cs │ │ ├── IParticipantScoresBusinessService.cs │ │ ├── IParticipantsBusinessService.cs │ │ ├── IProblemGroupsBusinessService.cs │ │ ├── IProblemResourcesBusinessService.cs │ │ ├── IProblemsBusinessService.cs │ │ ├── ISearchBusinessService.cs │ │ ├── IStatisticsPreviewBusinessService.cs │ │ ├── ISubmissionTypesBusinessService.cs │ │ ├── ISubmissionsBusinessService.cs │ │ ├── ISubmissionsForProcessingBusinessService.cs │ │ ├── ISubmissionsHelper.cs │ │ ├── ITestsBusinessService.cs │ │ ├── IUsersBusinessService.cs │ │ ├── Implementations │ │ │ ├── ContestCategoriesBusinessService.cs │ │ │ ├── ContestResultsAggregatorService.cs │ │ │ ├── ContestResultsBusinessService.cs │ │ │ ├── ContestsBusinessService.cs │ │ │ ├── ExamGroupsBusinessService.cs │ │ │ ├── ParticipantScoresBusinessService.cs │ │ │ ├── ParticipantsBusinessService.cs │ │ │ ├── ProblemGroupsBusinessService.cs │ │ │ ├── ProblemResourcesBusinessService.cs │ │ │ ├── ProblemsBusinessService.cs │ │ │ ├── RecurringBackgroundJobsBusinessService.cs │ │ │ ├── SearchBusinessService.cs │ │ │ ├── StatisticsPreviewBusinessService.cs │ │ │ ├── SubmissionTypesBusinessService.cs │ │ │ ├── SubmissionsBusinessService.cs │ │ │ ├── SubmissionsForProcessingBusinessService.cs │ │ │ ├── SubmissionsHelper.cs │ │ │ ├── TestsBusinessService.cs │ │ │ └── UsersBusinessService.cs │ │ ├── OJS.Services.Ui.Business.csproj │ │ └── Validations │ │ │ └── Implementations │ │ │ ├── Contests │ │ │ ├── ContestDetailsValidationService.cs │ │ │ ├── ContestParticipationValidationService.cs │ │ │ ├── ContestResultsValidationService.cs │ │ │ ├── ContestValidationMessages.cs │ │ │ ├── IContestDetailsValidationService.cs │ │ │ ├── IContestParticipationValidationService.cs │ │ │ ├── IContestResultsValidationService.cs │ │ │ ├── ISubmissionFileDownloadValidationService.cs │ │ │ └── SubmissionFileDownloadValidationService.cs │ │ │ ├── Search │ │ │ ├── ISearchValidationService.cs │ │ │ └── SearchValidationService.cs │ │ │ └── Submissions │ │ │ ├── IRetestSubmissionValidationService.cs │ │ │ ├── ISubmissionDetailsValidationService.cs │ │ │ ├── ISubmissionResultsValidationService.cs │ │ │ ├── ISubmitSubmissionValidationService.cs │ │ │ ├── RetestSubmissionValidationService.cs │ │ │ ├── SubmissionDetailsValidationService.cs │ │ │ ├── SubmissionResultsValidationService.cs │ │ │ └── SubmitSubmissionValidationService.cs │ ├── OJS.Services.Ui.Data │ │ ├── IContestCategoriesDataService.cs │ │ ├── IContestsDataService.cs │ │ ├── IExamGroupsDataService.cs │ │ ├── IParticipantScoresDataService.cs │ │ ├── IParticipantsDataService.cs │ │ ├── IProblemGroupsDataService.cs │ │ ├── IProblemResourcesDataService.cs │ │ ├── IProblemsDataService.cs │ │ ├── ISubmissionTypesDataService.cs │ │ ├── ISubmissionsDataService.cs │ │ ├── ITestRunsDataService.cs │ │ ├── ITestsDataService.cs │ │ ├── IUsersProfileDataService.cs │ │ ├── Implementations │ │ │ ├── ContestCategoriesDataService.cs │ │ │ ├── ContestsDataExtensions.cs │ │ │ ├── ContestsDataService.cs │ │ │ ├── ExamGroupsDataService.cs │ │ │ ├── ParticipantScoresDataService.cs │ │ │ ├── ParticipantsDataService.cs │ │ │ ├── ProblemGroupsDataService.cs │ │ │ ├── ProblemResourcesDataService.cs │ │ │ ├── ProblemsDataService.cs │ │ │ ├── SubmissionTypesDataService.cs │ │ │ ├── SubmissionsDataService.cs │ │ │ ├── TestRunsDataService.cs │ │ │ ├── TestsDataService.cs │ │ │ └── UsersProfileDataService.cs │ │ └── OJS.Services.Ui.Data.csproj │ └── OJS.Services.Ui.Models │ │ ├── ApplicationConfig.cs │ │ ├── Cache │ │ ├── CheckerCacheModel.cs │ │ ├── ContestParticipantsCountCacheModel.cs │ │ ├── ProblemForSubmitCacheModel.cs │ │ ├── ProblemResourceCacheModel.cs │ │ ├── SubmissionTypeCacheModel.cs │ │ ├── SubmissionTypeInProblemCacheModel.cs │ │ └── TestCacheModel.cs │ │ ├── Contests │ │ ├── ContestCategoryServiceModel.cs │ │ ├── ContestDetailsServiceModel.cs │ │ ├── ContestFiltersServiceModel.cs │ │ ├── ContestForHomeIndexServiceModel.cs │ │ ├── ContestForListingServiceModel.cs │ │ ├── ContestParticipantResultServiceModel.cs │ │ ├── ContestParticipationServiceModel.cs │ │ ├── ContestParticipationValidationServiceModel.cs │ │ ├── ContestProblemResourceServiceModel.cs │ │ ├── ContestProblemServiceModel.cs │ │ ├── ContestRegistrationDetailsServiceModel.cs │ │ ├── ContestSortType.cs │ │ ├── ContestStatus.cs │ │ ├── ContestsForHomeIndexServiceModel.cs │ │ ├── LecturerInContestCategoryServiceModel.cs │ │ ├── LecturerInContestServiceModel.cs │ │ ├── ParticipantResultServiceModel.cs │ │ └── StartContestParticipationServiceModel.cs │ │ ├── OJS.Services.Ui.Models.csproj │ │ ├── Participants │ │ ├── ParticipantForContestDetailsServiceModel.cs │ │ ├── ParticipantForContestRegistrationServiceModel.cs │ │ ├── ParticipantServiceModel.cs │ │ ├── ParticipantSubmitServiceModel.cs │ │ └── ProblemForParticipantServiceModel.cs │ │ ├── Participations │ │ ├── ParticipationForProblemMaxScoreServiceModel.cs │ │ └── ParticipationServiceModel.cs │ │ ├── Problems │ │ ├── ContestDetailsProblemServiceModel.cs │ │ ├── ProblemGroupServiceModel.cs │ │ ├── ProblemResourceServiceModel.cs │ │ ├── ProblemResourceType.cs │ │ └── ProblemResultServiceModel.cs │ │ ├── Search │ │ ├── ContestSearchForListingServiceModel.cs │ │ ├── ContestSearchServiceResultModel.cs │ │ ├── ProblemContestSearchServiceModel.cs │ │ ├── ProblemSearchForListingServiceModel.cs │ │ ├── ProblemSearchResponseModel.cs │ │ ├── ProblemSearchServiceModel.cs │ │ ├── ProblemSearchServiceResultModel.cs │ │ ├── SearchServiceModel.cs │ │ ├── UserSearchForListingServiceModel.cs │ │ ├── UserSearchResponseModel.cs │ │ ├── UserSearchServiceModel.cs │ │ └── UserSearchServiceResultModel.cs │ │ ├── Statistics │ │ └── HomeStatisticsServiceModel.cs │ │ ├── SubmissionTypes │ │ ├── SubmissionTypeFilterServiceModel.cs │ │ └── SubmissionTypeServiceModel.cs │ │ ├── Submissions │ │ ├── ContestDetailsSubmissionTypeServiceModel.cs │ │ ├── FullDetailsPublicSubmissionsResponseModel.cs │ │ ├── FullDetailsPublicSubmissionsServiceModel.cs │ │ ├── ParticipantScoreModel.cs │ │ ├── ProblemForSubmissionDetailsServiceModel.cs │ │ ├── ProblemServiceModel.cs │ │ ├── PublicSubmissionsResponseModel.cs │ │ ├── PublicSubmissionsServiceModel.cs │ │ ├── SaveExecutionResultResponseModel.cs │ │ ├── SubmissionDetailsServiceModel.cs │ │ ├── SubmissionFileDetailsServiceModel.cs │ │ ├── SubmissionFileDownloadServiceModel.cs │ │ ├── SubmissionForContestParticipations.cs │ │ ├── SubmissionForRetestServiceModel.cs │ │ ├── SubmissionForSubmissionTypesFilterServiceModel.cs │ │ ├── SubmissionForSubmitSummaryServiceModel.cs │ │ ├── SubmissionTypeForSubmissionDetailsServiceModel.cs │ │ ├── SubmitSubmissionServiceModel.cs │ │ ├── TestDetailsServiceModel.cs │ │ ├── TestRunDetailsServiceModel.cs │ │ ├── TestRunServiceModel.cs │ │ └── TestSeparateDetailsServiceModel.cs │ │ └── Users │ │ ├── RoleServiceModel.cs │ │ ├── UserAuthInfoServiceModel.cs │ │ ├── UserProfileServiceModel.cs │ │ └── UserServiceModel.cs └── Worker │ ├── OJS.Services.Worker.Business │ ├── ExecutionContext │ │ ├── ExecutionContextConstants.cs │ │ ├── ICodeTemplatesProviderService.cs │ │ ├── IExecutionContextBuilderService.cs │ │ ├── IExecutionContextValuesProviderService.cs │ │ └── Implementations │ │ │ ├── CodeTemplatesProviderService.cs │ │ │ ├── ExecutionContextBuilderService.cs │ │ │ └── ExecutionContextValuesProviderService.cs │ ├── Extensions │ │ ├── LoggerFactoryExtensions.cs │ │ └── TaskResultServiceModelExtensions.cs │ ├── IExecutionStrategyFactory.cs │ ├── IHostInfoService.cs │ ├── ISubmissionExecutor.cs │ ├── ISubmissionsBusinessService.cs │ ├── Implementations │ │ ├── CompilerFactory.cs │ │ ├── ExecutionStrategyFactory.cs │ │ ├── ExecutionStrategySettingsProvider.cs │ │ ├── HostInfoService.cs │ │ ├── SubmissionExecutor.cs │ │ └── SubmissionsBusinessService.cs │ ├── OJS.Services.Worker.Business.csproj │ └── Validation │ │ ├── ISubmissionsValidationService.cs │ │ ├── Implementations │ │ └── SubmissionsValidationService.cs │ │ └── ValidationConstants.cs │ └── OJS.Services.Worker.Models │ ├── Configuration │ ├── ApplicationConfig.cs │ ├── MemoryConfig.cs │ ├── OjsWorkersConfig.cs │ ├── SubmissionExecutionConfig.cs │ └── TimeConfig.cs │ └── OJS.Services.Worker.Models.csproj ├── Tests ├── Common │ └── OJS.Common.Tests │ │ └── OJS.Common.Tests.csproj ├── Infrastructure │ └── OJS.Tests.Infrastructure │ │ └── OJS.Tests.Infrastructure.csproj ├── IntegrationTests │ └── IntegrationTests.Worker │ │ ├── AssemblyInfo.cs │ │ ├── BaseStrategyTest.cs │ │ ├── BaseSubmissionFactory.cs │ │ ├── CSharp │ │ ├── CSharpCodeParameters.cs │ │ ├── CSharpCodeSubmissionsFactory.cs │ │ └── CSharpCodeTests.cs │ │ ├── IntegrationTests.Worker.csproj │ │ ├── MassTransitEnvelope.cs │ │ ├── RabbitMqAndWorkerFixture.cs │ │ ├── TypeScript │ │ ├── TypeScriptCodeMochaUnitsTestsNodeJs20 │ │ │ ├── TypeScriptCodeMochaUnitsTestsNodeJs20Parameters.cs │ │ │ ├── TypeScriptCodeMochaUnitsTestsNodeJs20SubmissionFactory.cs │ │ │ └── TypeScriptCodeMochaUnitsTestsNodeJs20Tests.cs │ │ └── TypeScriptCodeNodeJs20 │ │ │ ├── TypeScriptCodeNodeJs20Parameters.cs │ │ │ ├── TypeScriptCodeNodeJs20SubmissionFactory.cs │ │ │ └── TypeScriptCodeNodeJs20Tests.cs │ │ └── WorkerTestsCollection.cs ├── ManualTestScripts │ ├── StrategiesDataScripts │ │ ├── CPlusPlus │ │ │ ├── c-plus-plus-correct-wrong-answer-test.json │ │ │ ├── c-plus-plus-time-limit-error-test.json │ │ │ └── c-plus-plus-zip-file-correct-wrong-runtime-test.json │ │ ├── CSharp │ │ │ ├── CSharpCode │ │ │ │ ├── dotnet6-code-compile-time-error.json │ │ │ │ ├── dotnet6-code-correct-wrong-runtime.json │ │ │ │ └── dotnet6-code-time-limit-error.json │ │ │ ├── CSharpProject │ │ │ │ ├── dotnet-6-project-compile-time-error-solution.zip │ │ │ │ ├── dotnet-6-project-compile-time-error-test.json │ │ │ │ ├── dotnet-6-project-correct-wrong-answer-solution.zip │ │ │ │ ├── dotnet-6-project-correct-wrong-answer-test.json │ │ │ │ ├── dotnet-6-project-runtime-error-solution.zip │ │ │ │ └── dotnet-6-project-runtime-error-test.json │ │ │ ├── CSharpProjectTests │ │ │ │ ├── dotnet-6-project-tests-compile-time-error.json │ │ │ │ ├── dotnet-6-project-tests-correct-answer-wrong-answer.json │ │ │ │ ├── dotnet6_project_tests_compile_time_error_solution.zip │ │ │ │ └── dotnet6_project_tests_correct_answer_solution.zip │ │ │ └── CSharpUnitTests │ │ │ │ ├── dotnet6-unit-tests-compile-time-error-solution.zip │ │ │ │ ├── dotnet6-unit-tests-compile-time-error-test.json │ │ │ │ ├── dotnet6-unit-tests-correct-wrong-answer-solution.zip │ │ │ │ └── dotnet6-unit-tests-correct-wrong-answer-test.json │ │ ├── Go │ │ │ ├── go-code-correct-wrong-answer-test.json │ │ │ ├── go-code-runtime-error-test.json │ │ │ └── go-code-time-limit-error.json │ │ ├── JS │ │ │ ├── JSCode │ │ │ │ ├── js-code-correct-wrong.json │ │ │ │ ├── js-code-runtime-error.json │ │ │ │ └── js-code-time-limit-error.json │ │ │ ├── NodeJS20DomUnitTests │ │ │ │ └── js-20-dom-unit-tests-correct-wrong-answer-test.json │ │ │ ├── NodeJS20MochaUnitTests │ │ │ │ └── nodejs20-mocha-unit-tests-correct-wrong-answer-test.json │ │ │ ├── NodeJS20SPAProjectMochaUnitTests │ │ │ │ ├── js-project-mocha-unit-tests-separate-tests-correct-wrong-answer-solution.zip │ │ │ │ └── js-project-mocha-unit-tests-separate-tests-correct-wrong-answer-test.json │ │ │ └── NodeJS20UnitTestsSinonAndMocha │ │ │ │ └── nodejs20-unit-tests-sinon-and-mocha-correct-wrong-answer-test.json │ │ ├── Java │ │ │ ├── Java21ProjectTests │ │ │ │ ├── java21-project-tests-compile-time-error-solution.zip │ │ │ │ ├── java21-project-tests-compile-time-error-test.json │ │ │ │ ├── java21-project-tests-correct-wrong-answer-solution.zip │ │ │ │ └── java21-project-tests-correct-wrong-answer-test.json │ │ │ ├── Java21UnitTests │ │ │ │ └── java21-unit-tests-correct-wrong-answer-solution.zip │ │ │ ├── Java21ZipFile │ │ │ │ ├── java21-zip-file-compile-time-error-solution.zip │ │ │ │ ├── java21-zip-file-compile-time-error-test.json │ │ │ │ ├── java21-zip-file-correct-wrong-answer-solution.zip │ │ │ │ ├── java21-zip-file-correct-wrong-answer-test.json │ │ │ │ ├── java21-zip-file-runtime-error-solution.zip │ │ │ │ └── java21-zip-file-runtime-error-test.json │ │ │ └── JavaCode │ │ │ │ ├── java-code-compile-time-error.json │ │ │ │ ├── java-code-correct-wrong-runtime.json │ │ │ │ └── java-code-timelimit-error.json │ │ ├── MySQL │ │ │ ├── MySQLPrepareDBAndRunQueries │ │ │ │ └── mysql-prepare-db-and-run-queries-correct-wrong-answer-test.json │ │ │ ├── MySQLRunQueriesAndCheckDB │ │ │ │ └── mysql-run-queries-and-check-db-correct-wrong-answer-test.json │ │ │ └── MySQLRunSkeletonRunQueriesAndCheckDB │ │ │ │ └── mysql-run-skeleton-run-queries-and-check-db-correct-wrong-answer-test.json │ │ ├── PostgreSQL │ │ │ ├── PostgreSQLPrepareDBAndRunQueries │ │ │ │ ├── postgresql-prepare-db-and-run-queries-correct-answer-test.json │ │ │ │ └── postgresql-prepare-db-and-run-queries-wrong-answer-test.json │ │ │ ├── PostgreSQLRunQueriesAndCheckDB │ │ │ │ └── postgresql-run-queries-and-check-db-correct-wrong-answer-test.json │ │ │ └── PostgreSQLRunSkeletonRunQueriesAndCheckDB │ │ │ │ └── pg-run-skeleton-run-queries-and-check-db-correct-wrong-answer-test.json │ │ ├── Python │ │ │ ├── PythonCode │ │ │ │ └── python-code-correct-wrong-timelimit-runtime-test.json │ │ │ ├── PythonCodeUnitTests │ │ │ │ ├── python-code-unit-tests-correct-wrong-answer-test.json │ │ │ │ └── python-code-unit-tests-runtime-error-test.json │ │ │ ├── PythonORM │ │ │ │ ├── python-orm-correct-wrong-answer-solution.zip │ │ │ │ ├── python-orm-correct-wrong-answer-test.json │ │ │ │ ├── python-orm-runtime-error-solution.zip │ │ │ │ └── python-orm-runtime-error-test.json │ │ │ ├── PythonProjectTests │ │ │ │ ├── python-project-tests-correct-wrong-runtime-solution.zip │ │ │ │ └── python-project-tests-correct-wrong-runtime-test.json │ │ │ ├── PythonProjectUnitTests │ │ │ │ ├── python-project-unit-tests-correct-wrong-answer-solution.zip │ │ │ │ └── python-project-unit-tests-correct-wrong-answer-test.json │ │ │ └── PythonUnitTests │ │ │ │ └── python-unit-tests-correct-wrong-answer-test.json │ │ └── SQLServer │ │ │ ├── SQLServerPrepareDBAndRunQueries │ │ │ └── sql-server-prepare-db-and-run-queries-correct-wrong-answer-test.json │ │ │ ├── SQLServerRunQueriesAndCheckDB │ │ │ └── sql-server-run-queries-and-check-db-correct-wrong-answer-test.json │ │ │ └── SQLServerRunSkeletonRunQueriesAndCheckDB │ │ │ └── sql-server-run-skeleton-run-queries-and-check-db-test.json │ └── run.sh └── Services │ └── Common │ ├── OJS.Services.Common.Business.Tests │ └── OJS.Services.Common.Business.Tests.csproj │ └── OJS.Services.Common.Data.Tests │ └── OJS.Services.Common.Data.Tests.csproj ├── Tools └── DeployEmailGenerator │ ├── DeployEmailGenerator.csproj │ ├── DeployEmailGeneratorConstants.cs │ ├── Models │ ├── EmailType.cs │ ├── ProjectMeta.cs │ └── ProjectMetaIssues.cs │ ├── Program.cs │ ├── Response │ └── GraphQLResponse.cs │ └── appsettings.json ├── automated_testing ├── .eslintrc.js ├── base │ └── Dockerfile ├── db │ └── Dockerfile ├── docker-compose.run.yml ├── docker-compose.yml ├── install_chrome_driver.sh ├── package.json ├── restore │ ├── create_db │ │ ├── 1__create.sql │ │ └── create.sh │ ├── drop_db │ │ ├── 06_Drop_DB.sql │ │ └── drop.sh │ └── restore_db │ │ ├── queries │ │ ├── 001__[dbo].[SubmissionTypes].sql │ │ ├── 002__[dbo].[ContestCategories].sql │ │ ├── 003__[dbo].[Contests].sql │ │ ├── 004__[dbo].[ProblemGroups].sql │ │ ├── 005__[dbo].[Problems].sql │ │ ├── 006__[dbo].[Tests].sql │ │ ├── 007__[dbo].[SubmissionTypeProblems].sql │ │ ├── 008__[dbo].[AspNetUsers].sql │ │ ├── 009__[dbo].[Participants].sql │ │ ├── 010__[dbo].[AspNetRoles].sql │ │ ├── 011__[dbo].[AspNetUserRoles].sql │ │ ├── 012__[dbo].[__EFMigrationsHistory].sql │ │ └── 013__[HangFire].[Server].sql │ │ └── restore.sh ├── run-tests.sh ├── run-ui-admin.sh ├── run-update-restore-queries.sh ├── test │ ├── Dockerfile │ ├── app.ts │ ├── config.ts │ ├── constants │ │ ├── auth-page-selectors.ts │ │ ├── contest-page-selectors.ts │ │ ├── index-page-selectors.ts │ │ └── submissions-details-page-selectors.ts │ ├── pageobjects │ │ ├── auth-page.ts │ │ ├── contest-page.ts │ │ ├── index-page.ts │ │ ├── page.ts │ │ └── submissions-details-page.ts │ ├── tests │ │ ├── auth-tests.ts │ │ ├── contest-test.ts │ │ ├── index-test.ts │ │ └── submissions-details-test.ts │ ├── tsconfig.json │ └── utils │ │ └── sleep.ts ├── update_restore_queries │ ├── Dockerfile │ ├── app.js │ ├── helpers │ │ ├── checkers.js │ │ ├── graphs.js │ │ ├── normalizers.js │ │ └── queriesBuilder.js │ ├── package.json │ └── yarn.lock ├── wdio.conf.ts └── yarn.lock ├── copy-old-judge-db.sql ├── docker-compose.yml ├── global.json ├── projects-workflow-scripts ├── package-lock.json ├── package.json └── update-linked-issues-status.js └── rabbitmq └── rabbitmq.conf /.dockerignore: -------------------------------------------------------------------------------- 1 | **/bin 2 | **/obj 3 | **/out 4 | **/.vscode 5 | **/.vs 6 | .dotnet 7 | **/node_modules 8 | .idea 9 | .dockerignore 10 | .env 11 | .git 12 | .gitignore 13 | docker-compose.yml 14 | docker-compose.*.yml -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto eol=lf 3 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | Closes https://github.com/SoftUni-Internal/exam-systems-issues/issues/your_issue_number 2 | 3 | **Summary of the changes made**: 4 | 1. {Describe your changes in the list} 5 | 2. 6 | -------------------------------------------------------------------------------- /.github/workflows/on_pr_open.yml: -------------------------------------------------------------------------------- 1 | name: PR opened 2 | 3 | on: 4 | pull_request: 5 | types: 6 | - opened 7 | jobs: 8 | move-issues-to-in-review-on-pr-opened: 9 | uses: ./.github/workflows/update-linked-issues-status.yml 10 | with: 11 | status_name: 4. In review 12 | secrets: inherit 13 | -------------------------------------------------------------------------------- /.github/workflows/on_pr_requested_changes.yml: -------------------------------------------------------------------------------- 1 | name: PR review submitted 2 | 3 | on: 4 | pull_request_review: 5 | types: [submitted] 6 | jobs: 7 | return-issues-for-changes-on-pr-requested-changes: 8 | if: github.event.review.state == 'changes_requested' 9 | uses: ./.github/workflows/update-linked-issues-status.yml 10 | with: 11 | status_name: 2. Returned for changes 12 | secrets: inherit 13 | -------------------------------------------------------------------------------- /Common/OJS.Common/Enumerations/ContestExportResultType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Enumerations 2 | { 3 | public enum ContestExportResultType 4 | { 5 | Compete, 6 | Practice, 7 | } 8 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Enumerations/ContestQuestionType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Enumerations 2 | { 3 | public enum ContestQuestionType 4 | { 5 | Default = 0, 6 | DropDown = 1, 7 | TextBox = 2, 8 | MultiLineTextBox = 3, 9 | } 10 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Enumerations/ContestType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Enumerations 2 | { 3 | public enum ContestType 4 | { 5 | Exercise = 0, 6 | OnsitePracticalExam = 1, 7 | OnlinePracticalExam = 2, 8 | Lab = 3, 9 | OnsitePracticalExamWithRandomTasks = 4, 10 | } 11 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Enumerations/CrudOperationType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Enumerations; 2 | 3 | public enum CrudOperationType 4 | { 5 | Create = 0, 6 | Read = 1, 7 | Update = 2, 8 | Delete = 3, 9 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Enumerations/MentorMessageRole.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Enumerations; 2 | 3 | public enum MentorMessageRole 4 | { 5 | System, 6 | User, 7 | Assistant, 8 | Tool, 9 | Function, 10 | Information, 11 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Enumerations/OpenAiModels.cs: -------------------------------------------------------------------------------- 1 | // ReSharper disable InconsistentNaming 2 | namespace OJS.Common.Enumerations; 3 | 4 | public enum OpenAIModels 5 | { 6 | Gpt4o, 7 | Gpt4oMini, 8 | O1Preview, 9 | O1Mini, 10 | Gpt35Turbo, 11 | TextEmbedding3Small, 12 | TextEmbedding3Large, 13 | DallE3, 14 | Whisper, 15 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Enumerations/ProblemGroupType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Enumerations 2 | { 3 | public enum ProblemGroupType 4 | { 5 | None = 0, 6 | ExcludedFromHomework = 1, 7 | } 8 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Enumerations/ProblemResourceType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Enumerations 2 | { 3 | public enum ProblemResourceType 4 | { 5 | ProblemDescription = 1, 6 | AuthorsSolution = 2, 7 | Other = 3, 8 | } 9 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Enumerations/SettingType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Enumerations; 2 | 3 | public enum SettingType 4 | { 5 | Numeric = 1, 6 | ShortString = 2, 7 | LongString = 3, 8 | DateTime = 4, 9 | Boolean = 5, 10 | Json = 6, 11 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Enumerations/SimilarityCheckType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Enumerations; 2 | 3 | public enum SimilarityCheckType 4 | { 5 | CSharp = 1, 6 | Java = 2, 7 | Text = 3, 8 | CSharpDotNetCore = 4, 9 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Enumerations/SubmissionExportType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Enumerations 2 | { 3 | using System.ComponentModel.DataAnnotations; 4 | 5 | public enum SubmissionExportType 6 | { 7 | [Display(Name = "All submission")] 8 | AllSubmissions = 1, 9 | 10 | [Display(Name = "Best submission")] 11 | BestSubmissions = 2, 12 | 13 | [Display(Name = "Latest submissions")] 14 | LastSubmissions = 3, 15 | } 16 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Enumerations/SubmissionProcessingState.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Enumerations; 2 | 3 | public enum SubmissionProcessingState 4 | { 5 | Invalid = 0, 6 | Pending = 1, 7 | Enqueued = 2, 8 | Processing = 3, 9 | Processed = 4, 10 | Faulted = 5, 11 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Enumerations/SubmissionStatus.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Enumerations 2 | { 3 | public enum SubmissionStatus 4 | { 5 | All = 1, 6 | Processing = 2, 7 | Enqueued = 3, 8 | Pending = 4, 9 | } 10 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Exceptions/ExceptionResponse.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Exceptions; 2 | 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | 6 | public class ExceptionResponse 7 | { 8 | public List Errors { get; set; } = new(); 9 | 10 | public bool IsValid => !this.Errors.Any(); 11 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Extensions/EnumerableExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Extensions; 2 | 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | 6 | public static class EnumerableExtensions 7 | { 8 | public static T? MaxOrDefault(this IEnumerable enumerable) 9 | => enumerable.DefaultIfEmpty() 10 | .Max(); 11 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Extensions/FormFileExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Extensions; 2 | 3 | using Microsoft.AspNetCore.Http; 4 | using System.IO; 5 | 6 | public static class FormFileExtensions 7 | { 8 | public static byte[] GetBytes(this IFormFile formFile) 9 | { 10 | using (var memoryStream = new MemoryStream()) 11 | { 12 | formFile.CopyTo(memoryStream); 13 | return memoryStream.ToArray(); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Extensions/StreamExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Extensions; 2 | 3 | using System.IO; 4 | using FluentExtensions.Extensions; 5 | 6 | public static class StreamExtensions 7 | { 8 | public static T FromJson(this Stream stream) 9 | { 10 | using var streamReader = new StreamReader(stream); 11 | var json = streamReader.ReadToEnd(); 12 | 13 | return json.FromJson(); 14 | } 15 | } -------------------------------------------------------------------------------- /Common/OJS.Common/Utils/EnumUtils.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Common.Utils; 2 | 3 | using System; 4 | 5 | public static class EnumUtils 6 | { 7 | public static TEnum[] GetValuesFrom() 8 | where TEnum : Enum 9 | => (TEnum[])Enum.GetValues(typeof(TEnum)); 10 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/AuditInfoEntity.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | using System; 4 | 5 | public class AuditInfoEntity : IAuditInfoEntity 6 | { 7 | public DateTime CreatedOn { get; set; } 8 | 9 | public DateTime? ModifiedOn { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/AuditInfoEntity{TId}.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | using System; 4 | 5 | public class AuditInfoEntity : Entity, IAuditInfoEntity 6 | { 7 | public DateTime CreatedOn { get; set; } 8 | 9 | public DateTime? ModifiedOn { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/DeletableAuditInfoEntity{TId}.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | using System; 4 | 5 | public class DeletableAuditInfoEntity : AuditInfoEntity, IDeletableAuditInfoEntity 6 | { 7 | public bool IsDeleted { get; set; } 8 | 9 | public DateTime? DeletedOn { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/Entity{TId}.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | using System.ComponentModel.DataAnnotations; 4 | using System.ComponentModel.DataAnnotations.Schema; 5 | 6 | public class Entity : IEntity 7 | { 8 | [Key] 9 | [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 10 | public TId Id { get; set; } = default!; 11 | } 12 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/IAuditInfoEntity.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | using System; 4 | 5 | public interface IAuditInfoEntity : IEntity 6 | { 7 | DateTime CreatedOn { get; set; } 8 | 9 | DateTime? ModifiedOn { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/IAuditInfoEntity{TId}.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | public interface IAuditInfoEntity : IEntity, IAuditInfoEntity 4 | { 5 | } 6 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/IDeletableAuditInfoEntity.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | public interface IDeletableAuditInfoEntity : IDeletableEntity, IAuditInfoEntity 4 | { 5 | } 6 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/IDeletableAuditInfoEntity{TId}.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | public interface IDeletableAuditInfoEntity : IDeletableEntity, IAuditInfoEntity, IDeletableAuditInfoEntity 4 | { 5 | } 6 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/IDeletableEntity.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | using System; 4 | 5 | public interface IDeletableEntity : IEntity 6 | { 7 | bool IsDeleted { get; set; } 8 | 9 | DateTime? DeletedOn { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/IDeletableEntity{TId}.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | public interface IDeletableEntity : IEntity, IDeletableEntity 4 | { 5 | } 6 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/IEntity.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | public interface IEntity 4 | { 5 | } 6 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/IEntity{TId}.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | public interface IEntity : IEntity 4 | { 5 | TId Id { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/IOrderableEntity.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | public interface IOrderableEntity : IEntity 4 | { 5 | double OrderBy { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/IProcessedEntity.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | using System; 4 | 5 | public interface IProcessedEntity : IEntity 6 | { 7 | DateTime ProcessedOn { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Common/IVisibleEntity.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Common 2 | { 3 | public interface IVisibleEntity 4 | { 5 | bool IsVisible { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/IpInContest.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models 2 | { 3 | using OJS.Data.Models.Contests; 4 | 5 | public class IpInContest 6 | { 7 | public int ContestId { get; set; } 8 | 9 | public virtual Contest Contest { get; set; } = null!; 10 | 11 | public int IpId { get; set; } 12 | 13 | public virtual Ip Ip { get; set; } = null!; 14 | 15 | public bool IsOriginallyAllowed { get; set; } 16 | } 17 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/LecturerInContest.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models 2 | { 3 | using OJS.Data.Models.Contests; 4 | using OJS.Data.Models.Users; 5 | using OJS.Data.Models.Common; 6 | 7 | public class LecturerInContest : AuditInfoEntity 8 | { 9 | public string LecturerId { get; set; } = string.Empty; 10 | 11 | public virtual UserProfile Lecturer { get; set; } = null!; 12 | 13 | public int ContestId { get; set; } 14 | 15 | public virtual Contest Contest { get; set; } = null!; 16 | } 17 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/ProblemForParticipant.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models 2 | { 3 | using OJS.Data.Models.Common; 4 | using OJS.Data.Models.Participants; 5 | using OJS.Data.Models.Problems; 6 | 7 | public class ProblemForParticipant : IEntity 8 | { 9 | public int ProblemId { get; set; } 10 | 11 | public virtual Problem Problem { get; set; } = null!; 12 | 13 | public int ParticipantId { get; set; } 14 | 15 | public virtual Participant Participant { get; set; } = null!; 16 | } 17 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Setting.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models 2 | { 3 | using OJS.Common.Enumerations; 4 | using OJS.Data.Models.Common; 5 | 6 | public class Setting : Entity 7 | { 8 | public string Name { get; set; } = string.Empty; 9 | 10 | public string Value { get; set; } = string.Empty; 11 | 12 | public SettingType Type { get; set; } 13 | } 14 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/SubmissionTypeInSubmissionDocument.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models; 2 | 3 | using OJS.Data.Models.Common; 4 | using OJS.Data.Models.Submissions; 5 | 6 | public class SubmissionTypeInSubmissionDocument : IEntity 7 | { 8 | public int SubmissionTypeId { get; set; } 9 | 10 | public SubmissionType SubmissionType { get; set; } = null!; 11 | 12 | public int SubmissionTypeDocumentId { get; set; } 13 | 14 | public virtual SubmissionTypeDocument SubmissionTypeDocument { get; set; } = null!; 15 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/UserInExamGroup.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models 2 | { 3 | using OJS.Data.Models.Contests; 4 | using OJS.Data.Models.Users; 5 | using OJS.Data.Models.Common; 6 | 7 | public class UserInExamGroup : IEntity 8 | { 9 | public string UserId { get; set; } = string.Empty; 10 | 11 | public virtual UserProfile User { get; set; } = null!; 12 | 13 | public int ExamGroupId { get; set; } 14 | 15 | public virtual ExamGroup ExamGroup { get; set; } = null!; 16 | } 17 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Users/Role.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Users; 2 | 3 | using Microsoft.AspNetCore.Identity; 4 | using OJS.Data.Models.Common; 5 | using System.Collections.Generic; 6 | 7 | public class Role : IdentityRole, IEntity 8 | { 9 | public Role() 10 | : base() 11 | { 12 | } 13 | 14 | public Role(string name) 15 | : base(name) 16 | { 17 | } 18 | 19 | public virtual ICollection UsersInRoles { get; set; } 20 | = new HashSet(); 21 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Models/Users/UserInRole.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Data.Models.Users; 2 | 3 | using Microsoft.AspNetCore.Identity; 4 | using OJS.Data.Models.Common; 5 | 6 | public class UserInRole : IdentityUserRole, IEntity 7 | { 8 | public virtual UserProfile User { get; set; } = null!; 9 | 10 | public virtual Role Role { get; set; } = null!; 11 | } -------------------------------------------------------------------------------- /Data/OJS.Data.Validation/OJS.Data.Validation.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | net8.0 4 | 5 | -------------------------------------------------------------------------------- /Docker/applications/fe/conf.d/upstreams.conf: -------------------------------------------------------------------------------- 1 | upstream ui_api { 2 | server ui; 3 | } -------------------------------------------------------------------------------- /Docker/envs/common.env: -------------------------------------------------------------------------------- 1 | # Environment Configuration 2 | ASPNETCORE_URLS=http://*:80 3 | DOTNET_RUNNING_IN_CONTAINER=true 4 | 5 | OTEL_EXPORTER_OTLP_ENDPOINT=http://dashboard:18889 -------------------------------------------------------------------------------- /Docker/envs/worker.env: -------------------------------------------------------------------------------- 1 | ASPNETCORE_ENVIRONMENT=Production 2 | DOTNET_RUNNING_IN_CONTAINER=true 3 | OTEL_RESOURCE_ATTRIBUTES=service.name=worker, deployment.environment=local -------------------------------------------------------------------------------- /Docker/worker_base/.gitignore: -------------------------------------------------------------------------------- 1 | java/.gradle 2 | java/javaLibs 3 | js/node_modules 4 | js/package-lock.json 5 | js-run-spa-in-docker-and-execute-mocha-tests/node_modules 6 | js-run-spa-in-docker-and-execute-mocha-tests/package-lock.json 7 | -------------------------------------------------------------------------------- /Docker/worker_base/java/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Docker/worker_base/java/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Docker/worker_base/java/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /Docker/worker_base/js/chromium-scripts/README.md: -------------------------------------------------------------------------------- 1 | # chromium-latest-linux 2 | Scripts to download and run the latest Linux build of Chromium. 3 | -------------------------------------------------------------------------------- /Docker/worker_base/js/chromium-scripts/run.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | BASEDIR=/judge-resources/js/node_modules/playwright/chromium-854489 4 | 5 | $BASEDIR/latest/chrome --user-data-dir="$BASEDIR/user-data-dir" $* &> /dev/null & 6 | -------------------------------------------------------------------------------- /Docker/worker_base/js/chromium-scripts/update-and-run.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | cd $(dirname $0) 3 | bash ./update.sh && bash ./run.sh 4 | -------------------------------------------------------------------------------- /Docker/worker_base/js/v12/js-run-spa-in-docker-and-execute-mocha-tests/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "js-apps-strategy", 3 | "version": "1.1.0", 4 | "description": "", 5 | "main": "index.html", 6 | "dependencies": { 7 | "lit-html": "1.3.0", 8 | "page": "1.11.6" 9 | }, 10 | "license": "ISC" 11 | } 12 | -------------------------------------------------------------------------------- /Docker/worker_base/js/v20/js-run-spa-in-docker-and-execute-mocha-tests/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "js-apps-strategy", 3 | "version": "1.1.0", 4 | "description": "", 5 | "main": "index.html", 6 | "dependencies": { 7 | "lit-html": "1.3.0", 8 | "page": "1.11.6" 9 | }, 10 | "license": "ISC" 11 | } 12 | -------------------------------------------------------------------------------- /Docker/worker_base/python/requirements.txt: -------------------------------------------------------------------------------- 1 | docker 2 | asgiref==3.8.1 3 | Django==5.0.4 4 | django-extensions==3.2.3 5 | django-test-migrations==1.3.0 6 | psycopg2==2.9.9 7 | psycopg2-binary==2.9.9 8 | sqlparse==0.5.0 9 | typing_extensions==4.11.0 10 | tzdata==2024.1 11 | -------------------------------------------------------------------------------- /PubSub/OJS.PubSub.Worker.Models/Submissions/RetestSubmissionPubSubModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.PubSub.Worker.Models.Submissions; 2 | 3 | public class RetestSubmissionPubSubModel 4 | { 5 | public int Id { get; set; } 6 | 7 | public bool Verbosely { get; set; } 8 | } -------------------------------------------------------------------------------- /PubSub/OJS.PubSub.Worker.Models/Submissions/SubmissionStartedProcessingPubSubModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.PubSub.Worker.Models.Submissions; 2 | 3 | public class SubmissionStartedProcessingPubSubModel 4 | { 5 | public int SubmissionId { get; set; } 6 | 7 | public DateTimeOffset ProcessingStartedAt { get; set; } 8 | } -------------------------------------------------------------------------------- /Servers/Administration/OJS.Servers.Administration/Controllers/BaseAdminViewController.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Servers/Administration/OJS.Servers.Administration/Controllers/BaseAdminViewController.cs -------------------------------------------------------------------------------- /Servers/Administration/OJS.Servers.Administration/Models/Problems/DeleteAllProblemsInContestViewModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Administration.Models.Problems; 2 | 3 | using OJS.Services.Common.Models.Contests; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class DeleteAllProblemsInContestViewModel : IMapFrom 7 | { 8 | public int Id { get; set; } 9 | 10 | public string? Name { get; set; } 11 | } -------------------------------------------------------------------------------- /Servers/Infrastructure/OJS.Servers.Infrastructure/Controllers/BaseApiController.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Infrastructure.Controllers; 2 | 3 | using Microsoft.AspNetCore.Mvc; 4 | using static OJS.Common.GlobalConstants.MimeTypes; 5 | 6 | [ApiController] 7 | [Route("api/[controller]/[action]")] 8 | [Produces(ApplicationJson)] 9 | public class BaseApiController : ControllerBase 10 | { 11 | } -------------------------------------------------------------------------------- /Servers/Infrastructure/OJS.Servers.Infrastructure/Controllers/BaseViewController.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Infrastructure.Controllers 2 | { 3 | using Microsoft.AspNetCore.Mvc; 4 | 5 | public class BaseViewController : Controller 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /Servers/Infrastructure/OJS.Servers.Infrastructure/Extensions/StringExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Infrastructure.Extensions; 2 | 3 | public static class StringExtensions 4 | { 5 | public static string ToApiName(this string apiVersion) 6 | => apiVersion 7 | .Replace(".", "-") 8 | .Replace(" ", string.Empty); 9 | } -------------------------------------------------------------------------------- /Servers/Infrastructure/OJS.Servers.Infrastructure/Extensions/TaskExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Infrastructure.Extensions; 2 | 3 | using Microsoft.AspNetCore.Mvc; 4 | using System.Threading.Tasks; 5 | 6 | public static class TaskExtensions 7 | { 8 | public static async Task ToOkResult(this Task task) 9 | => new(await task); 10 | 11 | public static async Task ToOkResult(this Task task) 12 | { 13 | await task; 14 | return new OkResult(); 15 | } 16 | } -------------------------------------------------------------------------------- /Servers/Infrastructure/OJS.Servers.Infrastructure/Extensions/ViewContextExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Infrastructure.Extensions; 2 | 3 | using Microsoft.AspNetCore.Mvc.Rendering; 4 | 5 | public static class ViewContextExtensions 6 | { 7 | public static string GetReturnUrl(this ViewContext viewContext) 8 | => viewContext.HttpContext.GetReturnUrl(); 9 | } -------------------------------------------------------------------------------- /Servers/Infrastructure/OJS.Servers.Infrastructure/Filters/HangfireAuthorizationFilter.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Infrastructure.Filters 2 | { 3 | using Hangfire.Dashboard; 4 | using OJS.Common.Extensions; 5 | 6 | public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter 7 | { 8 | public bool Authorize(DashboardContext context) 9 | => context 10 | .GetHttpContext() 11 | .User 12 | .IsAdmin(); 13 | } 14 | } -------------------------------------------------------------------------------- /Servers/Infrastructure/OJS.Servers.Infrastructure/Policy/ApiKeyRequirement.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Infrastructure.Policy; 2 | 3 | using Microsoft.AspNetCore.Authorization; 4 | 5 | public class ApiKeyRequirement(string headerName) : IAuthorizationRequirement 6 | { 7 | public string HeaderName { get; } = headerName; 8 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/.dockerignore: -------------------------------------------------------------------------------- 1 | .env -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/.env.development.local: -------------------------------------------------------------------------------- 1 | BROWSER=none 2 | VITE_UI_SERVER_URL = 'http://localhost:5010' 3 | VITE_ADMINISTRATION_URL = 'http://localhost:5001' 4 | VITE_PLATFORM_URL = 'http://localhost:44304' 5 | VITE_YOUTUBE_VIDEO_ID = 'EjQlqgTbvsE' -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/.env.production: -------------------------------------------------------------------------------- 1 | VITE_UI_SERVER_URL = 'https://alpha.judge.softuni.org' 2 | VITE_ADMINISTRATION_URL = 'https://admin.alpha.judge.softuni.org' 3 | VITE_PLATFORM_URL = 'https://platform.softuni.bg' 4 | VITE_YOUTUBE_VIDEO_ID = 'EjQlqgTbvsE' 5 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/.env.staging: -------------------------------------------------------------------------------- 1 | VITE_UI_SERVER_URL = 'https://dev.alpha.judge.softuni.org' 2 | VITE_ADMINISTRATION_URL = 'https://admin.dev.alpha.judge.softuni.org' 3 | VITE_PLATFORM_URL = 'https://dev.platform.softuni.bg' 4 | VITE_YOUTUBE_VIDEO_ID = 'EjQlqgTbvsE' 5 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/.swp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Servers/UI/OJS.Servers.Ui/ClientApp/.swp -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/admin.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Admin Panel 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/build/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore 5 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/dist/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything in this directory 2 | * 3 | # Except this file 4 | !.gitignore 5 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Servers/UI/OJS.Servers.Ui/ClientApp/public/favicon.ico -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "QuizSystem.Servers.Web", 3 | "name": "QuizSystem.Servers.Web", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": "./index.html", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | 3 | Disallow: /api/ 4 | Disallow: /administration/ 5 | 6 | Disallow: /login 7 | Disallow: /register 8 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/assets/mentor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Servers/UI/OJS.Servers.Ui/ClientApp/src/assets/mentor.png -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/common/common-types.ts: -------------------------------------------------------------------------------- 1 | // These are necessary for the app 2 | declare global { 3 | // eslint-disable-next-line @typescript-eslint/naming-convention 4 | interface Window { 5 | isLoggedIn: boolean; 6 | username: string; 7 | } 8 | } 9 | 10 | interface IDictionary { 11 | [key: string]: TValue; 12 | } 13 | 14 | type Anything = Record 15 | 16 | export type { 17 | IDictionary, 18 | Anything, 19 | }; 20 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/common/reduxNames.tsx: -------------------------------------------------------------------------------- 1 | // Submissions 2 | const submissionsServiceName = 'submissionsService'; 3 | const testsServiceName = 'testsService'; 4 | 5 | // Users 6 | const authorizationServiceName = 'authorizationService'; 7 | 8 | const usersSliceName = 'users'; 9 | 10 | const usersServiceName = 'usersService'; 11 | 12 | export { 13 | submissionsServiceName, 14 | testsServiceName, 15 | authorizationServiceName, 16 | usersSliceName, 17 | usersServiceName, 18 | }; 19 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/common/urls/client-urls.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable import/group-exports */ 2 | /* eslint-disable import/prefer-default-export */ 3 | 4 | export const CONTESTS_PATH = 'contests'; 5 | export const LOGIN_PATH = 'login'; 6 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/administration/common/export-excel/ExportExcel.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | 3 | .size { 4 | height: 35px; 5 | width: 35px; 6 | } 7 | 8 | .activeColor { 9 | color: colors.$primary-blue; 10 | } 11 | 12 | .disabledColor { 13 | color: colors.$color-btn-disabled; 14 | } 15 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/administration/common/file-upload/FileUpload.module.scss: -------------------------------------------------------------------------------- 1 | .fileUpload { 2 | display: flex; 3 | flex-direction: column; 4 | align-items: center; 5 | } 6 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/administration/contests/AdministrationContestPage.module.scss: -------------------------------------------------------------------------------- 1 | .paged { 2 | padding: 2rem; 3 | } 4 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/administration/problem-groups/types.ts: -------------------------------------------------------------------------------- 1 | import { IContestAutocomplete } from '../../../common/types'; 2 | 3 | /* eslint-disable import/prefer-default-export */ 4 | interface IProblemGroupAdministrationModel{ 5 | id: number; 6 | orderBy: number; 7 | type: string; 8 | contest: IContestAutocomplete; 9 | } 10 | 11 | export type { 12 | IProblemGroupAdministrationModel, 13 | }; 14 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/administration/problems/problem-form/ProblemForm.module.scss: -------------------------------------------------------------------------------- 1 | .flex { 2 | align-items: flex-start; 3 | display: flex; 4 | flex-direction: column; 5 | justify-content: center; 6 | margin: 1rem auto; 7 | } 8 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/administration/submission-type-documents/submission-type-document-form/SubmissionTypeDocumentForm.module.scss: -------------------------------------------------------------------------------- 1 | .visibilityToggle { 2 | align-items: center; 3 | display: flex; 4 | } 5 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/code-editor/CodeEditor.module.scss: -------------------------------------------------------------------------------- 1 | .editor { 2 | height: 415px; 3 | overflow: hidden; 4 | } 5 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/common/MetaTags.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Helmet } from 'react-helmet-async'; 3 | 4 | interface IMetaTagsProps { 5 | title: string; 6 | description: string; 7 | } 8 | 9 | const MetaTags = ({ title, description }: IMetaTagsProps) => ( 10 | 11 | {title} 12 | 13 | 14 | ); 15 | 16 | export default MetaTags; 17 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/common/RedirectExternal.ts: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react'; 2 | 3 | const RedirectExternal = (path: string) => { 4 | useEffect(() => { 5 | window.location.href = path; 6 | }); 7 | 8 | return null; 9 | }; 10 | 11 | export default RedirectExternal; 12 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/common/colcollection-key-utils.ts: -------------------------------------------------------------------------------- 1 | const defaultKeyFunc = (value: TValue) => { 2 | const objWithId = value as { id: string }; 3 | 4 | if (objWithId.id) { 5 | return objWithId.id.toString(); 6 | } 7 | 8 | return JSON.stringify(value); 9 | }; 10 | 11 | export default defaultKeyFunc; 12 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/contests/contest-strategies/ContestStrategies.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | @use 'src/styles/font-weights'; 3 | @use 'src/styles/variables'; 4 | @use 'src/styles/spacings'; 5 | 6 | .selectWrapper { 7 | align-items: center; 8 | display: flex; 9 | 10 | svg { 11 | cursor: pointer; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/file-uploader/FileUploader.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | @use 'src/styles/spacings'; 3 | 4 | .fileName { 5 | margin-top: auto; 6 | } 7 | 8 | .fileUploadContainer { 9 | align-content: space-evenly; 10 | display: flex; 11 | flex-direction: row; 12 | gap: 10px; 13 | } 14 | 15 | .uploadedFileWrapper { 16 | align-items: center; 17 | display: flex; 18 | 19 | svg { 20 | margin-right: spacings.$sp-8; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/guidelines/alert/Alert.module.scss: -------------------------------------------------------------------------------- 1 | .success-alert { 2 | background-color: (245, 78, 84); 3 | } 4 | 5 | .alert-button { 6 | font-size: 18px; 7 | margin: 0 20px; 8 | } 9 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/guidelines/buttons/ExternalLink.module.scss: -------------------------------------------------------------------------------- 1 | .externalLink { 2 | text-decoration: none; 3 | 4 | &:hover { 5 | text-decoration: underline; 6 | } 7 | 8 | .externalIcon { 9 | font-size: 0.7em; 10 | margin-bottom: 0.4em; 11 | margin-left: 0.4em; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/guidelines/dialog/ConfirmDialog.module.scss: -------------------------------------------------------------------------------- 1 | .position { 2 | height: 30%; 3 | left: 50%; 4 | position: absolute; 5 | top: 50%; 6 | transform: 'translate(50%, 50%)'; 7 | width: 30%; 8 | } 9 | 10 | .decline { 11 | color: #e24237 !important; 12 | } 13 | 14 | .confirm { 15 | color: #88bce7 !important; 16 | } 17 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/guidelines/forms/check-white.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/guidelines/icons/ErrorIcon.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | 3 | .icon { 4 | color: colors.$primary-red; 5 | } 6 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/guidelines/icons/MemoryLimitIcon.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | 3 | .icon { 4 | color: colors.$icon-yellow; 5 | gap: 5px; 6 | } 7 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/guidelines/icons/RuntimeErrorIcon.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | 3 | .icon { 4 | color: colors.$primary-red; 5 | } 6 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/guidelines/icons/TickIcon.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | 3 | .icon { 4 | color: colors.$primary-green; 5 | } 6 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/guidelines/icons/TimeLimitIcon.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | 3 | .icon { 4 | color: colors.$icon-yellow; 5 | gap: 5px; 6 | } 7 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/guidelines/icons/WrongAnswerIcon.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | 3 | .icon { 4 | color: colors.$primary-red; 5 | } 6 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/guidelines/icons/common/icon-sizes.tsx: -------------------------------------------------------------------------------- 1 | enum IconSize { 2 | Small = 1, 3 | Medium = 2, 4 | Large = 3, 5 | ExtraLarge = 4, 6 | } 7 | 8 | export default IconSize; 9 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/guidelines/icons/strategies/StrategyIcon.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | 3 | .icon { 4 | color: colors.$text-dark-gray-color; 5 | } 6 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/guidelines/pagination/PaginationControls.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | 3 | .paginationControlsMenu { 4 | display: flex; 5 | justify-content: flex-start; 6 | padding: 55px 0; 7 | 8 | button { 9 | svg { 10 | color: colors.$primary-blue; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/guidelines/spinning-loader/SpinningLoader.tsx: -------------------------------------------------------------------------------- 1 | import './SpinningLoader.scss'; 2 | 3 | const SpinningLoader = () => ( 4 |
5 |
6 |
7 |
8 |
9 |
10 | ); 11 | 12 | export default SpinningLoader; 13 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/portals/client/ClientPortal.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/spacings'; 2 | 3 | .main { 4 | display: flex; 5 | flex-direction: column; 6 | min-height: 100vh; 7 | padding-bottom: spacings.$sp-96; 8 | padding-top: spacings.$sp-96; 9 | } 10 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/profile/profile-submissions/ProfileSubmissions.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/spacings'; 2 | 3 | .profileSubmissionsGrid { 4 | margin-top: spacings.$sp-24; 5 | } 6 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/search/user-search-card/UserSearchCard.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/spacings'; 2 | @use 'src/styles/border-radiuses'; 3 | 4 | .userSearchCardWrapper { 5 | border: 1px solid; 6 | border-radius: border-radiuses.$br-6; 7 | cursor: pointer; 8 | display: block; 9 | margin-right: spacings.$sp-18; 10 | padding: spacings.$sp-8 spacings.$sp-12; 11 | text-align: center; 12 | } 13 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/submissions/execution-result/ErrorResult.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/variables'; 2 | @use 'src/styles/colors'; 3 | @use 'src/styles/spacings'; 4 | 5 | .compileAndUnknownError { 6 | color: colors.$primary-red; 7 | font-size: variables.$f-size-16; 8 | margin-left: spacings.$sp-4; 9 | } 10 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/submissions/execution-result/ExecutionResult.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | @use 'src/styles/variables'; 3 | 4 | .executionResultInfo { 5 | display: flex; 6 | flex-direction: row; 7 | gap: 5px; 8 | } 9 | 10 | .testResultsList { 11 | display: flex; 12 | justify-content: space-evenly; 13 | } 14 | 15 | .testRunsContainer { 16 | max-width: 10vw; 17 | } 18 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/submissions/execution-result/TestRunIcon.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/spacings'; 2 | @use 'src/styles/fonts'; 3 | 4 | .competeIconModal { 5 | @extend %font-family-normal; 6 | 7 | padding: spacings.$sp-8 spacings.$sp-18; 8 | } 9 | 10 | .trialTestIcon { 11 | opacity: 0.5; 12 | } 13 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/components/submissions/recent-submissions/RecentSubmissions.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | @use 'src/styles/spacings'; 3 | 4 | .recentSubmissionsWrapper { 5 | margin-top: spacings.$sp-32; 6 | 7 | .refreshIcon { 8 | float: right; 9 | } 10 | } 11 | 12 | .recentSubmissionsGrid { 13 | margin-top: spacings.$sp-18; 14 | } 15 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/hooks/common/use-routing.ts: -------------------------------------------------------------------------------- 1 | import { useCallback } from 'react'; 2 | 3 | const useNavigation = () => { 4 | const navigateInNewWindow = useCallback((url: string) => { 5 | window.open(`${window.location.origin}${url}`); 6 | }, []); 7 | 8 | return { navigateInNewWindow }; 9 | }; 10 | 11 | export default useNavigation; 12 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/layout/footer/PageFooter.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | @use 'src/styles/fonts'; 3 | @use 'src/styles/components'; 4 | @use 'src/styles/variables'; 5 | 6 | .footer { 7 | @extend %font-family-normal; 8 | 9 | background: colors.$background-color-footer; 10 | color: colors.$text-light-gray-color; 11 | min-height: 12vh; 12 | z-index: 1; 13 | } 14 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/layout/header/ThemeToggle.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/spacings'; 2 | 3 | .themeSwitchWrapper { 4 | margin-right: spacings.$sp-24; 5 | max-height: 33px; 6 | } 7 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/layout/header/software-university-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Servers/UI/OJS.Servers.Ui/ClientApp/src/layout/header/software-university-logo.png -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/pages/administration-new/AdministrationStyles.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | 3 | .errorText { 4 | color: colors.$primary-red; 5 | font-family: Roboto, Helvetica, Arial, sans-serif; 6 | font-size: 25px; 7 | margin: 10px; 8 | } 9 | 10 | .container { 11 | margin-top: 2rem; 12 | } 13 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/pages/administration-new/contest-categories/AdministrationContestCategories.module.scss: -------------------------------------------------------------------------------- 1 | .administrationModal { 2 | outline: none !important; 3 | border: none !important; 4 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/pages/administration-new/roles/AdministrationRolesPage.module.scss: -------------------------------------------------------------------------------- 1 | .button { 2 | align-items: center !important; 3 | display: flex !important; 4 | font-size: 25px !important; 5 | justify-content: center !important; 6 | } 7 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/pages/administration-new/submissions-for-processing/AdminSubmissionForProcessingDetails.module.scss: -------------------------------------------------------------------------------- 1 | .fieldBox { 2 | align-items: center; 3 | display: flex; 4 | flex-direction: column; 5 | height: auto; 6 | justify-content: space-between; 7 | width: 90%; 8 | } 9 | 10 | .fieldBox > div { 11 | width: 95%; 12 | } 13 | 14 | .inputRow { 15 | margin-bottom: 1rem !important; 16 | margin-top: 1rem !important; 17 | width: 90%; 18 | } 19 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/pages/administration-new/users/AdministrationUsersPage.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | 3 | .icon { 4 | color: colors.$primary-blue; 5 | height: 35px !important; 6 | width: 35px !important; 7 | } 8 | 9 | .button { 10 | align-items: center !important; 11 | display: flex !important; 12 | font-size: 25px !important; 13 | justify-content: center !important; 14 | } 15 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/pages/auth/logout/LogoutPage.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/fonts'; 2 | 3 | .logout { 4 | @extend %font-family-normal; 5 | 6 | display: flex; 7 | justify-content: center; 8 | margin-top: 50px; 9 | } 10 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/pages/contests/contest-register/ContestRegister.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | @use 'src/styles/spacings'; 3 | @use 'src/styles/variables'; 4 | @use 'src/styles/font-weights'; 5 | 6 | .contestRegisterWrapper { 7 | align-items: center; 8 | display: flex; 9 | justify-content: center; 10 | } 11 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/pages/home/HomePage.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/colors'; 2 | @use 'src/styles/fonts'; 3 | @use 'src/styles/variables'; 4 | @use 'src/styles/spacings'; 5 | @use 'src/styles/font-weights'; 6 | 7 | .homePageWrapper { 8 | @extend %font-family-normal; 9 | 10 | display: flex; 11 | } 12 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/pages/not-found/page-not-found.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Servers/UI/OJS.Servers.Ui/ClientApp/src/pages/not-found/page-not-found.png -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/pages/profile/ProfilePage.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/spacings'; 2 | @use 'src/styles/variables'; 3 | @use 'src/styles/colors'; 4 | @use 'src/styles/fonts'; 5 | 6 | .submissionsAndParticipationsToggle { 7 | display: flex; 8 | flex-direction: row; 9 | gap: spacings.$sp-24; 10 | margin-bottom: spacings.$sp-24; 11 | 12 | .toggleBtn { 13 | border-radius: 4px; 14 | font-size: variables.$f-size-18; 15 | width: 300px; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/pages/shared/set-layout.module.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/components'; 2 | @use 'src/styles/spacings'; 3 | 4 | .contentWrapper { 5 | @extend %contentSize; 6 | 7 | box-sizing: border-box; 8 | display: flex; 9 | flex: 1; 10 | flex-direction: column; 11 | padding: spacings.$sp-16 40px 0 0; 12 | 13 | &.wideContentWrapper { 14 | @extend %wide; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/redux/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | rules: { 3 | "no-param-reassign": "off", 4 | "import/group-exports": "off", 5 | "import/exports-last": "off", 6 | "no-unused-expressions": "off", 7 | "@typescript-eslint/ban-ts-comment": "off", 8 | }, 9 | }; -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/styles/_border-radiuses.scss: -------------------------------------------------------------------------------- 1 | $br-2: 2px; 2 | $br-4: 4px; 3 | $br-6: 6px; 4 | $br-8: 8px; 5 | $br-14: 14px; 6 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/styles/_font-weights.scss: -------------------------------------------------------------------------------- 1 | $font-weight-light: 400; 2 | $font-weight-regular: 500; 3 | $font-weight-medium: 600; 4 | $font-weight-semi-bold: 700; 5 | $font-weight-bold: 800; 6 | $font-weight-bolder: 900; 7 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/styles/_fonts.scss: -------------------------------------------------------------------------------- 1 | $font-family-roboto: roboto, serif; 2 | $font-style-normal: roboto, normal; 3 | 4 | %font-style-normal { 5 | font-family: $font-family-roboto; 6 | font-style: $font-style-normal; 7 | } 8 | 9 | %font-family-normal { 10 | @extend %font-style-normal; 11 | 12 | font-family: $font-family-roboto; 13 | } 14 | 15 | %font-family-regular { 16 | @extend %font-style-normal; 17 | 18 | font-family: $font-family-roboto; 19 | } 20 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/styles/_responsive.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/variables'; 2 | 3 | %r-heading-primary { 4 | @media only screen and (max-width: variables.$r-large-desktop-max) { 5 | font-size: variables.$f-size-20; 6 | } 7 | 8 | @media only screen and (max-width: variables.$r-large-max) { 9 | font-size: variables.$f-size-18; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/styles/_spacings.scss: -------------------------------------------------------------------------------- 1 | $sp-4: 4px; 2 | $sp-8: 8px; 3 | $sp-12: 12px; 4 | $sp-16: 16px; 5 | $sp-18: 18px; 6 | $sp-24: 24px; 7 | $sp-32: 32px; 8 | $sp-48: 48px; 9 | $sp-64: 64px; 10 | $sp-96: 96px; 11 | $sp-128: 128px; 12 | $sp-192: 192px; 13 | $sp-256: 256px; 14 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/types/redux-persist-indexeddb-storage.d.ts: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line import/no-unused-modules 2 | declare module 'redux-persist-indexeddb-storage' { 3 | import type { Storage } from 'redux-persist'; 4 | 5 | /** 6 | * Create an IndexedDB-backed Storage adapter for redux-persist. 7 | * @param dbName Optional DB name (defaults to "keyval-store") 8 | */ 9 | export default function createIDBStorage(dbName?: string): Storage; 10 | } 11 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/utils/check-utils.ts: -------------------------------------------------------------------------------- 1 | import isEmpty from 'lodash/isEmpty'; 2 | import isNil from 'lodash/isNil'; 3 | 4 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 5 | const isNilOrEmpty = (value: any): boolean => isNil(value) || isEmpty(value); 6 | export default isNilOrEmpty; 7 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/utils/class-names.ts: -------------------------------------------------------------------------------- 1 | type classNamesType = string | string[] | null | undefined; 2 | 3 | const concatClassNames = (...classNames:classNamesType[]) => classNames 4 | .filter((x) => x) 5 | .flat() 6 | .join(' '); 7 | 8 | export default concatClassNames; 9 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/utils/constants.ts: -------------------------------------------------------------------------------- 1 | const DEFAULT_ITEMS_PER_PAGE = 13; 2 | 3 | const DEFAULT_ROWS_PER_PAGE = [ 13, 25, 50, 100 ]; 4 | 5 | const CONTESTS_BULK_EDIT = 'contestsBulkEdit'; 6 | 7 | export { 8 | DEFAULT_ROWS_PER_PAGE, 9 | DEFAULT_ITEMS_PER_PAGE, 10 | CONTESTS_BULK_EDIT, 11 | }; 12 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/utils/dom-element-utils.ts: -------------------------------------------------------------------------------- 1 | const getTotalHeight = (element: HTMLElement) => { 2 | const computedStyle = getComputedStyle(element); 3 | 4 | const marginTop = parseFloat(computedStyle.marginTop); 5 | const marginBottom = parseFloat(computedStyle.marginBottom); 6 | 7 | return element.offsetHeight + marginTop + marginBottom; 8 | }; 9 | 10 | export default getTotalHeight; 11 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/utils/file-download-utils.ts: -------------------------------------------------------------------------------- 1 | const downloadFile = (blob:Blob, filename: string) => { 2 | const blobUrl = URL.createObjectURL(blob); 3 | 4 | const a = document.createElement('a'); 5 | document.body.appendChild(a); 6 | a.style.display = 'none'; 7 | a.href = blobUrl; 8 | a.download = filename; 9 | 10 | a.click(); 11 | a.remove(); 12 | URL.revokeObjectURL(blobUrl); 13 | }; 14 | export default downloadFile; 15 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/utils/id-generator.ts: -------------------------------------------------------------------------------- 1 | import { v4 as uuidv4 } from 'uuid'; 2 | 3 | const generateId = () => uuidv4().toString(); 4 | 5 | const getCompositeKey = (userId: string, problemId: number): string => `${userId}_${problemId}`; 6 | 7 | export { 8 | getCompositeKey, 9 | }; 10 | 11 | export default generateId; 12 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/ClientApp/src/utils/promise-utils.ts: -------------------------------------------------------------------------------- 1 | const wait = (seconds: number): Promise => new Promise((resolve) => { 2 | setTimeout(resolve, seconds * 1000); 3 | }); 4 | 5 | export default wait; 6 | -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/ContestRegisterRequestModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models; 2 | 3 | public class ContestRegisterRequestModel 4 | { 5 | public string? Password { get; set; } 6 | 7 | public bool? HasConfirmedParticipation { get; set; } 8 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/Contests/ContestParticipantResultResponseModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models.Contests; 2 | 3 | using OJS.Services.Ui.Models.Contests; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class ContestParticipantResultResponseModel : IMapFrom 7 | { 8 | public int? CompetePoints { get; set; } 9 | 10 | public int? PracticePoints { get; set; } 11 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/Contests/SubmitContestPasswordRequestModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models.Contests; 2 | 3 | public class SubmitContestPasswordRequestModel 4 | { 5 | public string Password { get; set; } = string.Empty; 6 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/ErrorViewModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models 2 | { 3 | public class ErrorViewModel 4 | { 5 | public string? RequestId { get; set; } 6 | 7 | public bool ShowRequestId => !string.IsNullOrEmpty(this.RequestId); 8 | } 9 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/HomeViewModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models 2 | { 3 | public class HomeViewModel 4 | { 5 | public bool IsAuthenticated { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/LoginRequestModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models 2 | { 3 | using System.ComponentModel.DataAnnotations; 4 | 5 | public class LoginRequestModel 6 | { 7 | [Required] 8 | public string UserName { get; set; } = string.Empty; 9 | 10 | [Required] 11 | public string Password { get; set; } = string.Empty; 12 | 13 | public bool RememberMe { get; set; } 14 | } 15 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/Problems/ProblemResultResponseModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models.Problems; 2 | 3 | using OJS.Services.Ui.Models.Problems; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class ProblemResultResponseModel : IMapFrom 7 | { 8 | public int ProblemId { get; set; } 9 | 10 | public int SubmissionId { get; set; } 11 | 12 | public short MaximumPoints { get; set; } 13 | 14 | public int Points { get; set; } 15 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/SubmissionTypes/SubmissionTypeFilterResponseModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models.SubmissionTypes; 2 | 3 | using OJS.Services.Ui.Models.SubmissionTypes; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class SubmissionTypeFilterResponseModel : IMapFrom 7 | { 8 | public int Id { get; set; } 9 | 10 | public string Name { get; set; } = string.Empty; 11 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/Submissions/BaseSubmissionRequestModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models.Submissions 2 | { 3 | public abstract class BaseSubmissionRequestModel 4 | { 5 | public int ProblemId { get; set; } 6 | 7 | public int SubmissionTypeId { get; set; } 8 | 9 | public bool IsOfficial { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/Submissions/CodeSubmissionRequestModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models.Submissions 2 | { 3 | using System.ComponentModel.DataAnnotations; 4 | 5 | public class CodeSubmissionRequestModel : BaseSubmissionRequestModel 6 | { 7 | [Required] 8 | [MinLength(5)] 9 | public string Content { get; set; } = null!; 10 | } 11 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/Submissions/Compete/RegisterRequestModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models.Submissions.Compete; 2 | 3 | public class RegisterRequestModel 4 | { 5 | public string? Password { get; set; } 6 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/Submissions/Details/SubmissionTypeForSubmissionDetailsResponseModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models.Submissions.Details; 2 | 3 | using OJS.Services.Ui.Models.Submissions; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class 7 | SubmissionTypeForSubmissionDetailsResponseModel : IMapFrom 8 | { 9 | public bool AllowBinaryFilesUpload { get; set; } 10 | 11 | public string Name { get; set; } = string.Empty; 12 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/Submissions/Details/TestDetailsResponseModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models.Submissions.Details; 2 | 3 | using OJS.Services.Infrastructure.Models.Mapping; 4 | using OJS.Services.Ui.Models.Submissions; 5 | 6 | public class TestDetailsResponseModel : IMapFrom 7 | { 8 | public int Id { get; set; } 9 | 10 | public string? Input { get; set; } 11 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/Submissions/FileSubmissionRequestModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models.Submissions 2 | { 3 | using Microsoft.AspNetCore.Http; 4 | using Newtonsoft.Json; 5 | using System.ComponentModel.DataAnnotations; 6 | 7 | public class FileSubmissionRequestModel : BaseSubmissionRequestModel 8 | { 9 | [Required] 10 | [JsonIgnore] 11 | public IFormFile File { get; set; } = null!; 12 | } 13 | } -------------------------------------------------------------------------------- /Servers/UI/OJS.Servers.Ui/Models/Users/UserResponseModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Ui.Models.Users; 2 | 3 | using OJS.Services.Infrastructure.Models.Mapping; 4 | using OJS.Services.Ui.Models.Users; 5 | 6 | public class UserResponseModel : IMapFrom 7 | { 8 | public string? UserName { get; set; } 9 | } -------------------------------------------------------------------------------- /Servers/Worker/OJS.Servers.Worker/Models/ExecutionContext/SubmissionCodeRequestModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Worker.Models.ExecutionContext 2 | { 3 | public class SubmissionCodeRequestModel : SubmissionBaseRequestModel 4 | { 5 | // [Required] 6 | public string? Code { get; set; } 7 | } 8 | } -------------------------------------------------------------------------------- /Servers/Worker/OJS.Servers.Worker/Models/ExecutionResult/Output/CheckerDetailsResponseModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Servers.Worker.Models.ExecutionResult.Output; 2 | 3 | using OJS.Workers.Common; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class CheckerDetailsResponseModel 7 | : IMapFrom 8 | { 9 | public string? Comment { get; set; } 10 | 11 | public string? ExpectedOutputFragment { get; set; } 12 | 13 | public string? UserOutputFragment { get; set; } 14 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/AccessLogs/IAccessLogsBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.AccessLogs; 2 | 3 | using OJS.Data.Models; 4 | using OJS.Services.Administration.Models.AccessLogs; 5 | 6 | public interface IAccessLogsBusinessService : IAdministrationOperationService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/AccessLogs/Permissions/AccessLogIdPermissionService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.AccessLogs.Permissions; 2 | 3 | using System.Threading.Tasks; 4 | using OJS.Data.Models; 5 | using OJS.Services.Common.Models.Users; 6 | 7 | public class AccessLogIdPermissionService : IEntityPermissionsService 8 | { 9 | public Task HasPermission(UserInfoModel user, int value, string operation) 10 | => Task.FromResult(user.IsAdmin); 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/AccessLogs/Validators/AccessLogAdministrationModelValidator.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.AccessLogs.Validators; 2 | 3 | using OJS.Data.Models; 4 | using OJS.Services.Administration.Models.AccessLogs; 5 | using OJS.Services.Common.Data; 6 | using OJS.Services.Common.Validation; 7 | 8 | public class AccessLogAdministrationModelValidator(IDataService dataService) : BaseValidator(); -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Checkers/ICheckersBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Checkers; 2 | 3 | using OJS.Data.Models.Checkers; 4 | using OJS.Services.Administration.Models.Checkers; 5 | 6 | public interface ICheckersBusinessService : IAdministrationOperationService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Checkers/Permissions/CheckerIdPermissionService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Checkers.Permissions; 2 | 3 | using OJS.Data.Models.Checkers; 4 | using OJS.Services.Common.Models.Users; 5 | using System.Threading.Tasks; 6 | 7 | public class CheckerIdPermissionService : IEntityPermissionsService 8 | { 9 | public async Task HasPermission(UserInfoModel user, int value, string action) 10 | => await Task.FromResult(user.IsAdmin); 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/ContestCategories/GridData/IContestCategoriesGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.ContestCategories.GridData; 2 | 3 | using OJS.Data.Models.Contests; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface IContestCategoriesGridDataService : IGridDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Contests/GridData/IContestsGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Contests.GridData; 2 | 3 | using OJS.Data.Models.Contests; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface IContestsGridDataService : IGridDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Contests/IContestsImportBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Contests; 2 | 3 | using Microsoft.AspNetCore.Http; 4 | using OJS.Services.Infrastructure; 5 | using System.Threading.Tasks; 6 | 7 | public interface IContestsImportBusinessService : IService 8 | { 9 | Task StreamImportContestsFromCategory(int sourceContestCategoryId, int destinationContestCategoryId, HttpResponse response, bool dryRun = true); 10 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/ExamGroups/GridData/IExamGroupsGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.ExamGroups.GridData; 2 | 3 | using OJS.Data.Models.Contests; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface IExamGroupsGridDataService : IGridDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/IContestCategoriesCacheService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business; 2 | 3 | using OJS.Services.Infrastructure; 4 | using System.Threading.Tasks; 5 | 6 | public interface IContestCategoriesCacheService : IService 7 | { 8 | Task ClearMainContestCategoriesCache(); 9 | 10 | Task ClearContestCategoryParentsAndChildren(int categoryId); 11 | 12 | Task ClearContestCategoryDetailsCache(int categoryId); 13 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/IContestsCacheService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business; 2 | 3 | using OJS.Services.Infrastructure; 4 | using System.Threading.Tasks; 5 | 6 | public interface IContestsCacheService : IService 7 | { 8 | Task ClearContestsCacheByContestId(int contestId); 9 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/IOrderableService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business; 2 | 3 | using OJS.Services.Infrastructure; 4 | using System.Collections.Generic; 5 | using System.Threading.Tasks; 6 | 7 | public interface IOrderableService : IService 8 | { 9 | Task ReevaluateOrder(IEnumerable entities); 10 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/IParticipantScoresBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business; 2 | 3 | using OJS.Services.Infrastructure; 4 | using System.Threading.Tasks; 5 | 6 | public interface IParticipantScoresBusinessService : IService 7 | { 8 | Task RecalculateForParticipantByProblem(int participantId, int problemId); 9 | 10 | Task NormalizeAllPointsThatExceedAllowedLimit(); 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/IProblemsCacheService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business; 2 | 3 | using System.Threading.Tasks; 4 | using OJS.Services.Infrastructure; 5 | 6 | public interface IProblemsCacheService : IService 7 | { 8 | Task ClearProblemCacheById(int problemId); 9 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/IUserProviderService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business; 2 | 3 | using OJS.Services.Common.Models.Users; 4 | using OJS.Services.Infrastructure; 5 | 6 | public interface IUserProviderService : IScopedService 7 | { 8 | UserInfoModel GetCurrentUser(); 9 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/IWorkersBusyRatioMonitor.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business; 2 | 3 | using OJS.Services.Administration.Models; 4 | using OJS.Services.Infrastructure; 5 | using System.Threading; 6 | 7 | public interface IWorkersBusyRatioMonitor : ISingletonService 8 | { 9 | void StartMonitoring(CancellationToken cancellationToken); 10 | 11 | void StopMonitoring(); 12 | 13 | WorkersBusyRatioServiceModel GetWorkersBusyRatio(); 14 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Implementations/ContestResultsAggregatorService.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Services/Administration/OJS.Services.Administration.Business/Implementations/ContestResultsAggregatorService.cs -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/LecturersInCategories/GridData/ILecturersInCategoriesGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.LecturersInCategories.GridData; 2 | 3 | using OJS.Data.Models; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface ILecturersInCategoriesGridDataService : IGridDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/LecturersInContests/GridData/ILecturersInContestsGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.LecturersInContests.GridData; 2 | 3 | using OJS.Data.Models; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface ILecturersInContestsGridDataService : IGridDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/MentorPromptTemplates/IMentorPromptTemplateBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.MentorPromptTemplates; 2 | 3 | using OJS.Data.Models.Mentor; 4 | using OJS.Services.Administration.Models.MentorPromptTemplates; 5 | 6 | public interface IMentorPromptTemplateBusinessService : IAdministrationOperationService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Participants/GridData/IParticipantsGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Participants.GridData; 2 | 3 | using OJS.Data.Models.Participants; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface IParticipantsGridDataService : IGridDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/ProblemGroups/GridData/IProblemGroupsGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.ProblemGroups.GridData; 2 | 3 | using OJS.Data.Models.Problems; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface IProblemGroupsGridDataService : IGridDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/ProblemResources/GridData/IProblemResourcesGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.ProblemResources.GridData; 2 | 3 | using OJS.Data.Models.Problems; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface IProblemResourcesGridDataService : IGridDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/ProblemResources/IProblemResourcesBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.ProblemResources; 2 | 3 | using OJS.Data.Models.Problems; 4 | using OJS.Services.Administration.Models.ProblemResources; 5 | using System.Threading.Tasks; 6 | 7 | public interface IProblemResourcesBusinessService : IAdministrationOperationService 8 | { 9 | Task GetResourceFile(int id); 10 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Problems/GridData/IProblemsGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Problems.GridData; 2 | 3 | using OJS.Data.Models.Problems; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface IProblemsGridDataService : IGridDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Roles/GridData/IRoleGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Roles.GridData; 2 | 3 | using OJS.Data.Models.Users; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface IRoleGridDataService : IGridDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Roles/Permissions/RoleIdPermissionService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Roles.Permissions; 2 | 3 | using OJS.Data.Models.Users; 4 | using OJS.Services.Common.Models.Users; 5 | using System.Threading.Tasks; 6 | 7 | public class RoleIdPermissionService : IEntityPermissionsService 8 | { 9 | public async Task HasPermission(UserInfoModel user, string value, string operation) => await Task.FromResult(user.IsAdmin); 10 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Settings/ISettingsBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Settings; 2 | 3 | using OJS.Data.Models; 4 | using OJS.Services.Administration.Models.Settings; 5 | using System.Threading.Tasks; 6 | 7 | public interface ISettingsBusinessService : IAdministrationOperationService 8 | { 9 | Task GetByKey(string settingKey); 10 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Settings/Permissions/SettingIdPermissionService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Settings.Permissions; 2 | 3 | using OJS.Data.Models; 4 | using OJS.Services.Common.Models.Users; 5 | using System.Threading.Tasks; 6 | 7 | public class SettingIdPermissionService : IEntityPermissionsService 8 | { 9 | public async Task HasPermission(UserInfoModel user, int value, string operation) => await Task.FromResult(user.IsAdmin); 10 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Similarity/IDetectSimilarityVisitor.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Similarity; 2 | 3 | public interface IDetectSimilarityVisitor 4 | { 5 | string Visit(string text); 6 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Similarity/ISimilarityDetector.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Similarity; 2 | 3 | using OJS.Services.Administration.Models.Similarity; 4 | using OJS.Services.Infrastructure; 5 | using System.Collections.Generic; 6 | 7 | public interface ISimilarityDetector : IService 8 | { 9 | SimilarityResult DetectPlagiarism( 10 | string firstSource, 11 | string secondSource, 12 | IEnumerable? visitors = null); 13 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Similarity/SimilarityDetector/ISimilarityDetectorFactory.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Similarity.SimilarityDetector; 2 | 3 | using OJS.Services.Infrastructure; 4 | 5 | public interface ISimilarityDetectorFactory : IService 6 | { 7 | ISimilarityDetector CreatePlagiarismDetector(SimilarityDetectorCreationContext context); 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/SubmissionTypeDocuments/GridData/ISubmissionTypeDocumentsGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.SubmissionTypeDocuments.GridData; 2 | 3 | using OJS.Data.Models.Submissions; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface ISubmissionTypeDocumentsGridDataService : IGridDataService; -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/SubmissionTypes/Validators/IDeleteOrReplaceSubmissionTypeValidationService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.SubmissionTypes.Validators; 2 | 3 | using OJS.Data.Models.Submissions; 4 | using OJS.Services.Common.Validation; 5 | 6 | public interface IDeleteOrReplaceSubmissionTypeValidationService : IValidationServiceAsync<( 7 | int, 8 | int?, 9 | SubmissionType?, 10 | SubmissionType?, 11 | bool shouldDoSubmissionsDeletion)> 12 | { 13 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/SubmissionTypesInSubmissionDocuments/GridData/ISubmissionTypesInSubmissionDocumentsGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.SubmissionTypesInSubmissionDocuments.GridData; 2 | 3 | using OJS.Data.Models; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface ISubmissionTypesInSubmissionDocumentsGridDataService : IGridDataService; -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Submissions/GridData/ISubmissionsGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Submissions.GridData; 2 | 3 | using OJS.Data.Models.Submissions; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface ISubmissionsGridDataService : IGridDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Tests/GridData/ITestsGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Tests.GridData; 2 | 3 | using OJS.Data.Models.Tests; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface ITestsGridDataService : IGridDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Users/GridData/IUsersGridDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Users.GridData; 2 | 3 | using OJS.Data.Models.Users; 4 | using OJS.Services.Administration.Data; 5 | 6 | public interface IUsersGridDataService : IGridDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Users/IUsersBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Users; 2 | 3 | using OJS.Data.Models.Users; 4 | using OJS.Services.Administration.Models.Users; 5 | 6 | public interface IUsersBusinessService : IAdministrationOperationService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Users/Permissions/UserIdPermissionService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Users.Permissions; 2 | 3 | using OJS.Data.Models.Users; 4 | using OJS.Services.Common.Models.Users; 5 | using System.Threading.Tasks; 6 | 7 | public class UserIdPermissionService : IEntityPermissionsService 8 | { 9 | public async Task HasPermission(UserInfoModel user, string value, string operation) 10 | => await Task.FromResult(user.IsAdmin); 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/UsersMentors/IUsersMentorsBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.UsersMentors; 2 | 3 | using OJS.Data.Models.Mentor; 4 | using OJS.Services.Administration.Models.UsersMentors; 5 | 6 | public interface IUsersMentorsBusinessService : IAdministrationOperationService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Validation/Helpers/IContestsValidationHelper.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Validation.Helpers; 2 | 3 | using OJS.Services.Infrastructure; 4 | using System.Threading.Tasks; 5 | using OJS.Services.Infrastructure.Models; 6 | 7 | public interface IContestsValidationHelper : IService 8 | { 9 | Task ValidatePermissionsOfCurrentUser(int? contestId); 10 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Business/Validation/Helpers/IProblemsValidationHelper.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Business.Validation.Helpers; 2 | 3 | using OJS.Services.Infrastructure; 4 | using OJS.Services.Infrastructure.Models; 5 | using System.Threading.Tasks; 6 | 7 | public interface IProblemsValidationHelper : IService 8 | { 9 | Task ValidatePermissionsOfCurrentUser(int problemId); 10 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Data/ICheckersDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Data; 2 | 3 | using OJS.Data.Models.Checkers; 4 | using OJS.Services.Common.Data; 5 | 6 | public interface ICheckersDataService : IDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Data/IExamGroupsDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Data; 2 | 3 | using OJS.Data.Models.Contests; 4 | using OJS.Services.Common.Data; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | 8 | public interface IExamGroupsDataService : IDataService 9 | { 10 | Task GetContestIdById(int id); 11 | IQueryable GetByIdWithUsersQuery(int id); 12 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Data/IIpsDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Data 2 | { 3 | using OJS.Data.Models; 4 | using OJS.Services.Common.Data; 5 | using System.Threading.Tasks; 6 | 7 | public interface IIpsDataService : IDataService 8 | { 9 | Task GetByValue(string value); 10 | } 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Data/IProblemResourcesDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Data 2 | { 3 | using OJS.Data.Models.Problems; 4 | using OJS.Services.Common.Data; 5 | using System.Linq; 6 | 7 | public interface IProblemResourcesDataService : IDataService 8 | { 9 | IQueryable GetByProblemQuery(int problemId); 10 | 11 | void DeleteByProblem(int problemId); 12 | } 13 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Data/ISubmissionTypesDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Data 2 | { 3 | using System.Linq; 4 | using OJS.Data.Models.Submissions; 5 | using OJS.Services.Common.Data; 6 | using OJS.Services.Infrastructure; 7 | 8 | public interface ISubmissionTypesDataService : IService, IDataService 9 | { 10 | IQueryable GetAll(); 11 | } 12 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Data/ISubmissionTypesInProblemsDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Data; 2 | 3 | using OJS.Data.Models; 4 | using OJS.Services.Common.Data; 5 | using OJS.Services.Infrastructure; 6 | using System.Linq; 7 | 8 | public interface ISubmissionTypesInProblemsDataService : IService, IDataService 9 | { 10 | IQueryable GetAllByProblem(int problemId); 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Data/ITestsDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Data 2 | { 3 | using OJS.Data.Models.Tests; 4 | using OJS.Services.Common.Data; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | 8 | public interface ITestsDataService : IDataService 9 | { 10 | IQueryable GetByIdQuery(int id); 11 | 12 | IQueryable GetAllByProblem(int problemId); 13 | 14 | Task DeleteByProblem(int problemId); 15 | } 16 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Data/IUsersDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Data; 2 | 3 | using OJS.Services.Common.Data; 4 | using OJS.Data.Models.Users; 5 | 6 | public interface IUsersDataService : IDataService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Data/Implementations/AdministrationDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Data.Implementations; 2 | 3 | using OJS.Data; 4 | using OJS.Data.Models.Common; 5 | using OJS.Services.Common.Data.Implementations; 6 | 7 | public class AdministrationDataService : DataService 8 | where TEntity : class, IEntity 9 | { 10 | public AdministrationDataService(OjsDbContext db) 11 | : base(db) 12 | => this.SetIgnoreQueryFilters(true); 13 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Data/Implementations/CheckersDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Data.Implementations; 2 | 3 | using OJS.Data; 4 | using OJS.Data.Models.Checkers; 5 | 6 | public class CheckersDataService : AdministrationDataService, ICheckersDataService 7 | { 8 | public CheckersDataService(OjsDbContext db) 9 | : base(db) 10 | { 11 | } 12 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Data/Implementations/UsersDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Data.Implementations 2 | { 3 | using OJS.Data; 4 | using OJS.Data.Models.Users; 5 | 6 | public class UsersDataService : AdministrationDataService, IUsersDataService 7 | { 8 | public UsersDataService(OjsDbContext users) 9 | : base(users) 10 | { 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/AdditionalFormFields.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models; 2 | 3 | public enum AdditionalFormFields 4 | { 5 | SolutionSkeletonRaw, 6 | ProblemGroupType, 7 | Tests, 8 | AdditionalFiles, 9 | SubmissionTypes, 10 | AllowedIps, 11 | Input, 12 | Output, 13 | File, 14 | RetestProblem, 15 | Type, 16 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/BaseDropdownModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models; 2 | 3 | public class BaseDropdownModel 4 | { 5 | public TId? Id { get; set; } 6 | 7 | public string? Name { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/ContestCategories/ContestCategoriesHierarchyEditModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.ContestCategories; 2 | 3 | public class ContestCategoriesHierarchyEditModel 4 | { 5 | public int Id { get; set; } 6 | 7 | public int? ParentId { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/ContestCategories/ContestCategoriesInContestView.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.ContestCategories; 2 | using OJS.Data.Models.Contests; 3 | using OJS.Services.Infrastructure.Models.Mapping; 4 | 5 | public class ContestCategoriesInContestView : IMapFrom 6 | { 7 | public int Id { get; set; } 8 | 9 | public string? Name { get; set; } 10 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Contests/Categories/ContestCategoriesValidationServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Contests.Categories; 2 | 3 | public class ContestCategoriesValidationServiceModel 4 | { 5 | public double OrderBy { get; set; } 6 | 7 | public string? Name { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Contests/ContestActivityModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Contests; 2 | 3 | using OJS.Services.Common.Models.Contests; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class ContestActivityModel : IMapFrom 7 | { 8 | public bool CanBeCompeted { get; set; } 9 | 10 | public bool CanBePracticed { get; set; } 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Contests/ContestResultsExportRequestModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Contests 2 | { 3 | using OJS.Common.Enumerations; 4 | 5 | public class ContestResultsExportRequestModel 6 | { 7 | public int Id { get; set; } 8 | 9 | public ContestExportResultType Type { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Contests/ContestTransferParticipantsModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Contests; 2 | 3 | public class ContestTransferParticipantsModel 4 | { 5 | public int ContestId { get; set; } 6 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Contests/ContestsGetExistingIdsRequestModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Contests; 2 | 3 | using System.Collections.Generic; 4 | 5 | public class ContestsGetExistingIdsRequestModel 6 | { 7 | public IEnumerable Ids { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Contests/Problems/ContestCopyProblemsValidationServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Contests.Problems; 2 | 3 | using OJS.Data.Models.Contests; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class ContestCopyProblemsValidationServiceModel : IMapFrom 7 | { 8 | public int Id { get; set; } 9 | 10 | public string? Name { get; set; } 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Contests/Problems/ContestDeleteProblemsValidationServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Contests.Problems; 2 | 3 | public class ContestDeleteProblemsValidationServiceModel 4 | { 5 | public int Id { get; set; } 6 | 7 | public bool IsActive { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Contests/SimillarityCheckModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Contests; 2 | 3 | using OJS.Common.Enumerations; 4 | using System.Collections.Generic; 5 | 6 | public class SimillarityCheckModel 7 | { 8 | public List? ContestIds { get; set; } 9 | 10 | public SimilarityCheckType SimilarityCheckType { get; set; } 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/ExamGroups/MultipleUsersToExamGroupModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.ExamGroups; 2 | 3 | public class MultipleUsersToExamGroupModel 4 | { 5 | public int ExamGroupId { get; set; } 6 | 7 | public string? UserNames { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/ExamGroups/UserInExamGroupCreateDeleteValidationServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.ExamGroups; 2 | 3 | public class UserInExamGroupCreateDeleteValidationServiceModel 4 | { 5 | public int? ContestId { get; set; } 6 | 7 | public bool IsCreate { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/ExamGroups/UserToExamGroupModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.ExamGroups; 2 | 3 | public class UserToExamGroupModel 4 | { 5 | public int ExamGroupId { get; set; } 6 | 7 | public string? UserId { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/LecturerInCategories/LecturerToCategoryModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.LecturerInCategories; 2 | 3 | using OJS.Common.Enumerations; 4 | 5 | public class LecturerToCategoryModel 6 | { 7 | public string? LecturerId { get; set; } 8 | 9 | public int CategoryId { get; set; } 10 | 11 | public CrudOperationType OperationType { get; set; } 12 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/LecturerInContests/LecturerToContestModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.LecturerInContests; 2 | 3 | using OJS.Common.Enumerations; 4 | 5 | public class LecturerToContestModel 6 | { 7 | public string? LecturerId { get; set; } 8 | 9 | public int ContestId { get; set; } 10 | 11 | public CrudOperationType OperationType { get; set; } 12 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/ParticipantScoreModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models 2 | { 3 | public class ParticipantScoreModel 4 | { 5 | public int Points { get; set; } 6 | 7 | public int SubmissionId { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/ParticipantScores/Models/ParticipantSummarySubmissionInfoServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.ParticipantScores.Models; 2 | 3 | public class ParticipantSummarySubmissionInfoServiceModel 4 | { 5 | public int ProblemGroup { get; set; } 6 | public double TimeTaken { get; set; } 7 | 8 | // Submission content rows count 9 | public int Length { get; set; } 10 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Participants/ChangeParticipationTimeForMultipleParticipantsModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Participants; 2 | 3 | using System; 4 | 5 | public class ChangeParticipationTimeForMultipleParticipantsModel : ChangeParticipationTimeModel 6 | { 7 | public DateTime? ChangeParticipationTimeRangeStart { get; set; } 8 | 9 | public DateTime? ChangeParticipationTimeRangeEnd { get; set; } 10 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Participants/ChangeParticipationTimeForSingleParticipantModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Participants; 2 | 3 | public class ChangeParticipationTimeForSingleParticipantModel : ChangeParticipationTimeModel 4 | { 5 | public string UserId { get; set; } = string.Empty; 6 | 7 | public string Username { get; set; } = string.Empty; 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Participants/ChangeParticipationTimeModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Participants; 2 | 3 | public class ChangeParticipationTimeModel 4 | { 5 | public int ContestId { get; set; } 6 | 7 | public string ContestName { get; set; } = string.Empty; 8 | 9 | public int TimeInMinutes { get; set; } 10 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/ProblemGroups/ProblemGroupDownloadModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.ProblemGroups; 2 | 3 | using OJS.Data.Models.Problems; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class ProblemGroupDropdownModel : IMapFrom 7 | { 8 | public int Id { get; set; } 9 | 10 | public double OrderBy { get; set; } 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/ProblemResources/ResourceServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.ProblemResources; 2 | 3 | public class ResourceServiceModel 4 | { 5 | public byte[]? Content { get; set; } 6 | 7 | public string? MimeType { get; set; } 8 | 9 | public string? FileName { get; set; } 10 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Problems/CopyAllToContestViewModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Problems; 2 | 3 | public class CopyAllToContestViewModel 4 | { 5 | public int SourceContestId { get; set; } 6 | 7 | public int DestinationContestId { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Problems/CopyProblemRequestModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Problems; 2 | 3 | public class CopyProblemRequestModel 4 | { 5 | public int DestinationContestId { get; set; } 6 | 7 | public int? ProblemGroupId { get; set; } 8 | 9 | public int ProblemId { get; set; } 10 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Problems/ProblemRetestValidationModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Problems; 2 | 3 | public class ProblemRetestValidationModel 4 | { 5 | public int SubmissionsCount { get; set; } 6 | 7 | public double AverageExecutionTime { get; set; } 8 | 9 | public bool RetestAllowed { get; set; } 10 | 11 | public string Message { get; set; } = string.Empty; 12 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Problems/ProblemServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Problems; 2 | 3 | using OJS.Data.Models.Problems; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class ProblemServiceModel : IMapFrom 7 | { 8 | public int Id { get; set; } 9 | 10 | public string Name { get; set; } = null!; 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Roles/RoleInListModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Roles; 2 | 3 | using OJS.Data.Models.Users; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class RoleInListModel : IMapFrom 7 | { 8 | public string? Id { get; set; } 9 | 10 | public string? Name { get; set; } 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Roles/RoleResponseModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Roles; 2 | 3 | using OJS.Data.Models.Users; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class RoleResponseModel : IMapFrom 7 | { 8 | public string? Id { get; set; } 9 | 10 | public string? Name { get; set; } 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Roles/UserToRoleModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Roles; 2 | 3 | using OJS.Common.Enumerations; 4 | 5 | public class UserToRoleModel 6 | { 7 | public string? RoleId { get; set; } 8 | 9 | public string? UserId { get; set; } 10 | 11 | public CrudOperationType OperationType { get; set; } 12 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Settings/SettingInListModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Settings; 2 | 3 | using OJS.Common.Enumerations; 4 | using OJS.Data.Models; 5 | using OJS.Services.Infrastructure.Models.Mapping; 6 | 7 | public class SettingInListModel : IMapFrom 8 | { 9 | public int Id { get; set; } 10 | 11 | public string? Name { get; set; } 12 | 13 | public string? Value { get; set; } 14 | 15 | public SettingType Type { get; set; } 16 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Similarity/ShortestMiddleSnakeReturnData.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Similarity; 2 | 3 | public struct ShortestMiddleSnakeReturnData 4 | { 5 | public int X { get; set; } 6 | 7 | public int Y { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/SubmissionTypeDocuments/DeleteSubmissionTypeDocumentModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.SubmissionTypeDocuments; 2 | 3 | public class DeleteSubmissionTypeDocumentModel 4 | { 5 | public int SubmissionTypeId { get; set; } 6 | 7 | public int SubmissionTypeDocumentId { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/SubmissionTypes/ReplaceSubmissionTypeServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.SubmissionTypes; 2 | 3 | public class ReplaceSubmissionTypeServiceModel 4 | { 5 | public int SubmissionTypeToReplace { get; set; } 6 | 7 | public int? SubmissionTypeToReplaceWith { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/SubmissionTypes/SubmissionTypeInDocument.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.SubmissionTypes; 2 | 3 | using OJS.Data.Models.Submissions; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class SubmissionTypeInDocument : IMapFrom 7 | { 8 | public int Id { get; set; } 9 | 10 | public string Name { get; set; } = string.Empty; 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Submissions/DownloadSubmissionsModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Submissions 2 | { 3 | using OJS.Common.Enumerations; 4 | 5 | public class DownloadSubmissionsModel 6 | { 7 | public int ContestId { get; set; } 8 | 9 | public ContestExportResultType ContestExportResultType { get; set; } 10 | 11 | public SubmissionExportType SubmissionExportType { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Tests/ProblemDropdownModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Tests; 2 | 3 | using OJS.Data.Models.Problems; 4 | 5 | using OJS.Services.Infrastructure.Models.Mapping; 6 | 7 | public class ProblemDropdownModel : BaseDropdownModel, IMapFrom 8 | { 9 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Tests/TestTypeEnum.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Tests; 2 | 3 | public enum TestTypeEnum 4 | { 5 | Standard = 0, 6 | Trial = 1, 7 | Open = 2, 8 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Tests/TestsImportRequestModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Tests; 2 | 3 | using Microsoft.AspNetCore.Http; 4 | 5 | public class TestsImportRequestModel 6 | { 7 | public int ProblemId { get; set; } 8 | 9 | public bool DeleteOldTests { get; set; } 10 | 11 | public bool RetestProblem { get; set; } 12 | 13 | public IFormFile? Tests { get; set; } 14 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Tests/TestsMappingUtils.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Tests; 2 | 3 | public static class TestsMappingUtils 4 | { 5 | public static string MapTestType(bool isTrialTest, bool isOpenTest) 6 | => isOpenTest 7 | ? TestTypeEnum.Open.ToString() 8 | : isTrialTest 9 | ? TestTypeEnum.Trial.ToString() 10 | : TestTypeEnum.Standard.ToString(); 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/Users/UserDropdownModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models.Users; 2 | 3 | using OJS.Data.Models.Users; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class UserDropdownModel : IMapFrom 7 | { 8 | public string? Id { get; set; } 9 | 10 | public string? UserName { get; set; } 11 | } -------------------------------------------------------------------------------- /Services/Administration/OJS.Services.Administration.Models/WorkersBusyRatioServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Administration.Models; 2 | 3 | public record WorkersBusyRatioServiceModel( 4 | double ExponentialMovingAverageRatio, 5 | double RollingAverageRatio, 6 | int WorkersTotalCount, 7 | int SubmissionsAwaitingExecution); 8 | -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Data/IContestResultsAggregatorCommonService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Data; 2 | 3 | using OJS.Services.Common.Models.Contests; 4 | using OJS.Services.Common.Models.Contests.Results; 5 | using OJS.Services.Infrastructure; 6 | 7 | public interface IContestResultsAggregatorCommonService : IService 8 | { 9 | ContestResultsViewModel GetContestResults(ContestResultsModel contestResultsModel, IContestActivityServiceModel contestActivity); 10 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Data/IParticipantScoresCommonDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Data; 2 | 3 | using OJS.Data.Models.Participants; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | 7 | public interface IParticipantScoresCommonDataService 8 | { 9 | IQueryable GetAllByParticipants(IEnumerable participantIds); 10 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Data/IParticipantsCommonDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Data; 2 | 3 | using OJS.Data.Models.Participants; 4 | using System.Linq; 5 | 6 | public interface IParticipantsCommonDataService : IDataService 7 | { 8 | IQueryable GetAllByContest(int contestId); 9 | 10 | IQueryable GetAllByContestAndIsOfficial(int contestId, bool isOfficial); 11 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Data/ISettingsCacheService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Data; 2 | 3 | using OJS.Services.Infrastructure; 4 | using System.Threading.Tasks; 5 | 6 | public interface ISettingsCacheService : IService 7 | { 8 | Task GetRequiredValue(string name); 9 | 10 | Task GetValue(string name, T defaultValue); 11 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Data/ISubmissionsCommonDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Data; 2 | 3 | using OJS.Data.Models.Submissions; 4 | using System.Linq; 5 | 6 | public interface ISubmissionsCommonDataService : IDataService 7 | { 8 | IQueryable GetAllPending(int? fromMinutesAgo = null); 9 | 10 | IQueryable GetAllEnqueued(); 11 | 12 | IQueryable GetAllProcessing(); 13 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Data/Pagination/ISortingService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Data.Pagination; 2 | 3 | using OJS.Services.Infrastructure; 4 | using System.Linq; 5 | 6 | public interface ISortingService : IService 7 | { 8 | IQueryable ApplySorting(IQueryable query, string? sorting); 9 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Models/BaseAdministrationModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Models; 2 | 3 | using OJS.Common.Enumerations; 4 | 5 | public abstract class BaseAdministrationModel 6 | { 7 | public TId? Id { get; set; } 8 | 9 | public CrudOperationType OperationType { get; set; } 10 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Models/Contests/ICanBeCompetedAndPracticed.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Models.Contests; 2 | 3 | public interface ICanBeCompetedAndPracticed 4 | { 5 | int Id { get; set; } 6 | 7 | bool CanBeCompeted { get; set; } 8 | 9 | bool CanBePracticed { get; set; } 10 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Models/Contests/Results/UserPercentageResultsServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Models.Contests.Results; 2 | 3 | public class UserPercentageResultsServiceModel 4 | { 5 | public string UserId { get; set; } = null!; 6 | 7 | public double ResultsInPercentages { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Models/InMemoryFile.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Models; 2 | 3 | using OJS.Common.Extensions.Strings; 4 | 5 | public class InMemoryFile 6 | { 7 | public InMemoryFile() 8 | { 9 | } 10 | 11 | public InMemoryFile(string fileName, string content) 12 | { 13 | this.FileName = fileName; 14 | this.Content = content.ToByteArray(); 15 | } 16 | 17 | public string FileName { get; set; } = string.Empty; 18 | 19 | public byte[]? Content { get; set; } 20 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Models/Pagination/Enums/OperatorType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Data.Pagination.Enums; 2 | 3 | public enum OperatorType 4 | { 5 | Equals = 1, 6 | NotEquals = 2, 7 | Contains = 3, 8 | GreaterThan = 4, 9 | LessThan = 5, 10 | LessThanOrEqual = 6, 11 | GreaterThanOrEqual = 7, 12 | StartsWith = 8, 13 | EndsWith = 9, 14 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Models/Pagination/PaginationRequestModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Models.Pagination; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | public class PaginationRequestModel 5 | { 6 | [Range(1, 100)] 7 | public int ItemsPerPage { get; set; } = 50; 8 | 9 | [Range(1, int.MaxValue)] 10 | public int Page { get; set; } = 1; 11 | 12 | public string? Sorting { get; set; } 13 | 14 | public string? Filter { get; set; } 15 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Models/ServiceResult.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Models 2 | { 3 | public class ServiceResult 4 | { 5 | public ServiceResult(string? error) => this.Error = error; 6 | 7 | public static ServiceResult Success => new(null); 8 | 9 | public string? Error { get; } 10 | 11 | public bool IsError => !string.IsNullOrWhiteSpace(this.Error); 12 | } 13 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Models/ServiceResult{T}.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Models 2 | { 3 | public class ServiceResult : ServiceResult 4 | { 5 | public ServiceResult(string? error) 6 | : base(error) 7 | { 8 | } 9 | 10 | public T? Data { get; private set; } 11 | 12 | public static new ServiceResult Success(T data) 13 | => new(null) 14 | { 15 | Data = data, 16 | }; 17 | } 18 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Models/Settings/SettingsServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Models.Settings; 2 | 3 | using Infrastructure.Models.Mapping; 4 | using OJS.Common.Enumerations; 5 | using OJS.Data.Models; 6 | 7 | public class SettingServiceModel : IMapTo 8 | { 9 | public int Id { get; set; } 10 | 11 | public string Name { get; set; } = string.Empty; 12 | 13 | public string Value { get; set; } = string.Empty; 14 | 15 | public SettingType Type { get; set; } 16 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Models/Submissions/ExecutionContext/ExecutionOptionsServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Models.Submissions.ExecutionContext 2 | { 3 | public class ExecutionOptionsServiceModel 4 | { 5 | public bool KeepDetails { get; set; } = true; 6 | 7 | public bool EscapeTests { get; set; } 8 | 9 | public bool EscapeLineEndings { get; set; } = true; 10 | } 11 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Models/Submissions/ExecutionDetails/BaseExecutionDetailsServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Models.Submissions.ExecutionDetails 2 | { 3 | public class BaseExecutionDetailsServiceModel 4 | { 5 | public byte[]? TaskSkeleton { get; set; } 6 | 7 | public string? TaskSkeletonAsString { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common.Models/Submissions/OutputResultServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Models.Submissions 2 | { 3 | public class OutputResultServiceModel 4 | { 5 | public int TimeUsed { get; set; } 6 | 7 | public int MemoryUsed { get; set; } 8 | 9 | public string ResultType { get; set; } = null!; 10 | 11 | public string Output { get; set; } = null!; 12 | } 13 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common/Exceptions/MessageBusNotHealthyException.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Exceptions; 2 | 3 | using System; 4 | 5 | public class MessageBusNotHealthyException : Exception 6 | { 7 | private const string DefaultMessage = "The message bus is not in a healthy state."; 8 | 9 | public MessageBusNotHealthyException() 10 | : base(DefaultMessage) 11 | { 12 | } 13 | 14 | public MessageBusNotHealthyException(string message) 15 | : base(message) 16 | { 17 | } 18 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common/Extensions/UserInfoModelExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Extensions; 2 | 3 | using System.Linq; 4 | using OJS.Services.Common.Models.Users; 5 | 6 | public static class UserInfoModelExtensions 7 | { 8 | public static bool IsInRoles(this UserInfoModel model, string[] roles) 9 | => model.Roles.Any(roles.Contains); 10 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common/IFileIoService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common; 2 | 3 | using OJS.Services.Infrastructure; 4 | using System.Threading.Tasks; 5 | 6 | public interface IFileIoService : IService 7 | { 8 | void CreateDirectory(string directoryPath); 9 | 10 | string CreateTempDirectory(); 11 | 12 | bool DirectoryExists(string directoryPath); 13 | 14 | void SafeDeleteDirectory(string path, bool recursive = false); 15 | 16 | Task SaveFile(string path, byte[] content); 17 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common/IFileSystemService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common; 2 | 3 | using Microsoft.AspNetCore.Http; 4 | using OJS.Services.Infrastructure; 5 | 6 | public interface IFileSystemService : IService 7 | { 8 | string GetFileExtension(IFormFile file); 9 | 10 | string BuildPath(params string[] paths); 11 | 12 | string GetRandomFileName(); 13 | 14 | string GetTempPath(); 15 | 16 | string GetTempDirectory(string directoryName); 17 | 18 | bool FileExists(string filePath); 19 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common/INotDefaultValueValidationService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common; 2 | 3 | using OJS.Services.Infrastructure; 4 | using OJS.Services.Infrastructure.Models; 5 | 6 | public interface INotDefaultValueValidationService : IService 7 | { 8 | ValidationResult GetValidationResult(T value, string valueName, string? customErrorMessage); 9 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common/IPublisherService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common; 2 | 3 | using System.Threading.Tasks; 4 | using System.Collections.Generic; 5 | using System.Threading; 6 | 7 | public interface IPublisherService 8 | { 9 | Task Publish(T obj, CancellationToken? cancellationToken = null) 10 | where T : class; 11 | 12 | Task PublishBatch(IReadOnlyCollection objs, CancellationToken? cancellationToken = null) 13 | where T : class; 14 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common/IUserProviderService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common; 2 | 3 | using OJS.Services.Common.Models.Users; 4 | using OJS.Services.Infrastructure; 5 | 6 | public interface IUserProviderService : IScopedService 7 | { 8 | UserInfoModel GetCurrentUser(); 9 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common/IZipArchivesService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common; 2 | 3 | using OJS.Services.Common.Models; 4 | using OJS.Services.Infrastructure; 5 | using System.Collections.Generic; 6 | using System.Threading.Tasks; 7 | 8 | public interface IZipArchivesService : IService 9 | { 10 | Task GetZipArchive(IEnumerable files); 11 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common/Validation/BaseValidator.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Validation; 2 | 3 | using FluentValidation; 4 | 5 | public abstract class BaseValidator : AbstractValidator 6 | { 7 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common/Validation/Helpers/INotDefaultValueValidationHelper.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Validation.Helpers; 2 | 3 | using OJS.Services.Infrastructure; 4 | using OJS.Services.Infrastructure.Models; 5 | 6 | public interface INotDefaultValueValidationHelper : IService 7 | { 8 | ValidationResult ValidateValueIsNotDefault(T? value, string valueName, string? customErrorMessage = null); 9 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common/Validation/IValidationService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Validation; 2 | 3 | using OJS.Services.Infrastructure; 4 | using OJS.Services.Infrastructure.Models; 5 | 6 | public interface IValidationService : IService 7 | { 8 | ValidationResult GetValidationResult(T? item); 9 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common/Validation/IValidationServiceAsync.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Validation; 2 | 3 | using OJS.Services.Infrastructure; 4 | using OJS.Services.Infrastructure.Models; 5 | using System.Threading.Tasks; 6 | 7 | public interface IValidationServiceAsync : IService 8 | { 9 | Task GetValidationResult(T? item); 10 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Services.Common/Validation/ValidationConstants.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Common.Validation; 2 | 3 | public static class ValidationConstants 4 | { 5 | public const string CannotBeTemplate = "{0} cannot be {1}"; 6 | public const string CannotBeNullTemplate = "{0} cannot be null"; 7 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/CheckerDetails.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common 2 | { 3 | public class CheckerDetails 4 | { 5 | public string? Comment { get; set; } = string.Empty; 6 | 7 | public string? ExpectedOutputFragment { get; set; } = string.Empty; 8 | 9 | public string? UserOutputFragment { get; set; } = string.Empty; 10 | } 11 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/CheckerResultType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common 2 | { 3 | using System; 4 | 5 | [Flags] 6 | public enum CheckerResultType 7 | { 8 | Ok = 0, 9 | 10 | WrongAnswer = 1 << 0, 11 | 12 | InvalidOutputFormat = 1 << 1, 13 | 14 | InvalidNumberOfLines = 1 << 2, 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/Exceptions/ConfigurationException.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common.Exceptions; 2 | 3 | public class ConfigurationException(string message) : Exception(message); -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/Exceptions/DerivedImplementationNotFoundException.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common.Exceptions 2 | { 3 | using System; 4 | 5 | public class DerivedImplementationNotFoundException : Exception 6 | { 7 | private const string ExceptionMessage = "The method should be implemented in the derived class"; 8 | 9 | public DerivedImplementationNotFoundException() 10 | : base(ExceptionMessage) 11 | { 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/Exceptions/SolutionException.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common.Exceptions; 2 | 3 | public class SolutionException(string message) : Exception(message); 4 | -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/Exceptions/StrategyException.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common.Exceptions; 2 | 3 | public class StrategyException(Exception innerException) : Exception("", innerException); -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/Extensions/CollectionExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common.Extensions; 2 | 3 | public static class CollectionExtensions 4 | { 5 | public static void AddRange(this ICollection destination, IEnumerable source) 6 | { 7 | foreach (var obj in source) 8 | { 9 | destination.Add(obj); 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/IChecker.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common 2 | { 3 | public interface IChecker 4 | { 5 | CheckerResult Check(string inputData, string receivedOutput, string expectedOutput, bool isTrialTest); 6 | 7 | void SetParameter(string parameter); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/IDependencyContainer.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common 2 | { 3 | using System; 4 | 5 | public interface IDependencyContainer 6 | { 7 | T GetInstance() 8 | where T : class; 9 | 10 | IDisposable BeginDefaultScope(); 11 | } 12 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/IExecutionStrategy.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common 2 | { 3 | public interface IExecutionStrategy 4 | { 5 | Task> SafeExecute( 6 | IExecutionContext executionContext, 7 | IOjsSubmission submission) 8 | where TResult : ISingleCodeRunResult, new(); 9 | } 10 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/ISingleCodeRunResult.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common 2 | { 3 | public interface ISingleCodeRunResult 4 | { 5 | int TimeUsed { get; } 6 | 7 | int MemoryUsed { get; } 8 | } 9 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/Models/ExceptionType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common.Models 2 | { 3 | /// 4 | /// Possible types of exceptions during the execution of a worker. 5 | /// 6 | public enum ExceptionType 7 | { 8 | Solution = 0, 9 | Configuration = 1, 10 | Strategy = 2, 11 | Remote = 3, 12 | Other = 4, 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/Models/ExecutionType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common.Models 2 | { 3 | public enum ExecutionType 4 | { 5 | NotFound = 0, 6 | SimpleExecution = 1, 7 | TestsExecution = 2, 8 | SimpleTemplateExecution = 3, 9 | TestsTemplateExecution = 4, 10 | } 11 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/Models/IExecutionStrategySettings.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common.Models; 2 | 3 | public interface IExecutionStrategySettings 4 | { 5 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/Models/TestContext.cs: -------------------------------------------------------------------------------- 1 | #nullable disable 2 | namespace OJS.Workers.Common.Models 3 | { 4 | public class TestContext 5 | { 6 | public int Id { get; set; } 7 | 8 | public string Input { get; set; } 9 | 10 | public string Output { get; set; } 11 | 12 | public bool IsTrialTest { get; set; } 13 | 14 | public int OrderBy { get; set; } 15 | } 16 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/Models/TestRunResultType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common.Models; 2 | 3 | public enum TestRunResultType 4 | { 5 | CorrectAnswer = 0, 6 | WrongAnswer = 1, 7 | TimeLimit = 2, 8 | MemoryLimit = 3, 9 | RunTimeError = 4, 10 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Common/ProcessExecutionResultType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Common 2 | { 3 | public enum ProcessExecutionResultType 4 | { 5 | Success = 0, 6 | TimeLimit = 1, 7 | MemoryLimit = 2, 8 | RunTimeError = 4, 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Compilers/CompilerOutput.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Compilers 2 | { 3 | public class CompilerOutput 4 | { 5 | public CompilerOutput(int exitCode, string output) 6 | { 7 | this.ExitCode = exitCode; 8 | this.Output = output; 9 | } 10 | 11 | public int ExitCode { get; set; } 12 | 13 | public string Output { get; set; } 14 | 15 | public bool IsSuccessful => this.ExitCode == 0; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Compilers/ICompilerFactory.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Compilers; 2 | 3 | using OJS.Workers.Common; 4 | using OJS.Workers.Common.Models; 5 | 6 | public interface ICompilerFactory 7 | { 8 | string GetCompilerPath(CompilerType compilerType, ExecutionStrategyType strategyType); 9 | 10 | ICompiler CreateCompiler(CompilerType compilerType, ExecutionStrategyType strategyType); 11 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Compilers/OJS.Workers.Compilers.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | net8.0 4 | enable 5 | enable 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.ExecutionStrategies/IExecutionStrategySettingsProvider.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.ExecutionStrategies; 2 | 3 | using OJS.Workers.Common; 4 | using OJS.Workers.Common.Models; 5 | 6 | public interface IExecutionStrategySettingsProvider 7 | { 8 | TSettings? GetSettings(IOjsSubmission submission) 9 | where TSettings : class, IExecutionStrategySettings; 10 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.ExecutionStrategies/Models/BaseInputModel.cs: -------------------------------------------------------------------------------- 1 | #nullable disable 2 | namespace OJS.Workers.ExecutionStrategies.Models 3 | { 4 | using OJS.Workers.Common.Extensions; 5 | 6 | public class BaseInputModel 7 | { 8 | public byte[] TaskSkeleton { get; set; } 9 | 10 | public string TaskSkeletonAsString => this.TaskSkeleton.Decompress(); 11 | } 12 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.ExecutionStrategies/Models/OutputResult.cs: -------------------------------------------------------------------------------- 1 | #nullable disable 2 | namespace OJS.Workers.ExecutionStrategies.Models 3 | { 4 | using OJS.Workers.Common; 5 | 6 | public class OutputResult : SingleCodeRunResult 7 | { 8 | public ProcessExecutionResultType ResultType { get; set; } 9 | 10 | public string Output { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.ExecutionStrategies/Models/SimpleInputModel.cs: -------------------------------------------------------------------------------- 1 | #nullable disable 2 | namespace OJS.Workers.ExecutionStrategies.Models 3 | { 4 | public class SimpleInputModel 5 | : BaseInputModel 6 | { 7 | public string Input { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.ExecutionStrategies/Models/SingleCodeRunResult.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.ExecutionStrategies.Models 2 | { 3 | using OJS.Workers.Common; 4 | 5 | public abstract class SingleCodeRunResult : ISingleCodeRunResult 6 | { 7 | public int TimeUsed { get; set; } 8 | 9 | public int MemoryUsed { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.ExecutionStrategies/Sql/SqlResult.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.ExecutionStrategies.Sql 2 | { 3 | using System.Collections.Generic; 4 | 5 | public class SqlResult 6 | { 7 | public bool Completed { get; set; } 8 | 9 | public ICollection Results { get; set; } = new List(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Executors/ITasksService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Executors 2 | { 3 | using System; 4 | 5 | public interface ITasksService 6 | { 7 | TaskInfo RunWithInterval(int interval, Action action); 8 | 9 | void Stop(TaskInfo taskInfo); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Services/Common/OJS.Workers/OJS.Workers.Executors/ProcessExecutorType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Workers.Executors 2 | { 3 | public enum ProcessExecutorType 4 | { 5 | Standard = 0, 6 | Restricted = 1, 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/AutoMapperSingleton.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure; 2 | 3 | using AutoMapper; 4 | 5 | public class AutoMapperSingleton 6 | { 7 | private AutoMapperSingleton(IMapper mapper) 8 | => this.Mapper = mapper; 9 | 10 | public static AutoMapperSingleton Instance { get; private set; } = new(null!); 11 | 12 | public IMapper Mapper { get; } 13 | 14 | public static void Init(IMapper mapper) 15 | => Instance = new AutoMapperSingleton(mapper); 16 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/Cache/ICacheService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.Cache 2 | { 3 | using System; 4 | using System.Threading.Tasks; 5 | 6 | public interface ICacheService 7 | { 8 | Task Get(string cacheId, Func> getItemCallback); 9 | 10 | Task Get(string cacheId, Func> getItemCallback, int cacheSeconds, int slidingExpirationSeconds = 0); 11 | 12 | Task Remove(string cacheId); 13 | } 14 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/Configurations/ApplicationConfig.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.Configurations; 2 | 3 | using System.ComponentModel.DataAnnotations; 4 | 5 | public class ApplicationConfig : BaseConfig 6 | { 7 | public override string SectionName => "ApplicationSettings"; 8 | 9 | [Required] 10 | public string SharedAuthCookieDomain { get; set; } = string.Empty; 11 | 12 | [Required] 13 | public string ApiKey { get; set; } = string.Empty; 14 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/Configurations/BaseConfig.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.Configurations; 2 | 3 | public abstract class BaseConfig 4 | { 5 | public abstract string SectionName { get; } 6 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/Configurations/HealthCheckConfig.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.Configurations; 2 | 3 | using System.ComponentModel.DataAnnotations; 4 | 5 | public class HealthCheckConfig : BaseConfig 6 | { 7 | public override string SectionName => "HealthCheck"; 8 | 9 | [Required] 10 | public string Key { get; set; } = string.Empty; 11 | 12 | [Required] 13 | [MinLength(8)] 14 | public string Password { get; set; } = string.Empty; 15 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/Configurations/HttpConfig.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.Configurations; 2 | 3 | public class HttpConfig : BaseConfig 4 | { 5 | public override string SectionName => "Http"; 6 | 7 | public int MaxRequestSizeLimit { get; set; } = 35 * 1024 * 1024; 8 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/Configurations/MentorConfig.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.Configurations; 2 | 3 | using System.ComponentModel.DataAnnotations; 4 | 5 | public class MentorConfig : BaseConfig 6 | { 7 | public override string SectionName => "Mentor"; 8 | 9 | [Required] 10 | public string ApiKey { get; set; } = default!; 11 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/Configurations/RedisConfig.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.Configurations; 2 | 3 | using System.ComponentModel.DataAnnotations; 4 | 5 | public class RedisConfig : BaseConfig 6 | { 7 | public override string SectionName => "Redis"; 8 | 9 | [Required] 10 | public string ConnectionString { get; set; } = string.Empty; 11 | 12 | [Required] 13 | public string InstanceName { get; set; } = string.Empty; 14 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/Constants/EmailConstants.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.Constants; 2 | 3 | public static class EmailConstants 4 | { 5 | public static string RedisSubject => "RedisConnection"; 6 | 7 | public static string RedisBody => "Redis is not connected"; 8 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/Constants/ResilienceStrategyConstants.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.Constants; 2 | 3 | public static class ResilienceStrategyConstants 4 | { 5 | public static class Common 6 | { 7 | public const string OperationKey = "OperationKey"; 8 | } 9 | 10 | public static class RedisCircuitBreakerOperations 11 | { 12 | public const string GetItem = "Get_{0}"; 13 | public const string RemoveItem = "Remove_{0}"; 14 | } 15 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/HttpClients/ISulsPlatformHttpClientService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.HttpClients 2 | { 3 | using System.Threading.Tasks; 4 | 5 | public interface ISulsPlatformHttpClientService : IHttpClientService 6 | { 7 | Task> GetAsync( 8 | object requestData, 9 | string endpoint); 10 | } 11 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/HttpClients/Models/RabbitMqConsumerChannelDetails.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.HttpClients.Models; 2 | 3 | using Newtonsoft.Json; 4 | 5 | public class RabbitMqConsumerChannelDetails 6 | { 7 | [JsonProperty("name")] 8 | public string? Name { get; set; } 9 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/HttpClients/Models/RabbitMqConsumerQueueModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.HttpClients.Models; 2 | 3 | using System.Text.Json.Serialization; 4 | 5 | public class RabbitMqConsumerQueueModel 6 | { 7 | [JsonPropertyName("name")] 8 | public string? Name { get; set; } 9 | 10 | [JsonPropertyName("vhost")] 11 | public string? VHost { get; set; } 12 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/IDatesService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure 2 | { 3 | using System; 4 | 5 | public interface IDatesService : ISingletonService 6 | { 7 | DateTime GetUtcNow(); 8 | 9 | DateTimeOffset GetUtcNowOffset(); 10 | 11 | DateTime GetMaxValue(); 12 | 13 | DateTime GetAbsoluteExpirationBySeconds(int seconds); 14 | } 15 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/IScopedService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure; 2 | 3 | public interface IScopedService 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/IService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure; 2 | 3 | public interface IService 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/ISingletonService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure; 2 | 3 | public interface ISingletonService 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/Models/ExceptionCacheEntry.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.Models; 2 | 3 | using System; 4 | 5 | public class ExceptionCacheEntry 6 | { 7 | public string Value { get; set; } = null!; 8 | 9 | public DateTime LastEmailSentTime { get; set; } 10 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/Models/Mapping/IMapExplicitly.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.Models.Mapping; 2 | 3 | using AutoMapper; 4 | 5 | public interface IMapExplicitly 6 | { 7 | void RegisterMappings(IProfileExpression configuration); 8 | } 9 | -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/Models/Mapping/IMapFrom.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.Models.Mapping; 2 | 3 | public interface IMapFrom 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/Models/Mapping/IMapTo.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.Models.Mapping; 2 | 3 | public interface IMapTo 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/Models/PagedResult.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.Models; 2 | 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | 6 | public class PagedResult 7 | { 8 | public int TotalItemsCount { get; set; } 9 | 10 | public int ItemsPerPage { get; set; } 11 | 12 | public int PagesCount { get; set; } 13 | 14 | public int PageNumber { get; set; } 15 | 16 | public IEnumerable Items { get; set; } = []; 17 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/ResilienceStrategies/Enums/ResilienceStrategyEventType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.ResilienceStrategies.Enums; 2 | 3 | public enum ResilienceStrategyEventType 4 | { 5 | OnCircuitOpened, 6 | OnCircuitClosed, 7 | OnCircuitHalfOpened, 8 | PipelineExecuting, 9 | PipelineExecuted, 10 | OnRetry, 11 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/ResilienceStrategies/IRedisResilienceStrategiesService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.ResilienceStrategies; 2 | 3 | using Polly; 4 | using System; 5 | using System.Threading.Tasks; 6 | 7 | public interface IRedisResilienceStrategiesService : ISingletonService 8 | { 9 | Task ProcessOutcome( 10 | Func> fallback, 11 | Outcome outcome); 12 | } -------------------------------------------------------------------------------- /Services/Infrastructure/OJS.Services.Infrastructure/ResilienceStrategies/IResilienceStrategiesService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Infrastructure.ResilienceStrategies; 2 | 3 | using Polly; 4 | using System; 5 | using System.Threading.Tasks; 6 | 7 | public interface IResilienceStrategiesService 8 | { 9 | Task ExecuteRedisWithCircuitBreaker( 10 | Func> action, 11 | Func> fallbackAction, 12 | string operationKey); 13 | } -------------------------------------------------------------------------------- /Services/Mentor/OJS.Services.Mentor.Business/IMentorBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Mentor.Business; 2 | 3 | using OJS.Services.Infrastructure; 4 | using OJS.Services.Mentor.Models; 5 | 6 | public interface IMentorBusinessService : IService 7 | { 8 | Task StartConversation(ConversationRequestModel model); 9 | 10 | Task GetSystemMessage(ConversationRequestModel model); 11 | } -------------------------------------------------------------------------------- /Services/Mentor/OJS.Services.Mentor.Models/ConversationMessageResponseModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Mentor.Models; 2 | 3 | using OJS.Common.Enumerations; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class ConversationMessageResponseModel : IMapFrom 7 | { 8 | public string Content { get; set; } = null!; 9 | 10 | public MentorMessageRole Role { get; set; } 11 | 12 | public int SequenceNumber { get; set; } 13 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/Cache/IContestsCacheService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business.Cache; 2 | 3 | using OJS.Services.Ui.Models.Contests; 4 | using OJS.Services.Infrastructure; 5 | using System.Threading.Tasks; 6 | 7 | public interface IContestsCacheService : IService 8 | { 9 | Task GetContestDetailsServiceModel(int contestId); 10 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/Cache/IProblemsCacheService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business.Cache; 2 | 3 | using System.Threading.Tasks; 4 | using OJS.Services.Infrastructure; 5 | using OJS.Services.Ui.Models.Cache; 6 | 7 | public interface IProblemsCacheService : IService 8 | { 9 | Task GetForSubmitById(int problemId); 10 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/Constants.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business; 2 | 3 | public static class Constants 4 | { 5 | public static class Search 6 | { 7 | public const int MinimumSearchTermLength = 3; 8 | } 9 | 10 | public static class Comments 11 | { 12 | public const string ProcessingExceptionCompilerComment = "An unexpected error occurred. Please contact an administrator."; 13 | 14 | public const string ProcessingException = "Exception in {0}: {1}"; 15 | } 16 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/IExamGroupsBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business 2 | { 3 | using OJS.Services.Infrastructure; 4 | using System.Collections.Generic; 5 | using System.Threading.Tasks; 6 | 7 | public interface IExamGroupsBusinessService : IService 8 | { 9 | Task AddExternalUsersByIdAndUserIds(int id, IEnumerable userIds); 10 | 11 | Task AddExternalUsersByIdAndUsernames(int id, IEnumerable usernames); 12 | } 13 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/IProblemGroupsBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business 2 | { 3 | using OJS.Services.Infrastructure; 4 | 5 | public interface IProblemGroupsBusinessService : IService 6 | { 7 | } 8 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/IProblemsBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business 2 | { 3 | using System.Threading.Tasks; 4 | using OJS.Services.Ui.Models.Search; 5 | using OJS.Services.Infrastructure; 6 | 7 | public interface IProblemsBusinessService : IService 8 | { 9 | Task GetSearchProblemsByName(SearchServiceModel model); 10 | } 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/IStatisticsPreviewBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business; 2 | 3 | using OJS.Services.Ui.Models.Statistics; 4 | using OJS.Services.Infrastructure; 5 | using System.Threading.Tasks; 6 | 7 | public interface IStatisticsPreviewBusinessService 8 | : IService 9 | { 10 | Task GetForHome(); 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/ISubmissionTypesBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business; 2 | 3 | using System.Collections.Generic; 4 | using System.Threading.Tasks; 5 | using OJS.Services.Ui.Models.SubmissionTypes; 6 | using OJS.Services.Infrastructure; 7 | 8 | public interface ISubmissionTypesBusinessService : IService 9 | { 10 | Task> GetAllForContestCategory(int contestCategoryId); 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/ISubmissionsForProcessingBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business; 2 | 3 | using System.Threading.Tasks; 4 | using OJS.Services.Infrastructure; 5 | 6 | public interface ISubmissionsForProcessingBusinessService : IService 7 | { 8 | Task IsSubmissionProcessing(int submissionId); 9 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/ISubmissionsHelper.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business; 2 | 3 | using System.Threading.Tasks; 4 | using OJS.Services.Infrastructure; 5 | 6 | public interface ISubmissionsHelper : IService 7 | { 8 | Task IsEligibleForRetest(int submissionId, bool isProcessed, bool isCompiledSuccessfully, int testRunsCount); 9 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/ITestsBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business; 2 | 3 | using OJS.Services.Infrastructure; 4 | using OJS.Services.Ui.Models.Submissions; 5 | using System.Threading.Tasks; 6 | 7 | public interface ITestsBusinessService : IService 8 | { 9 | Task GetTestDetails(int testId, int submissionId); 10 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/Implementations/ContestResultsAggregatorService.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Services/UI/OJS.Services.Ui.Business/Implementations/ContestResultsAggregatorService.cs -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/Validations/Implementations/Contests/IContestDetailsValidationService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business.Validations.Implementations.Contests; 2 | 3 | using OJS.Services.Ui.Models.Contests; 4 | using OJS.Services.Common.Validation; 5 | 6 | public interface IContestDetailsValidationService : IValidationService<(ContestDetailsServiceModel?, ContestCategoryServiceModel?, bool)> 7 | { 8 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/Validations/Implementations/Contests/IContestResultsValidationService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business.Validations.Implementations.Contests; 2 | 3 | using OJS.Services.Common.Models.Contests; 4 | using OJS.Services.Common.Validation; 5 | 6 | public interface IContestResultsValidationService : IValidationService<(IContestActivityServiceModel?, bool fullResults, bool isOfficial, bool userIsAdminOrLecturerInContest)> 7 | { 8 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/Validations/Implementations/Contests/ISubmissionFileDownloadValidationService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business.Validations.Implementations.Contests; 2 | 3 | using OJS.Services.Common.Models.Users; 4 | using OJS.Services.Common.Validation; 5 | using OJS.Services.Ui.Models.Submissions; 6 | 7 | public interface ISubmissionFileDownloadValidationService : IValidationService<(SubmissionFileDetailsServiceModel, UserInfoModel)> 8 | { 9 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/Validations/Implementations/Search/ISearchValidationService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business.Validations.Implementations.Search; 2 | 3 | using OJS.Services.Common.Validation; 4 | 5 | public interface ISearchValidationService : IValidationService 6 | { 7 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/Validations/Implementations/Submissions/IRetestSubmissionValidationService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business.Validations.Implementations.Submissions; 2 | 3 | using OJS.Services.Common.Validation; 4 | using OJS.Services.Common.Models.Users; 5 | using OJS.Services.Ui.Models.Submissions; 6 | 7 | public interface IRetestSubmissionValidationService : IValidationServiceAsync<(SubmissionForRetestServiceModel, UserInfoModel, bool)> 8 | { 9 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Business/Validations/Implementations/Submissions/ISubmissionDetailsValidationService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Business.Validations.Implementations.Submissions; 2 | 3 | using OJS.Services.Common.Models.Users; 4 | using OJS.Services.Common.Validation; 5 | using OJS.Services.Ui.Models.Submissions; 6 | 7 | public interface ISubmissionDetailsValidationService : IValidationService<(SubmissionDetailsServiceModel, UserInfoModel, bool)> 8 | { 9 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Data/IContestCategoriesDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Data 2 | { 3 | using OJS.Data.Models.Contests; 4 | using OJS.Services.Common.Data; 5 | using System.Collections.Generic; 6 | using System.Threading.Tasks; 7 | public interface IContestCategoriesDataService : IDataService 8 | { 9 | Task> GetAllVisible(); 10 | 11 | Task> GetAllowedStrategyTypesByIds(IEnumerable ids); 12 | } 13 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Data/IExamGroupsDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Data 2 | { 3 | using OJS.Data.Models.Contests; 4 | using OJS.Services.Common.Data; 5 | using System.Threading.Tasks; 6 | 7 | public interface IExamGroupsDataService : IDataService 8 | { 9 | Task RemoveContestByContest(int contestId); 10 | } 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Data/IProblemGroupsDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Data 2 | { 3 | using OJS.Data.Models.Problems; 4 | using OJS.Services.Common.Data; 5 | using System.Linq; 6 | 7 | public interface IProblemGroupsDataService : IDataService 8 | { 9 | IQueryable GetAllByContest(int contestId); 10 | } 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Data/IProblemResourcesDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Data 2 | { 3 | using OJS.Data.Models.Problems; 4 | using OJS.Services.Common.Data; 5 | using OJS.Services.Infrastructure; 6 | 7 | public interface IProblemResourcesDataService : IDataService, IService 8 | { 9 | } 10 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Data/IProblemsDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Data 2 | { 3 | using OJS.Data.Models.Problems; 4 | using OJS.Services.Common.Data; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | 8 | public interface IProblemsDataService : IDataService 9 | { 10 | IQueryable GetAllNonDeletedProblems(); 11 | 12 | IQueryable GetAllByContest(int contestId); 13 | 14 | Task GetWithProblemGroupById(int problemId); 15 | } 16 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Data/ISubmissionTypesDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Data 2 | { 3 | using OJS.Data.Models.Submissions; 4 | using OJS.Services.Common.Data; 5 | 6 | public interface ISubmissionTypesDataService : IDataService 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Data/ITestRunsDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Data 2 | { 3 | using OJS.Data.Models.Tests; 4 | using OJS.Services.Common.Data; 5 | using System.Linq; 6 | 7 | public interface ITestRunsDataService : IDataService 8 | { 9 | IQueryable GetAllBySubmission(int submissionId); 10 | } 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Data/ITestsDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Data 2 | { 3 | using System.Linq; 4 | using OJS.Data.Models.Tests; 5 | using OJS.Services.Common.Data; 6 | 7 | public interface ITestsDataService : IDataService 8 | { 9 | IQueryable GetAllByProblem(int problemId); 10 | } 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Data/Implementations/ProblemResourcesDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Data.Implementations 2 | { 3 | using OJS.Data; 4 | using OJS.Data.Models.Problems; 5 | using OJS.Services.Common.Data.Implementations; 6 | 7 | public class ProblemResourcesDataService : DataService, IProblemResourcesDataService 8 | { 9 | public ProblemResourcesDataService(OjsDbContext problemResources) 10 | : base(problemResources) 11 | { 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Data/Implementations/SubmissionTypesDataService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Data.Implementations 2 | { 3 | using OJS.Data; 4 | using OJS.Data.Models.Submissions; 5 | using OJS.Services.Common.Data.Implementations; 6 | 7 | public class SubmissionTypesDataService : DataService, ISubmissionTypesDataService 8 | { 9 | public SubmissionTypesDataService(OjsDbContext db) 10 | : base(db) 11 | { 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/ApplicationConfig.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models; 2 | 3 | using System.ComponentModel.DataAnnotations; 4 | 5 | public class ApplicationConfig : Infrastructure.Configurations.ApplicationConfig 6 | { 7 | [Required] 8 | public string UiHomeYouTubeVideoId { get; set; } = string.Empty; 9 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Cache/ContestParticipantsCountCacheModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Cache; 2 | 3 | public class ContestParticipantsCountCacheModel 4 | { 5 | public int Official { get; set; } 6 | 7 | public int Practice { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Contests/ContestParticipantResultServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Contests; 2 | 3 | public class ContestParticipantResultServiceModel 4 | { 5 | public int? CompetePoints { get; set; } 6 | 7 | public int? PracticePoints { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Contests/ContestSortType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Contests; 2 | 3 | public enum ContestSortType 4 | { 5 | StartDate = 0, 6 | EndDate = 1, 7 | Name = 2, 8 | OrderBy = 3, 9 | // Participated contests by user are ordered by participation time descending 10 | ParticipantRegistrationTime = 4, 11 | } 12 | 13 | public enum ContestSortTypeDirection 14 | { 15 | Ascending = 0, 16 | Descending = 1, 17 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Contests/ContestStatus.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Contests; 2 | 3 | public enum ContestStatus 4 | { 5 | All = 0, 6 | Active = 1, 7 | Past = 2, 8 | Upcoming = 3, 9 | Practice = 4, 10 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Contests/StartContestParticipationServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Contests 2 | { 3 | public class StartContestParticipationServiceModel 4 | { 5 | public int ContestId { get; set; } 6 | 7 | public bool IsOfficial { get; set; } 8 | 9 | public string UserHostAddress { get; set; } = null!; 10 | } 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Participants/ParticipantServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Participants; 2 | 3 | using System; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | using OJS.Data.Models.Participants; 6 | 7 | public class ParticipantServiceModel : IMapFrom 8 | { 9 | public int Id { get; set; } 10 | 11 | public DateTime? ParticipationEndTime { get; set; } 12 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Participants/ProblemForParticipantServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Participants; 2 | 3 | using OJS.Data.Models; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class ProblemForParticipantServiceModel : IMapFrom 7 | { 8 | public int ProblemId { get; set; } 9 | 10 | public int ParticipantId { get; set; } 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Participations/ParticipationForProblemMaxScoreServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Participations; 2 | 3 | public class ParticipationForProblemMaxScoreServiceModel 4 | { 5 | public int ProblemId { get; set; } 6 | 7 | public int? Points { get; set; } 8 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Problems/ContestDetailsProblemServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Problems; 2 | 3 | using OJS.Data.Models.Problems; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | using System.Collections.Generic; 6 | 7 | public class ContestDetailsProblemServiceModel : IMapFrom 8 | { 9 | public string Name { get; set; } = string.Empty; 10 | 11 | public ICollection Resources { get; set; } = new HashSet(); 12 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Problems/ProblemGroupServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Problems; 2 | 3 | using OJS.Data.Models.Problems; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | using System.Collections.Generic; 6 | 7 | public class ProblemGroupServiceModel : IMapFrom 8 | { 9 | public ICollection Problems { get; set; } = new HashSet(); 10 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Problems/ProblemResourceType.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Problems 2 | { 3 | public enum ProblemResourceType 4 | { 5 | ProblemDescription = 1, 6 | AuthorsSolution = 2, 7 | Link = 3, 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Search/ContestSearchForListingServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Search; 2 | 3 | using OJS.Services.Ui.Models.Contests; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | 7 | public class ContestSearchForListingServiceModel 8 | { 9 | public IEnumerable Contests { get; set; } 10 | = Enumerable.Empty(); 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Search/ContestSearchServiceResultModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Search; 2 | 3 | using OJS.Services.Ui.Models.Contests; 4 | using X.PagedList; 5 | 6 | public class ContestSearchServiceResultModel 7 | { 8 | public IPagedList Contests { get; set; } = null!; 9 | 10 | public int TotalContestsCount { get; set; } 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Search/ProblemSearchForListingServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Search; 2 | 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | 6 | public class ProblemSearchForListingServiceModel 7 | { 8 | public IEnumerable Problems { get; set; } 9 | = Enumerable.Empty(); 10 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Search/ProblemSearchResponseModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Search; 2 | 3 | using OJS.Services.Infrastructure.Models.Mapping; 4 | 5 | public class ProblemSearchResponseModel : IMapFrom 6 | { 7 | public int Id { get; set; } 8 | 9 | public string Name { get; set; } = null!; 10 | 11 | public double OrderBy { get; set; } 12 | 13 | public ProblemContestSearchServiceModel? Contest { get; set; } 14 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Search/ProblemSearchServiceResultModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Search; 2 | 3 | using System.Collections.Generic; 4 | 5 | public class ProblemSearchServiceResultModel 6 | { 7 | public IEnumerable Problems { get; set; } = null!; 8 | 9 | public int TotalProblemsCount { get; set; } 10 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Search/UserSearchForListingServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Search; 2 | 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | 6 | public class UserSearchForListingServiceModel 7 | { 8 | public IEnumerable Users { get; set; } 9 | = Enumerable.Empty(); 10 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Search/UserSearchResponseModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Search; 2 | 3 | using OJS.Services.Infrastructure.Models.Mapping; 4 | 5 | public class UserSearchResponseModel : IMapFrom 6 | { 7 | public string Id { get; set; } = null!; 8 | 9 | public string Name { get; set; } = null!; 10 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Search/UserSearchServiceResultModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Search; 2 | 3 | using X.PagedList; 4 | 5 | public class UserSearchServiceResultModel 6 | { 7 | public IPagedList Users { get; set; } = null!; 8 | 9 | public int TotalUsersCount { get; set; } 10 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Statistics/HomeStatisticsServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Statistics; 2 | 3 | public class HomeStatisticsServiceModel 4 | { 5 | public int ContestsCount { get; set; } 6 | 7 | public int UsersCount { get; set; } 8 | 9 | public int ProblemsCount { get; set; } 10 | 11 | public int SubmissionsPerDayCount { get; set; } 12 | 13 | public int StrategiesCount { get; set; } 14 | 15 | public int SubmissionsCount { get; set; } 16 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/SubmissionTypes/SubmissionTypeFilterServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.SubmissionTypes; 2 | 3 | using OJS.Data.Models.Submissions; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class SubmissionTypeFilterServiceModel : IMapFrom 7 | { 8 | public int Id { get; set; } 9 | 10 | public string Name { get; set; } = string.Empty; 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Submissions/ContestDetailsSubmissionTypeServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Submissions; 2 | 3 | using OJS.Services.Infrastructure.Models.Mapping; 4 | using OJS.Services.Ui.Models.SubmissionTypes; 5 | 6 | public class ContestDetailsSubmissionTypeServiceModel : IMapFrom 7 | { 8 | public int Id { get; set; } 9 | 10 | public string Name { get; set; } = null!; 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Submissions/ParticipantScoreModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Submissions 2 | { 3 | using OJS.Data.Models.Participants; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class ParticipantScoreModel : IMapFrom 7 | { 8 | public int Points { get; set; } 9 | 10 | public int SubmissionId { get; set; } 11 | 12 | public int ParticipantId { get; set; } 13 | } 14 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Submissions/ProblemForSubmissionDetailsServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Submissions; 2 | 3 | using OJS.Data.Models.Problems; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class ProblemForSubmissionDetailsServiceModel : IMapFrom 7 | { 8 | public string Name { get; set; } = null!; 9 | 10 | public int Id { get; set; } 11 | 12 | public int ProblemGroupContestId { get; set; } 13 | 14 | public short MaximumPoints { get; set; } 15 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Submissions/SaveExecutionResultResponseModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Submissions 2 | { 3 | public class SaveExecutionResultResponseModel 4 | { 5 | public int SubmissionId { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Submissions/SubmissionFileDownloadServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Submissions; 2 | 3 | public class SubmissionFileDownloadServiceModel 4 | { 5 | public byte[]? Content { get; set; } 6 | 7 | public string? MimeType { get; set; } 8 | 9 | public string? FileName { get; set; } 10 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Submissions/SubmissionForContestParticipations.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Submissions; 2 | 3 | using OJS.Data.Models.Submissions; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class SubmissionForContestParticipations : IMapFrom 7 | { 8 | public int Points { get; set; } 9 | 10 | public bool IsDeleted { get; set; } 11 | 12 | public int ProblemId { get; set; } 13 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Submissions/SubmissionForSubmissionTypesFilterServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Submissions; 2 | 3 | using OJS.Data.Models.Submissions; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class SubmissionForSubmissionTypesFilterServiceModel : IMapFrom 7 | { 8 | public int Id { get; set; } 9 | 10 | public int? SubmissionTypeId { get; set; } 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Submissions/SubmissionTypeForSubmissionDetailsServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Submissions; 2 | 3 | using OJS.Data.Models.Submissions; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class SubmissionTypeForSubmissionDetailsServiceModel : IMapFrom 7 | { 8 | public int Id { get; set; } 9 | 10 | public string Name { get; set; } = string.Empty; 11 | 12 | public bool AllowBinaryFilesUpload { get; set; } 13 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Users/RoleServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Users; 2 | 3 | using OJS.Data.Models.Users; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class RoleServiceModel : IMapFrom 7 | { 8 | public string Id { get; set; } = default!; 9 | 10 | public string Name { get; set; } = default!; 11 | } -------------------------------------------------------------------------------- /Services/UI/OJS.Services.Ui.Models/Users/UserServiceModel.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Ui.Models.Users; 2 | 3 | using OJS.Data.Models.Users; 4 | using OJS.Services.Infrastructure.Models.Mapping; 5 | 6 | public class UserServiceModel : IMapFrom 7 | { 8 | public string Id { get; set; } = string.Empty; 9 | 10 | public string? UserName { get; set; } 11 | } -------------------------------------------------------------------------------- /Services/Worker/OJS.Services.Worker.Business/ExecutionContext/ExecutionContextConstants.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Worker.Business.ExecutionContext; 2 | 3 | using static OJS.Common.GlobalConstants.FileExtensions; 4 | 5 | public static class ExecutionContextConstants 6 | { 7 | public const string DefaultAllowedFileExtension = Zip; 8 | 9 | public static class TemplatePlaceholders 10 | { 11 | public const string CodePlaceholder = "##code##"; 12 | } 13 | } -------------------------------------------------------------------------------- /Services/Worker/OJS.Services.Worker.Business/ExecutionContext/ICodeTemplatesProviderService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Worker.Business.ExecutionContext; 2 | 3 | using OJS.Workers.Common.Models; 4 | using OJS.Services.Infrastructure; 5 | 6 | public interface ICodeTemplatesProviderService : IService 7 | { 8 | string GetDefaultCodeTemplate(ExecutionStrategyType executionStrategyType); 9 | } -------------------------------------------------------------------------------- /Services/Worker/OJS.Services.Worker.Business/IExecutionStrategyFactory.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Worker.Business; 2 | 3 | using OJS.Workers.Common; 4 | using OJS.Services.Infrastructure; 5 | 6 | public interface IExecutionStrategyFactory : ISingletonService 7 | { 8 | IExecutionStrategy CreateExecutionStrategy(IOjsSubmission submission); 9 | } -------------------------------------------------------------------------------- /Services/Worker/OJS.Services.Worker.Business/IHostInfoService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Worker.Business; 2 | 3 | using OJS.Services.Infrastructure; 4 | 5 | public interface IHostInfoService : ISingletonService 6 | { 7 | string? GetHostIp(); 8 | } -------------------------------------------------------------------------------- /Services/Worker/OJS.Services.Worker.Business/ISubmissionExecutor.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Worker.Business 2 | { 3 | using OJS.Workers.Common; 4 | using OJS.Services.Infrastructure; 5 | using System.Threading.Tasks; 6 | 7 | public interface ISubmissionExecutor : IService 8 | { 9 | Task> Execute(OjsSubmission submission) 10 | where TResult : ISingleCodeRunResult, new(); 11 | } 12 | } -------------------------------------------------------------------------------- /Services/Worker/OJS.Services.Worker.Business/ISubmissionsBusinessService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Worker.Business; 2 | 3 | using OJS.Services.Common.Models.Submissions; 4 | using OJS.Services.Common.Models.Submissions.ExecutionContext; 5 | using OJS.Services.Infrastructure; 6 | using System.Threading.Tasks; 7 | 8 | public interface ISubmissionsBusinessService : IService 9 | { 10 | Task ExecuteSubmission(SubmissionServiceModel submission); 11 | } -------------------------------------------------------------------------------- /Services/Worker/OJS.Services.Worker.Business/Validation/ISubmissionsValidationService.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Worker.Business.Validation; 2 | 3 | using OJS.Services.Common.Validation; 4 | using OJS.Services.Common.Models.Submissions.ExecutionContext; 5 | 6 | public interface ISubmissionsValidationService : IValidationService 7 | { 8 | } -------------------------------------------------------------------------------- /Services/Worker/OJS.Services.Worker.Models/Configuration/ApplicationConfig.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Worker.Models.Configuration; 2 | 3 | using System.ComponentModel.DataAnnotations; 4 | 5 | public class ApplicationConfig : Infrastructure.Configurations.ApplicationConfig 6 | { 7 | [Range(1, int.MaxValue)] 8 | public int SubmissionsProcessorIdentifierNumber { get; set; } 9 | 10 | public bool UseMessageQueue { get; set; } 11 | } -------------------------------------------------------------------------------- /Services/Worker/OJS.Services.Worker.Models/Configuration/MemoryConfig.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Worker.Models.Configuration 2 | { 3 | public class MemoryConfig 4 | { 5 | public int DefaultMemoryLimitInBytes { get; set; } = 16 * 1024 * 1024; 6 | } 7 | } -------------------------------------------------------------------------------- /Services/Worker/OJS.Services.Worker.Models/Configuration/TimeConfig.cs: -------------------------------------------------------------------------------- 1 | namespace OJS.Services.Worker.Models.Configuration 2 | { 3 | public class TimeConfig 4 | { 5 | public int DefaultTimeLimitInMs { get; set; } = 1000; 6 | 7 | public int HtmlAndCssDefaultTimeLimitInMs { get; set; } = 1000; 8 | } 9 | } -------------------------------------------------------------------------------- /Tests/Infrastructure/OJS.Tests.Infrastructure/OJS.Tests.Infrastructure.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | net8.0 4 | 5 | -------------------------------------------------------------------------------- /Tests/IntegrationTests/IntegrationTests.Worker/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | [assembly: CollectionBehavior(DisableTestParallelization = true)] -------------------------------------------------------------------------------- /Tests/IntegrationTests/IntegrationTests.Worker/CSharp/CSharpCodeParameters.cs: -------------------------------------------------------------------------------- 1 | namespace IntegrationTests.Worker.CSharp; 2 | 3 | public record CSharpCodeParameters(string Code); -------------------------------------------------------------------------------- /Tests/IntegrationTests/IntegrationTests.Worker/TypeScript/TypeScriptCodeMochaUnitsTestsNodeJs20/TypeScriptCodeMochaUnitsTestsNodeJs20Parameters.cs: -------------------------------------------------------------------------------- 1 | namespace IntegrationTests.Worker.TypeScript.TypeScriptCodeMochaUnitsTestsNodeJs20; 2 | 3 | public record TypeScriptCodeMochaUnitsTestsNodeJs20Parameters(string Code); 4 | -------------------------------------------------------------------------------- /Tests/IntegrationTests/IntegrationTests.Worker/TypeScript/TypeScriptCodeNodeJs20/TypeScriptCodeNodeJs20Parameters.cs: -------------------------------------------------------------------------------- 1 | namespace IntegrationTests.Worker.TypeScript.TypeScriptCodeNodeJs20; 2 | 3 | public record TypeScriptCodeNodeJs20Parameters(string Code); -------------------------------------------------------------------------------- /Tests/IntegrationTests/IntegrationTests.Worker/WorkerTestsCollection.cs: -------------------------------------------------------------------------------- 1 | using IntegrationTests.Worker; 2 | 3 | [CollectionDefinition(nameof(WorkerTestsCollection), DisableParallelization = true)] 4 | public class WorkerTestsCollection : ICollectionFixture 5 | { 6 | } -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/CSharp/CSharpProject/dotnet-6-project-compile-time-error-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/CSharp/CSharpProject/dotnet-6-project-compile-time-error-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/CSharp/CSharpProject/dotnet-6-project-correct-wrong-answer-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/CSharp/CSharpProject/dotnet-6-project-correct-wrong-answer-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/CSharp/CSharpProject/dotnet-6-project-runtime-error-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/CSharp/CSharpProject/dotnet-6-project-runtime-error-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/CSharp/CSharpProjectTests/dotnet6_project_tests_compile_time_error_solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/CSharp/CSharpProjectTests/dotnet6_project_tests_compile_time_error_solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/CSharp/CSharpProjectTests/dotnet6_project_tests_correct_answer_solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/CSharp/CSharpProjectTests/dotnet6_project_tests_correct_answer_solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/CSharp/CSharpUnitTests/dotnet6-unit-tests-compile-time-error-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/CSharp/CSharpUnitTests/dotnet6-unit-tests-compile-time-error-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/CSharp/CSharpUnitTests/dotnet6-unit-tests-correct-wrong-answer-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/CSharp/CSharpUnitTests/dotnet6-unit-tests-correct-wrong-answer-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/JS/NodeJS20SPAProjectMochaUnitTests/js-project-mocha-unit-tests-separate-tests-correct-wrong-answer-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/JS/NodeJS20SPAProjectMochaUnitTests/js-project-mocha-unit-tests-separate-tests-correct-wrong-answer-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/Java/Java21ProjectTests/java21-project-tests-compile-time-error-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/Java/Java21ProjectTests/java21-project-tests-compile-time-error-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/Java/Java21ProjectTests/java21-project-tests-correct-wrong-answer-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/Java/Java21ProjectTests/java21-project-tests-correct-wrong-answer-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/Java/Java21UnitTests/java21-unit-tests-correct-wrong-answer-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/Java/Java21UnitTests/java21-unit-tests-correct-wrong-answer-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/Java/Java21ZipFile/java21-zip-file-compile-time-error-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/Java/Java21ZipFile/java21-zip-file-compile-time-error-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/Java/Java21ZipFile/java21-zip-file-correct-wrong-answer-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/Java/Java21ZipFile/java21-zip-file-correct-wrong-answer-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/Java/Java21ZipFile/java21-zip-file-runtime-error-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/Java/Java21ZipFile/java21-zip-file-runtime-error-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/Python/PythonORM/python-orm-correct-wrong-answer-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/Python/PythonORM/python-orm-correct-wrong-answer-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/Python/PythonORM/python-orm-runtime-error-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/Python/PythonORM/python-orm-runtime-error-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/Python/PythonProjectTests/python-project-tests-correct-wrong-runtime-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/Python/PythonProjectTests/python-project-tests-correct-wrong-runtime-solution.zip -------------------------------------------------------------------------------- /Tests/ManualTestScripts/StrategiesDataScripts/Python/PythonProjectUnitTests/python-project-unit-tests-correct-wrong-answer-solution.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/Tests/ManualTestScripts/StrategiesDataScripts/Python/PythonProjectUnitTests/python-project-unit-tests-correct-wrong-answer-solution.zip -------------------------------------------------------------------------------- /Tools/DeployEmailGenerator/Models/EmailType.cs: -------------------------------------------------------------------------------- 1 | namespace DeployEmailGenerator.Models; 2 | 3 | public enum EmailType 4 | { 5 | Predeploy = 0, 6 | Deploy = 1, 7 | } -------------------------------------------------------------------------------- /Tools/DeployEmailGenerator/Models/ProjectMeta.cs: -------------------------------------------------------------------------------- 1 | namespace DeployEmailGenerator.Models; 2 | 3 | using DeployEmailGenerator.Response; 4 | using System.Collections.Generic; 5 | 6 | public static partial class Program 7 | { 8 | public class ProjectMeta 9 | { 10 | public int Number { get; set; } 11 | 12 | public string Name { get; set; } 13 | 14 | public string Url { get; set; } 15 | 16 | public string Label { get; set; } 17 | 18 | public List Nodes { get; set; } 19 | } 20 | } -------------------------------------------------------------------------------- /Tools/DeployEmailGenerator/Models/ProjectMetaIssues.cs: -------------------------------------------------------------------------------- 1 | namespace DeployEmailGenerator.Models; 2 | 3 | public partial class Program 4 | { 5 | public class ProjectMetaIssues 6 | { 7 | public string Name { get; set; } 8 | 9 | public string Url { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /Tools/DeployEmailGenerator/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "GitHub": { 3 | "ForDeployMilestoneNodeId": "{node_id}", 4 | "DoneMilestoneNodeId": "{node_id}", 5 | "Token": "{access_token}" 6 | }, 7 | "DefaultSavePath": "C:\\Users\\{username}\\Desktop\\DeployEmailGenerator\\Deploy.txt", 8 | "DefaultSavePathPreDeploy": "C:\\Users\\{username}\\Desktop\\DeployEmailGenerator\\PreDeploy.txt" 9 | } -------------------------------------------------------------------------------- /automated_testing/db/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/mssql/server:2019-latest 2 | 3 | COPY ./restore /queries/restore 4 | # RUN apt update -y && apt upgrade -y && apt install -y dos2unix -------------------------------------------------------------------------------- /automated_testing/restore/create_db/1__create.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SoftUni-Internal/OpenJudgeSystem/69f80dce4d98eecef83214834e4fbb2e8c697e5f/automated_testing/restore/create_db/1__create.sql -------------------------------------------------------------------------------- /automated_testing/restore/create_db/create.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | for file in /queries/restore/create_db/*.sql; do 3 | echo " --- Executing $file ---" 4 | /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 1123QwER -i $file; 5 | done; -------------------------------------------------------------------------------- /automated_testing/restore/drop_db/06_Drop_DB.sql: -------------------------------------------------------------------------------- 1 | -- DROP DATABASE [OpenJudgeSystem]; 2 | -- GO 3 | -- USE [OpenJudgeSystem] 4 | -- GO 5 | -- EXEC sp_msforeachtable 'drop table [?]' 6 | -- GO 7 | USE [OpenJudgeSystem] 8 | GO 9 | EXEC sys.sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' 10 | GO 11 | EXEC sys.sp_msforeachtable 'DELETE FROM ?' 12 | GO 13 | EXEC sys.sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL' 14 | GO -------------------------------------------------------------------------------- /automated_testing/restore/drop_db/drop.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | for file in /queries/restore/drop_db/*.sql; do 3 | echo "--- Executing $file ---" 4 | /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 1123QwER -i $file; 5 | done; 6 | -------------------------------------------------------------------------------- /automated_testing/restore/restore_db/restore.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | for file in /queries/restore/restore_db/queries/*.sql; 3 | do 4 | echo "--- Executing $file ---" 5 | /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 1123QwER -i $file; 6 | done; -------------------------------------------------------------------------------- /automated_testing/run-tests.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker pull redis:5.0 \ 4 | && docker pull mcr.microsoft.com/mssql/server:2019-latest \ 5 | && docker-compose build tests judge_ui db \ 6 | && docker-compose up -d tests \ 7 | && docker-compose logs -f tests -------------------------------------------------------------------------------- /automated_testing/run-update-restore-queries.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | docker-compose -f docker-compose.run.yml up -d db 4 | for i in {1..5}; do 5 | echo "Sleeping $i" 6 | sleep 1 7 | done; 8 | 9 | docker-compose -f docker-compose.run.yml up -d --build update_restore_sql 10 | docker-compose -f docker-compose.run.yml exec update_restore_sql yarn start 11 | docker-compose -f docker-compose.run.yml stop update_restore_sql -------------------------------------------------------------------------------- /automated_testing/test/config.ts: -------------------------------------------------------------------------------- 1 | // const baseUrl = 'https://judgesoftuniorg.ml'; 2 | // const baseUrl = 'http://host.docker.internal:5002'; 3 | const baseUrl = 'http://localhost:5002'; 4 | 5 | export { 6 | // eslint-disable-next-line import/prefer-default-export 7 | baseUrl, 8 | }; 9 | -------------------------------------------------------------------------------- /automated_testing/test/constants/submissions-details-page-selectors.ts: -------------------------------------------------------------------------------- 1 | const selectors = { 2 | }; 3 | export default selectors; -------------------------------------------------------------------------------- /automated_testing/test/pageobjects/submissions-details-page.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable class-methods-use-this */ 2 | import { ChainablePromiseElement } from 'webdriverio'; 3 | import selectors from '../constants/submissions-details-page-selectors'; 4 | import Page from './page'; 5 | 6 | class SubmissionsDetailsPage extends Page { 7 | 8 | } 9 | export default new SubmissionsDetailsPage(); 10 | -------------------------------------------------------------------------------- /automated_testing/test/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "types": [ 4 | "node", 5 | "webdriverio/async", 6 | "@wdio/mocha-framework", 7 | "expect-webdriverio" 8 | ], 9 | "target": "ES5" 10 | } 11 | } -------------------------------------------------------------------------------- /automated_testing/update_restore_queries/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:16 2 | 3 | # RUN npm install -g yarn 4 | 5 | WORKDIR /app 6 | 7 | COPY ./update_restore_queries/package.json /app/package.json 8 | COPY ./update_restore_queries/yarn.lock /app/yarn.lock 9 | 10 | RUN yarn install 11 | 12 | COPY ./update_restore_queries/helpers /app/helpers 13 | COPY ./update_restore_queries/app.js /app/app.js 14 | 15 | ENTRYPOINT ["tail", "-f", "/dev/null"] 16 | 17 | -------------------------------------------------------------------------------- /automated_testing/update_restore_queries/helpers/checkers.js: -------------------------------------------------------------------------------- 1 | const isNil = (value) => value === undefined || value === null; 2 | 3 | module.exports = { 4 | isNil, 5 | }; -------------------------------------------------------------------------------- /automated_testing/update_restore_queries/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sql", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node app.js" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "moment": "^2.29.4", 14 | "mssql": "^9.0.1", 15 | "rimraf": "^3.0.2" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "8.0.0", 4 | "rollForward": "latestMajor", 5 | "allowPrerelease": true 6 | } 7 | } -------------------------------------------------------------------------------- /projects-workflow-scripts/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Update issue data", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "issue-closed.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "graphql-request": "^6.0.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /rabbitmq/rabbitmq.conf: -------------------------------------------------------------------------------- 1 | # 15 minutes in milliseconds 2 | consumer_timeout = 900000 3 | 4 | default_vhost = ojs 5 | 6 | default_user = ojsuser 7 | default_user_tags.administrator = true 8 | default_pass = $(DEFAULT_USER_PASSWORD) --------------------------------------------------------------------------------