TeamMemberController.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?php
  2. namespace App\Http\Controllers\API;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Resources\API\TeamMemberResource;
  5. use App\Models\Project;
  6. use App\Models\TeamMember;
  7. use App\Models\User;
  8. use Carbon\Carbon;
  9. use Illuminate\Http\Request;
  10. use Illuminate\Support\Facades\Auth;
  11. class TeamMemberController extends Controller
  12. {
  13. /**
  14. * Display a listing of the resource.
  15. */
  16. public function members(string $projectId)
  17. {
  18. $project = Project::query()->findOrFail($projectId);
  19. return TeamMemberResource::collection($project->teamMembers);
  20. }
  21. /**
  22. * Remove the specified resource from storage.
  23. */
  24. public function destroy(string $id)
  25. {
  26. $teamMember = TeamMember::query()->findOrFail($id);
  27. if ($teamMember->project?->company_id != Auth::user()->company_id) {
  28. return $this->forbidden('No permission to delete');
  29. }
  30. $teamMember->delete();
  31. return $this->noContent();
  32. }
  33. public function manageMembers(Request $request, string $projectId)
  34. {
  35. $project = Project::query()->findOrFail($projectId);
  36. foreach ($request->all() as $item) {
  37. if (! isset($item['user_id'])) {
  38. continue;
  39. }
  40. $user = User::query()->where("company_id", Auth::user()->company_id)->find($item['user_id']);
  41. if (! $user) {
  42. return $this->badRequest("Illegal parameters");
  43. }
  44. }
  45. foreach ($request->all() as $item) {
  46. $teamMember = TeamMember::query()->where([
  47. 'project_id' => $project->id,
  48. 'user_id' => $item['user_id'],
  49. ])->first();
  50. if ($teamMember) {
  51. $teamMember->fill([
  52. 'role' => $item['role'] ?? "",
  53. 'limited' => data_get($item, "limited", 1) == 1 ? 1 : 0,
  54. ]);
  55. $teamMember->save();
  56. continue;
  57. }
  58. TeamMember::query()->create([
  59. 'project_id' => $project->id,
  60. 'user_id' => $item['user_id'],
  61. 'role' => $item['role'] ?? "",
  62. 'limited' => data_get($item, "limited", 1) == 1 ? 1 : 0,
  63. 'join_at' => Carbon::now()->toDateString(),
  64. 'created_by' => Auth::id(),
  65. ]);
  66. }
  67. return $this->created();
  68. }
  69. }