DOKUMENTASI APLIKASI

Top Airconditioner — Buku Dokumentasi Teknis

TOP AIRCONDITIONER
Jasa Service AC Profesional
Tangerang, Banten
Indonesia
Telp: 0812-3456-7890

Aplikasi: Top Airconditioner Versi: 1.0 — Juli 2026 Database: db_top (MySQL) Tech Stack: CodeIgniter 3 · PHP 8.2 · MySQL · Bootstrap · Poppins

Daftar Isi

PartBabTopik
I — Fundasi1Pendahuluan & Gambaran Umum
2Arsitektur Teknologi
3Struktur Database & Relasi
II — Alur4Alur Booking Multi-Step
5Sistem Autentikasi
III — Fitur6Fitur Web
7Panel Admin & Dashboard
8Role & Akses
IV — Pengembangan9Security Assessment
10Rekomendasi
LampiranA-CFile Structure, Routes, Change Log
Part I — Fundasi Sistem
Arsitektur, teknologi, dan fondasi database

Bab 1: Pendahuluan

1.1 4W+1H

AspekDeskripsi
ApaAplikasi booking servis AC berbasis web untuk perusahaan Top Airconditioner.
MengapaMempermudah pelanggan booking layanan servis AC secara online.
SiapaAdmin, Customer, Pemilik, Staff/Teknisi
KapanDikembangkan Juli 2026. Berdiri sejak 1977.
BagaimanaCodeIgniter 3 + PHP 8.2 + MySQL + Bootstrap + Poppins

1.2 Pengguna & Role

RoleLoginDashboardKeterangan
Adminemail + MD5/dashboardInternal Pengelola penuh
Customeremail + MD5/homeExternal Booking servis
Pemilikemail + MD5/dashboard_pimpinanOwner Laporan
Staffusername + bcrypt/dashboard_teknisiInternal Teknisi lapangan

1.3 Fitur Utama

#FiturStatus
1Multi-step Booking (3 langkah + pembayaran)Aktif
2Login & RegisterAktif
3Upload Bukti PembayaranAktif
4Admin Booking Management & ApproveAktif
5Staff: Update Status & Upload HasilAktif
6Laporan Booking & Hasil KerjaAktif
7CRUD User, Staff, ServiceAktif

Bab 2: Arsitektur Teknologi

2.1 Tech Stack

KomponenTeknologiKeterangan
BackendCodeIgniter 3.1.13PHP MVC Framework
PHPPHP 8.2.12CI3 belum fully compatible
DatabaseMySQL / MariaDBdb_top
FrontendBootstrap 5 + Custom CSSResponsive
FontPoppinsGoogle Fonts
Password (Users)MD5⚠ Insecure
Password (Staff)bcrypt✅ Aman
SessionCI Files Drivercache/sessions/

2.2 Environment & Config

SettingNilaiKeterangan
ENVIRONMENTdevelopmentError reporting aktif
base_urlhttp://localhost/top/
csrf_protectionFALSE⚠ CSRF tidak aktif
encryption_keytop_aircon_secure_key_2026Session/cookie

Bab 3: Struktur Database

3.1 users

ColumnTypeKeterangan
idint(11) PK AI
namevarchar(100)Nama lengkap
emailvarchar(100) UNIQUELogin credential
passwordvarchar(255)MD5 hash
roleenum('admin','customer','pemilik')Default: customer

3.2 staff

ColumnTypeKeterangan
id_staffint(11) PK AI
namevarchar(100)Nama teknisi
usernamevarchar(20)Login credential
passwordvarchar(255)bcrypt hash
specialistvarchar(100)Keahlian
image_staffvarchar(255)Foto teknisi

3.3 services

ColumnTypeKeterangan
idint(11) PK AI
namevarchar(100)Nama layanan
typevarchar(100)Jenis layanan
pricedecimal(12,2)Harga
statusvarchar(15)active/inactive

3.4 booking

ColumnTypeKeterangan
idint(11) PK AI
booking_codevarchar(20) UNIQUEBK{date}{random}
servicevarchar(50)FK → services.id
statusenum(...)6 status: pending_payment s.d. expired
payment_proofvarchar(255)Bukti bayar
expires_atdatetime30 menit dari pembuatan

3.5 booking_result

ColumnTypeKeterangan
id_resultint(11) PK AI
booking_idint(11)FK → booking.id
id_staffint(11)FK → staff.id_staff
pekerjaantextDeskripsi pekerjaan
spareparttextSuku cadang
foto_hasilvarchar(255)Foto hasil kerja

3.6 Relasi Antar Tabel

users 1---* booking (via email)
staff 1---* booking (via id_staf)
services 1---* booking (via service FK)
booking 1---1 booking_result (via booking_id)
staff 1---* booking_result (via id_staff)
Part II — Alur Aplikasi
Alur booking dan autentikasi pengguna

Bab 4: Alur Booking Multi-Step

4.1 Alur Booking

Step 1: Pilih Service + Tanggal + Jam
   ↓
Step 2: Isi Data Diri (nama, email, telepon, alamat, catatan)
   ↓
Step 3: Konfirmasi Semua Data
   ↓
Confirm: Buat Booking (status: pending_payment, expires: 30 menit)
   ↓
Payment: Upload Bukti Bayar → status: paid → Receipt

4.2 Status Booking

StatusKeteranganOleh
pending_paymentMenunggu pembayaran (30 menit)System
paidPembayaran dikonfirmasiCustomer
assignedStaff ditugaskanAdmin
maintenanceSedang dikerjakanStaff
completedSelesaiStaff
expiredKedaluwarsaSystem

4.3 Endpoint Booking

MethodURLControllerKeterangan
GET/bookingBooking::indexStep 1
POST/booking/submitBooking::submitSimpan step 1
POST/booking/save_step2Booking::save_step2Simpan step 2
GET/booking/step3Booking::step3Konfirmasi
GET/booking/confirmBooking::confirmBuat booking
GET/booking/payment/{id}Booking::paymentHalaman bayar
POST/booking/upload_payment/{id}Booking::upload_paymentUpload bukti
GET/booking/print_receipt/{id}Booking::print_receiptStruk

Bab 5: Sistem Autentikasi

5.1 Login Methods

MetodeInputHashRedirect
User Loginemail + passwordMD5By role
Staff Loginusername + passwordbcrypt/dashboard_teknisi
Registername + email + passwordMD5→ /auth/login

5.2 Session Data

KeyValueDigunakan
user_idUser IDAuth check
user_emailEmailBooking confirm
roleRole stringMenu, redirect
staff_idStaff IDTeknisi dashboard

5.3 Login Flow

Auth::login()
  ├─ Cek users table (MD5) → set session → redirect by role
  ├─ Cek staff table (bcrypt) → set session → redirect /dashboard_teknisi
  └─ Gagal → error "Email or password is incorrect"
Part III — Fitur & Role
Fitur web, panel admin, dan hak akses

Bab 6: Fitur Web

6.1 Halaman Publik

HalamanURLKeterangan
Homepage/homeLanding page
Profil/aboutProfil perusahaan
Service/servisDaftar layanan
Booking/bookingMembutuhkan login
Login/auth/loginForm login
Register/auth/registerForm daftar

6.2 Navigasi Menu

MenuTampil KetikaLink
HomeSelalu/home
ProfilSelalu/about
ServiceSelalu/servis
BookingSelalu/booking
Doc AppSelalu/dokumentasi
DashboardLogin + non-customer/dashboard
TransaksiLogin/transaksi
LoginBelum login/auth/login
DaftarBelum login/auth/register
LogoutLogin/auth/logout

Bab 7: Panel Admin

7.1 Admin Dashboard

MenuURLKeterangan
Dashboard/dashboardStats: booking, pending, paid, assigned, completed
Booking Management/booking_admin/bookingsList booking, filter
Approve BookingPOST /dashboard/approveAssign staff
Hasil Pekerjaan/booking_admin/hasilList hasil kerja
Cetak Booking/booking_admin/cetak_bookingPrint laporan

7.2 CRUD Management

ManajemenURLFitur
User/userList, tambah (MD5), hapus
Staff/staffList, tambah (bcrypt), edit, hapus, foto
Service/servicesList, tambah, edit, hapus

7.3 Dashboard per Role

RoleDashboardFitur Utama
Admin/dashboardStats, approve, CRUD, laporan
Customer/homeLayanan, booking, riwayat
Pemilik/dashboard_pimpinanLaporan booking & hasil
Staff/dashboard_teknisiBooking ditugaskan, upload hasil

Bab 8: Role & Akses

8.1 Matrix Akses

Menu / FiturAdminCustomerPemilikStaff
Homepage
Booking (form)
Transaksi
Dashboard Admin
CRUD User/Staff/Service
Laporan
Teknisi Dashboard
Upload Hasil Kerja
⚠ Peringatan: Controller Staff (CRUD) tidak memiliki auth check. Siapa saja bisa mengakses tanpa login.
Part IV — Pengembangan
Evaluasi keamanan dan rekomendasi

Bab 9: Security Assessment

9.1 Masalah Keamanan

#MasalahSeverity
1Password user pakai MD5CRITICAL
2CSRF Protection dimatikanCRITICAL
3Tidak ada input sanitization / XSS filteringCRITICAL
4Controller Staff tidak ada auth checkCRITICAL
5Session tidak di-regenerate setelah loginHIGH
6Tidak ada rate limiting pada loginHIGH
7Development mode di productionHIGH
8Cookie HttpOnly = FALSEHIGH
9Booking code hanya 900 kemungkinan/hariMEDIUM
10Tidak ada FOREIGN KEY constraintsMEDIUM

Bab 10: Rekomendasi

10.1 Prioritas Perbaikan

#RekomendasiPrioritas
1Ganti MD5 → bcrypt (password_hash())URGENT
2Enable CSRF protectionURGENT
3Tambah auth check di semua controllerURGENT
4Gunakan htmlspecialchars() di outputURGENT
5Set ENVIRONMENT ke productionHIGH
6Enable cookie_httponly = TRUEHIGH
7Tambah rate limiting loginHIGH
8Regenerate session ID setelah loginHIGH
9Tambah FOREIGN KEY constraintsMEDIUM
10Fix Booking_model undefined variablesMEDIUM

10.2 Contoh Perbaikan Password

// SEBELUM (MD5 - insecure)
$password = md5($this->input->post('password'));

// SESUDAH (bcrypt - aman)
$password = password_hash($this->input->post('password'), PASSWORD_DEFAULT);
Lampiran
File structure, routes, dan change log

Lampiran A: File Structure

top/
├── index.php                    (Front controller)
├── db_top.sql                   (Database dump)
├── application/
│   ├── config/                  (autoload, config, routes)
│   ├── controllers/             (21 controllers)
│   ├── models/                  (5 models)
│   ├── views/                   (49 views)
│   │   ├── layout/              (header, footer, sidebar)
│   │   ├── auth/                (login, register)
│   │   ├── booking_admin/       (bookings, cetak, hasil)
│   │   ├── pimpinan/            (dashboard, laporan)
│   │   └── teknisi/             (dashboard)
│   └── cache/sessions/
├── system/                      (CI3 framework)
├── assets/
│   ├── css/style.css
│   └── img/
└── uploads/
    ├── payment/                 (Bukti bayar)
    └── hasil/                   (Foto hasil kerja)

Lampiran B: Routes

RouteMaps ToKeterangan
/homeHomepage
aboutaboutProfil
servisservisDaftar service
bookingbookingHalaman booking
dashboarddashboardAdmin dashboard
dokumentasidokumentasiDoc App
loginauth/loginLogin
logoutauth/logoutLogout

Lampiran C: Change Log

TanggalVersiPerubahan
Juli 20261.0.0Initial release: booking, admin, staff, CRUD, laporan, pembayaran