Backend API untuk platform marketplace Evermos, dibangun dengan Golang menggunakan Clean Architecture pattern.
- Authentication & Authorization: JWT-based authentication dengan role-based access control (Admin/User)
- User Management: Register, login, profile management
- Toko Management: CRUD toko dengan file upload untuk foto
- Product Management: CRUD produk dengan multiple foto upload, filtering, dan pagination
- Category Management: CRUD kategori (Admin only)
- Address Management: CRUD alamat pengiriman
- Transaction System:
- Create transaksi dengan multiple items
- Auto-generate invoice code
- Product snapshot (log_produk) untuk historical data
- Stock management
- Smart Delete System (Soft Delete):
- Intelligent product deletion dengan validasi transaksi
- Soft delete untuk produk yang sudah memiliki riwayat transaksi (data preservation)
- Hard delete untuk produk tanpa transaksi (data cleanup)
- Automatic filtering untuk produk yang di-delete dari semua query
- Validasi transaksi untuk mencegah order produk yang sudah dihapus
- Menjaga integritas data historis untuk keperluan audit dan pelaporan
- Security:
- Password hashing dengan bcrypt
- JWT token authentication
- Ownership validation
- Admin-only endpoints
evermos-api/
├── cmd/
│ └── api/
│ └── main.go # Entry point aplikasi
├── internal/
│ ├── config/
│ │ ├── config.go # Configuration loader
│ │ └── database.go # Database connection & migration
│ ├── delivery/
│ │ ├── http/
│ │ │ ├── handler/ # HTTP handlers/controllers
│ │ │ └── router.go # Route definitions
│ │ └── middleware/ # Middleware (auth, logger, CORS)
│ ├── model/ # Models & DTOs
│ ├── repository/ # Data access layer
│ ├── usecase/ # Business logic layer
│ └── utils/ # Helper utilities
├── uploads/ # File upload directory
├── .env.example # Environment variables template
├── go.mod # Go modules
└── README.md
- Language: Go 1.25+
- Framework: Gin (HTTP router)
- ORM: GORM
- Database: MySQL 8.0+
- Authentication: JWT (golang-jwt/jwt v5)
- Validation: go-playground/validator v10
- Password: bcrypt
- Testing: testify
- Go 1.21 atau lebih tinggi
- MySQL 8.0 atau lebih tinggi
- Git
cd c:\Users\NOC-01\rekamin\final-projekBuat database MySQL:
CREATE DATABASE evermos CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;Copy .env.example ke .env dan sesuaikan konfigurasi:
copy .env.example .envEdit file .env:
# Database Configuration
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password_here
DB_NAME=evermos
# JWT Configuration
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
JWT_EXPIRE_HOURS=24
# Server Configuration
SERVER_PORT=8000
# Upload Configuration
UPLOAD_PATH=./uploads
MAX_UPLOAD_SIZE=5242880go mod download
go mod tidyMigration akan otomatis dijalankan saat aplikasi start. Atau jalankan manual:
go run cmd/api/main.gogo run cmd/api/main.goServer akan berjalan di http://localhost:8000
Public URL: [https://documenter.getpostman.com/view/14392918/2sB3Wk14Lh](https://documenter.getpostman.com/view/14392918/2sB3Wk14Lh)
Sistem memastikan user hanya bisa mengakses/mengubah data milik sendiri:
- User Profile: User hanya bisa lihat/update profile sendiri
- Alamat: User hanya bisa CRUD alamat milik sendiri
- Toko: User hanya bisa update toko milik sendiri
- Produk: User hanya bisa CRUD produk dari toko milik sendiri
- Transaksi: User hanya bisa lihat transaksi sendiri
- Kategori: Hanya role admin yang dapat menambah kategori
Run unit tests:
go test ./tests/integration/... -vSemua response menggunakan format unified:
Success Response:
{
"status": true,
"message": "Succeed to GET data",
"errors": null,
"data": { ... }
}Error Response:
{
"status": false,
"message": "Failed to POST data",
"errors": ["error message here"],
"data": null
}Database schema mengikuti file draw.io yang diberikan, dengan tabel:
users- User accountstoko- Storesalamat- Shipping addressescategory- Product categoriesproduk- Productsfoto_produk- Product photoslog_produk- Product snapshots (transaction history)trx- Transactionsdetail_trx- Transaction details
go build -o evermos-api.exe cmd/api/main.go./evermos-api.exeMIT License
Zaki Fuadi Rakamin x Evermos Virtual Internship Project
Happy Coding! 🎉