Lompat ke konten
dokumentasi.id
Commit a2522f5
v1
Star645

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

1

Ringkasan Proyek

dewakoding-project-management adalah aplikasi manajemen proyek di atas Laravel 12 dan Filament 4. Satu panel Filament ber-id admin menjadi tempat kerja tim internal, sedangkan klien luar memakai rute external/{token} yang berdiri di luar panel itu. README menyebut aplikasi ini sebagai "A Laravel Filament 4 application for managing projects with ticket management and status tracking" (README.md:10).

Peta modul

Panel admin mendaftarkan seluruh komponennya lewat discoverResources, discoverPages, dan discoverWidgets, lalu menambahkan Dashboard bawaan serta plugin FilamentShieldPlugin. Panel juga mengaktifkan ->spa(), ->databaseTransactions(), dan tema Vite resources/css/filament/admin/theme.css (app/Providers/Filament/AdminPanelProvider.php:25-68).

graph TD
  App["dewakoding-project-management"] --> Panel["Panel admin (id: admin, path: admin)"]
  Panel --> Resources["Resources: Projects, Tickets, TicketPriorities, TicketComments, Users, Roles, Notifications"]
  Panel --> Pages["Pages: ProjectBoard, ProjectTimeline, TicketTimeline, EpicsOverview, Leaderboard, UserContributions, SystemSettings"]
  Panel --> Widgets["Widgets: StatsOverview, MonthlyTicketTrendChart, TicketsPerProjectChart"]
  Panel --> Shield["FilamentShieldPlugin"]
  Resources --> Models["Eloquent models"]
  Pages --> Models
  Widgets --> Models
  Models --> DB[("database")]
  Routes["routes/web.php"] --> External["ExternalLogin dan ExternalDashboard"]
  External --> Models
  style DB fill:#336791,color:#fff
  style Models fill:#336791,color:#fff
  style Panel fill:#f59e0b,color:#000
  style Shield fill:#f59e0b,color:#000
  style Widgets fill:#8b5cf6,color:#fff
  style External fill:#2d7d46,color:#fff
  style Routes fill:#2d7d46,color:#fff
%% fig: Peta modul aplikasi
%% desc: Panel admin Filament memuat Resources, Pages, dan Widgets di atas model Eloquent, sementara portal eksternal masuk lewat rute terpisah ke model yang sama.
Fig. 1: Peta modul aplikasiPanel admin Filament memuat Resources, Pages, dan Widgets di atas model Eloquent, sementara portal eksternal masuk lewat rute terpisah ke model yang sama.

Navigasi panel dikelompokkan menjadi tiga grup. Project Management memuat papan Kanban dan halaman linimasa, Analytics memuat leaderboard dan kontribusi pengguna, sedangkan Settings memuat pengaturan sistem dan prioritas ticket.

Grup navigasiIsi utamaRujukan
Project ManagementProjectBoard, EpicsOverview, ProjectTimeline, TicketTimelineapp/Filament/Pages/ProjectBoard.php:22-41
AnalyticsLeaderboard, UserContributionsapp/Filament/Pages/Leaderboard.php:17-27
SettingsSystemSettings, TicketPriorityResourceapp/Filament/Resources/TicketPriorities/TicketPriorityResource.php:33-37

ProjectBoard memakai slug project-board/{project_id?} dan mendefinisikan subjudul "Kanban board for ticket management". Pengguna dengan peran super_admin melihat seluruh project, pengguna lain hanya melihat project yang ia ikuti lewat relasi projects() (app/Filament/Pages/ProjectBoard.php:22-41). Halaman Leaderboard menyimpan rentang waktu default 7days dan jumlah kontributor teratas 10 (app/Filament/Pages/Leaderboard.php:29-30).

Fitur utama

README mendaftar lima belas fitur (README.md:12-28). Tabel berikut memetakan tiap fitur ke identifier yang benar-benar ada di kode.

FiturWujud di kodeRujukan
Manajemen project dengan konfigurasi ticket_prefixProject::$fillable memuat ticket_prefix, start_date, end_date, pinned_dateapp/Models/Project.php:16-24
Kontrol akses berbasis peranFilamentShieldPlugin pada panel adminapp/Providers/Filament/AdminPanelProvider.php:25-68
Anggota tim dengan penugasan peranProject::members() lewat tabel pivot project_membersapp/Models/Project.php:57-61
Status ticket yang dapat dikustomisasiProject::ticketStatuses() sebagai HasManyapp/Models/Project.php:47-50
Assignee dan due date pada ticketdue_date di $fillable, assignees() lewat tabel ticket_usersapp/Models/Ticket.php:62-75
Identifier ticket unikTicket::booted() menyusun uuid dari prefix project dan 6 karakter acakapp/Models/Ticket.php:34-49
Epic untuk mengelompokkan ticketTicket::epic() sebagai BelongsTo ke Epicapp/Models/Ticket.php:92-95
Komentar ticketTicket::comments() diurutkan created_at menaikapp/Models/Ticket.php:87-90
Papan KanbanProjectBoard dengan $sortOrders dan $selectedUserIdsapp/Filament/Pages/ProjectBoard.php:22-41
LinimasaProjectTimeline dan TicketTimelineapp/Filament/Pages/ProjectTimeline.php:13-15
Leaderboard performa anggota timLeaderboard::getLeaderboardData() dan calculateContributionScore()app/Filament/Pages/Leaderboard.php:17-27
Portal klienExternalLogin dan ExternalDashboard di bawah prefix externalroutes/web.php:16-20

Dua fitur README, yaitu export ticket ke CSV dan grafik kontribusi pengguna, tidak punya berkas yang saya periksa langsung; detail export dibahas di Import dan Export Ticket, sedangkan grafik kontribusi di Dashboard, Analitik, dan Leaderboard.

Tumpukan teknologi

Dependensi runtime dideklarasikan di composer.json: PHP ^8.2, filament/filament ^4.0, bezhansalleh/filament-shield ^4.0, laravel/framework ^12.0, laravel/octane ^2.9, laravel/socialite ^5.23, maatwebsite/excel ^3.1, dan solution-forest/tab-layout-plugin ^3.2.3 (composer.json:8-18).

LapisanPaket dan constraintRujukan
Frameworklaravel/framework ^12.0, laravel/octane ^2.9composer.json:8-18
Panel adminfilament/filament ^4.0, bezhansalleh/filament-shield ^4.0composer.json:8-18
Otentikasi eksternallaravel/socialite ^5.23composer.json:8-18
Olah berkasmaatwebsite/excel ^3.1composer.json:8-18
Frontendtailwindcss ^4.1.15, vite ^6.0.11, laravel-vite-plugin ^1.2.0package.json:8-19
Script devphp artisan serve, queue:listen, pail, npm run dev dijalankan serentakcomposer.json:59-62

⚠️ README menulis syarat PHP sebagai "> 8.2+" (README.md:30-35), sedangkan composer.json menulis ^8.2 (composer.json:8-18). Constraint composer yang berlaku, jadi PHP 8.2 sendiri masih diterima. Langkah shield:setup, shield:install, dan shield:super-admin wajib berurutan agar peran dan permission terbentuk; urutan lengkapnya ada di Instalasi, Konfigurasi, dan Docker.

Portal eksternal

Rute external/{token} dan external/{token}/dashboard memakai komponen Livewire ExternalLogin dan ExternalDashboard (routes/web.php:16-20). ExternalDashboard memakai layout layouts.external dan menyimpan konstanta SESSION_LIFETIME_MINUTES = 720 (app/Livewire/ExternalDashboard.php:17-22). Token dan password dibuat oleh ExternalAccess::generateForProject().

NilaiAngkaRujukan
Panjang access_token32 karakter dari Str::random(32)app/Models/ExternalAccess.php:36-47
Panjang password awal8 karakter dari Str::random(8)app/Models/ExternalAccess.php:36-47
Umur session portal720 menitapp/Livewire/ExternalDashboard.php:17-22
Password pada modelcast encryptedapp/Models/ExternalAccess.php:25-29

⚠️ access_token menjadi bagian path URL, sehingga token ikut tercatat di log akses web server dan riwayat peramban. Password awalnya hanya 8 karakter acak. Rotasi token dan pengaturan aksesnya dibahas di Portal Eksternal Klien.

Perilaku request di dalam panel, termasuk urutan middleware dan authMiddleware, dijelaskan di Arsitektur Aplikasi. Bentuk tabel dan relasi antar model ada di Model Data dan Migration, sedangkan aturan peran di Kontrol Akses dan Peran.