- Diposting oleh:
- Diposting pada:
- Kategori:
LKSLKS - Sistem:
Tidak diketahui - Harga:
USD 0 - Dilihat:
1437
Membuat Model gameversion
Setelah kita Import database, Tutorial mengerjakan soal LKS Web Technologi berikutnya adalah membuat model gameversion, buka terminal visual studio code lalu ketikkan kode di bawah ini lalu tekan enter.
php arttisan make:model gameversion
Kemudian pergi ke app/Models/gameversion.php
dan ubah seperti kode di bawah ini.
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class gameversion extends Model
{
use HasFactory;
protected $table = 'game_versions';
protected $guarded = [];
}
Membuat Model games
Sekarang kita akan membuat model games, buka terminal visual studio code lalu ketikkan kode di bawah ini lalu tekan enter.
php artisan make:model games
Kemudian pergi ke app/Models/games.php
dan ubah seperti kode di bawah ini.
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class games extends Model
{
use HasFactory;
protected $table = 'games';
protected $guarded = [];
public function game_version(){
return $this->hasMany(gameversion::class, 'game_id');
}
}
Fungsi game_version bertujuan untuk membuat reslasi antara model games dan gameversion.
Membuat Model score
Sekarang kita akan membuat model games, buka terminal visual studio code lalu ketikkan kode di bawah ini lalu tekan enter.
php artisan make:model score
Kemudian pergi ke app/Models/score.php
dan ubah seperti kode dibawah ini.
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class score extends Model
{
use HasFactory;
protected $table = 'scores';
protected $guarded = [];
}
Membuat Controller Games
Pertama, buatlah controller dengan nama gamesController terlebih dahulu. Buka terminal dan ketikkan kode di bawah ini.
php artisan make:controller gamesController
Kemudian masuk ke app/Http/Controllers/gamesController.php
Membuat Fungsi Create
Sekarang, kita akan membuat fungsi create untuk tabel games. Saya sudah menyiapkan kodenya. Anda bisa menyalin kode di bawah ini.
public function create(Request $request)
{
try {
$request->validate([
'title' => 'required|unique:games,title',
'description' => 'required'
]);
$user = $request->user();
$slug = explode(' ', $request->title);
$games = new games();
$games->title = $request->title;
$games->description = $request->description;
$games->slug = strtolower(join('-', $slug));
$games->created_by = $user->id;
$games->save();
return response()->json(['status' => 'success', 'slug' => $games->slug], 200);
} catch (\Throwable $th) {
return response()->json(['status' => 'error', 'message' => $th->getMessage()], 422);
}
}
Untuk membuat kolom slug, kita ambil dari kolom title, tetapi ganti spasi dengan simbol Dash (–).
Kemudian masuk kedalam routes/api.php
lalu ketikkan kode dibawah untuk membuat routing api nya.
Route::post('/v1/games',[gamesController::class, 'create']);
Tambahkan routing di atas ke dalam middleware yang telah kita buat sebelumnya.
Membuat Fungsi Index
Sekarang, kita akan membuat fungsi index untuk tabel games. Saya sudah menyiapkan kodenya. Anda bisa menyalin kode di bawah ini.
public function index(Request $request)
{
try {
$size = $request->input('size', 10);
$page = $request->input('page', 0);
$sortby = $request->input('sortBy', 'title');
$sortdir = $request->input('sortDir', 'asc');
$data = games::get();
$temp = $data->forPage($page + 1, $size);
$content = [];
foreach ($temp as $key => $value) {
$user = society::where('id', $value->created_by)->first();
$gamever = gameversion::where('game_id', $value->id)->get();
$value->author = $user->username;
if ($gamever->count() > 1) {
$temp = $gamever->last();
$value->thumbnail = $temp->storage_path . 'thumbnail.png';
$value->uploadTimestamp = $temp->created_at;
} else {
$value->author = $user->username;
$value->thumbnail = $gamever->count() == 1 ? $gamever[0]->storage_path . 'thumbnail.png' : null;
$value->uploadTimestamp = $gamever->count() == 1 ? $gamever[0]->created_at : null;
}
$content[] = $value->makeHidden(['created_at', 'updated_at', 'deleted_at', 'created_by']);
}
return response()->json([
'page' => $page,
'size' => $size,
'totalElements' => $data->count(),
'content' => $content
]);
} catch (\Throwable $th) {
return response()->json(['status' => 'error', 'message' => $th->getMessage()], 422);
}
}
Dalam kode tersebut, kami menggunakan fungsi forPage() untuk melakukan paginasi. Kami menetapkan 10 data sebagai paginasi default.
Kemudian masuk kedalam routes/api.php
lalu ketikkan kode dibawah untuk membuat routing api nya.
Route::get('v1/games',[gamesController::class, 'index']);
Tambahkan routing di atas ke dalam middleware yang telah kita buat sebelumnya.
Mari kita test, jika berhasil maka akan seperti ini yaa!.
Membuat Fungsi Show
Sekarang, kita akan membuat fungsi show untuk tabel games. Saya sudah menyiapkan kodenya. Anda bisa menyalin kode di bawah ini.
public function show($slug)
{
try {
$data = games::where('slug', $slug)->with('game_version')->first();
$author = society::where('id', $data->created_by)->first();
$thumbpath = null;
$score = null;
$path = null;
foreach ($data->game_version as $key => $value) {
$temp = public_path($value->storage_path . 'thumbnail.png');
if (file_exists($temp)) {
$thumbpath = $temp;
}
$score = score::where('game_version_id',$value->id)->count();
$path = $value->storage_path;
}
$data['thumbnail'] = $thumbpath;
$data['author'] = $author->username;
$data['uploadTimestamp'] = $data->updated_at;
$data['game_path'] = $path;
$data['scoreCount'] = $score;
return response()->json($data->makeHidden(['created_at', 'deleted_at', 'updated_at', 'created_by', 'game_version']), 200);
} catch (\Throwable $th) {
return response()->json(['status' => 'error', 'message' => $th->getMessage()], 422);
}
}
Dalam fungsi show, saya menambahkan parameter $slug yang terambil dari parameter URL. Ketika mengambil data thumbnail, kami menggunakan file_exists() untuk memeriksa apakah ada file bernama thumbnail.png di direktori tersebut. Jika tidak ada, maka isi data thumbnail adalah null.
Kemudian masuk kedalam routes/api.php
lalu ketikkan kode dibawah untuk membuat routing api nya.
Route::get('/v1/games/{slug}',[gamesController::class,'show']);
Tambahkan routing di atas ke dalam middleware yang telah kita buat sebelumnya.
Mari kita test, jika berhasil maka akan seperti ini yaa!.
Membuat Fungsi Update
Sekarang, kita akan membuat fungsi update untuk tabel games. Saya sudah menyiapkan kodenya. Anda bisa menyalin kode di bawah ini.
public function update($slug, Request $request)
{
try {
$games = games::where('slug', $slug)->first();
if (!$games) {
return response()->json(['status'=>'invalid','message'=>'not found'],422);
}
$games->update([
'title' => $request->title ? $request->title : $games->title,
'description' => $request->description ? $request->description : $games->title,
]);
return response()->json(['status' => 'success'], 200);
} catch (\Throwable $th) {
return response()->json(['status' => 'error', 'message' => $th->getMessage()], 422);
}
}
Kemudian masuk kedalam routes/api.php
lalu ketikkan kode dibawah untuk membuat routing api nya.
Route::put('/v1/games/{slug}',[gamesController::class,'update']);
Tambahkan routing di atas ke dalam middleware yang telah kita buat sebelumnya.
Mari kita test, jika berhasil maka akan seperti ini yaa!.