From b28b6b2e6667e06406730bd4e184707951bd4dd9 Mon Sep 17 00:00:00 2001 From: sayasilvi Date: Tue, 25 Nov 2025 20:23:55 +0700 Subject: [PATCH] feat: setup database migrations and models for all roles --- app/Models/Admin.php | 21 +++++++++ app/Models/DetailTransaksi.php | 31 +++++++++++++ app/Models/Pembeli.php | 30 ++++++++++++ app/Models/Pesan.php | 23 ++++++++++ app/Models/Petani.php | 32 +++++++++++++ app/Models/Produk.php | 32 +++++++++++++ app/Models/Transaksi.php | 32 +++++++++++++ .../0001_01_01_000000_create_users_table.php | 41 ----------------- .../2025_11_21_145121_create_produk_table.php | 30 ------------ ...25_11_21_145221_create_transaksi_table.php | 46 ------------------- .../2025_11_25_123425_create_admins_table.php | 30 ++++++++++++ ...2025_11_25_123427_create_petanis_table.php | 37 +++++++++++++++ ...025_11_25_123428_create_pembelis_table.php | 32 +++++++++++++ ...2025_11_25_123429_create_produks_table.php | 35 ++++++++++++++ ...5_11_25_123429_create_transaksis_table.php | 35 ++++++++++++++ ..._123430_create_detail_transaksis_table.php | 32 +++++++++++++ .../2025_11_25_123430_create_pesans_table.php | 34 ++++++++++++++ 17 files changed, 436 insertions(+), 117 deletions(-) create mode 100644 app/Models/Admin.php create mode 100644 app/Models/DetailTransaksi.php create mode 100644 app/Models/Pembeli.php create mode 100644 app/Models/Pesan.php create mode 100644 app/Models/Petani.php create mode 100644 app/Models/Produk.php create mode 100644 app/Models/Transaksi.php delete mode 100644 database/migrations/0001_01_01_000000_create_users_table.php delete mode 100644 database/migrations/2025_11_21_145121_create_produk_table.php delete mode 100644 database/migrations/2025_11_21_145221_create_transaksi_table.php create mode 100644 database/migrations/2025_11_25_123425_create_admins_table.php create mode 100644 database/migrations/2025_11_25_123427_create_petanis_table.php create mode 100644 database/migrations/2025_11_25_123428_create_pembelis_table.php create mode 100644 database/migrations/2025_11_25_123429_create_produks_table.php create mode 100644 database/migrations/2025_11_25_123429_create_transaksis_table.php create mode 100644 database/migrations/2025_11_25_123430_create_detail_transaksis_table.php create mode 100644 database/migrations/2025_11_25_123430_create_pesans_table.php diff --git a/app/Models/Admin.php b/app/Models/Admin.php new file mode 100644 index 0000000..a2fbdb5 --- /dev/null +++ b/app/Models/Admin.php @@ -0,0 +1,21 @@ +belongsTo(Transaksi::class, 'transaksi_id'); + } + + public function produk() + { + return $this->belongsTo(Produk::class, 'produk_id'); + } +} \ No newline at end of file diff --git a/app/Models/Pembeli.php b/app/Models/Pembeli.php new file mode 100644 index 0000000..8d33586 --- /dev/null +++ b/app/Models/Pembeli.php @@ -0,0 +1,30 @@ +hasMany(Transaksi::class, 'pembeli_id'); + } +} \ No newline at end of file diff --git a/app/Models/Pesan.php b/app/Models/Pesan.php new file mode 100644 index 0000000..464d07c --- /dev/null +++ b/app/Models/Pesan.php @@ -0,0 +1,23 @@ +hasMany(Produk::class, 'petani_id'); + } +} \ No newline at end of file diff --git a/app/Models/Produk.php b/app/Models/Produk.php new file mode 100644 index 0000000..e8c7ae7 --- /dev/null +++ b/app/Models/Produk.php @@ -0,0 +1,32 @@ +belongsTo(Petani::class, 'petani_id'); + } + + public function detailTransaksis() + { + return $this->hasMany(DetailTransaksi::class, 'produk_id'); + } +} \ No newline at end of file diff --git a/app/Models/Transaksi.php b/app/Models/Transaksi.php new file mode 100644 index 0000000..71ee785 --- /dev/null +++ b/app/Models/Transaksi.php @@ -0,0 +1,32 @@ +belongsTo(Pembeli::class, 'pembeli_id'); + } + + public function details() + { + return $this->hasMany(DetailTransaksi::class, 'transaksi_id'); + } +} \ No newline at end of file diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php deleted file mode 100644 index 52ea9a2..0000000 --- a/database/migrations/0001_01_01_000000_create_users_table.php +++ /dev/null @@ -1,41 +0,0 @@ -id(); - $table->string('name'); - $table->string('username')->unique(); - $table->string('email')->unique()->nullable(); - $table->string('password'); - - // Role: admin, petani, pembeli - $table->enum('role', ['admin', 'petani', 'pembeli']); - - $table->string('no_hp')->nullable(); - $table->text('alamat')->nullable(); - - // Khusus Petani - $table->enum('status_akun', ['pending', 'aktif', 'ditolak'])->default('aktif'); - $table->string('nama_bank')->nullable(); - $table->string('no_rekening')->nullable(); - - $table->rememberToken(); - $table->timestamps(); - }); - } - - public function down(): void - { - Schema::dropIfExists('users'); - } -}; diff --git a/database/migrations/2025_11_21_145121_create_produk_table.php b/database/migrations/2025_11_21_145121_create_produk_table.php deleted file mode 100644 index 32ed736..0000000 --- a/database/migrations/2025_11_21_145121_create_produk_table.php +++ /dev/null @@ -1,30 +0,0 @@ -id(); - $table->foreignId('petani_id')->constrained('users')->onDelete('cascade'); - $table->string('nama_produk'); - $table->text('deskripsi')->nullable(); - $table->decimal('harga', 12, 2); - $table->integer('stok'); - $table->string('foto')->nullable(); - $table->timestamps(); - }); - } - - public function down(): void - { - Schema::dropIfExists('produk'); - } -}; diff --git a/database/migrations/2025_11_21_145221_create_transaksi_table.php b/database/migrations/2025_11_21_145221_create_transaksi_table.php deleted file mode 100644 index 79de874..0000000 --- a/database/migrations/2025_11_21_145221_create_transaksi_table.php +++ /dev/null @@ -1,46 +0,0 @@ -id(); - $table->string('kode_transaksi')->unique(); - - $table->foreignId('pembeli_id')->constrained('users')->onDelete('cascade'); - $table->foreignId('petani_id')->constrained('users')->onDelete('cascade'); - - $table->date('tanggal_transaksi'); - $table->decimal('total_harga', 12, 2); - - $table->enum('status', [ - 'menunggu_pembayaran', - 'menunggu_verifikasi', - 'diproses', - 'dikirim', - 'selesai', - 'ditolak' - ])->default('menunggu_pembayaran'); - - $table->string('bukti_transfer')->nullable(); - $table->decimal('biaya_ongkir', 12, 2)->default(0); - $table->string('resi_pengiriman')->nullable(); - $table->text('alamat_pengiriman'); - - $table->timestamps(); - }); - } - - public function down(): void - { - Schema::dropIfExists('transaksi'); - } -}; diff --git a/database/migrations/2025_11_25_123425_create_admins_table.php b/database/migrations/2025_11_25_123425_create_admins_table.php new file mode 100644 index 0000000..903aee0 --- /dev/null +++ b/database/migrations/2025_11_25_123425_create_admins_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('nama'); + $table->string('username')->unique(); + $table->string('password'); + $table->timestamps(); + }); +} + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('admins'); + } +}; diff --git a/database/migrations/2025_11_25_123427_create_petanis_table.php b/database/migrations/2025_11_25_123427_create_petanis_table.php new file mode 100644 index 0000000..08b8a8d --- /dev/null +++ b/database/migrations/2025_11_25_123427_create_petanis_table.php @@ -0,0 +1,37 @@ +id(); + $table->string('nama_lengkap'); + $table->string('username')->unique(); + $table->string('password'); + $table->string('no_hp', 15); + $table->text('alamat'); + $table->string('nama_usaha')->nullable(); + + // Status Verifikasi + $table->enum('status_akun', ['menunggu', 'aktif', 'ditolak'])->default('menunggu'); + + $table->timestamps(); + }); +} + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('petanis'); + } +}; diff --git a/database/migrations/2025_11_25_123428_create_pembelis_table.php b/database/migrations/2025_11_25_123428_create_pembelis_table.php new file mode 100644 index 0000000..399368f --- /dev/null +++ b/database/migrations/2025_11_25_123428_create_pembelis_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('nama_lengkap'); + $table->string('username')->unique(); + $table->string('password'); + $table->string('no_hp', 15); + $table->text('alamat'); + $table->timestamps(); + }); +} + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('pembelis'); + } +}; diff --git a/database/migrations/2025_11_25_123429_create_produks_table.php b/database/migrations/2025_11_25_123429_create_produks_table.php new file mode 100644 index 0000000..561b5b2 --- /dev/null +++ b/database/migrations/2025_11_25_123429_create_produks_table.php @@ -0,0 +1,35 @@ +id(); + $table->foreignId('petani_id')->constrained('petanis')->onDelete('cascade'); + + $table->string('nama_produk'); + $table->decimal('harga', 12, 0); + $table->integer('stok'); + $table->text('deskripsi'); + $table->string('foto_produk')->nullable(); + + $table->timestamps(); + }); +} + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('produks'); + } +}; diff --git a/database/migrations/2025_11_25_123429_create_transaksis_table.php b/database/migrations/2025_11_25_123429_create_transaksis_table.php new file mode 100644 index 0000000..7d80483 --- /dev/null +++ b/database/migrations/2025_11_25_123429_create_transaksis_table.php @@ -0,0 +1,35 @@ +id(); + $table->foreignId('pembeli_id')->constrained('pembelis')->onDelete('cascade'); + $table->dateTime('tanggal_transaksi'); + $table->text('alamat_pengiriman'); + $table->decimal('total_harga', 15, 0); + $table->enum('status', ['menunggu_konfirmasi', 'diproses', 'dikirim', 'selesai', 'batal']) + ->default('menunggu_konfirmasi'); + + $table->string('kode_invoice')->unique()->nullable(); + $table->timestamps(); + }); +} + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('transaksis'); + } +}; diff --git a/database/migrations/2025_11_25_123430_create_detail_transaksis_table.php b/database/migrations/2025_11_25_123430_create_detail_transaksis_table.php new file mode 100644 index 0000000..c0d68a1 --- /dev/null +++ b/database/migrations/2025_11_25_123430_create_detail_transaksis_table.php @@ -0,0 +1,32 @@ +id(); + $table->foreignId('transaksi_id')->constrained('transaksis')->onDelete('cascade'); + $table->foreignId('produk_id')->constrained('produks')->onDelete('cascade'); + $table->integer('jumlah'); + $table->decimal('harga_satuan', 12, 0); + $table->decimal('subtotal', 15, 0); + $table->timestamps(); + }); +} + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('detail_transaksis'); + } +}; diff --git a/database/migrations/2025_11_25_123430_create_pesans_table.php b/database/migrations/2025_11_25_123430_create_pesans_table.php new file mode 100644 index 0000000..1b9dc72 --- /dev/null +++ b/database/migrations/2025_11_25_123430_create_pesans_table.php @@ -0,0 +1,34 @@ +id(); + $table->unsignedBigInteger('pengirim_id'); + $table->string('pengirim_type'); + $table->unsignedBigInteger('penerima_id'); + $table->string('penerima_type'); + $table->text('isi_pesan'); + $table->boolean('sudah_dibaca')->default(false); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('pesans'); + } +};