Skip to content

Latest commit

 

History

History
434 lines (348 loc) · 12 KB

004.2.MENAMBAHKAN_FITUR_CRUID_DOSEN.md

File metadata and controls

434 lines (348 loc) · 12 KB

HAL YANG BISA DI PELAJARI SEBELUM MEMULAI MODUL INI

Note: Ini merupakan series lanjutan dari

⚠️SANGAT DIMOHON MENGIKUTI TAHAPAN SEBELUMNYA⚠️

Untuk menambahkan fitur CRUD Dosen , berikut adalah roadmap step-by-step yang bisa anda ikuti untuk memastikan semuanya berjalan dengan baik, tanpa error:


1. Membuat Model Dosen

Langkah pertama adalah membuat model Dosen yang akan berhubungan dengan tabel dosens dalam database.

Perintah:

php artisan make:model Dosen

Setelah model Dosen terbentuk, anda perlu menambahkan kolom-kolom yang sesuai dengan struktur data yang diberikan di dalam model.

File: app/Models/Dosen.php

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Dosen extends Model
{
    use HasFactory;

    protected $fillable = [
        'nidn',
        'nip',
        'nama_lengkap',
        'jenis_kelamin',
        'kelompok_keahlian',
        'bidang_keilmuan',
        'jabatan_fungsional',
        'tmt',  //Tanggal resmi pengangkatan seseorang menjadi pegawai, termasuk CPNS. TMT menandai awal masa kerja seorang PNS.
        'prodi_id',
    ];

    /**
     * Relasi dengan tabel `prodies`.
     */
    public function prodi()
    {
        return $this->belongsTo(Prodi::class);
    }
}

2. Membuat Migration untuk Tabel Dosen

Langkah selanjutnya adalah membuat migration untuk tabel dosens.

Perintah:

php artisan make:migration create_dosens_table

Setelah itu, buka file migration yang baru dibuat di database/migrations/ dan sesuaikan dengan struktur data yang diinginkan.

File: database/migrations/xxxx_xx_xx_create_dosens_table.php:

<?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('dosens', function (Blueprint $table) {
            $table->id();
            $table->string('nidn')->unique();
            $table->string('nip')->unique();
            $table->string('nama_lengkap');
            $table->boolean('jenis_kelamin')->default(true); // 1 = Laki-laki, 0 = Perempuan
            $table->string('kelompok_keahlian');
            $table->string('bidang_keilmuan');
            $table->string('jabatan_fungsional');
            $table->date('tmt');
            $table->foreignId('prodi_id')->constrained('prodies');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('dosens');
    }
};

3. Menjalankan Migration untuk Membuat Tabel

Setelah migration selesai, jalankan perintah untuk membuat tabel di database.

Perintah:

php artisan migrate

4. Membuat Seeder untuk Dosen

Sekarang kita buat data seeder untuk tabel dosens.

Perintah:

php artisan make:seeder DosenSeeder

Kemudian, edit file seeder di database/seeders/DosenSeeder.php untuk memasukkan data contoh dosen.

File: database/seeders/DosenSeeder.php:

<?php

namespace Database\Seeders;

use GuzzleHttp\Promise\Create;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class DosenSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        DB::table('dosens')->insert([
            [
                'nidn'              => '123456789',
                'nip'               => '987654321',
                'nama_lengkap'      => 'Dr. John Doe',
                'jenis_kelamin'     => 1,
                'kelompok_keahlian' => 'Teknologi Informasi',
                'bidang_keilmuan'   => 'Pemrograman Komputer',
                'jabatan_fungsional'=> 'Dosen',
                'tmt'               => '2020-08-01',
                'prodi_id'          => 1,
                'created_at'        => now()
            ],
        ]);
    }
}

5. Membuat Controller untuk CRUD Dosen

Sekarang, buat controller untuk menangani operasi CRUD pada Dosen.

Perintah:

php artisan make:controller Api/Admin/DosenController

Kemudian, edit controller tersebut di app/Http/Controllers/Api/Admin/DosenController.php.

File: app/Http/Controllers/Api/Admin/DosenController.php:

<?php

namespace App\Http\Controllers\Api\Admin;

use App\Http\Controllers\Controller;
use App\Http\Resources\DosenResource;
use App\Models\Dosen;
use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;

class DosenController extends Controller
{
    public function index(Request $request)
    {
        $dosens = Dosen::when($request->q, function ($query) use ($request) {
            return $query->where('nama_lengkap', 'like', '%' . $request->q . '%');
        })->latest()->paginate(5);

        return new DosenResource(true, 'List Data Dosen', $dosens);
    }

    // UNTUK MENAMBAHKAN DATA DOSEN
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'nidn'              => 'required|unique:dosens',
            'nip'               => 'required|unique:dosens',
            'nama_lengkap'      => 'required|string|max:100',
            'jenis_kelamin'     => 'required|boolean',
            'kelompok_keahlian' => 'required|string|max:100',
            'bidang_keilmuan'   => 'required|string|max:100',
            'jabatan_fungsional'=> 'required|string|max:50',
            'tmt'               => 'required|date',
            'prodi_id'          => 'required|exists:prodies,id',
        ]);

        if ($validator->fails()) {
            return response()->json($validator->errors(), 422);
        }

        $dosen = Dosen::create($request->all());

        if ($dosen) {
            return new DosenResource(true, 'Data Dosen Berhasil Disimpan', $dosen);
        }

        return new DosenResource(false, 'Data Dosen Gagal Disimpan!', null);
    }

    // UNTUK MENAMPILKAN DATA DOSEN BERDASARKAN ID
    public function show(Dosen $dosen)
    {
        if ($dosen) {
            return new DosenResource(true, 'Detail Data Dosen!', $dosen);
        }

        return new DosenResource(false, 'Detail Data Dosen Tidak Ditemukan', null);
    }

    // UNTUK MENGUPDATE/MENGEDIT DATA DOSEN
    public function update(Request $request, Dosen $dosen)
    {
        if ($dosen) {
            $validator = Validator::make($request->all(), [
                'nidn'              => 'required|unique:dosens,nidn,' . $dosen->id,
                'nip'               => 'required|unique:dosens,nip,' . $dosen->id,
                'nama_lengkap'      => 'required|string|max:100',
                'jenis_kelamin'     => 'required|boolean',
                'kelompok_keahlian' => 'required|string|max:100',
                'bidang_keilmuan'   => 'required|string|max:100',
                'jabatan_fungsional'=> 'required|string|max:50',
                'tmt'               => 'required|date',
                'prodi_id'          => 'required|exists:prodies,id',
            ]);

            if ($validator->fails()) {
                return response()->json($validator->errors(), 422);
            }

            $dosen->update($request->all());

            return new DosenResource(true, 'Data Dosen Berhasil Diupdate', $dosen);
        }

        return new DosenResource(false, 'Data Dosen Tidak Ditemukan', null);
    }

    // UNTUK MENGHAPUS DATA DOSEN
    public function destroy(Dosen $dosen)
    {
        if ($dosen) {
            $dosen->delete();

            return new DosenResource(true, 'Data Dosen Berhasil Dihapus', null);
        }

        return new DosenResource(false, 'Data Dosen Tidak Ditemukan', null);
    }
}

6. Membuat Resource untuk Dosen

Seperti pada Mahasiswa, kita perlu membuat Resource untuk Dosen.

Perintah:

php artisan make:resource DosenResource

Kemudian edit resource ini di app/Http/Resources/DosenResource.php.

File: app/Http/Resources/DosenResource.php:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class DosenResource extends JsonResource
{
    public $status;
    public $message;

    public function __construct($status, $message, $resource)
    {
        parent::__construct($resource);
        $this->status = $status;
        $this->message = $message;
    }

    /**
     * Transform the resource into an array.
     *
     * @return array<string, mixed>
     */
    public function toArray(Request $request): array
    {
        return [
            'success'   => $this->status,
            'message'   => $this->message,
            'data'      => $this->resource ?? []
        ];
    }
}

7. Menambahkan Routes

Menambahkan route untuk API Dosen.

File: routes/api.php:

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\Admin\LoginController;

Route::prefix('admin')->group(function () {
    Route::post('/login', [LoginController::class, 'index'])->name('admin.login');

    Route::group(['middleware' => 'auth:api_admin'], function () {
        Route::get('/user', [LoginController::class, 'getUser'])->name('admin.user');
        Route::get('/refresh', [LoginController::class, 'refreshToken'])->name('admin.refresh');
        Route::post('/logout', [LoginController::class, 'logout'])->name('admin.logout');

        Route::apiResource('/mahasiswa', App\Http\Controllers\Api\Admin\MahasiswaController::class, ['except' => ['create', 'edit'], 'as' => 'admin']);
        Route::apiResource('/dosen', App\Http\Controllers\Api\Admin\DosenController::class, ['except' => ['create', 'edit'], 'as' => 'admin']);
    });
});

8. Memodifikasi file database/seeders/DatabaseSeeder.php supaya kita up data sekaligus satu perintah aja

File: database/seeders/DatabaseSeeder.php:

<?php

namespace Database\Seeders;

use App\Models\User;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        // User::factory(10)->create();

        $this->call([
            UserSeeder::class,
            ProdiSeeder::class,
            MahasiswaSeeder::class,
            DosenSeeder::class,
        ]);
    }
}

9. Merunningnya dengan perintah php

Jalankan ini dulu supaya mengosongkan data yang dulunya pernah di up

php artisan db:wipe

Disusul dengan comand bash ini

php artisan migrate:refresh

Setelah semua dan sekian lamanya, disave dan di ini itukan ya sekarang kita run kan dengan mengetik di bash root

php artisan db:seed

10. Menguji dengan POSTMAN

Tonton video

11. Data Example Nantinya

{
    "nidn": "1101010101",
    "nip": "3303030303",
    "nama_lengkap": "Umar apa Gampong",
    "jenis_kelamin": false,  // 0 = Perempuan
    "kelompok_keahlian": "Matematika Murni",
    "bidang_keilmuan": "Aljabar Linier",
    "jabatan_fungsional": "Lektor",
    "tmt": "2016-05-01",
    "prodi_id": 2
}

12. troubleshooting yang sering terjadi

Cache

1.Menghapus semua cache aplikasi.

php artisan cache:clear

2.Menghapus cache konfigurasi.

php artisan config:clear

3.Menghapus cache route.

php artisan route:clear

INFO LEBIH LANJUT