GradingController.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Criterion;
  4. use App\Http\Controllers\UserController;
  5. use App\Championship;
  6. use App\Member;
  7. use App\Module;
  8. use App\Result;
  9. use Illuminate\Http\Request;
  10. class GradingController extends Controller
  11. {
  12. public function get(Request $request, $id)
  13. {
  14. /*
  15. * Загружаем пользователя, который выполняет действие
  16. */
  17. $expert = UserController::getUserByToken($request->bearerToken());
  18. /*
  19. * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
  20. */
  21. if ($expert->position !== 1)
  22. return response()
  23. ->json(["status" => false, "message" => "Permission denied"])
  24. ->setStatusCode(403, 'Permission denied');
  25. $champ = Championship::find($id);
  26. if (!$champ)
  27. return response()
  28. ->json(["status" => false, "message" => "Championship not found"])
  29. ->setStatusCode(404, 'Championship not found');
  30. if ($expert->position !== $champ->expert)
  31. return response()
  32. ->json(["status" => false, "message" => "Permission denied"])
  33. ->setStatusCode(403, 'Permission denied');
  34. $res = [
  35. "title" => $champ->title,
  36. "group" => $champ->group,
  37. "members" => $champ->members,
  38. "modules" => $champ->modules
  39. ];
  40. return response()->json($res, 200);
  41. }
  42. public function getCriteria(Request $request, $id)
  43. {
  44. /*
  45. * Загружаем пользователя, который выполняет действие
  46. */
  47. $expert = UserController::getUserByToken($request->bearerToken());
  48. /*
  49. * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
  50. */
  51. if ($expert->position !== 1)
  52. return response()
  53. ->json(["status" => false, "message" => "Permission denied"])
  54. ->setStatusCode(403, 'Permission denied');
  55. $champ = Championship::find($id);
  56. if (!$champ)
  57. return response()
  58. ->json(["status" => false, "message" => "Championship not found"])
  59. ->setStatusCode(404, 'Championship not found');
  60. if ($expert->position !== $champ->expert)
  61. return response()
  62. ->json(["status" => false, "message" => "Permission denied"])
  63. ->setStatusCode(403, 'Permission denied');
  64. $module = Module::find($request->module);
  65. if ($module->championship != $champ->id || !$module)
  66. return response()
  67. ->json(["status" => false, "message" => "Module not found"])
  68. ->setStatusCode(404, 'Module not found');
  69. $member = Member::find($request->member);
  70. if (!$member || $member->championship != $champ->id)
  71. return response()
  72. ->json(["status" => false, "message" => "Member not found"])
  73. ->setStatusCode(404, 'Member not found');
  74. $criteria = Criterion::where('module', $module->id)->get();
  75. $res = [
  76. "results" => [],
  77. "criteria" => []
  78. ];
  79. foreach ($criteria as $criterion) {
  80. $result = Result::where('criterion_id', $criterion->id)
  81. ->where('module_id', $module->id)
  82. ->where('member_id', $member->id)
  83. ->first();
  84. if ($result) {
  85. $res["results"][] = [
  86. "title" => $result->criterion->title,
  87. "type" => $result->criterion->type,
  88. "max" => $result->criterion->max,
  89. "points" => $result->points
  90. ];
  91. continue;
  92. }
  93. $res["criteria"][] = $criterion;
  94. }
  95. return response()
  96. ->json($res,200);
  97. }
  98. public function lockCriterion(Request $request, $id)
  99. {
  100. /*
  101. * Загружаем пользователя, который выполняет действие
  102. */
  103. $expert = UserController::getUserByToken($request->bearerToken());
  104. /*
  105. * Если пользователь не имеет статус 1 (главный эксперт), возвращаем ошибку 403
  106. */
  107. if ($expert->position !== 1)
  108. return response()
  109. ->json(["status" => false, "message" => "Permission denied"])
  110. ->setStatusCode(403, 'Permission denied');
  111. $champ = Championship::find($id);
  112. if (!$champ)
  113. return response()
  114. ->json(["status" => false, "message" => "Championship not found"])
  115. ->setStatusCode(404, 'Championship not found');
  116. if ($expert->position !== $champ->expert)
  117. return response()
  118. ->json(["status" => false, "message" => "Permission denied"])
  119. ->setStatusCode(403, 'Permission denied');
  120. $module = Module::find($request->module);
  121. if ($module->championship != $champ->id || !$module)
  122. return response()
  123. ->json(["status" => false, "message" => "Module not found"])
  124. ->setStatusCode(404, 'Module not found');
  125. $member = Member::find($request->member);
  126. if (!$member || $member->championship != $champ->id)
  127. return response()
  128. ->json(["status" => false, "message" => "Member not found"])
  129. ->setStatusCode(404, 'Member not found');
  130. $criterion = Criterion::find($request->criterion);
  131. if ($criterion->module != $module->id || !$criterion)
  132. return response()
  133. ->json(["status" => false, "message" => "Criterion not found"])
  134. ->setStatusCode(404, 'Criterion not found');
  135. $result = Result::where('criterion_id', $criterion->id)
  136. ->where('module_id', $module->id)
  137. ->where('member_id', $member->id)
  138. ->first();
  139. if ($result)
  140. return response()
  141. ->json(["status" => false, "message" => "Result already exists"])
  142. ->setStatusCode(400, 'Result already exists');
  143. $result = new Result();
  144. $result->criterion_id = $criterion->id;
  145. $result->module_id = $module->id;
  146. $result->member_id = $member->id;
  147. $result->points = $request->points;
  148. $result->save();
  149. return response()
  150. ->json(["status" => true, "message" => "Result is saved"])
  151. ->setStatusCode(200, 'Result is saved');
  152. }
  153. }