From 8e229e03d0211a9b121a28ecc503a644fbdb7c49 Mon Sep 17 00:00:00 2001 From: Nasreddine Bac Ali Date: Fri, 13 Sep 2024 23:29:59 +0000 Subject: [PATCH] chore: fix initiating data for server --- .env | 2 +- .prettierignore | 5 +- .prettierrc | 6 - .prettierrc.cjs | 9 + CHANGELOG.md | 77 +- apps/client/index.html | 2 +- apps/client/src/Root.tsx | 1 - apps/client/src/core/helpers.ts | 8 +- .../src/core/stores/ClarificationsStore.ts | 8 +- apps/client/src/core/stores/PublicStore.ts | 10 +- apps/client/src/core/stores/RootStore.ts | 6 +- .../src/core/stores/SubmissionsStore.ts | 4 +- apps/client/src/core/stores/TeamStore.ts | 2 +- apps/client/src/core/stores/TestcasesStore.ts | 2 +- apps/client/src/core/utils/http-client.ts | 2 +- apps/client/src/index.scss | 4 +- apps/client/src/index.tsx | 7 +- apps/client/src/pages/admin/AdminLayout.tsx | 3 +- apps/client/src/pages/admin/AdminNavbar.tsx | 11 +- apps/client/src/pages/admin/AdminSidebar.tsx | 15 +- .../src/pages/admin/views/Dashboard.tsx | 31 +- .../clarifications/ClarificationGroupTab.tsx | 10 +- .../views/clarifications/ClarificationTab.tsx | 6 +- .../clarifications/ClarificationsList.tsx | 7 +- .../clarifications/ClarificationsSidebar.tsx | 10 +- .../admin/views/contests/ContestForm.tsx | 43 +- .../admin/views/contests/ContestsList.tsx | 1 - .../views/executables/ExecutableForm.tsx | 3 +- .../views/executables/ExecutablesList.tsx | 5 +- .../views/judge-hosts/JudgeHostLogsViewer.tsx | 3 +- .../views/judge-hosts/JudgeHostsList.tsx | 9 +- .../admin/views/languages/LanguageForm.tsx | 5 +- .../admin/views/languages/LanguagesList.tsx | 3 +- .../admin/views/problems/ProblemForm.tsx | 9 +- .../admin/views/problems/ProblemView.tsx | 19 +- .../admin/views/problems/ProblemsList.tsx | 1 - .../testcases/TestcaseBulkUploader.tsx | 4 +- .../views/problems/testcases/TestcaseForm.tsx | 7 +- .../problems/testcases/TestcasesList.tsx | 37 +- .../views/submissions/SubmissionView.tsx | 9 +- .../submissions/SubmissionViewDetails.tsx | 11 +- .../submissions/SubmissionViewHeader.tsx | 15 +- .../submissions/SubmissionViewJudgingRuns.tsx | 25 +- .../views/submissions/SubmissionsFilters.tsx | 3 +- .../views/submissions/SubmissionsList.tsx | 17 +- .../submissions/SubmissionsListPagination.tsx | 28 +- .../team-category/TeamCategoriesList.tsx | 7 +- .../views/team-category/TeamCategoryForm.tsx | 3 +- .../src/pages/admin/views/teams/TeamForm.tsx | 7 +- .../src/pages/admin/views/teams/TeamsList.tsx | 1 - .../src/pages/admin/views/users/UserForm.tsx | 5 +- .../src/pages/admin/views/users/UsersList.tsx | 1 - apps/client/src/pages/public/PublicLayout.tsx | 3 +- apps/client/src/pages/public/PublicNavbar.tsx | 2 +- apps/client/src/pages/team/TeamLayout.tsx | 3 +- apps/client/src/pages/team/TeamNavbar.tsx | 11 +- .../pages/team/views/ClarificationsList.tsx | 9 +- apps/client/src/pages/team/views/HomeView.tsx | 2 +- .../src/pages/team/views/SubmissionsList.tsx | 3 +- .../src/shared/ActiveContestSelector.tsx | 14 +- apps/client/src/shared/ContestCountdown.tsx | 4 +- apps/client/src/shared/DarkModeSwitcher.tsx | 10 +- apps/client/src/shared/HeaderActionBar.tsx | 8 +- apps/client/src/shared/Login.tsx | 8 +- apps/client/src/shared/NavBar.tsx | 20 +- apps/client/src/shared/NoActiveContest.tsx | 2 +- apps/client/src/shared/ProblemSet.tsx | 20 +- apps/client/src/shared/Scoreboard.tsx | 44 +- apps/client/src/shared/Spinner.tsx | 6 +- apps/client/src/shared/SubmitForm.tsx | 3 +- apps/client/src/shared/ToastContainer.tsx | 6 +- apps/client/src/shared/chat-box/ChatBox.tsx | 6 +- .../src/shared/chat-box/ChatBoxHeader.tsx | 2 +- .../src/shared/chat-box/ChatBoxInput.tsx | 6 +- .../shared/chat-box/ChatBoxMessageList.tsx | 4 +- .../src/shared/data-table/DataTable.tsx | 2 +- .../src/shared/data-table/DataTableBody.tsx | 16 +- .../src/shared/dialogs/ChatBoxDialog.tsx | 2 +- apps/client/src/shared/dialogs/FormDialog.tsx | 14 +- .../src/shared/dialogs/SimpleDialog.tsx | 8 +- .../src/shared/form-controls/BasicInput.tsx | 16 +- .../shared/form-controls/DateTimeInput.tsx | 56 +- .../shared/form-controls/DropDownInput.tsx | 98 +- .../client/src/shared/form-controls/Label.tsx | 2 +- .../src/shared/tooltip/TooltipContainer.tsx | 24 +- apps/client/tailwind.config.js | 5 +- apps/client/tsconfig.spec.json | 7 +- apps/client/vite.config.mts | 6 +- apps/judge/src/http/http.client.ts | 18 +- apps/judge/src/judging-steps/compiler.ts | 20 +- apps/judge/src/judging-steps/executor.ts | 18 +- apps/judge/src/judging-steps/initializer.ts | 6 +- apps/judge/src/logger/judge.logger.ts | 9 +- apps/judge/src/services/docker.service.ts | 16 +- apps/judge/src/services/judging.service.ts | 8 +- apps/judge/src/services/socket.service.ts | 2 +- apps/judge/src/services/system.service.ts | 4 +- apps/judge/tsconfig.spec.json | 7 +- apps/server/{src => __old__}/core/config.ts | 0 .../core/extended-repository.ts | 8 +- .../{src => __old__}/core/log.decorator.ts | 6 +- .../{src => __old__}/core/logger.factory.ts | 0 .../{src => __old__}/core/roles.decorator.ts | 0 apps/server/{src => __old__}/core/utils.ts | 2 +- .../entities/clarification-message.entity.ts | 0 .../entities/clarification.entity.ts | 0 .../entities/contest-problem.entity.ts | 0 .../entities/contest.entity.ts | 0 .../entities/executable.entity.ts | 0 .../entities/file-content.entity.ts | 0 .../{src => __old__}/entities/file.entity.ts | 0 .../server/{src => __old__}/entities/index.ts | 0 .../entities/initial-data.entity.ts | 0 .../entities/judge-host.entity.ts | 0 .../entities/judging-run.entity.ts | 0 .../entities/judging.entity.ts | 0 .../entities/language.entity.ts | 0 .../entities/problem.entity.ts | 0 .../{src => __old__}/entities/role.entity.ts | 0 .../entities/score-cache.entity.ts | 0 .../entities/submission.entity.ts | 0 .../entities/team-category.entity.ts | 0 .../{src => __old__}/entities/team.entity.ts | 0 .../entities/testcase.entity.ts | 0 .../{src => __old__}/entities/user.entity.ts | 0 .../clarifications/clarifications.module.ts | 0 .../clarifications/clarifications.service.ts | 8 +- .../contests/contest-problems.service.ts | 2 +- .../features/contests/contests.controller.ts | 26 +- .../features/contests/contests.module.ts | 0 .../features/contests/contests.service.ts | 10 +- .../executables/executables.controller.ts | 0 .../executables/executables.module.ts | 0 .../executables/executables.service.ts | 10 +- .../features/files/files.module.ts | 0 .../features/files/files.service.ts | 4 +- .../judge-hosts/judge-hosts.controller.ts | 8 +- .../judge-hosts/judge-hosts.module.ts | 2 +- .../judge-hosts/judge-hosts.service.ts | 4 +- .../judge-hosts/judging-runs.service.ts | 4 +- .../features/judge-hosts/judgings.service.ts | 8 +- .../languages/languages.controller.ts | 4 +- .../features/languages/languages.module.ts | 0 .../features/languages/languages.service.ts | 6 +- .../features/problems/problems.controller.ts | 2 +- .../features/problems/problems.module.ts | 0 .../features/problems/problems.service.ts | 8 +- .../features/public/public.controller.ts | 6 +- .../features/public/public.module.ts | 0 .../scoreboard/score-cache.service.ts | 2 +- .../features/scoreboard/scoreboard.module.ts | 2 +- .../features/scoreboard/scoreboard.service.ts | 8 +- .../submissions/submissions.controller.ts | 14 +- .../submissions/submissions.module.ts | 0 .../submissions/submissions.service.ts | 14 +- .../team-categories.controller.ts | 0 .../team-categories/team-categories.module.ts | 0 .../team-categories.service.ts | 4 +- .../features/teams/teams.controller.ts | 0 .../features/teams/teams.module.ts | 0 .../features/teams/teams.service.ts | 8 +- .../testcases/testcases.controller.ts | 2 +- .../features/testcases/testcases.module.ts | 0 .../features/testcases/testcases.service.ts | 4 +- .../features/users/roles.controller.ts | 0 .../features/users/roles.service.ts | 2 +- .../features/users/users.controller.ts | 2 +- .../features/users/users.module.ts | 0 .../features/users/users.service.ts | 8 +- .../features/websocket/websocket.gateway.ts | 4 +- .../features/websocket/websocket.module.ts | 2 +- .../problems/float-power-2/metadata.json | 26 - .../problems/hello-world/metadata.json | 26 - apps/server/package.json | 7 + apps/server/src/app.controller.ts | 16 +- apps/server/src/app.module.ts | 68 +- apps/server/src/app.service.ts | 14 +- .../{ => src/assets}/init-data/contests.json | 21 +- .../executables/default-checker/build.sh | 0 .../executables/default-checker/checker.cpp | 0 .../executables/default-checker/metadata.json | 2 +- .../executables/default-runner/metadata.json | 6 +- .../executables/default-runner/runner.sh | 0 .../executables/float-checker/build.sh | 0 .../executables/float-checker/checker.cpp | 0 .../executables/float-checker/metadata.json | 2 +- .../init-data/languages/c-sharp/build.sh | 0 .../init-data/languages/c-sharp/metadata.json | 7 +- .../assets}/init-data/languages/c/build.sh | 0 .../init-data/languages/c/metadata.json | 6 +- .../assets}/init-data/languages/cpp/build.sh | 0 .../init-data/languages/cpp/metadata.json | 9 +- .../assets}/init-data/languages/java/build.sh | 0 .../init-data/languages/java/metadata.json | 6 +- .../init-data/languages/javascript/build.sh | 0 .../languages/javascript/metadata.json | 6 +- .../init-data/languages/kotlin/build.sh | 0 .../init-data/languages/kotlin/metadata.json | 6 +- .../init-data/languages/python-2/build.sh | 0 .../languages/python-2/metadata.json | 6 +- .../init-data/languages/python-3/build.sh | 0 .../languages/python-3/metadata.json | 7 +- .../init-data/languages/scala/build.sh | 0 .../init-data/languages/scala/metadata.json | 6 +- .../init-data/languages/typescript/build.sh | 0 .../languages/typescript/metadata.json | 6 +- .../problems/float-power-2/FloatPower2.pdf | Bin .../problems/float-power-2/metadata.json | 18 + .../float-power-2/testcases/test.0.ans | 0 .../float-power-2/testcases/test.0.in | 0 .../problems/hello-world/HelloWorld.pdf | Bin .../problems/hello-world/metadata.json | 18 + .../problems/hello-world/testcases/test.0.ans | 0 .../problems/hello-world/testcases/test.0.in | 0 .../{ => src/assets}/init-data/roles.json | 2 +- .../assets}/init-data/team-categories.json | 6 +- .../{ => src/assets}/init-data/teams.json | 13 +- .../{ => src/assets}/init-data/users.json | 18 +- apps/server/src/auth/auth.controller.ts | 68 + .../src/{features => }/auth/auth.module.ts | 3 +- apps/server/src/auth/auth.service.ts | 28 + apps/server/src/auth/index.ts | 3 + apps/server/src/auth/local.strategy.ts | 27 + .../server/src/auth/public-route.decorator.ts | 3 + .../{features => }/auth/session.serializer.ts | 6 +- apps/server/src/config.ts | 28 + .../core/initializers/abstract-initializer.ts | 42 - .../core/initializers/contests.initializer.ts | 20 - .../initializers/executables.initializer.ts | 18 - .../initializers/languages.initializer.ts | 15 - .../core/initializers/problems.initializer.ts | 24 - .../core/initializers/teams.initializer.ts | 16 - .../core/initializers/users.initializer.ts | 19 - apps/server/src/core/session.ts | 27 - apps/server/src/db/database.module.ts | 23 + apps/server/src/db/index.ts | 3 + apps/server/src/db/prisma.controller.ts | 69 + apps/server/src/db/prisma.service.ts | 11 + apps/server/src/db/types.ts | 13 + .../src/features/auth/auth.controller.ts | 41 - apps/server/src/features/auth/auth.service.ts | 23 - .../src/features/auth/local.strategy.ts | 23 - .../server/src/files-storage/files.storage.ts | 46 + .../src/files-storage/google.storage.ts | 57 + apps/server/src/files-storage/index.ts | 1 + .../src/files-storage/system.storage.ts | 59 + apps/server/src/files-storage/types.ts | 15 + apps/server/src/files/files.controller.ts | 302 +++ apps/server/src/files/files.module.ts | 12 + apps/server/src/files/files.service.ts | 58 + apps/server/src/files/index.ts | 2 + apps/server/src/guards/authenticated.guard.ts | 8 +- apps/server/src/guards/login.guard.ts | 21 +- apps/server/src/guards/roles.guard.ts | 9 +- .../src/initializers/abstract-initializer.ts | 106 + .../src/initializers/contests.initializer.ts | 37 + .../initializers/executables.initializer.ts | 44 + apps/server/src/initializers/index.ts | 2 + .../initializers/initializers.module.ts | 2 + .../src/initializers/languages.initializer.ts | 28 + .../initializers/main.initializer.ts | 32 +- .../src/initializers/problems.initializer.ts | 61 + .../initializers/roles.initializer.ts | 8 +- .../team-categories.initializer.ts | 8 +- .../src/initializers/teams.initializer.ts | 25 + .../src/initializers/users.initializer.ts | 14 + apps/server/src/logger/decorators.ts | 122 + apps/server/src/logger/index.ts | 5 + .../src/logger/logger-context.middleware.ts | 14 + apps/server/src/logger/logger-store.ts | 8 + apps/server/src/logger/logger.ts | 34 + .../src/logger/request-logger.middleware.ts | 41 + apps/server/src/main.ts | 74 +- .../1634854363202-CreateDatabase.ts | 431 ---- apps/server/src/migrations/index.ts | 3 - apps/server/src/session.ts | 21 + .../src/{core => }/socket-io.adapter.ts | 22 +- apps/server/src/typings.d.ts | 7 + apps/server/src/utils/check-password.ts | 7 + apps/server/src/utils/clean-fields.ts | 7 + apps/server/src/utils/clean-user.ts | 7 + apps/server/src/utils/extract-trace-id.ts | 13 + apps/server/src/utils/get-duration.ts | 3 + apps/server/src/utils/index.ts | 9 + apps/server/src/utils/log-prisma-operation.ts | 51 + apps/server/src/utils/optimize-image.ts | 59 + apps/server/src/utils/params-to-string.ts | 11 + apps/server/src/utils/throw-error.ts | 3 + apps/server/tsconfig.spec.json | 7 +- apps/server/webpack.config.js | 3 +- docker-compose.test.yml | 2 +- e2e/client-e2e/cypress.config.ts | 1 - e2e/client-e2e/src/support/e2e.ts | 1 - e2e/judge-e2e/src/support/test-setup.ts | 1 - e2e/server-e2e/src/support/test-setup.ts | 1 - package.json | 41 +- tsconfig.base.json | 8 +- yarn.lock | 2064 +++++++++++++++-- zenstack/entities/executable.zmodel | 4 +- zenstack/entities/file.zmodel | 4 +- zenstack/entities/user.zmodel | 2 +- .../migration.sql | 8 + .../migration.sql | 2 + zenstack/prisma/schema.prisma | 9 +- 304 files changed, 4268 insertions(+), 1973 deletions(-) delete mode 100644 .prettierrc create mode 100644 .prettierrc.cjs rename apps/server/{src => __old__}/core/config.ts (100%) rename apps/server/{src => __old__}/core/extended-repository.ts (94%) rename apps/server/{src => __old__}/core/log.decorator.ts (95%) rename apps/server/{src => __old__}/core/logger.factory.ts (100%) rename apps/server/{src => __old__}/core/roles.decorator.ts (100%) rename apps/server/{src => __old__}/core/utils.ts (98%) rename apps/server/{src => __old__}/entities/clarification-message.entity.ts (100%) rename apps/server/{src => __old__}/entities/clarification.entity.ts (100%) rename apps/server/{src => __old__}/entities/contest-problem.entity.ts (100%) rename apps/server/{src => __old__}/entities/contest.entity.ts (100%) rename apps/server/{src => __old__}/entities/executable.entity.ts (100%) rename apps/server/{src => __old__}/entities/file-content.entity.ts (100%) rename apps/server/{src => __old__}/entities/file.entity.ts (100%) rename apps/server/{src => __old__}/entities/index.ts (100%) rename apps/server/{src => __old__}/entities/initial-data.entity.ts (100%) rename apps/server/{src => __old__}/entities/judge-host.entity.ts (100%) rename apps/server/{src => __old__}/entities/judging-run.entity.ts (100%) rename apps/server/{src => __old__}/entities/judging.entity.ts (100%) rename apps/server/{src => __old__}/entities/language.entity.ts (100%) rename apps/server/{src => __old__}/entities/problem.entity.ts (100%) rename apps/server/{src => __old__}/entities/role.entity.ts (100%) rename apps/server/{src => __old__}/entities/score-cache.entity.ts (100%) rename apps/server/{src => __old__}/entities/submission.entity.ts (100%) rename apps/server/{src => __old__}/entities/team-category.entity.ts (100%) rename apps/server/{src => __old__}/entities/team.entity.ts (100%) rename apps/server/{src => __old__}/entities/testcase.entity.ts (100%) rename apps/server/{src => __old__}/entities/user.entity.ts (100%) rename apps/server/{src => __old__}/features/clarifications/clarifications.module.ts (100%) rename apps/server/{src => __old__}/features/clarifications/clarifications.service.ts (94%) rename apps/server/{src => __old__}/features/contests/contest-problems.service.ts (97%) rename apps/server/{src => __old__}/features/contests/contests.controller.ts (96%) rename apps/server/{src => __old__}/features/contests/contests.module.ts (100%) rename apps/server/{src => __old__}/features/contests/contests.service.ts (94%) rename apps/server/{src => __old__}/features/executables/executables.controller.ts (100%) rename apps/server/{src => __old__}/features/executables/executables.module.ts (100%) rename apps/server/{src => __old__}/features/executables/executables.service.ts (89%) rename apps/server/{src => __old__}/features/files/files.module.ts (100%) rename apps/server/{src => __old__}/features/files/files.service.ts (82%) rename apps/server/{src => __old__}/features/judge-hosts/judge-hosts.controller.ts (96%) rename apps/server/{src => __old__}/features/judge-hosts/judge-hosts.module.ts (95%) rename apps/server/{src => __old__}/features/judge-hosts/judge-hosts.service.ts (95%) rename apps/server/{src => __old__}/features/judge-hosts/judging-runs.service.ts (91%) rename apps/server/{src => __old__}/features/judge-hosts/judgings.service.ts (91%) rename apps/server/{src => __old__}/features/languages/languages.controller.ts (98%) rename apps/server/{src => __old__}/features/languages/languages.module.ts (100%) rename apps/server/{src => __old__}/features/languages/languages.service.ts (91%) rename apps/server/{src => __old__}/features/problems/problems.controller.ts (96%) rename apps/server/{src => __old__}/features/problems/problems.module.ts (100%) rename apps/server/{src => __old__}/features/problems/problems.service.ts (91%) rename apps/server/{src => __old__}/features/public/public.controller.ts (95%) rename apps/server/{src => __old__}/features/public/public.module.ts (100%) rename apps/server/{src => __old__}/features/scoreboard/score-cache.service.ts (98%) rename apps/server/{src => __old__}/features/scoreboard/scoreboard.module.ts (93%) rename apps/server/{src => __old__}/features/scoreboard/scoreboard.service.ts (97%) rename apps/server/{src => __old__}/features/submissions/submissions.controller.ts (97%) rename apps/server/{src => __old__}/features/submissions/submissions.module.ts (100%) rename apps/server/{src => __old__}/features/submissions/submissions.service.ts (95%) rename apps/server/{src => __old__}/features/team-categories/team-categories.controller.ts (100%) rename apps/server/{src => __old__}/features/team-categories/team-categories.module.ts (100%) rename apps/server/{src => __old__}/features/team-categories/team-categories.service.ts (97%) rename apps/server/{src => __old__}/features/teams/teams.controller.ts (100%) rename apps/server/{src => __old__}/features/teams/teams.module.ts (100%) rename apps/server/{src => __old__}/features/teams/teams.service.ts (92%) rename apps/server/{src => __old__}/features/testcases/testcases.controller.ts (97%) rename apps/server/{src => __old__}/features/testcases/testcases.module.ts (100%) rename apps/server/{src => __old__}/features/testcases/testcases.service.ts (96%) rename apps/server/{src => __old__}/features/users/roles.controller.ts (100%) rename apps/server/{src => __old__}/features/users/roles.service.ts (89%) rename apps/server/{src => __old__}/features/users/users.controller.ts (99%) rename apps/server/{src => __old__}/features/users/users.module.ts (100%) rename apps/server/{src => __old__}/features/users/users.service.ts (91%) rename apps/server/{src => __old__}/features/websocket/websocket.gateway.ts (96%) rename apps/server/{src => __old__}/features/websocket/websocket.module.ts (86%) delete mode 100644 apps/server/init-data/problems/float-power-2/metadata.json delete mode 100644 apps/server/init-data/problems/hello-world/metadata.json create mode 100644 apps/server/package.json rename apps/server/{ => src/assets}/init-data/contests.json (71%) rename apps/server/{ => src/assets}/init-data/executables/default-checker/build.sh (100%) rename apps/server/{ => src/assets}/init-data/executables/default-checker/checker.cpp (100%) rename apps/server/{ => src/assets}/init-data/executables/default-checker/metadata.json (99%) rename apps/server/{ => src/assets}/init-data/executables/default-runner/metadata.json (50%) rename apps/server/{ => src/assets}/init-data/executables/default-runner/runner.sh (100%) rename apps/server/{ => src/assets}/init-data/executables/float-checker/build.sh (100%) rename apps/server/{ => src/assets}/init-data/executables/float-checker/checker.cpp (100%) rename apps/server/{ => src/assets}/init-data/executables/float-checker/metadata.json (99%) rename apps/server/{ => src/assets}/init-data/languages/c-sharp/build.sh (100%) rename apps/server/{ => src/assets}/init-data/languages/c-sharp/metadata.json (77%) rename apps/server/{ => src/assets}/init-data/languages/c/build.sh (100%) rename apps/server/{ => src/assets}/init-data/languages/c/metadata.json (82%) rename apps/server/{ => src/assets}/init-data/languages/cpp/build.sh (100%) rename apps/server/{ => src/assets}/init-data/languages/cpp/metadata.json (70%) rename apps/server/{ => src/assets}/init-data/languages/java/build.sh (100%) rename apps/server/{ => src/assets}/init-data/languages/java/metadata.json (81%) rename apps/server/{ => src/assets}/init-data/languages/javascript/build.sh (100%) rename apps/server/{ => src/assets}/init-data/languages/javascript/metadata.json (84%) rename apps/server/{ => src/assets}/init-data/languages/kotlin/build.sh (100%) rename apps/server/{ => src/assets}/init-data/languages/kotlin/metadata.json (83%) rename apps/server/{ => src/assets}/init-data/languages/python-2/build.sh (100%) rename apps/server/{ => src/assets}/init-data/languages/python-2/metadata.json (83%) rename apps/server/{ => src/assets}/init-data/languages/python-3/build.sh (100%) rename apps/server/{ => src/assets}/init-data/languages/python-3/metadata.json (79%) rename apps/server/{ => src/assets}/init-data/languages/scala/build.sh (100%) rename apps/server/{ => src/assets}/init-data/languages/scala/metadata.json (82%) rename apps/server/{ => src/assets}/init-data/languages/typescript/build.sh (100%) rename apps/server/{ => src/assets}/init-data/languages/typescript/metadata.json (84%) rename apps/server/{ => src/assets}/init-data/problems/float-power-2/FloatPower2.pdf (100%) create mode 100644 apps/server/src/assets/init-data/problems/float-power-2/metadata.json rename apps/server/{ => src/assets}/init-data/problems/float-power-2/testcases/test.0.ans (100%) rename apps/server/{ => src/assets}/init-data/problems/float-power-2/testcases/test.0.in (100%) rename apps/server/{ => src/assets}/init-data/problems/hello-world/HelloWorld.pdf (100%) create mode 100644 apps/server/src/assets/init-data/problems/hello-world/metadata.json rename apps/server/{ => src/assets}/init-data/problems/hello-world/testcases/test.0.ans (100%) rename apps/server/{ => src/assets}/init-data/problems/hello-world/testcases/test.0.in (100%) rename apps/server/{ => src/assets}/init-data/roles.json (99%) rename apps/server/{ => src/assets}/init-data/team-categories.json (80%) rename apps/server/{ => src/assets}/init-data/teams.json (50%) rename apps/server/{ => src/assets}/init-data/users.json (75%) create mode 100644 apps/server/src/auth/auth.controller.ts rename apps/server/src/{features => }/auth/auth.module.ts (82%) create mode 100644 apps/server/src/auth/auth.service.ts create mode 100644 apps/server/src/auth/index.ts create mode 100644 apps/server/src/auth/local.strategy.ts create mode 100644 apps/server/src/auth/public-route.decorator.ts rename apps/server/src/{features => }/auth/session.serializer.ts (51%) create mode 100644 apps/server/src/config.ts delete mode 100644 apps/server/src/core/initializers/abstract-initializer.ts delete mode 100644 apps/server/src/core/initializers/contests.initializer.ts delete mode 100644 apps/server/src/core/initializers/executables.initializer.ts delete mode 100644 apps/server/src/core/initializers/languages.initializer.ts delete mode 100644 apps/server/src/core/initializers/problems.initializer.ts delete mode 100644 apps/server/src/core/initializers/teams.initializer.ts delete mode 100644 apps/server/src/core/initializers/users.initializer.ts delete mode 100644 apps/server/src/core/session.ts create mode 100644 apps/server/src/db/database.module.ts create mode 100644 apps/server/src/db/index.ts create mode 100644 apps/server/src/db/prisma.controller.ts create mode 100644 apps/server/src/db/prisma.service.ts create mode 100644 apps/server/src/db/types.ts delete mode 100644 apps/server/src/features/auth/auth.controller.ts delete mode 100644 apps/server/src/features/auth/auth.service.ts delete mode 100644 apps/server/src/features/auth/local.strategy.ts create mode 100644 apps/server/src/files-storage/files.storage.ts create mode 100644 apps/server/src/files-storage/google.storage.ts create mode 100644 apps/server/src/files-storage/index.ts create mode 100644 apps/server/src/files-storage/system.storage.ts create mode 100644 apps/server/src/files-storage/types.ts create mode 100644 apps/server/src/files/files.controller.ts create mode 100644 apps/server/src/files/files.module.ts create mode 100644 apps/server/src/files/files.service.ts create mode 100644 apps/server/src/files/index.ts create mode 100644 apps/server/src/initializers/abstract-initializer.ts create mode 100644 apps/server/src/initializers/contests.initializer.ts create mode 100644 apps/server/src/initializers/executables.initializer.ts create mode 100644 apps/server/src/initializers/index.ts rename apps/server/src/{core => }/initializers/initializers.module.ts (93%) create mode 100644 apps/server/src/initializers/languages.initializer.ts rename apps/server/src/{core => }/initializers/main.initializer.ts (55%) create mode 100644 apps/server/src/initializers/problems.initializer.ts rename apps/server/src/{core => }/initializers/roles.initializer.ts (59%) rename apps/server/src/{core => }/initializers/team-categories.initializer.ts (59%) create mode 100644 apps/server/src/initializers/teams.initializer.ts create mode 100644 apps/server/src/initializers/users.initializer.ts create mode 100644 apps/server/src/logger/decorators.ts create mode 100644 apps/server/src/logger/index.ts create mode 100644 apps/server/src/logger/logger-context.middleware.ts create mode 100644 apps/server/src/logger/logger-store.ts create mode 100644 apps/server/src/logger/logger.ts create mode 100644 apps/server/src/logger/request-logger.middleware.ts delete mode 100644 apps/server/src/migrations/1634854363202-CreateDatabase.ts delete mode 100644 apps/server/src/migrations/index.ts create mode 100644 apps/server/src/session.ts rename apps/server/src/{core => }/socket-io.adapter.ts (83%) create mode 100644 apps/server/src/typings.d.ts create mode 100644 apps/server/src/utils/check-password.ts create mode 100644 apps/server/src/utils/clean-fields.ts create mode 100644 apps/server/src/utils/clean-user.ts create mode 100644 apps/server/src/utils/extract-trace-id.ts create mode 100644 apps/server/src/utils/get-duration.ts create mode 100644 apps/server/src/utils/index.ts create mode 100644 apps/server/src/utils/log-prisma-operation.ts create mode 100644 apps/server/src/utils/optimize-image.ts create mode 100644 apps/server/src/utils/params-to-string.ts create mode 100644 apps/server/src/utils/throw-error.ts create mode 100644 zenstack/prisma/migrations/20240913223531_make_file_created_by_nullable/migration.sql create mode 100644 zenstack/prisma/migrations/20240913223726_make_executable_build_script_nullable/migration.sql diff --git a/.env b/.env index dec3e34..0e2b98f 100644 --- a/.env +++ b/.env @@ -7,4 +7,4 @@ REDIS_URL="redis://localhost:6379" LOG_LEVEL="debug" -SYSTEM_STORAGE_DIRECTORY_PATH=./dist/files-storage/tun-judge +SYSTEM_STORAGE_DIRECTORY_PATH=./dist/files-storage diff --git a/.prettierignore b/.prettierignore index e26f0b3..72d1cc4 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,4 +2,7 @@ /dist /coverage /.nx/cache -/.nx/workspace-data \ No newline at end of file +/.nx/workspace-data +/.yarnrc.yml +/.yarn +/README.md \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 0018fc0..0000000 --- a/.prettierrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "printWidth": 100, - "singleQuote": true, - "importOrder": ["^ace-builds/(.*)$","^@core/(.*)$", "^@shared/(.*)$", "^[./]"], - "importOrderSeparation": true -} \ No newline at end of file diff --git a/.prettierrc.cjs b/.prettierrc.cjs new file mode 100644 index 0000000..2b85dc1 --- /dev/null +++ b/.prettierrc.cjs @@ -0,0 +1,9 @@ +module.exports = { + printWidth: 100, + singleQuote: true, + importOrder: ['^ace-builds/(.*)$', '^@prisma/(.*)$', '^@(core|shared)/(.*)$', '^[./]'], + importOrderSeparation: true, + importOrderSortSpecifiers: true, + importOrderParserPlugins: ['typescript', 'jsx', 'decorators-legacy'], + plugins: ['@trivago/prettier-plugin-sort-imports', 'prettier-plugin-tailwindcss'], +}; diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c7b47c..334356e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,10 +4,9 @@ All notable changes to this project will be documented in this file. See [standa ### [0.0.43](https://github.com/NaN-Projects/tun-judge/compare/v0.0.42...v0.0.43) (2021-10-22) - ### Bug Fixes -* update languages docker images names ([2c441d5](https://github.com/NaN-Projects/tun-judge/commit/2c441d5de701ac190e89b8b7d416a9ebd2226e4b)) +- update languages docker images names ([2c441d5](https://github.com/NaN-Projects/tun-judge/commit/2c441d5de701ac190e89b8b7d416a9ebd2226e4b)) ### [0.0.42](https://github.com/NaN-Projects/tun-judge/compare/v0.0.41...v0.0.42) (2021-10-21) @@ -17,46 +16,44 @@ All notable changes to this project will be documented in this file. See [standa ### 0.0.39 (2021-10-21) - ### Features -* add clarification messaging system between teams and judges ([540cbec](https://github.com/NaN-Projects/tun-judge/commit/540cbec3e02533476ce111354f1062f79d7ad28b)) -* add dark mode and fix several bugs ([31608de](https://github.com/NaN-Projects/tun-judge/commit/31608de25ec5f40752d5ee6a1632ea00c3ff9c51)) -* add diff viewer for team and judge outputs ([ada5080](https://github.com/NaN-Projects/tun-judge/commit/ada5080d7eced38cd76a7cec2f73cf04cdeeb4fb)) -* add initial data and implement database initializers ([3fd4b1b](https://github.com/NaN-Projects/tun-judge/commit/3fd4b1b9a2a508ac50b30a9719cacbcf7761f0f5)) -* add swagger api docs and swagger-stats ([9bd479e](https://github.com/NaN-Projects/tun-judge/commit/9bd479e228d86b4f78cf857ffbc151fdf3e1a5f2)) -* add the ability to attach multiple users to a single team ([996aed5](https://github.com/NaN-Projects/tun-judge/commit/996aed5d6ad852ad7bc228b1e8da6fe56c6cd7cb)) -* add tooltips ([aa83c7e](https://github.com/NaN-Projects/tun-judge/commit/aa83c7eb3d628d710194bfaf21675c70f53a3e9e)) -* redesign the client using TailwindCSS ([4573ba2](https://github.com/NaN-Projects/tun-judge/commit/4573ba2f63db1976c4c523c584782b6caa93f9b1)) -* update testlib.h ([e9561aa](https://github.com/NaN-Projects/tun-judge/commit/e9561aa9c1bf82c3b931f3c29c235b928ad86e3c)) - +- add clarification messaging system between teams and judges ([540cbec](https://github.com/NaN-Projects/tun-judge/commit/540cbec3e02533476ce111354f1062f79d7ad28b)) +- add dark mode and fix several bugs ([31608de](https://github.com/NaN-Projects/tun-judge/commit/31608de25ec5f40752d5ee6a1632ea00c3ff9c51)) +- add diff viewer for team and judge outputs ([ada5080](https://github.com/NaN-Projects/tun-judge/commit/ada5080d7eced38cd76a7cec2f73cf04cdeeb4fb)) +- add initial data and implement database initializers ([3fd4b1b](https://github.com/NaN-Projects/tun-judge/commit/3fd4b1b9a2a508ac50b30a9719cacbcf7761f0f5)) +- add swagger api docs and swagger-stats ([9bd479e](https://github.com/NaN-Projects/tun-judge/commit/9bd479e228d86b4f78cf857ffbc151fdf3e1a5f2)) +- add the ability to attach multiple users to a single team ([996aed5](https://github.com/NaN-Projects/tun-judge/commit/996aed5d6ad852ad7bc228b1e8da6fe56c6cd7cb)) +- add tooltips ([aa83c7e](https://github.com/NaN-Projects/tun-judge/commit/aa83c7eb3d628d710194bfaf21675c70f53a3e9e)) +- redesign the client using TailwindCSS ([4573ba2](https://github.com/NaN-Projects/tun-judge/commit/4573ba2f63db1976c4c523c584782b6caa93f9b1)) +- update testlib.h ([e9561aa](https://github.com/NaN-Projects/tun-judge/commit/e9561aa9c1bf82c3b931f3c29c235b928ad86e3c)) ### Bug Fixes -* add contest query param to submissions endpoint and refactor code ([905a13b](https://github.com/NaN-Projects/tun-judge/commit/905a13bbfa0c68ffbcbf33242885fb829b7742ae)) -* better handeling and reporting errors for judge ([cd31676](https://github.com/NaN-Projects/tun-judge/commit/cd31676f4bbf353fec1359cfde089ddbdc2cb500)) -* enable strict mode for judge ([abd601c](https://github.com/NaN-Projects/tun-judge/commit/abd601c8ebdd2de0d6e433aca6cc6450749ed0e0)) -* fix accepting not allowed submissions ([0c1bf2f](https://github.com/NaN-Projects/tun-judge/commit/0c1bf2f041b1e148bc64a6e41b0792c187d4c7c1)) -* fix bug in judge ([6612d56](https://github.com/NaN-Projects/tun-judge/commit/6612d5695683b2a76f717d1d4273ce781168e56c)) -* fix deleting contest bug ([5bc22a7](https://github.com/NaN-Projects/tun-judge/commit/5bc22a7303aa044770b0dee12d085105c3440dbf)) -* fix design flaws ([1f2ff3e](https://github.com/NaN-Projects/tun-judge/commit/1f2ff3ee3179d5cda1e19cb478c8a24cdb337ff8)) -* fix handeling login errors for judge ([62f749a](https://github.com/NaN-Projects/tun-judge/commit/62f749a8498110c8895d8b5545ef4d0ecc348460)) -* fix refreshing submission list when filters changes ([cf00ef5](https://github.com/NaN-Projects/tun-judge/commit/cf00ef5c76c4be1818e8c38d48177646806bff7f)) -* fix scorecache calculation bug ([9e79ce3](https://github.com/NaN-Projects/tun-judge/commit/9e79ce3053dca8f5016437e6030c85ec8992e5b1)) -* fix server loading client ([77b81ed](https://github.com/NaN-Projects/tun-judge/commit/77b81ed4ad610e9f654444cb22acbf5c49ded0a0)) -* fix server start script ([e73d830](https://github.com/NaN-Projects/tun-judge/commit/e73d830f3bc47a60410f55a5766cd0b123e8e083)) -* fix Snyk vulnerabilities ([d4e87f4](https://github.com/NaN-Projects/tun-judge/commit/d4e87f42efa5e3ec51b093c2784647bafecce61a)) -* fix Snyk vulnerabilities ([e3f20b2](https://github.com/NaN-Projects/tun-judge/commit/e3f20b2c179cbd23cf09b15914231a8a8b6720ce)) -* fix Snyk vulnerabilities and prettier issues ([3fdf401](https://github.com/NaN-Projects/tun-judge/commit/3fdf401a7098febb5953779b167f2ad9a12d6b53)) -* fix Spinner ([1fbf8f5](https://github.com/NaN-Projects/tun-judge/commit/1fbf8f5883e8f5f0d3ce2ac9103fb9efde5bf132)) -* fix submission view testcases view ([6b5e779](https://github.com/NaN-Projects/tun-judge/commit/6b5e779896192a2744b5f507b984005d4dd44d4e)) -* fix time formatting ([29535d4](https://github.com/NaN-Projects/tun-judge/commit/29535d4e9a8f1d1e1d2f6b8286e05f6fbfda3480)) -* fix vulnerabilities ([a33ecf4](https://github.com/NaN-Projects/tun-judge/commit/a33ecf46f9a1c8f381911456d476688eea150dec)) -* refactor form controls ([d70d15e](https://github.com/NaN-Projects/tun-judge/commit/d70d15ef8eaae6cf8fcdd15aa741cb36aa221c9b)) -* refactor judge code part1 ([b93908c](https://github.com/NaN-Projects/tun-judge/commit/b93908ccbc81252f8be193db14dcd61a42a88430)) -* refactor judge code part2 ([01d67b7](https://github.com/NaN-Projects/tun-judge/commit/01d67b74d72bacae5e55ffd9a01fc114717654d6)) -* replace judge pinging server to server sending events when new submissions are available ([ded90f3](https://github.com/NaN-Projects/tun-judge/commit/ded90f30a1356e35bd990eb0703aec8330d4f118)) -* ui fixes ([dd3705d](https://github.com/NaN-Projects/tun-judge/commit/dd3705d4a5e2011fd1a8add8c7a78762d9373da7)) -* update docker image tags ([2bda93e](https://github.com/NaN-Projects/tun-judge/commit/2bda93e813a087751ec1977f98f70e6e1832b675)) -* update docker image tags ([0cc99a3](https://github.com/NaN-Projects/tun-judge/commit/0cc99a398e8aa8c2874ac38b0e33d164e77e096f)) -* write implictaly tailwindcss classnames ([e738850](https://github.com/NaN-Projects/tun-judge/commit/e7388507ac97dbe49fa89f5614b3a6f83c1b3800)) +- add contest query param to submissions endpoint and refactor code ([905a13b](https://github.com/NaN-Projects/tun-judge/commit/905a13bbfa0c68ffbcbf33242885fb829b7742ae)) +- better handeling and reporting errors for judge ([cd31676](https://github.com/NaN-Projects/tun-judge/commit/cd31676f4bbf353fec1359cfde089ddbdc2cb500)) +- enable strict mode for judge ([abd601c](https://github.com/NaN-Projects/tun-judge/commit/abd601c8ebdd2de0d6e433aca6cc6450749ed0e0)) +- fix accepting not allowed submissions ([0c1bf2f](https://github.com/NaN-Projects/tun-judge/commit/0c1bf2f041b1e148bc64a6e41b0792c187d4c7c1)) +- fix bug in judge ([6612d56](https://github.com/NaN-Projects/tun-judge/commit/6612d5695683b2a76f717d1d4273ce781168e56c)) +- fix deleting contest bug ([5bc22a7](https://github.com/NaN-Projects/tun-judge/commit/5bc22a7303aa044770b0dee12d085105c3440dbf)) +- fix design flaws ([1f2ff3e](https://github.com/NaN-Projects/tun-judge/commit/1f2ff3ee3179d5cda1e19cb478c8a24cdb337ff8)) +- fix handeling login errors for judge ([62f749a](https://github.com/NaN-Projects/tun-judge/commit/62f749a8498110c8895d8b5545ef4d0ecc348460)) +- fix refreshing submission list when filters changes ([cf00ef5](https://github.com/NaN-Projects/tun-judge/commit/cf00ef5c76c4be1818e8c38d48177646806bff7f)) +- fix scorecache calculation bug ([9e79ce3](https://github.com/NaN-Projects/tun-judge/commit/9e79ce3053dca8f5016437e6030c85ec8992e5b1)) +- fix server loading client ([77b81ed](https://github.com/NaN-Projects/tun-judge/commit/77b81ed4ad610e9f654444cb22acbf5c49ded0a0)) +- fix server start script ([e73d830](https://github.com/NaN-Projects/tun-judge/commit/e73d830f3bc47a60410f55a5766cd0b123e8e083)) +- fix Snyk vulnerabilities ([d4e87f4](https://github.com/NaN-Projects/tun-judge/commit/d4e87f42efa5e3ec51b093c2784647bafecce61a)) +- fix Snyk vulnerabilities ([e3f20b2](https://github.com/NaN-Projects/tun-judge/commit/e3f20b2c179cbd23cf09b15914231a8a8b6720ce)) +- fix Snyk vulnerabilities and prettier issues ([3fdf401](https://github.com/NaN-Projects/tun-judge/commit/3fdf401a7098febb5953779b167f2ad9a12d6b53)) +- fix Spinner ([1fbf8f5](https://github.com/NaN-Projects/tun-judge/commit/1fbf8f5883e8f5f0d3ce2ac9103fb9efde5bf132)) +- fix submission view testcases view ([6b5e779](https://github.com/NaN-Projects/tun-judge/commit/6b5e779896192a2744b5f507b984005d4dd44d4e)) +- fix time formatting ([29535d4](https://github.com/NaN-Projects/tun-judge/commit/29535d4e9a8f1d1e1d2f6b8286e05f6fbfda3480)) +- fix vulnerabilities ([a33ecf4](https://github.com/NaN-Projects/tun-judge/commit/a33ecf46f9a1c8f381911456d476688eea150dec)) +- refactor form controls ([d70d15e](https://github.com/NaN-Projects/tun-judge/commit/d70d15ef8eaae6cf8fcdd15aa741cb36aa221c9b)) +- refactor judge code part1 ([b93908c](https://github.com/NaN-Projects/tun-judge/commit/b93908ccbc81252f8be193db14dcd61a42a88430)) +- refactor judge code part2 ([01d67b7](https://github.com/NaN-Projects/tun-judge/commit/01d67b74d72bacae5e55ffd9a01fc114717654d6)) +- replace judge pinging server to server sending events when new submissions are available ([ded90f3](https://github.com/NaN-Projects/tun-judge/commit/ded90f30a1356e35bd990eb0703aec8330d4f118)) +- ui fixes ([dd3705d](https://github.com/NaN-Projects/tun-judge/commit/dd3705d4a5e2011fd1a8add8c7a78762d9373da7)) +- update docker image tags ([2bda93e](https://github.com/NaN-Projects/tun-judge/commit/2bda93e813a087751ec1977f98f70e6e1832b675)) +- update docker image tags ([0cc99a3](https://github.com/NaN-Projects/tun-judge/commit/0cc99a398e8aa8c2874ac38b0e33d164e77e096f)) +- write implictaly tailwindcss classnames ([e738850](https://github.com/NaN-Projects/tun-judge/commit/e7388507ac97dbe49fa89f5614b3a6f83c1b3800)) diff --git a/apps/client/index.html b/apps/client/index.html index 63b9e94..08a719e 100644 --- a/apps/client/index.html +++ b/apps/client/index.html @@ -1,4 +1,4 @@ - + diff --git a/apps/client/src/Root.tsx b/apps/client/src/Root.tsx index e5accbf..a2b542e 100644 --- a/apps/client/src/Root.tsx +++ b/apps/client/src/Root.tsx @@ -5,7 +5,6 @@ import { BrowserRouter, Route, Switch } from 'react-router-dom'; import { Role } from '@core/models'; import { RootStore, useStore } from '@core/stores'; - import Logout from '@shared/Logout'; import Spinner from '@shared/Spinner'; import ToastContainer from '@shared/ToastContainer'; diff --git a/apps/client/src/core/helpers.ts b/apps/client/src/core/helpers.ts index daaf827..465820a 100644 --- a/apps/client/src/core/helpers.ts +++ b/apps/client/src/core/helpers.ts @@ -106,7 +106,7 @@ let interval: NodeJS.Timeout | undefined = undefined; export function updateLeftTimeToContest( contest?: Contest, - setLeftToContest?: (value: number) => void + setLeftToContest?: (value: number) => void, ): void { // eslint-disable-next-line react-hooks/rules-of-hooks useEffect(() => { @@ -140,7 +140,7 @@ export function getRandomHexColor(): string { export function getJudgingRunColor( testcase: Testcase, - judging?: Judging + judging?: Judging, ): 'gray' | 'green' | 'red' { if (!judging) return 'gray'; const judgeRun = judging.runs.find((r) => r.testcase.id === testcase.id); @@ -149,7 +149,7 @@ export function getJudgingRunColor( export function useLongPress( callback: () => void, - ms = 100 + ms = 100, ): { onMouseDown: () => void; onMouseUp: () => void; @@ -199,7 +199,7 @@ export function countUnseenMessages(clarification: Clarification, currentUser: U return clarification.messages.filter( (message) => !compareRoles(currentUser, message.sentBy) && - !message.seenBy.some((u) => u.id === currentUser.id) + !message.seenBy.some((u) => u.id === currentUser.id), ).length; } diff --git a/apps/client/src/core/stores/ClarificationsStore.ts b/apps/client/src/core/stores/ClarificationsStore.ts index fc46347..308b542 100644 --- a/apps/client/src/core/stores/ClarificationsStore.ts +++ b/apps/client/src/core/stores/ClarificationsStore.ts @@ -34,11 +34,11 @@ export class ClarificationsStore { @action sendClarification = async ( contestId: number, - clarification: Clarification + clarification: Clarification, ): Promise => { return (this.item = await http.post( `api/contests/${contestId}/clarifications`, - clarification + clarification, )); }; @@ -46,10 +46,10 @@ export class ClarificationsStore { setClarificationMessageAsSeen = async ( contestId: number, clarificationId: number, - messageId: number + messageId: number, ): Promise => { await http.patch( - `api/contests/${contestId}/clarifications/${clarificationId}/message/${messageId}/set-as-seen` + `api/contests/${contestId}/clarifications/${clarificationId}/message/${messageId}/set-as-seen`, ); }; } diff --git a/apps/client/src/core/stores/PublicStore.ts b/apps/client/src/core/stores/PublicStore.ts index fd0434e..b826918 100644 --- a/apps/client/src/core/stores/PublicStore.ts +++ b/apps/client/src/core/stores/PublicStore.ts @@ -14,15 +14,15 @@ export class PublicStore { autorun(() => rootStore.updatesCount.contests && this.fetchContests()); reaction( () => [this.currentContest, rootStore.updatesCount.scoreboard], - () => this.currentContest && this.fetchScoreCaches(this.currentContest.id) + () => this.currentContest && this.fetchScoreCaches(this.currentContest.id), ); reaction( () => [this.currentContest, rootStore.connected], - () => this.currentContest && this.fetchProblems(this.currentContest.id) + () => this.currentContest && this.fetchProblems(this.currentContest.id), ); reaction( () => rootStore.connected, - () => this.currentContest && this.fetchScoreCaches(this.currentContest.id) + () => this.currentContest && this.fetchScoreCaches(this.currentContest.id), ); } @@ -41,7 +41,7 @@ export class PublicStore { @action fetchProblems = async (contestId: number): Promise => { return (this.problems = await http.get( - `api/public/contest/${contestId}/problems` + `api/public/contest/${contestId}/problems`, )); }; @@ -62,7 +62,7 @@ export class PublicStore { get totalSubmissions(): number { return this.scoreCaches.reduce( (acc, scoreCache) => acc + scoreCache.restrictedSubmissions + scoreCache.restrictedPending, - 0 + 0, ); } diff --git a/apps/client/src/core/stores/RootStore.ts b/apps/client/src/core/stores/RootStore.ts index a2bf484..6783de4 100644 --- a/apps/client/src/core/stores/RootStore.ts +++ b/apps/client/src/core/stores/RootStore.ts @@ -1,5 +1,5 @@ import { action, autorun, computed, observable } from 'mobx'; -import { io, Socket } from 'socket.io-client'; +import { Socket, io } from 'socket.io-client'; import { ToastsStore } from '@core/stores/ToastsStore'; import { TooltipStore } from '@core/stores/TooltipStore'; @@ -17,7 +17,7 @@ const updateEvents = [ 'judgeRuns', 'clarifications', ] as const; -type UpdateEvents = typeof updateEvents[number]; +type UpdateEvents = (typeof updateEvents)[number]; type AppLocalCache = { connected?: number; @@ -62,7 +62,7 @@ export class RootStore { autorun( () => this.connected && http.get(`api/current`).then(this.setProfile).catch(this.logout), - { delay: 10 } + { delay: 10 }, ); autorun(() => localStorage.setItem('settings', JSON.stringify(this.appLocalCache))); diff --git a/apps/client/src/core/stores/SubmissionsStore.ts b/apps/client/src/core/stores/SubmissionsStore.ts index eb59218..b2dbde7 100644 --- a/apps/client/src/core/stores/SubmissionsStore.ts +++ b/apps/client/src/core/stores/SubmissionsStore.ts @@ -42,7 +42,7 @@ export class SubmissionsStore { fetchAll = async (): Promise => { this.filters.contest = this.publicStore.currentContest?.id ?? -1; [this.data, this.totalItems] = await http.get<[Submission[], number]>( - `api/submissions?page=${this.currentPage}&${buildSearchQuery(this.filters)}` + `api/submissions?page=${this.currentPage}&${buildSearchQuery(this.filters)}`, ); return this.data; }; @@ -81,7 +81,7 @@ export class SubmissionsStore { } function buildSearchQuery( - filters: Record + filters: Record, ): string { return Object.entries(filters) .filter(([, value]) => !isEmpty(value)) diff --git a/apps/client/src/core/stores/TeamStore.ts b/apps/client/src/core/stores/TeamStore.ts index 88bd799..6655fc7 100644 --- a/apps/client/src/core/stores/TeamStore.ts +++ b/apps/client/src/core/stores/TeamStore.ts @@ -12,7 +12,7 @@ export class TeamStore { sendSubmission = async ( contestId: number, teamId: number, - submission: Submission + submission: Submission, ): Promise => { await http.post(`api/contests/${contestId}/team/${teamId}/submit`, submission); }; diff --git a/apps/client/src/core/stores/TestcasesStore.ts b/apps/client/src/core/stores/TestcasesStore.ts index 575c1d5..be3a9a9 100644 --- a/apps/client/src/core/stores/TestcasesStore.ts +++ b/apps/client/src/core/stores/TestcasesStore.ts @@ -16,7 +16,7 @@ export class TestcasesStore { this.problemId && this.fetchAll(); !this.problemId && (this.data = []); }, - { delay: 10 } + { delay: 10 }, ); } diff --git a/apps/client/src/core/utils/http-client.ts b/apps/client/src/core/utils/http-client.ts index 026265e..b24d10c 100644 --- a/apps/client/src/core/utils/http-client.ts +++ b/apps/client/src/core/utils/http-client.ts @@ -27,7 +27,7 @@ export class HttpClient { export async function request( path: string, method: Method = 'GET', - options?: AxiosRequestConfig + options?: AxiosRequestConfig, ): Promise { try { return ( diff --git a/apps/client/src/index.scss b/apps/client/src/index.scss index 00bd37d..910b41f 100644 --- a/apps/client/src/index.scss +++ b/apps/client/src/index.scss @@ -12,11 +12,11 @@ code { } ::-webkit-scrollbar { - @apply rounded-lg h-4 w-4 bg-gray-200 dark:bg-gray-900; + @apply h-4 w-4 rounded-lg bg-gray-200 dark:bg-gray-900; } ::-webkit-scrollbar-thumb { - @apply border-4 border-solid rounded-lg bg-gray-400 border-gray-200 hover:bg-gray-500 dark:border-gray-900 dark:bg-gray-700 dark:hover:bg-gray-600; + @apply rounded-lg border-4 border-solid border-gray-200 bg-gray-400 hover:bg-gray-500 dark:border-gray-900 dark:bg-gray-700 dark:hover:bg-gray-600; } /* Chrome, Safari, Edge, Opera */ diff --git a/apps/client/src/index.tsx b/apps/client/src/index.tsx index 5fc0943..19a28df 100644 --- a/apps/client/src/index.tsx +++ b/apps/client/src/index.tsx @@ -10,15 +10,14 @@ import { LanguagesStore, ProblemsStore, PublicStore, - rootStore, SubmissionsStore, TeamCategoriesStore, - TeamsStore, TeamStore, + TeamsStore, TestcasesStore, UsersStore, + rootStore, } from '@core/stores'; - import Spinner from '@shared/Spinner'; import Root from './Root'; @@ -51,5 +50,5 @@ ReactDOM.render( , - document.getElementById('root') + document.getElementById('root'), ); diff --git a/apps/client/src/pages/admin/AdminLayout.tsx b/apps/client/src/pages/admin/AdminLayout.tsx index b00a0bd..f7a6a67 100644 --- a/apps/client/src/pages/admin/AdminLayout.tsx +++ b/apps/client/src/pages/admin/AdminLayout.tsx @@ -3,7 +3,6 @@ import React from 'react'; import { Redirect, Route, Switch } from 'react-router-dom'; import { RootStore, useStore } from '@core/stores'; - import Scoreboard from '@shared/Scoreboard'; import AdminNavbar from './AdminNavbar'; @@ -28,7 +27,7 @@ const AdminLayout: React.FC = observer(() => { return (
-
+
(appLocalCache.menuCollapsed = !appLocalCache.menuCollapsed)} /> diff --git a/apps/client/src/pages/admin/AdminNavbar.tsx b/apps/client/src/pages/admin/AdminNavbar.tsx index 154053f..2b386ed 100644 --- a/apps/client/src/pages/admin/AdminNavbar.tsx +++ b/apps/client/src/pages/admin/AdminNavbar.tsx @@ -5,7 +5,6 @@ import React from 'react'; import { useHistory } from 'react-router-dom'; import { RootStore, useStore } from '@core/stores'; - import ActiveContestSelector from '@shared/ActiveContestSelector'; import { DarkModeSwitcher } from '@shared/DarkModeSwitcher'; @@ -18,27 +17,27 @@ const AdminNavbar: React.FC = observer(({ toggleSidebar }) => return (
-
+
- + {profile?.name ?? '-'} - + history.push('/logout')}>
diff --git a/apps/client/src/pages/admin/AdminSidebar.tsx b/apps/client/src/pages/admin/AdminSidebar.tsx index 89296ef..9e8ca6e 100644 --- a/apps/client/src/pages/admin/AdminSidebar.tsx +++ b/apps/client/src/pages/admin/AdminSidebar.tsx @@ -20,7 +20,6 @@ import { useHistory } from 'react-router-dom'; import { PublicStore } from '@core/stores/PublicStore'; import { useStore } from '@core/stores/useStore'; import { Tabs } from '@core/types'; - import Tooltip from '@shared/tooltip/Tooltip'; const AdminSidebar: React.FC<{ visible: boolean }> = observer(({ visible }) => { @@ -88,7 +87,7 @@ const AdminSidebar: React.FC<{ visible: boolean }> = observer(({ visible }) => { icon: PaperAirplaneIcon, label: totalPendingSubmissions > 0 ? ( -
+
{totalPendingSubmissions}
) : undefined, @@ -108,15 +107,15 @@ const AdminSidebar: React.FC<{ visible: boolean }> = observer(({ visible }) => { return (