Skip to content

Commit a15ca45

Browse files
author
realshade
committed
додано HelpController з маршрутом для API документації; оновлено логіку контролерів та шаблонів для відображення нових меню та стилів
1 parent aaee914 commit a15ca45

24 files changed

+700
-32
lines changed

app/Http/Controllers/Api/TaskController.php

Lines changed: 63 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public function afterPrint(AfterPrintRequest $request) : JsonResponse
6565

6666
$partTask->count_printed += $partData['count_printing'];
6767
$partTask->save();
68-
$dataTasks['data']['new']['tasks'][ $taskID ]['parts'][ $partID ]['count_printed'] = $partTask->count_printed;
68+
$dataTasks['data']['new']['tasks'][ $taskID ]['parts'][ $partID ]['count_printed'] = $partTask->count_printed;
6969
$dataTasks['data']['new']['tasks'][ $taskID ]['parts'][ $partID ]['count_printing'] = 0;
7070
unset($dataTasks['data']['new']['tasks'][ $taskID ]['parts'][ $partID ]['is_printing']);
7171

@@ -76,9 +76,9 @@ public function afterPrint(AfterPrintRequest $request) : JsonResponse
7676
'event_source' => PrintTaskEventSource::API,
7777
]);
7878
}
79-
$task = Task::find($taskID);
79+
$task = Task::find($taskID);
8080
$dataTasks['data']['new']['tasks'][ $taskID ]['count_set_printing'] = 0;
81-
$dataTasks['data']['new']['tasks'][ $taskID ]['count_set_printed'] = $task->getCompletedSetsCount();
81+
$dataTasks['data']['new']['tasks'][ $taskID ]['count_set_printed'] = $task->getCompletedSetsCount();
8282
}
8383

8484
$printer->printingTasks()->delete();
@@ -186,8 +186,68 @@ public function beforePrint(BeforePrintRequest $request) : JsonResponse
186186

187187
public function index()
188188
{
189+
$profile = auth()->user();
190+
$tasks = auth()->user()->tasks()
191+
->whereIn('status', [TaskStatus::NEW, TaskStatus::IN_PROGRESS, TaskStatus::PRINTED])
192+
->with([
193+
'partTask',
194+
'partTask.task',
195+
])
196+
->orderBy('created_at', 'desc')
197+
->get()
198+
->map(function ($task) {
199+
// Сохраняем оригинальный статус
200+
$statusEnum = $task->status;
201+
// Создаем массив с нужным порядком полей
202+
$taskArray = $task->toArray();
203+
// Вставляем status_name сразу после status
204+
$result = [];
205+
foreach ($taskArray as $key => $value) {
206+
$result[$key] = $value;
207+
if ($key === 'status') {
208+
$result['status'] = $statusEnum->name;
209+
}
210+
}
211+
return $result;
212+
});
213+
$printers = auth()->user()->printers()
214+
->with([
215+
'printingTasks',
216+
'printingTasks.partTask',
217+
'printingTasks.partTask.task',
218+
'printingTasks.partTask.part',
219+
'filamentSlots',
220+
'filamentSlots.filamentSpool',
221+
'filamentSlots.filamentSpool.packaging',
222+
'filamentSlots.filamentSpool.filament',
223+
'filamentSlots.filamentSpool.filament.vendor',
224+
'filamentSlots.filamentSpool.filament.type',
225+
])
226+
->orderBy('name')
227+
->get()
228+
->map(function ($task) {
229+
// Сохраняем оригинальный статус
230+
$statusEnum = $task->status;
231+
// Создаем массив с нужным порядком полей
232+
$taskArray = $task->toArray();
233+
// Вставляем status_name сразу после status
234+
$result = [];
235+
foreach ($taskArray as $key => $value) {
236+
$result[$key] = $value;
237+
if ($key === 'status') {
238+
$result['status'] = $statusEnum->name;
239+
}
240+
}
241+
return $result;
242+
});
243+
189244
return response()->json([
190245
'success' => true,
246+
'data' => [
247+
'profile' => $profile,
248+
'printers' => $printers,
249+
'tasks' => $tasks,
250+
],
191251
]);
192252
}
193253

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
class HelpController extends Controller
6+
{
7+
public function api()
8+
{
9+
return view('help.api');
10+
}
11+
12+
}

app/Http/Controllers/HomeController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ public function index()
1010
{
1111
return view('main');
1212
}
13+
1314
}

app/Models/PartTask.php

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,32 +3,56 @@
33
namespace App\Models;
44

55
use App\Enums\TaskStatus;
6+
use Illuminate\Database\Eloquent\Relations\BelongsTo;
7+
use Illuminate\Database\Eloquent\Relations\HasMany;
68
use Illuminate\Database\Eloquent\Relations\Pivot;
79

10+
/**
11+
* @property int $id
12+
* @property int $part_id
13+
* @property int $task_id
14+
* @property int $count_per_set
15+
* @property Part $part
16+
* @property Task $task
17+
* @property PrintingTask[] $printingTasks
18+
* @property int $count_printing
19+
* @property int $count_planned
20+
* @property int $count_remaining
21+
*/
822
class PartTask extends Pivot
923
{
1024
/* **************************************** Public **************************************** */
11-
public function part()
25+
public function part() : BelongsTo
1226
{
1327
return $this->belongsTo(Part::class);
1428
}
1529

16-
public function printingTasks()
30+
public function printingTasks() : HasMany
1731
{
1832
return $this->hasMany(PrintingTask::class, 'part_task_id');
1933
}
2034

21-
public function task()
35+
public function task() : BelongsTo
2236
{
2337
return $this->belongsTo(Task::class);
2438
}
2539

2640
/* **************************************** Getters **************************************** */
27-
public function getPrintingCountAttribute() : int
41+
public function getCountPlannedAttribute() : int
42+
{
43+
return $this->count_per_set * $this->task->count_set_planned;
44+
}
45+
46+
public function getCountPrintingAttribute() : int
2847
{
2948
return $this->printingTasks->sum('count');
3049
}
3150

51+
public function getCountRemainingAttribute() : int
52+
{
53+
return $this->count_planned - $this->printingCount;
54+
}
55+
3256
/* **************************************** Protected **************************************** */
3357
protected static function booted() : void
3458
{

app/Models/Task.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Illuminate\Database\Eloquent\Model;
99
use Illuminate\Database\Eloquent\Relations\BelongsTo;
1010
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
11+
use Illuminate\Database\Eloquent\Relations\HasMany;
1112
use Illuminate\Database\Eloquent\SoftDeletes;
1213

1314
class Task extends Model
@@ -53,6 +54,11 @@ public function isPrinting() : bool
5354
return $this->parts()->get()->map(fn($part) => $part->pivot->printingTasks->count())->sum() > 0;
5455
}
5556

57+
public function partTask() : HasMany
58+
{
59+
return $this->hasMany(PartTask::class);
60+
}
61+
5662
/* **************************************** Protected **************************************** */
5763
protected static function booted() : void
5864
{

app/Models/User.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ public function printers() : HasMany
7070
return $this->hasMany(Printer::class);
7171
}
7272

73+
public function tasks() : HasMany
74+
{
75+
return $this->hasMany(Task::class);
76+
}
77+
7378
/* **************************************** Getters **************************************** */
7479
public function getGravatarURLAttribute() : string
7580
{

app/Traits/ParseFilename.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ private function validateParsedData(array $parsedData) : array
7979
->first();
8080

8181
if (!$task) {
82-
$result['errors']['tasks'][] = __('api.validation.task_not_found', ['task_id' => $item['task_id']]);
82+
$result['errors']['tasks'][$item['task_id']] = __('api.validation.task_not_found', ['task_id' => $item['task_id']]);
8383
continue;
8484
}
8585

@@ -117,7 +117,7 @@ private function validateParsedData(array $parsedData) : array
117117
if (!empty($item['part_id'])) {
118118
// якщо частина вказана, то перевіряємо, чи вона є в даних завдання
119119
if (empty($taskData[ $item['task_id'] ]['parts']) || !array_key_exists($item['part_id'], $taskData[ $item['task_id'] ]['parts'])) {
120-
$result['errors']['parts'][] = __('api.validation.parts_not_found', ['part_id' => $item['part_id']]);
120+
$result['errors']['parts'][$item['part_id']] = __('api.validation.parts_not_found', ['part_id' => $item['part_id']]);
121121
continue;
122122
}
123123
// якщо частина є, то додаємо до неї дані

public/assets/css/app.css

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,4 +340,41 @@ a:hover {
340340
.pcr-app {
341341
z-index: 10000;
342342
}
343+
.documentation h1,
344+
.documentation h2,
345+
.documentation h3,
346+
.documentation h4,
347+
.documentation h5 {
348+
color: #007BFF;
349+
margin-top: 1.5rem;
350+
margin-bottom: 1rem;
351+
}
352+
.documentation ul {
353+
margin-bottom: 1rem;
354+
padding-left: 1.5rem;
355+
}
356+
.documentation ul li {
357+
margin-bottom: 0.5rem;
358+
}
359+
.documentation pre {
360+
background-color: #0c2a48;
361+
padding: 1rem;
362+
border-radius: 0.25rem;
363+
overflow-x: auto;
364+
margin-bottom: 1rem;
365+
}
366+
.documentation pre code {
367+
white-space: pre-wrap;
368+
word-wrap: break-word;
369+
}
370+
.documentation code {
371+
background-color: #0c2a48;
372+
padding: 0.2rem 0.4rem;
373+
border-radius: 0.25rem;
374+
}
375+
.menu img {
376+
width: 48px;
377+
height: 48px;
378+
margin-right: 1em;
379+
}
343380

0 commit comments

Comments
 (0)