user(); $today = now()->toDateString(); $assignment = TeamMember::query() ->where('user_id', $user->id) ->where('role_in_team', TeamMember::ROLE_HELPER) ->whereDate('assigned_from', '<=', $today) ->where(function ($q) use ($today) { $q->whereNull('assigned_until')->orWhereDate('assigned_until', '>=', $today); }) ->with(['team.driver', 'team.scanner', 'team.truck', 'team.area']) ->orderBy('id', 'desc') ->first(); if (! $assignment) { return $this->ok(null, 'No active assignment for today.'); } return $this->ok(new TeamMemberResource($assignment)); } public function accept(Request $request): JsonResponse { $user = $request->user(); $today = now()->toDateString(); $assignment = TeamMember::query() ->where('user_id', $user->id) ->where('role_in_team', TeamMember::ROLE_HELPER) ->whereDate('assigned_from', '<=', $today) ->where(function ($q) use ($today) { $q->whereNull('assigned_until')->orWhereDate('assigned_until', '>=', $today); }) ->orderBy('id', 'desc') ->first(); if (! $assignment) { return $this->fail('No active assignment to accept.', null, 404); } $assignment->update(['status' => TeamMember::STATUS_ACCEPTED]); return $this->ok(new TeamMemberResource($assignment->load(['team.driver', 'team.scanner', 'team.truck', 'team.area'])), 'Assignment accepted.'); } public function reject(Request $request): JsonResponse { $user = $request->user(); $today = now()->toDateString(); $assignment = TeamMember::query() ->where('user_id', $user->id) ->where('role_in_team', TeamMember::ROLE_HELPER) ->whereDate('assigned_from', '<=', $today) ->where(function ($q) use ($today) { $q->whereNull('assigned_until')->orWhereDate('assigned_until', '>=', $today); }) ->orderBy('id', 'desc') ->first(); if (! $assignment) { return $this->fail('No active assignment to reject.', null, 404); } $assignment->update(['status' => TeamMember::STATUS_REJECTED]); return $this->ok(new TeamMemberResource($assignment->load(['team.driver', 'team.scanner', 'team.truck', 'team.area'])), 'Assignment rejected.'); } public function history(Request $request): JsonResponse { $user = $request->user(); $assignments = TeamMember::query() ->where('user_id', $user->id) ->where('role_in_team', TeamMember::ROLE_HELPER) ->with(['team.driver', 'team.scanner', 'team.truck', 'team.area']) ->orderBy('assigned_from', 'desc') ->paginate($request->integer('per_page', 15)); return $this->ok(TeamMemberResource::collection($assignments)); } }