Refactor project structure and integrate Redux for state management. Update configuration files for new project name and add Webpack plugins for environment variables. Implement user authentication with Keycloak and create a context for challenge management. Add various components for user interaction, including dashboards and task workspaces. Enhance API integration and add error handling utilities. Introduce analytics and polling mechanisms for improved user experience.
Some checks failed
platform/bro-js/challenge-pl/pipeline/head There was a failure building this commit
Some checks failed
platform/bro-js/challenge-pl/pipeline/head There was a failure building this commit
This commit is contained in:
4
stubs/api/data/auth.json
Normal file
4
stubs/api/data/auth.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"ok": true,
|
||||
"userId": "user-frontend-001"
|
||||
}
|
||||
27
stubs/api/data/chains.json
Normal file
27
stubs/api/data/chains.json
Normal file
@@ -0,0 +1,27 @@
|
||||
[
|
||||
{
|
||||
"id": "chain-frontend",
|
||||
"_id": "chain-frontend",
|
||||
"name": "Frontend Basics",
|
||||
"createdAt": "2024-09-01T08:00:00.000Z",
|
||||
"updatedAt": "2024-10-12T10:15:00.000Z",
|
||||
"tasks": [
|
||||
{
|
||||
"id": "task-html-intro",
|
||||
"_id": "task-html-intro",
|
||||
"title": "HTML старт",
|
||||
"description": "# HTML старт\n\nСоздайте базовую HTML-страницу с заголовком и абзацем.",
|
||||
"createdAt": "2024-09-01T08:05:00.000Z",
|
||||
"updatedAt": "2024-09-10T12:00:00.000Z"
|
||||
},
|
||||
{
|
||||
"id": "task-react-component",
|
||||
"_id": "task-react-component",
|
||||
"title": "React компонент",
|
||||
"description": "# React компонент\n\nСоздайте компонент `StatCard` с пропсами `title` и `value`.",
|
||||
"createdAt": "2024-09-05T11:30:00.000Z",
|
||||
"updatedAt": "2024-10-01T09:45:00.000Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
57
stubs/api/data/queue-status.json
Normal file
57
stubs/api/data/queue-status.json
Normal file
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"queue-frontend-001": {
|
||||
"status": "completed",
|
||||
"position": 0,
|
||||
"submission": {
|
||||
"_id": "submission-001",
|
||||
"id": "submission-001",
|
||||
"user": "user-frontend-001",
|
||||
"task": "task-html-intro",
|
||||
"result": "<html><head></head><body><h1>Hello</h1></body></html>",
|
||||
"status": "needs_revision",
|
||||
"queueId": "queue-frontend-001",
|
||||
"feedback": "Добавьте тег <title>",
|
||||
"submittedAt": "2024-10-18T07:10:00.000Z",
|
||||
"checkedAt": "2024-10-18T07:10:15.000Z",
|
||||
"attemptNumber": 1
|
||||
}
|
||||
},
|
||||
"queue-frontend-002": {
|
||||
"status": "completed",
|
||||
"position": 0,
|
||||
"submission": {
|
||||
"_id": "submission-002",
|
||||
"id": "submission-002",
|
||||
"user": "user-frontend-001",
|
||||
"task": "task-html-intro",
|
||||
"result": "<html><head><title>Home</title></head><body><h1>Hello</h1></body></html>",
|
||||
"status": "accepted",
|
||||
"queueId": "queue-frontend-002",
|
||||
"feedback": "Отличная работа!",
|
||||
"submittedAt": "2024-10-18T07:20:00.000Z",
|
||||
"checkedAt": "2024-10-18T07:20:05.000Z",
|
||||
"attemptNumber": 2
|
||||
}
|
||||
},
|
||||
"queue-frontend-003": {
|
||||
"status": "waiting",
|
||||
"position": 3
|
||||
},
|
||||
"queue-react-001": {
|
||||
"status": "completed",
|
||||
"position": 0,
|
||||
"submission": {
|
||||
"_id": "submission-004",
|
||||
"id": "submission-004",
|
||||
"user": "user-react-777",
|
||||
"task": "task-react-component",
|
||||
"result": "export const StatCard = () => <div>Stat</div>;",
|
||||
"status": "accepted",
|
||||
"queueId": "queue-react-001",
|
||||
"feedback": "Добавьте prop-types.",
|
||||
"submittedAt": "2024-10-17T11:30:00.000Z",
|
||||
"checkedAt": "2024-10-17T11:30:07.000Z",
|
||||
"attemptNumber": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
59
stubs/api/data/submissions.json
Normal file
59
stubs/api/data/submissions.json
Normal file
@@ -0,0 +1,59 @@
|
||||
[
|
||||
{
|
||||
"_id": "submission-001",
|
||||
"id": "submission-001",
|
||||
"user": {
|
||||
"id": "user-frontend-001",
|
||||
"nickname": "frontend_ninja"
|
||||
},
|
||||
"task": {
|
||||
"id": "task-html-intro",
|
||||
"title": "HTML старт"
|
||||
},
|
||||
"result": "<html><head></head><body><h1>Hello</h1></body></html>",
|
||||
"status": "needs_revision",
|
||||
"queueId": "queue-frontend-001",
|
||||
"feedback": "Добавьте тег <title>",
|
||||
"submittedAt": "2024-10-18T07:10:00.000Z",
|
||||
"checkedAt": "2024-10-18T07:10:15.000Z",
|
||||
"attemptNumber": 1
|
||||
},
|
||||
{
|
||||
"_id": "submission-002",
|
||||
"id": "submission-002",
|
||||
"user": {
|
||||
"id": "user-frontend-001",
|
||||
"nickname": "frontend_ninja"
|
||||
},
|
||||
"task": {
|
||||
"id": "task-html-intro",
|
||||
"title": "HTML старт"
|
||||
},
|
||||
"result": "<html><head><title>Home</title></head><body><h1>Hello</h1></body></html>",
|
||||
"status": "accepted",
|
||||
"queueId": "queue-frontend-002",
|
||||
"feedback": "Отличная работа!",
|
||||
"submittedAt": "2024-10-18T07:20:00.000Z",
|
||||
"checkedAt": "2024-10-18T07:20:05.000Z",
|
||||
"attemptNumber": 2
|
||||
},
|
||||
{
|
||||
"_id": "submission-004",
|
||||
"id": "submission-004",
|
||||
"user": {
|
||||
"id": "user-react-777",
|
||||
"nickname": "react_master"
|
||||
},
|
||||
"task": {
|
||||
"id": "task-react-component",
|
||||
"title": "React компонент"
|
||||
},
|
||||
"result": "export const StatCard = () => <div>Stat</div>;",
|
||||
"status": "accepted",
|
||||
"queueId": "queue-react-001",
|
||||
"feedback": "Добавьте prop-types.",
|
||||
"submittedAt": "2024-10-17T11:30:00.000Z",
|
||||
"checkedAt": "2024-10-17T11:30:07.000Z",
|
||||
"attemptNumber": 1
|
||||
}
|
||||
]
|
||||
4
stubs/api/data/submit.json
Normal file
4
stubs/api/data/submit.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"queueId": "queue-frontend-003",
|
||||
"submissionId": "submission-003"
|
||||
}
|
||||
20
stubs/api/data/system-stats.json
Normal file
20
stubs/api/data/system-stats.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"users": 128,
|
||||
"tasks": 34,
|
||||
"chains": 5,
|
||||
"submissions": {
|
||||
"total": 540,
|
||||
"accepted": 312,
|
||||
"rejected": 144,
|
||||
"pending": 62,
|
||||
"inProgress": 22
|
||||
},
|
||||
"averageCheckTimeMs": 5600,
|
||||
"queue": {
|
||||
"queueLength": 18,
|
||||
"waiting": 12,
|
||||
"inProgress": 6,
|
||||
"maxConcurrency": 8,
|
||||
"currentlyProcessing": 6
|
||||
}
|
||||
}
|
||||
59
stubs/api/data/user-stats.json
Normal file
59
stubs/api/data/user-stats.json
Normal file
@@ -0,0 +1,59 @@
|
||||
{
|
||||
"user-frontend-001": {
|
||||
"totalTasksAttempted": 2,
|
||||
"completedTasks": 1,
|
||||
"inProgressTasks": 1,
|
||||
"needsRevisionTasks": 0,
|
||||
"totalSubmissions": 3,
|
||||
"averageCheckTimeMs": 4200,
|
||||
"taskStats": [
|
||||
{
|
||||
"taskId": "task-html-intro",
|
||||
"taskTitle": "HTML старт",
|
||||
"attempts": [
|
||||
{
|
||||
"attemptNumber": 1,
|
||||
"status": "needs_revision",
|
||||
"submittedAt": "2024-10-18T07:10:00.000Z",
|
||||
"checkedAt": "2024-10-18T07:10:15.000Z",
|
||||
"feedback": "Добавьте тег <title>."
|
||||
},
|
||||
{
|
||||
"attemptNumber": 2,
|
||||
"status": "accepted",
|
||||
"submittedAt": "2024-10-18T07:20:00.000Z",
|
||||
"checkedAt": "2024-10-18T07:20:05.000Z",
|
||||
"feedback": "Отличная работа!"
|
||||
}
|
||||
],
|
||||
"totalAttempts": 2,
|
||||
"status": "completed",
|
||||
"lastAttemptAt": "2024-10-18T07:20:00.000Z"
|
||||
},
|
||||
{
|
||||
"taskId": "task-react-component",
|
||||
"taskTitle": "React компонент",
|
||||
"attempts": [
|
||||
{
|
||||
"attemptNumber": 1,
|
||||
"status": "pending",
|
||||
"submittedAt": "2024-10-19T09:05:00.000Z",
|
||||
"feedback": null
|
||||
}
|
||||
],
|
||||
"totalAttempts": 1,
|
||||
"status": "pending",
|
||||
"lastAttemptAt": "2024-10-19T09:05:00.000Z"
|
||||
}
|
||||
],
|
||||
"chainStats": [
|
||||
{
|
||||
"chainId": "chain-frontend",
|
||||
"chainName": "Frontend Basics",
|
||||
"totalTasks": 2,
|
||||
"completedTasks": 1,
|
||||
"progress": 50
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
43
stubs/api/data/user-submissions.json
Normal file
43
stubs/api/data/user-submissions.json
Normal file
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"user-frontend-001": [
|
||||
{
|
||||
"_id": "submission-001",
|
||||
"id": "submission-001",
|
||||
"user": "user-frontend-001",
|
||||
"task": "task-html-intro",
|
||||
"result": "<html><head></head><body><h1>Hello</h1></body></html>",
|
||||
"status": "needs_revision",
|
||||
"queueId": "queue-frontend-001",
|
||||
"feedback": "Добавьте тег <title>",
|
||||
"submittedAt": "2024-10-18T07:10:00.000Z",
|
||||
"checkedAt": "2024-10-18T07:10:15.000Z",
|
||||
"attemptNumber": 1
|
||||
},
|
||||
{
|
||||
"_id": "submission-002",
|
||||
"id": "submission-002",
|
||||
"user": "user-frontend-001",
|
||||
"task": "task-html-intro",
|
||||
"result": "<html><head><title>Home</title></head><body><h1>Hello</h1></body></html>",
|
||||
"status": "accepted",
|
||||
"queueId": "queue-frontend-002",
|
||||
"feedback": "Отличная работа!",
|
||||
"submittedAt": "2024-10-18T07:20:00.000Z",
|
||||
"checkedAt": "2024-10-18T07:20:05.000Z",
|
||||
"attemptNumber": 2
|
||||
},
|
||||
{
|
||||
"_id": "submission-003",
|
||||
"id": "submission-003",
|
||||
"user": "user-frontend-001",
|
||||
"task": "task-react-component",
|
||||
"result": "export const StatCard = () => null;",
|
||||
"status": "pending",
|
||||
"queueId": "queue-frontend-003",
|
||||
"feedback": null,
|
||||
"submittedAt": "2024-10-19T09:05:00.000Z",
|
||||
"checkedAt": null,
|
||||
"attemptNumber": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user