#95 - unavailable days (#96)

* #95 - unavailable days

* #95 - fix

* #95 - fix
This commit is contained in:
Adrian Hopek
2022-03-28 14:05:59 +02:00
committed by GitHub
parent 957b07b3eb
commit 720d2c4e7b
5 changed files with 109 additions and 14 deletions

View File

@@ -0,0 +1,42 @@
<?php
declare(strict_types=1);
namespace Toby\Infrastructure\Http\Controllers\Api;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Carbon;
use Toby\Domain\UserVacationStatsRetriever;
use Toby\Domain\VacationRequestStatesRetriever;
use Toby\Eloquent\Helpers\YearPeriodRetriever;
use Toby\Eloquent\Models\User;
use Toby\Infrastructure\Http\Controllers\Controller;
use Toby\Infrastructure\Http\Requests\Api\CalculateUserUnavailableDaysRequest;
class CalculateUserUnavailableDaysController extends Controller
{
public function __invoke(
CalculateUserUnavailableDaysRequest $request,
UserVacationStatsRetriever $vacationStatsRetriever,
YearPeriodRetriever $yearPeriodRetriever,
): JsonResponse {
/** @var User $user */
$user = User::query()->find($request->get("user"));
$yearPeriod = $yearPeriodRetriever->selected();
$holidays = $yearPeriod->holidays()->pluck("date");
$vacationDays = $user->vacations()
->where("year_period_id", $yearPeriod->id)
->whereRelation(
"vacationRequest",
fn(Builder $query) => $query->noStates(VacationRequestStatesRetriever::failedStates()),
)
->pluck("date");
return new JsonResponse([
...$holidays->map(fn(Carbon $date) => $date->toDateString()),
...$vacationDays->map(fn(Carbon $date) => $date->toDateString()),
]);
}
}

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace Toby\Infrastructure\Http\Controllers\Api;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Carbon;
use Toby\Domain\VacationDaysCalculator;
use Toby\Infrastructure\Http\Controllers\Controller;
use Toby\Infrastructure\Http\Requests\Api\CalculateVacationDaysRequest;
@@ -15,6 +16,6 @@ class CalculateVacationDaysController extends Controller
{
$days = $calculator->calculateDays($request->yearPeriod(), $request->from(), $request->to());
return new JsonResponse($days->all());
return new JsonResponse($days->map(fn(Carbon $day) => $day->toDateString())->all());
}
}

View File

@@ -0,0 +1,17 @@
<?php
declare(strict_types=1);
namespace Toby\Infrastructure\Http\Requests\Api;
use Illuminate\Foundation\Http\FormRequest;
class CalculateUserUnavailableDaysRequest extends FormRequest
{
public function rules(): array
{
return [
"user" => ["required", "exists:users,id"],
];
}
}