Merge branch 'main' into #20-vacation-requests

# Conflicts:
#	app/Architecture/Providers/ObserverServiceProvider.php
#	app/Domain/Role.php
#	app/Domain/Rules/ApprovedVacationDaysInSameRange.php
#	app/Domain/Rules/DoesNotExceedLimitRule.php
#	app/Domain/Rules/MinimumOneVacationDayRule.php
#	app/Domain/Rules/PendingVacationRequestInSameRange.php
#	app/Domain/Rules/UsedVacationDaysInSameRange.php
#	app/Domain/Rules/VacationRequestRule.php
#	app/Domain/VacationRequestState.php
#	app/Domain/VacationRequestStateManager.php
#	app/Domain/VacationRequestValidator.php
#	app/Domain/VacationType.php
#	app/Domain/VacationTypeConfigRetriever.php
#	app/Eloquent/Models/User.php
#	app/Infrastructure/Http/Controllers/UserController.php
#	app/Infrastructure/Http/Kernel.php
#	app/Infrastructure/Http/Requests/UserRequest.php
#	database/factories/UserFactory.php
#	database/seeders/DatabaseSeeder.php
#	routes/web.php
#	tests/Feature/UserTest.php
This commit is contained in:
Adrian Hopek
2022-02-01 11:10:59 +01:00
106 changed files with 333 additions and 303 deletions

View File

@@ -0,0 +1,24 @@
<?php
declare(strict_types=1);
namespace Toby\Architecture\Providers;
use Illuminate\Support\Carbon;
use Illuminate\Support\ServiceProvider;
use Toby\Eloquent\Models\Holiday;
use Toby\Eloquent\Models\VacationLimit;
use Toby\Eloquent\Scopes\SelectedYearPeriodScope;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
Carbon::macro("toDisplayString", fn() => $this->translatedFormat("j F Y"));
$selectedYearPeriodScope = $this->app->make(SelectedYearPeriodScope::class);
VacationLimit::addGlobalScope($selectedYearPeriodScope);
Holiday::addGlobalScope($selectedYearPeriodScope);
}
}

View File

@@ -0,0 +1,17 @@
<?php
declare(strict_types=1);
namespace Toby\Architecture\Providers;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
protected $policies = [];
public function boot(): void
{
$this->registerPolicies();
}
}

View File

@@ -0,0 +1,28 @@
<?php
declare(strict_types=1);
namespace Toby\Architecture\Providers;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Toby\Domain\Events\VacationRequestAcceptedByAdministrative;
use Toby\Domain\Events\VacationRequestAcceptedByTechnical;
use Toby\Domain\Events\VacationRequestApproved;
use Toby\Domain\Events\VacationRequestCreated;
use Toby\Domain\Events\VacationRequestStateChanged;
use Toby\Domain\Listeners\CreateVacationRequestActivity;
use Toby\Domain\Listeners\HandleAcceptedByAdministrativeVacationRequest;
use Toby\Domain\Listeners\HandleAcceptedByTechnicalVacationRequest;
use Toby\Domain\Listeners\HandleApprovedVacationRequest;
use Toby\Domain\Listeners\HandleCreatedVacationRequest;
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
VacationRequestStateChanged::class => [CreateVacationRequestActivity::class],
VacationRequestCreated::class => [HandleCreatedVacationRequest::class],
VacationRequestAcceptedByTechnical::class => [HandleAcceptedByTechnicalVacationRequest::class],
VacationRequestAcceptedByAdministrative::class => [HandleAcceptedByAdministrativeVacationRequest::class],
VacationRequestApproved::class => [HandleApprovedVacationRequest::class],
];
}

View File

@@ -0,0 +1,23 @@
<?php
declare(strict_types=1);
namespace Toby\Architecture\Providers;
use Illuminate\Support\ServiceProvider;
use Toby\Eloquent\Models\User;
use Toby\Eloquent\Models\VacationRequest;
use Toby\Eloquent\Models\YearPeriod;
use Toby\Eloquent\Observers\UserObserver;
use Toby\Eloquent\Observers\VacationRequestObserver;
use Toby\Eloquent\Observers\YearPeriodObserver;
class ObserverServiceProvider extends ServiceProvider
{
public function boot(): void
{
User::observe(UserObserver::class);
YearPeriod::observe(YearPeriodObserver::class);
VacationRequest::observe(VacationRequestObserver::class);
}
}

View File

@@ -0,0 +1,33 @@
<?php
declare(strict_types=1);
namespace Toby\Architecture\Providers;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{
public function boot(): void
{
$this->configureRateLimiting();
$this->routes(function (): void {
Route::prefix("api")
->middleware("api")
->group(base_path("routes/api.php"));
Route::middleware("web")
->group(base_path("routes/web.php"));
});
}
protected function configureRateLimiting(): void
{
RateLimiter::for("api", fn(Request $request) => Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()));
}
}

View File

@@ -0,0 +1,20 @@
<?php
declare(strict_types=1);
namespace Toby\Architecture\Providers;
use Illuminate\Support\ServiceProvider;
use Laravel\Telescope\TelescopeApplicationServiceProvider;
use Laravel\Telescope\TelescopeServiceProvider as BaseTelescopeServiceProvider;
class TelescopeServiceProvider extends ServiceProvider
{
public function register(): void
{
if ($this->app->environment("local")) {
$this->app->register(BaseTelescopeServiceProvider::class);
$this->app->register(TelescopeApplicationServiceProvider::class);
}
}
}