123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <?php
- namespace App\Http\Controllers\API;
- use App\Http\Controllers\Controller;
- use App\Http\Resources\API\TeamMemberResource;
- use App\Models\Project;
- use App\Models\TeamMember;
- use App\Models\User;
- use Carbon\Carbon;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Auth;
- class TeamMemberController extends Controller
- {
- /**
- * Display a listing of the resource.
- */
- public function members(Request $request,string $projectId)
- {
- return $this->getMembers($request,$projectId);
- }
- public function publicSearch(Request $request,string $projectId)
- {
- return $this->getMembers($request,$projectId);
- }
- protected function getMembers(Request $request,string $projectId)
- {
- $project = Project::query()->findOrFail($projectId);
- // 假设你想根据用户的 name 字段进行筛选
- $name = $request->get('name');
- $project->load(['teamMembers.user' => function ($query) use ($name) {
- if ($name) {
- $query->where('name', 'like', "%{$name}%");
- }
- }]);
- $teamMembers=$project->teamMembers->filter(function ($teamMember) {
- return $teamMember->user !== null;
- });
- $newId=1;
- foreach ($teamMembers as $teamMember) {
- $teamMember->display_id = (string)$newId++;
- }
- return TeamMemberResource::collection($teamMembers);
- }
- /**
- * Remove the specified resource from storage.
- */
- public function destroy(string $id)
- {
- $teamMember = TeamMember::query()->findOrFail($id);
- if($teamMember->user_id==$teamMember->created_by){
- return $this->badRequest('Not allowed to delete project creator');
- }
- if ($teamMember->project?->company_id != Auth::user()->company_id) {
- return $this->forbidden('No permission to delete');
- }
- $teamMember->delete();
- return $this->noContent();
- }
- public function manageMembers(Request $request, string $projectId)
- {
- $project = Project::query()->findOrFail($projectId);
- $project->teamMembers()->delete();
- foreach ($request->all() as $item) {
- if (! isset($item['user_id'])) {
- continue;
- }
- $user = User::query()->where("company_id", Auth::user()->company_id)->find($item['user_id']);
- if (! $user) {
- return $this->badRequest("Illegal parameters");
- }
- }
- foreach ($request->all() as $item) {
- $teamMember = TeamMember::query()->where([
- 'project_id' => $project->id,
- 'user_id' => $item['user_id'],
- ])->first();
- if ($teamMember) {
- $teamMember->fill([
- 'role' => $item['role'] ?? "",
- 'limited' => data_get($item, "limited", 1) == 1 ? 1 : 0,
- ]);
- $teamMember->save();
- continue;
- }
- TeamMember::query()->create([
- 'project_id' => $project->id,
- 'user_id' => $item['user_id'],
- 'role' => $item['role'] ?? "",
- 'limited' => data_get($item, "limited", 1) == 1 ? 1 : 0,
- 'join_at' => Carbon::now()->toDateString(),
- 'created_by' => Auth::id(),
- ]);
- }
- return $this->created();
- }
- }
|