StudentContractController.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Services\StudentContractService;
  4. use App\Http\Requests\StudentContractRequest;
  5. use App\Http\Resources\StudentContractResource;
  6. use Illuminate\Http\JsonResponse;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\Auth;
  9. class StudentContractController extends Controller
  10. {
  11. public function __construct(
  12. protected StudentContractService $service,
  13. ) {}
  14. public function franchisorSummary(): JsonResponse
  15. {
  16. return $this->successResponse(payload: $this->service->getFranchisorSummary());
  17. }
  18. public function franchisorFrozen(): JsonResponse
  19. {
  20. $items = $this->service->getFranchisorByStatus('frozen');
  21. return $this->successResponse(payload: StudentContractResource::collection($items));
  22. }
  23. public function franchisorCancelled(): JsonResponse
  24. {
  25. $items = $this->service->getFranchisorByStatus('cancelled');
  26. return $this->successResponse(payload: StudentContractResource::collection($items));
  27. }
  28. public function index(): JsonResponse
  29. {
  30. $unitId = Auth::user()->load('units')->units->first()?->id;
  31. $studentId = request()->integer('student_id') ?: null;
  32. $items = $this->service->getAll($unitId, $studentId);
  33. return $this->successResponse(payload: StudentContractResource::collection($items));
  34. }
  35. public function store(StudentContractRequest $request): JsonResponse
  36. {
  37. $unitId = Auth::user()->load('units')->units->first()?->id;
  38. $data = array_merge($request->validated(), ['unit_id' => $unitId]);
  39. $item = $this->service->create($data);
  40. return $this->successResponse(payload: new StudentContractResource($item), message: __('messages.created'), code: 201);
  41. }
  42. public function show(int $id): JsonResponse
  43. {
  44. $item = $this->service->findById($id);
  45. return $this->successResponse(payload: new StudentContractResource($item));
  46. }
  47. public function update(StudentContractRequest $request, int $id): JsonResponse
  48. {
  49. $item = $this->service->update($id, $request->validated());
  50. return $this->successResponse(payload: new StudentContractResource($item), message: __('messages.updated'));
  51. }
  52. public function attachFile(Request $request, int $id): JsonResponse
  53. {
  54. $request->validate(['file' => 'required|file|mimes:jpeg,png,gif,pdf,mp4,mov,avi|max:20480']);
  55. $item = $this->service->attachFile($id, $request->file('file'));
  56. return $this->successResponse(payload: new StudentContractResource($item), message: __('messages.updated'));
  57. }
  58. public function freeze(int $id): JsonResponse
  59. {
  60. $item = $this->service->freeze($id);
  61. return $this->successResponse(payload: new StudentContractResource($item), message: __('messages.updated'));
  62. }
  63. public function cancel(int $id): JsonResponse
  64. {
  65. $item = $this->service->cancel($id);
  66. return $this->successResponse(payload: new StudentContractResource($item), message: __('messages.updated'));
  67. }
  68. public function reactivate(int $id): JsonResponse
  69. {
  70. $item = $this->service->reactivate($id);
  71. return $this->successResponse(payload: new StudentContractResource($item), message: __('messages.updated'));
  72. }
  73. public function destroy(int $id): JsonResponse
  74. {
  75. $this->service->delete($id);
  76. return $this->successResponse(message: __('messages.deleted'), code: 204);
  77. }
  78. }