Перевод на DDD
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace App\Infrastructure\Http\Controllers\Web;
|
||||
|
||||
use App\Domain\ReportDuty\Actions\CreateReportDutyAction;
|
||||
use App\Domain\ReportDuty\Actions\GenerateAndSaveReportSnapshotAction;
|
||||
use App\Domain\ReportDuty\Actions\SaveObservablePatientsAction;
|
||||
use App\Domain\ReportDuty\DTO\CreateReportDutyDto;
|
||||
use App\Infrastructure\Http\Requests\CreateDutyReportRequest;
|
||||
use App\Services\DateRange;
|
||||
use Inertia\Inertia;
|
||||
|
||||
class DutyReportController
|
||||
{
|
||||
public function store(
|
||||
CreateDutyReportRequest $request,
|
||||
CreateReportDutyAction $createAction,
|
||||
GenerateAndSaveReportSnapshotAction $snapshotAction
|
||||
) {
|
||||
// Валидация уже выполнена в FormRequest
|
||||
$validated = $request->validated();
|
||||
|
||||
// Создаём DTO и DateRange
|
||||
$dateRange = new DateRange(
|
||||
$validated['period_start'],
|
||||
$validated['period_end']
|
||||
);
|
||||
|
||||
$dto = new CreateReportDutyDto(
|
||||
reportDate: $dateRange->endSql(),
|
||||
periodStart: $dateRange->startSql(),
|
||||
periodEnd: $dateRange->endSql(),
|
||||
periodType: $validated['period_type'] ?? 'day',
|
||||
statusId: $validated['status_id'] ?? 2,
|
||||
rfLpuDoctorId: $request->user()->rf_lpudoctor_id,
|
||||
rfDepartmentId: $request->user()->rf_department_id,
|
||||
rfUserId: $request->user()->id,
|
||||
);
|
||||
|
||||
// Вызов Use Case для создания отчёта
|
||||
$report = $createAction->execute($dto);
|
||||
|
||||
// Вызов Use Case для сохранения снимка и расчёта статистики
|
||||
$stats = $snapshotAction->execute(
|
||||
$report,
|
||||
$dateRange,
|
||||
$request->user()->rf_department_id,
|
||||
$request->user()->id
|
||||
);
|
||||
|
||||
// Сохраняем наблюдаемых пациентов и нежелательные события
|
||||
if ($request->has('observables')) {
|
||||
$observableAction = app(SaveObservablePatientsAction::class);
|
||||
$observableAction->execute($report, $validated['observables']);
|
||||
}
|
||||
|
||||
if ($request->has('unwanted_events')) {
|
||||
$unwantedAction = app(SaveUnwantedEventsAction::class);
|
||||
$unwantedAction->execute($report, $validated['unwanted_events']);
|
||||
}
|
||||
|
||||
// Возвращаем Inertia-ответ (редирект или рендер)
|
||||
return Inertia::location(route('reports.duty.show', $report->id));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user