TeamMemberController.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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(Request $request,string $projectId)
  17. {
  18. $project = Project::query()->findOrFail($projectId);
  19. // 假设你想根据用户的 name 字段进行筛选
  20. $name = $request->get('name');
  21. $project->load(['teamMembers.user' => function ($query) use ($name) {
  22. if ($name) {
  23. $query->where('name', 'like', "%{$name}%");
  24. }
  25. }]);
  26. return TeamMemberResource::collection($project->teamMembers->filter(function ($teamMember) {
  27. return $teamMember->user !== null;
  28. }));
  29. }
  30. /**
  31. * Remove the specified resource from storage.
  32. */
  33. public function destroy(string $id)
  34. {
  35. $teamMember = TeamMember::query()->findOrFail($id);
  36. if ($teamMember->project?->company_id != Auth::user()->company_id) {
  37. return $this->forbidden('No permission to delete');
  38. }
  39. $teamMember->delete();
  40. return $this->noContent();
  41. }
  42. public function manageMembers(Request $request, string $projectId)
  43. {
  44. $project = Project::query()->findOrFail($projectId);
  45. foreach ($request->all() as $item) {
  46. if (! isset($item['user_id'])) {
  47. continue;
  48. }
  49. $user = User::query()->where("company_id", Auth::user()->company_id)->find($item['user_id']);
  50. if (! $user) {
  51. return $this->badRequest("Illegal parameters");
  52. }
  53. }
  54. foreach ($request->all() as $item) {
  55. $teamMember = TeamMember::query()->where([
  56. 'project_id' => $project->id,
  57. 'user_id' => $item['user_id'],
  58. ])->first();
  59. if ($teamMember) {
  60. $teamMember->fill([
  61. 'role' => $item['role'] ?? "",
  62. 'limited' => data_get($item, "limited", 1) == 1 ? 1 : 0,
  63. ]);
  64. $teamMember->save();
  65. continue;
  66. }
  67. TeamMember::query()->create([
  68. 'project_id' => $project->id,
  69. 'user_id' => $item['user_id'],
  70. 'role' => $item['role'] ?? "",
  71. 'limited' => data_get($item, "limited", 1) == 1 ? 1 : 0,
  72. 'join_at' => Carbon::now()->toDateString(),
  73. 'created_by' => Auth::id(),
  74. ]);
  75. }
  76. return $this->created();
  77. }
  78. }