|
|
@@ -2,26 +2,36 @@
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
+use App\Http\Controllers\Concerns\ResolvesActiveUnit;
|
|
|
use App\Services\ClassService;
|
|
|
use App\Http\Requests\ClassRequest;
|
|
|
use App\Http\Resources\ClassResource;
|
|
|
+use Illuminate\Http\Request;
|
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
|
|
class ClassController extends Controller
|
|
|
{
|
|
|
+ use ResolvesActiveUnit;
|
|
|
+
|
|
|
public function __construct(
|
|
|
protected ClassService $service,
|
|
|
) {}
|
|
|
|
|
|
public function index(): JsonResponse
|
|
|
{
|
|
|
- $items = $this->service->getAll();
|
|
|
+ $unitId = $this->activeUnitId();
|
|
|
+ if (!$unitId) {
|
|
|
+ return $this->successResponse(payload: []);
|
|
|
+ }
|
|
|
+
|
|
|
+ $items = $this->service->getAllByUnit($unitId);
|
|
|
return $this->successResponse(payload: ClassResource::collection($items));
|
|
|
}
|
|
|
|
|
|
public function store(ClassRequest $request): JsonResponse
|
|
|
{
|
|
|
- $item = $this->service->create($request->validated());
|
|
|
+ $data = array_merge($request->validated(), ['unit_id' => $this->activeUnitId()]);
|
|
|
+ $item = $this->service->create($data);
|
|
|
return $this->successResponse(payload: new ClassResource($item), message: __('messages.created'), code: 201);
|
|
|
}
|
|
|
|
|
|
@@ -42,4 +52,30 @@ public function destroy(int $id): JsonResponse
|
|
|
$this->service->delete($id);
|
|
|
return $this->successResponse(message: __('messages.deleted'), code: 204);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Alunos com contrato ativo no pacote da aula + presença registrada.
|
|
|
+ */
|
|
|
+ public function students(int $id): JsonResponse
|
|
|
+ {
|
|
|
+ $students = $this->service->getStudentsForClass($id);
|
|
|
+ return $this->successResponse(payload: $students);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Salva a lista de presença da aula (upsert em lote).
|
|
|
+ */
|
|
|
+ public function saveAttendance(Request $request, int $id): JsonResponse
|
|
|
+ {
|
|
|
+ $validated = $request->validate([
|
|
|
+ 'attendances' => 'required|array',
|
|
|
+ 'attendances.*.student_id' => 'required|integer|exists:students,id',
|
|
|
+ 'attendances.*.in_class' => 'required|boolean',
|
|
|
+ 'attendances.*.justified' => 'sometimes|boolean',
|
|
|
+ 'attendances.*.notes' => 'nullable|string',
|
|
|
+ ]);
|
|
|
+
|
|
|
+ $this->service->saveAttendance($id, $validated['attendances']);
|
|
|
+ return $this->successResponse(message: __('messages.updated'));
|
|
|
+ }
|
|
|
}
|