🎨 Champion + Skin databases

This commit is contained in:
Rico van Zelst
2023-10-26 20:46:09 +02:00
parent 55447937a6
commit 1414391197
17 changed files with 686 additions and 6 deletions

View File

@@ -0,0 +1,66 @@
<?php
namespace App\Http\Controllers;
use App\Models\Champion;
use App\Http\Requests\StoreChampionRequest;
use App\Http\Requests\UpdateChampionRequest;
class ChampionController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(StoreChampionRequest $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(Champion $champion)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(Champion $champion)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(UpdateChampionRequest $request, Champion $champion)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Champion $champion)
{
//
}
}

View File

@@ -0,0 +1,66 @@
<?php
namespace App\Http\Controllers;
use App\Models\ChampionSkin;
use App\Http\Requests\StoreChampionSkinRequest;
use App\Http\Requests\UpdateChampionSkinRequest;
class ChampionSkinController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(StoreChampionSkinRequest $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(ChampionSkin $championSkin)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(ChampionSkin $championSkin)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(UpdateChampionSkinRequest $request, ChampionSkin $championSkin)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(ChampionSkin $championSkin)
{
//
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreChampionRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
//
];
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreChampionSkinRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
//
];
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateChampionRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
//
];
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UpdateChampionSkinRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
*/
public function rules(): array
{
return [
//
];
}
}

81
app/Models/Champion.php Normal file
View File

@@ -0,0 +1,81 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Champion extends Model
{
use HasFactory;
protected $fillable = [
'champion_id',
'key',
'name',
'title',
'lore',
'roles',
'price_be',
'price_rp',
'resource_type',
'attack_type',
'adaptive_type',
'release_date',
'release_patch',
];
protected $casts = [
'roles' => 'array',
];
public function skins()
{
return $this->hasMany(ChampionSkin::class);
}
public function getChampionImageAttribute()
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/splash-art';
}
public function getChampionImageLoadingAttribute()
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/portrait';
}
public function getChampionImageTileAttribute()
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/tile';
}
public function getChampionSquareImageAttribute()
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/square';
}
public function getChampionAbilityIconQAttribute()
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/q';
}
public function getChampionAbilityIconWAttribute()
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/w';
}
public function getChampionAbilityIconEAttribute()
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/e';
}
public function getChampionAbilityIconRAttribute()
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/r';
}
public function getChampionAbilityIconPAttribute()
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/ability-icon/p';
}
}

View File

@@ -0,0 +1,58 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class ChampionSkin extends Model
{
use HasFactory;
protected $fillable = [
'champion_id',
'full_skin_id',
'skin_id',
'skin_name',
'lore',
'availability',
'loot_eligible',
'rp_price',
'raritiy',
'release_date',
'associated_skinline',
'new_effects',
'new_animations',
'new_recall',
'new_voice',
'new_quotes',
'voice_actor',
'splash_artist',
];
protected $casts = [
'associated_skinline' => 'array',
'voice_actor' => 'array',
'splash_artist' => 'array',
];
public function champion()
{
return $this->belongsTo(Champion::class);
}
public function getSkinImageAttribute()
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/splash-art/centered/skin/' . $this->skin_id;
}
public function getSkinImageLoadingAttribute()
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/portrait/skin/' . $this->skin_id;
}
public function getSkinImageTileAttribute()
{
return 'https://cdn.communitydragon.org/latest/champion/' . $this->champion_id . '/tile/skin/' . $this->skin_id;
}
}

View File

@@ -0,0 +1,66 @@
<?php
namespace App\Policies;
use App\Models\Champion;
use App\Models\User;
use Illuminate\Auth\Access\Response;
class ChampionPolicy
{
/**
* Determine whether the user can view any models.
*/
public function viewAny(User $user): bool
{
//
}
/**
* Determine whether the user can view the model.
*/
public function view(User $user, Champion $champion): bool
{
//
}
/**
* Determine whether the user can create models.
*/
public function create(User $user): bool
{
//
}
/**
* Determine whether the user can update the model.
*/
public function update(User $user, Champion $champion): bool
{
//
}
/**
* Determine whether the user can delete the model.
*/
public function delete(User $user, Champion $champion): bool
{
//
}
/**
* Determine whether the user can restore the model.
*/
public function restore(User $user, Champion $champion): bool
{
//
}
/**
* Determine whether the user can permanently delete the model.
*/
public function forceDelete(User $user, Champion $champion): bool
{
//
}
}

View File

@@ -0,0 +1,66 @@
<?php
namespace App\Policies;
use App\Models\ChampionSkin;
use App\Models\User;
use Illuminate\Auth\Access\Response;
class ChampionSkinPolicy
{
/**
* Determine whether the user can view any models.
*/
public function viewAny(User $user): bool
{
//
}
/**
* Determine whether the user can view the model.
*/
public function view(User $user, ChampionSkin $championSkin): bool
{
//
}
/**
* Determine whether the user can create models.
*/
public function create(User $user): bool
{
//
}
/**
* Determine whether the user can update the model.
*/
public function update(User $user, ChampionSkin $championSkin): bool
{
//
}
/**
* Determine whether the user can delete the model.
*/
public function delete(User $user, ChampionSkin $championSkin): bool
{
//
}
/**
* Determine whether the user can restore the model.
*/
public function restore(User $user, ChampionSkin $championSkin): bool
{
//
}
/**
* Determine whether the user can permanently delete the model.
*/
public function forceDelete(User $user, ChampionSkin $championSkin): bool
{
//
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Champion>
*/
class ChampionFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
//
];
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\ChampionSkin>
*/
class ChampionSkinFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
//
];
}
}

View File

@@ -0,0 +1,42 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('champions', function (Blueprint $table) {
$table->id();
$table->integer('champion_id')->unique();
$table->string('key')->unique();
$table->string('name');
$table->string('title');
$table->longText('lore');
$table->json('roles');
$table->integer('price_be');
$table->integer('price_rp');
$table->string('resource_type');
$table->string('attack_type');
$table->string('adaptive_type');
$table->string('release_date');
$table->string('release_patch');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('champions');
}
};

View File

@@ -0,0 +1,49 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('champion_skins', function (Blueprint $table) {
$table->id();
$table->integer('champion_id');
$table->integer('full_skin_id');
$table->integer('skin_id');
$table->string('skin_name');
$table->longText('lore');
$table->string('availability');
$table->boolean('loot_eligible');
$table->bigInteger('rp_price');
$table->string('raritiy');
$table->string('release_date');
$table->json('associated_skinline');
$table->boolean('new_effects');
$table->boolean('new_animations');
$table->boolean('new_recall');
$table->boolean('new_voice');
$table->boolean('new_quotes');
$table->json('voice_actor');
$table->json('splash_artist');
$table->foreign('champion_id')->references('champion_id')->on('champions')->onDelete('cascade');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('champion_skins');
}
};

View File

@@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class ChampionSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@@ -0,0 +1,17 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class ChampionSkinSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//
}
}

View File

@@ -12,11 +12,5 @@ class DatabaseSeeder extends Seeder
*/
public function run(): void
{
// \App\Models\User::factory(10)->create();
// \App\Models\User::factory()->create([
// 'name' => 'Test User',
// 'email' => 'test@example.com',
// ]);
}
}