feat: upcoming skins & feat: return types

This commit is contained in:
Rico van Zelst
2023-11-06 20:56:21 +01:00
parent ae1c9f0843
commit 3d6c00dd0d
7 changed files with 101 additions and 21 deletions

View File

@@ -5,6 +5,7 @@ namespace App\Models;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Champion extends Model
{
@@ -40,52 +41,52 @@ class Champion extends Model
];
}
public function skins()
public function skins(): HasMany
{
return $this->hasMany(ChampionSkin::class);
}
public function getChampionImageAttribute()
public function getChampionImageAttribute(): string
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/splash-art';
}
public function getChampionImageLoadingAttribute()
public function getChampionImageLoadingAttribute(): string
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/portrait';
}
public function getChampionImageTileAttribute()
public function getChampionImageTileAttribute(): string
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/tile';
}
public function getChampionSquareImageAttribute()
public function getChampionSquareImageAttribute(): string
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/square';
}
public function getChampionAbilityIconQAttribute()
public function getChampionAbilityIconQAttribute(): string
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/q';
}
public function getChampionAbilityIconWAttribute()
public function getChampionAbilityIconWAttribute(): string
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/w';
}
public function getChampionAbilityIconEAttribute()
public function getChampionAbilityIconEAttribute(): string
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/e';
}
public function getChampionAbilityIconRAttribute()
public function getChampionAbilityIconRAttribute(): string
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/r';
}
public function getChampionAbilityIconPAttribute()
public function getChampionAbilityIconPAttribute(): string
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/p';
}

View File

@@ -24,7 +24,7 @@ class ChampionRoles extends Model
return $this->belongsTo(Champion::class);
}
public function getRolesAttribute($value)
public function getRolesAttribute($value): array
{
$value = json_decode($value);

View File

@@ -5,6 +5,8 @@ namespace App\Models;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class ChampionSkin extends Model
{
@@ -47,28 +49,33 @@ class ChampionSkin extends Model
];
}
public function champion()
public function champion(): BelongsTo
{
return $this->belongsTo(Champion::class);
}
public function chromas()
public function chromas(): HasMany
{
return $this->hasMany(SkinChroma::class, 'full_skin_id', 'full_skin_id');
}
public function getSkinImageAttribute()
public function getSkinImageAttribute(bool $pbe = false): string
{
if ($pbe) {
return 'https://raw.communitydragon.org/pbe/plugins/rcp-be-lol-game-data/global/default/v1/champion-splashes/' . $this->champion_id . '/' . $this->full_skin_id . '.jpg';
}
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/splash-art/centered/skin/' . $this->skin_id;
}
public function getSkinImageLoadingAttribute()
public function getSkinImageLoadingAttribute(): string
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/portrait/skin/' . $this->skin_id;
}
public function getSkinImageTileAttribute()
public function getSkinImageTileAttribute(): string
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/tile/skin/' . $this->skin_id;
}
}

View File

@@ -5,6 +5,7 @@ namespace App\Models;
use Cviebrock\EloquentSluggable\Sluggable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class SkinChroma extends Model
{
@@ -25,7 +26,6 @@ class SkinChroma extends Model
public function sluggable(): array
{
// chroma name + skin name
return [
'slug' => [
'source' => ['chroma_name', 'skin_name'],
@@ -33,7 +33,7 @@ class SkinChroma extends Model
];
}
public function skin()
public function skin(): BelongsTo
{
return $this->belongsTo(Skin::class);
}

View File

@@ -0,0 +1,18 @@
<?php
namespace App\View\Components\Home;
use Illuminate\Contracts\View\View;
use Illuminate\View\Component;
class Upcoming_skins extends Component
{
public function __construct(public array $skins)
{
}
public function render(): View
{
return view('components.home.upcoming_skins');
}
}