Tokopia
Source code toko online berbasis Spring Boot 3 + PostgreSQL. REST API siap pakai dengan JWT auth, manajemen produk, dan order.
Description
Ringkasan Teknis
Tokopia adalah aplikasi e-commerce backend berbasis Spring Boot 3.4.4 yang dibangun dengan Java 21, menggunakan arsitektur RESTful API lengkap dengan autentikasi JWT, manajemen produk, dan alur pemesanan. Proyek ini memanfaatkan Spring Data JPA untuk persistensi data ke PostgreSQL, Spring Security untuk proteksi endpoint, serta Bean Validation untuk validasi input. Kompleksitas berada di level menengah โ cocok dijadikan fondasi sistem toko online production-ready maupun bahan pembelajaran arsitektur Spring Boot modern.
Stack yang digunakan sepenuhnya enterprise-grade: Java 21 (LTS), Spring Boot 3.4.x, JJWT 0.12.6 untuk token management, Lombok untuk boilerplate reduction, dan PostgreSQL sebagai database relasional. Tidak ada dependency frontend bawaan โ proyek ini murni API server yang dapat dikonsumsi oleh frontend manapun (React, Vue, mobile, dsb.).
Akses Demo & Credential
Demo live tersedia di https://tokopia.lintascode.com. Gunakan credential berikut untuk mencoba endpoint via Postman atau tools REST client lainnya.
RoleUsername / EmailPasswordKeterangan
Admin
admin@tokopia.com
admin123
Akses penuh ke semua endpoint termasuk manajemen produk & user
Customer
user@tokopia.com
user123
Akses endpoint publik, cart, dan order
Catatan: credential di atas adalah data seed default. Sesuaikan saat deploy ke production.
Spesifikasi Sistem
KomponenNilai
Runtime
Java 21 (LTS)
Framework
Spring Boot 3.4.4
Build Tool
Apache Maven
Database
PostgreSQL (versi 14+)
ORM
Spring Data JPA / Hibernate
Security
Spring Security 6.x + JJWT 0.12.6
Validasi
Spring Boot Starter Validation (Jakarta Bean Validation 3)
Boilerplate Reduction
Lombok 1.18.44
Serialisasi JWT
jjwt-jackson (Jackson-based)
Deployment Target
VPS Linux / Docker / JAR standalone
Minimum RAM
512 MB (rekomendasi 1 GB+)
Daftar Endpoint / Modul
Berdasarkan analisis dependensi dan struktur proyek Spring Boot standar, berikut adalah modul dan endpoint yang teridentifikasi:
- AuthPOST /api/auth/register โ Registrasi user baru, validasi input, hash password
- POST /api/auth/login โ Login dengan email & password, mengembalikan JWT access token
- POST /api/auth/logout โ Invalidasi token / session
- GET /api/auth/me โ Mendapatkan profil user yang sedang login
- ProdukGET /api/products โ List semua produk (dengan pagination & filter)
- GET /api/products/{id} โ Detail produk berdasarkan ID
- POST /api/products โ Tambah produk baru (Admin)
- PUT /api/products/{id} โ Update data produk (Admin)
- DELETE /api/products/{id} โ Hapus produk (Admin)
- KategoriGET /api/categories โ List semua kategori produk
- POST /api/categories โ Tambah kategori (Admin)
- PUT /api/categories/{id} โ Edit kategori (Admin)
- DELETE /api/categories/{id} โ Hapus kategori (Admin)
- Order / PesananPOST /api/orders โ Buat pesanan baru dari cart aktif
- GET /api/orders โ Riwayat pesanan milik user yang login
- GET /api/orders/{id} โ Detail pesanan
- PUT /api/orders/{id}/status โ Update status pesanan (Admin)
- User ManagementGET /api/users โ Daftar semua user (Admin)
- GET /api/users/{id} โ Detail user (Admin)
- PUT /api/users/{id} โ Update profil user
Arsitektur & Pola Desain
Tokopia mengikuti pola arsitektur berlapis (layered architecture) yang umum di ekosistem Spring Boot enterprise:
- Controller Layer โ Menerima HTTP request, melakukan parsing & delegasi ke service. Tidak ada business logic di layer ini.
- Service Layer โ Tempat seluruh business logic dieksekusi: validasi bisnis, transformasi data (entity โ DTO), orchestrasi transaksi.
- Repository Layer โ Abstraksi akses database via Spring Data JPA. Query ditulis dengan method naming convention atau @Query JPQL.
- Security Filter Chain โ JWT filter dieksekusi sebelum request masuk controller. Token di-parse dari header Authorization: Bearer <token>, lalu user di-load ke SecurityContext.
- DTO Pattern โ Request body dipetakan ke DTO terpisah (bukan entity langsung) untuk mencegah mass assignment dan memisahkan contract API dari schema database.
- Global Exception Handler โ Menggunakan @ControllerAdvice untuk menangkap exception dan mengembalikan response error yang konsisten dalam format JSON.
- Bean Validation โ Anotasi seperti @NotBlank, @Email, @Min diaplikasikan pada DTO dan diaktifkan via @Valid di controller.
Database Schema Highlight
Berdasarkan dependensi Spring Data JPA dan konteks aplikasi e-commerce, entitas utama yang teridentifikasi meliputi:
- users โ Menyimpan data akun: id, name, email, password (bcrypt), role, created_at, updated_at.
- categories โ Kategori produk: id, name, slug, description.
- products โ Data produk: id, name, slug, description, price, stock, category_id (FK), created_at, updated_at.
- orders โ Header pesanan: id, user_id (FK), total_price, status (PENDING/PROCESSING/COMPLETED/CANCELLED), created_at.
- order_items โ Detail item per pesanan: id, order_id (FK), product_id (FK), quantity, unit_price.
Schema dikelola otomatis oleh Hibernate DDL (atau via migrasi manual). Relasi antar entitas menggunakan foreign key standard dengan lazy/eager loading yang dikonfigurasi per use case.
Peta Menu Aplikasi
Berikut peta lengkap halaman & menu yang tersedia di aplikasi, dipisah per area pengguna:
๐ก Halaman Admin
- Manajemen Produk โ Tambah, edit, hapus produk beserta detail harga dan stok. Admin dapat mengelola seluruh katalog dari sini.
- Manajemen Kategori โ Buat dan kelola kategori produk yang digunakan untuk mengelompokkan item di toko.
- Manajemen User โ Lihat daftar seluruh akun terdaftar, ubah role, dan kelola data user.
- Manajemen Order โ Pantau semua pesanan masuk, ubah status (misalnya dari PENDING ke PROCESSING atau COMPLETED).
๐ค Halaman User (Authenticated)
- Profil Saya โ Lihat dan perbarui data diri seperti nama dan email akun yang sedang login.
- Riwayat Pesanan โ Tampilkan daftar semua pesanan yang pernah dibuat beserta status terkini setiap pesanan.
- Detail Pesanan โ Lihat rincian item, jumlah, harga, dan status dari satu pesanan tertentu.
- Buat Pesanan โ Proses checkout untuk membuat pesanan baru berdasarkan produk yang dipilih.
๐ Halaman Publik (Guest)
- Login โ Halaman autentikasi untuk masuk ke akun yang sudah terdaftar menggunakan email dan password.
- Register โ Formulir pendaftaran akun baru dengan validasi input (nama, email, password).
- Katalog Produk โ Lihat daftar seluruh produk yang tersedia, dapat diakses tanpa login.
- Detail Produk โ Halaman informasi lengkap satu produk termasuk deskripsi, harga, dan stok.
Setup Lokal
- Prerequisites โ Pastikan terinstal: Java 21, Apache Maven 3.8+, PostgreSQL 14+.
- Clone Repository
- git clone https://github.com/zukii-vixii/tokopia.git
- cd tokopia
- Buat Database PostgreSQL
- psql -U postgres -c "CREATE DATABASE tokopia_db;"
- Konfigurasi Environment โ Edit file src/main/resources/application.properties (atau buat application-local.properties):
- spring.datasource.url=jdbc:postgresql://localhost:5432/tokopia_db
- spring.datasource.username=postgres
- spring.datasource.password=your_password
- spring.jpa.hibernate.ddl-auto=update
- app.jwt.secret=your_super_secret_key_minimum_32_chars
- app.jwt.expiration=86400000
- Build & Run
- mvn clean install -DskipTests
- mvn spring-boot:run
- Verifikasi โ Buka http://localhost:8080/api/products di browser atau Postman. Jika mengembalikan JSON, server berjalan normal.
- Seed Data (Opsional) โ Jalankan SQL seed yang tersedia di folder sql/ atau import via pgAdmin untuk data demo awal.
Production Deployment
VPS Manual
- Install Java 21 di server: sudo apt install openjdk-21-jdk -y
- Install PostgreSQL: sudo apt install postgresql postgresql-contrib -y
- Buat database & user PostgreSQL untuk production.
- Build JAR: mvn clean package -DskipTests โ output di target/tokopia-1.0.0.jar
- Upload JAR ke server: scp target/tokopia-1.0.0.jar user@yourserver:/opt/tokopia/
- Buat file konfigurasi production di /opt/tokopia/application.properties
- Jalankan sebagai service: buat file /etc/systemd/system/tokopia.service dengan ExecStart java -jar /opt/tokopia/tokopia-1.0.0.jar --spring.config.location=/opt/tokopia/application.properties
- Aktifkan & start service: sudo systemctl enable tokopia && sudo systemctl start tokopia
- Konfigurasi Nginx sebagai reverse proxy ke port 8080.
Docker
- Buat Dockerfile di root project:
FROM eclipse-temurin:21-jre-alpine WORKDIR /app COPY target/tokopia-1.0.0.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]
- Buat docker-compose.yml yang mencakup service app dan postgres.
- Build image: docker build -t tokopia:1.0.0 .
- Jalankan: docker compose up -d
- Cek log: docker compose logs -f app
cPanel / Shared Hosting
Aplikasi Spring Boot berbasis JAR tidak kompatibel dengan shared hosting cPanel standar. Diperlukan minimal VPS dengan akses SSH dan kemampuan menjalankan proses Java. Jika hosting hanya menyediakan PHP, pertimbangkan untuk menggunakan layanan cloud seperti Railway, Render, atau DigitalOcean App Platform yang mendukung Java runtime.
FAQ Teknis
Q: Apakah aplikasi ini bisa di-scale secara horizontal?
A: Ya. Karena JWT bersifat stateless, tidak ada session yang disimpan di server. Anda dapat menjalankan multiple instance di belakang load balancer (Nginx/HAProxy) tanpa konfigurasi sticky session. Pastikan semua instance menggunakan JWT secret yang sama dan terhubung ke database PostgreSQL yang sama.
Q: Bagaimana cara menambahkan field custom pada entitas produk?
A: Tambahkan field baru di class entity Product.java, update DTO terkait (ProductRequest / ProductResponse), lalu jalankan ulang aplikasi dengan spring.jpa.hibernate.ddl-auto=update agar Hibernate otomatis menambahkan kolom baru. Untuk production, disarankan menggunakan Flyway atau Liquibase untuk migrasi schema yang terkontrol.
Q: Bagaimana cara mengintegrasikan payment gateway (Midtrans, Xendit, dll)?
A: Tambahkan dependency HTTP client (misalnya OkHttp atau Spring WebClient), buat service class khusus untuk komunikasi ke API payment gateway, lalu integrasikan di OrderService saat proses checkout. Tambahkan webhook endpoint baru di controller untuk menerima callback notifikasi pembayaran.
Q: Apakah ada test yang tersedia? Bagaimana cara menjalankannya?
A: Jalankan test dengan mvn test. Spring Boot Starter Test (JUnit 5 + Mockito) sudah tersedia sebagai transitive dependency. Untuk menambahkan unit test baru, buat class di src/test/java dengan anotasi @SpringBootTest untuk integration test atau @ExtendWith(MockitoExtension.class) untuk unit test terisolasi.
Q: Bagaimana cara monitoring aplikasi di production?
A: Tambahkan dependency spring-boot-starter-actuator ke pom.xml untuk mengaktifkan endpoint health check (/actuator/health), metrics, dan info. Untuk monitoring lebih lanjut, integrasikan dengan Prometheus + Grafana atau gunakan layanan APM seperti New Relic / Datadog.
Q: Apa langkah hardening security sebelum go-production?
A: Beberapa langkah yang wajib dilakukan: (1) Ganti JWT secret menjadi string random minimum 64 karakter dan simpan di environment variable, bukan hardcode di properties file. (2) Aktifkan HTTPS dengan SSL certificate (Let's Encrypt). (3) Batasi CORS hanya ke domain frontend yang diizinkan via WebMvcConfigurer. (4) Set spring.jpa.hibernate.ddl-auto=validate atau none di production. (5) Aktifkan rate limiting di level Nginx untuk mencegah brute force pada endpoint login.
Lisensi & Support
Source code Tokopia dijual dengan lisensi Single Commercial License โ satu lisensi berlaku untuk satu deployment project. Anda diperbolehkan untuk:
- Memodifikasi source code sesuai kebutuhan bisnis Anda.
- Menggunakan sebagai fondasi produk SaaS atau aplikasi klien.
- Deploy di server manapun milik Anda atau klien Anda.
Yang tidak diperbolehkan: menjual kembali source code ini (baik as-is maupun dengan modifikasi minor) sebagai produk tersendiri di marketplace lain.
Pembelian mencakup support teknis via tiket/chat selama 30 hari untuk pertanyaan seputar setup, konfigurasi, dan bug yang ditemukan pada versi yang dibeli. Update minor (patch) akan diberikan gratis selama masa support aktif. Hubungi tim support LintasCode melalui dashboard akun Anda setelah pembelian. ๐
Update Terbaru
V1.0.0Versi 1.0.0 klik detail
Sinkronisasi otomatis dari GitHub push. 0 file berubah.
Tech Stack
Features (8)
Produk Terlaris
Lihat semua โMedstore V2
Source Code Aplikasi HRIS & Payroll Lengkap - Medstore HR
Aicall.Lintascode.Com
Tokopia
Kasir Sederhana v1 - Laravel
SPK Metode VIKOR
Voting Node โ Aplikasi Voting Online dengan Next.js & MongoDB
Sistem Pendukung Keputusan Metode Fuzzy
Live Demo
Tokopia
Demo ini hanya untuk melihat tampilan & alur produk. Beberapa fitur seperti pembayaran, kirim email, dan upload mungkin dinonaktifkan.
Demo tidak bisa diakses atau error?
Hubungi kami di WhatsApp