Skip to content

Commit

Permalink
tenant & offer view refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
krantos committed Oct 13, 2024
1 parent c85c34f commit 22b67b7
Show file tree
Hide file tree
Showing 85 changed files with 2,148 additions and 41 deletions.
2 changes: 1 addition & 1 deletion app/Http/Requests/OfferPostRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public function rules(): array
'skills' => 'string|nullable',
'experience' => 'string|nullable',
'salary' => 'numeric|nullable',
'url' => 'url:https|http|nullable'
'url' => 'url:http,https|nullable'
];
}
}
26 changes: 26 additions & 0 deletions app/Listeners/SetTenantIdInSession.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace App\Listeners;

use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Auth\Events\Login;

class SetTenantIdInSession
{
/**
* Create the event listener.
*/
public function __construct()
{
//
}

/**
* Handle the event.
*/
public function handle(Login $event): void
{
session()->put('tenant_id', $event->user->tenant_id);
}
}
3 changes: 2 additions & 1 deletion app/Models/Company.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

namespace App\Models;

use App\Traits\BelongsToTenant;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Model;

class Company extends Model
{
use HasFactory;
use HasFactory, BelongsToTenant;

public function offers(): HasMany {
return $this->hasMany(Offer::class)->chaperone();
Expand Down
3 changes: 2 additions & 1 deletion app/Models/Interview.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

namespace App\Models;

use App\Traits\BelongsToTenant;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Model;

class Interview extends Model
{
use HasFactory;
use HasFactory, BelongsToTenant;

public function offer() : BelongsTo {
return $this->belongsTo(Offer::class);
Expand Down
3 changes: 2 additions & 1 deletion app/Models/Location.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@

namespace App\Models;

use App\Traits\BelongsToTenant;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Location extends Model
{
use HasFactory;
use HasFactory, BelongsToTenant;
}
6 changes: 4 additions & 2 deletions app/Models/Offer.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace App\Models;

use App\Traits\BelongsToTenant;
use Illuminate\Database\Eloquent\Concerns\HasTimestamps;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
Expand All @@ -13,7 +14,7 @@

class Offer extends Model
{
use HasFactory, SoftDeletes, HasTimestamps;
use HasFactory, SoftDeletes, HasTimestamps, BelongsToTenant;

/**
* The attributes that are mass assignable.
Expand All @@ -26,7 +27,8 @@ class Offer extends Model
'skills',
'experience',
'salary',
'url'
'url',
'tenant_id'
];

public function location(): HasOne {
Expand Down
3 changes: 2 additions & 1 deletion app/Models/Platform.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

namespace App\Models;

use App\Traits\BelongsToTenant;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Model;

class Platform extends Model
{
use HasFactory;
use HasFactory, BelongsToTenant;

public function offers(): HasMany {
return $this->hasMany(Offer::class)->chaperone();
Expand Down
20 changes: 20 additions & 0 deletions app/Models/Scopes/TenantScope.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php

namespace App\Models\Scopes;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Scope;

class TenantScope implements Scope
{
/**
* Apply the scope to a given Eloquent query builder.
*/
public function apply(Builder $builder, Model $model): void
{
if(session()->has('tenant_id')) {
$builder->where('tenant_id', session()->get('tenant_id'));
}
}
}
3 changes: 2 additions & 1 deletion app/Models/Technology.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

namespace App\Models;

use App\Traits\BelongsToTenant;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Model;

class Technology extends Model
{
use HasFactory;
use HasFactory, BelongsToTenant;

public function offers(): BelongsToMany {
return $this->belongsToMany(Offer::class);
Expand Down
5 changes: 4 additions & 1 deletion app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@
namespace App\Models;

// use Illuminate\Contracts\Auth\MustVerifyEmail;

use App\Traits\BelongsToTenant;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

// #[ScopedBy([TenantScope::class])]
class User extends Authenticatable
{
use HasFactory, Notifiable;
use HasFactory, Notifiable, BelongsToTenant;

/**
* The attributes that are mass assignable.
Expand Down
24 changes: 24 additions & 0 deletions app/Traits/BelongsToTenant.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace App\Traits;

use App\Models\Scopes\TenantScope;
use App\Models\Tenant;
use Illuminate\Database\Eloquent\Relations\BelongsTo;

trait BelongsToTenant {

protected static function bootBelongsToTenant(): void {
static::addGlobalScope(new TenantScope);

static::creating(function($model) {
if(session()->has('tenant_id')) {
$model->tenant_id = session()->get('tenant_id');
}
});
}

public function tenant() : BelongsTo {
return $this->belongsTo(Tenant::class);
}
}
28 changes: 28 additions & 0 deletions database/factories/CompanyFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace Database\Factories;

use App\Models\Location;
use App\Models\Tenant;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Company>
*/
class CompanyFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => fake()->company(),
'url' => fake()->url(),
'location_id' => Location::factory(),
'tenant_id' => Tenant::factory(),
];
}
}
25 changes: 25 additions & 0 deletions database/factories/CurrencyFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

namespace Database\Factories;

use App\Models\Tenant;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Currency>
*/
class CurrencyFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => fake()->name(),
'symbol' => fake()->randomLetter(),
];
}
}
28 changes: 28 additions & 0 deletions database/factories/InterveiwFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace Database\Factories;

use App\Models\Offer;
use App\Models\Tenant;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Model>
*/
class InterveiwFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'date_time' => fake()->dateTime(),
'call_details' => fake()->text(),
'offer_id' => Offer::factory(),
'tenant_id' => Tenant::factory(),
];
}
}
26 changes: 26 additions & 0 deletions database/factories/LocationFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Database\Factories;

use App\Models\Tenant;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Location>
*/
class LocationFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'country' => fake()->country(),
'address' => fake()->address(),
'tenant_id' => Tenant::factory(),
];
}
}
40 changes: 40 additions & 0 deletions database/factories/OfferFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

namespace Database\Factories;

use App\Models\Company;
use App\Models\Currency;
use App\Models\Location;
use App\Models\Platform;
use App\Models\Tenant;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Offer>
*/
class OfferFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
$tenant = Tenant::factory();
return [
'position' => fake()->sentence(),
'skills' => fake()->text(),
'experience' => fake()->text(),
'salary' => fake()->numberBetween(65000, 180000),
'url' => fake()->url(),
'publication_date' => fake()->date(),
'priority' => fake()->word(),
'currency_id' => Currency::factory(),
// 'location_id' => Location::factory(),
// 'company_id' => Company::factory(),
// 'platform_id' => Platform::factory(),
'tenant_id' => Tenant::factory(),
];
}
}
26 changes: 26 additions & 0 deletions database/factories/PlatformFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Database\Factories;

use App\Models\Tenant;
use Illuminate\Database\Eloquent\Factories\Factory;

/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Platform>
*/
class PlatformFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'name' => fake()->company(),
'url' => fake()->url(),
'tenant_id' => Tenant::factory(),
];
}
}
Loading

0 comments on commit 22b67b7

Please sign in to comment.