diff --git a/app/Http/Controllers/PoliciesController.php b/app/Http/Controllers/PoliciesController.php index 1a3dfd65..2d67ee6c 100644 --- a/app/Http/Controllers/PoliciesController.php +++ b/app/Http/Controllers/PoliciesController.php @@ -4,7 +4,9 @@ use App\Http\Resources\PoliciesCollection; use App\Policy; +use App\PolicyAcceptance; use Carbon\CarbonImmutable; +use Illuminate\Http\Request; class PoliciesController extends Controller { public function getCurrentPolicies(): PoliciesCollection { @@ -20,4 +22,24 @@ public function getCurrentPolicies(): PoliciesCollection { return new PoliciesCollection($currentPolicies); } + + public function getMissingPolicies(Request $request): PoliciesCollection { + $now = CarbonImmutable::now(); + + // This works based on the assumption that the latest policy has the highest id given that id is AUTO_INCREMENT + $latestPolicyIds = Policy::where('active_from', '<', $now) + ->selectRaw('MAX(id) as id') + ->groupBy('policy_type') + ->pluck('id'); + + $acceptedPolicyIds = PolicyAcceptance::where('user_id', $request->user()->id) + ->whereIn('policy_id', $latestPolicyIds) + ->pluck('policy_id'); + + $missingPolicies = Policy::whereIn('id', $latestPolicyIds) + ->whereNotIn('id', $acceptedPolicyIds) + ->get(); + + return new PoliciesCollection($missingPolicies); + } } diff --git a/routes/api.php b/routes/api.php index 125bc994..9f8c4acb 100644 --- a/routes/api.php +++ b/routes/api.php @@ -28,6 +28,7 @@ $router->group(['middleware' => ['auth:api']], function () use ($router): void { $router->get('auth/login', ['uses' => 'Auth\LoginController@getLogin']); $router->delete('auth/login', ['uses' => 'Auth\LoginController@deleteLogin']); + $router->get('v1/policies/missing', ['uses' => 'PoliciesController@getMissingPolicies']); // policy acceptances $router->put('v1/policy_acceptances', ['uses' => 'PolicyAcceptanceController@store']);