An open API service indexing awesome lists of open source software.

https://github.com/gogaruda/apperror

Utilitas standar untuk menangani error
https://github.com/gogaruda/apperror

error-handling error-log error-messages error-monitoring error-reporting go golang golang-library golang-module golang-package

Last synced: 10 months ago
JSON representation

Utilitas standar untuk menangani error

Awesome Lists containing this project

README

          

# apperror

Modul `apperror` adalah utilitas standar untuk menangani error di aplikasi backend berbasis Go, khususnya dalam arsitektur web (REST API) menggunakan Gin. Modul ini menyediakan standar penanganan error internal, pelaporan ke client, dan logging.

---

## ๐Ÿ”ง Fitur

- Standardisasi kode error (terstruktur)
- Support log internal dan pesan aman untuk client
- Debug mode untuk development
- Integrasi mudah dengan Gin
- Dukungan error wrapping & unwrapping (`errors.As`, `apperror.Is`)

---

## ๐Ÿ“ฆ Instalasi

```bash
go get github.com/gogaruda/apperror
````
---

## ๐Ÿš€ Cara Penggunaan

### 1. Buat error di repository layer

```go
return apperror.New(
apperror.CodeDBError,
fmt.Sprintf("gagal query role_id %v", roleID),
err,
)
```

### 2. Tangani di handler controller

```go
data, err := s.GetByID(id)
if err != nil {
apperror.HandleHTTPError(c, err)
return
}
```

### 3. (Opsional) Cek tipe error dengan `Is`

```go
if apperror.Is(err, apperror.CodeUserNotFound) {
// bisa return 404, atau log khusus
}
```

---

## ๐Ÿž Debug Mode

Untuk menampilkan pesan internal (`debug`) di response JSON saat development, aktifkan env var:

```bash
APP_DEBUG=true
```

---

## ๐Ÿ” Best Practice

* Jangan tampilkan `err.Error()` langsung ke user.
* Gunakan `apperror.New` untuk membungkus semua error.
* Gunakan `apperror.Is` saat ingin handle khusus berdasarkan kode error.

---

## ๐Ÿ“ค Contoh Response (Production)

```json
{
"code": 404,
"status": "error",
"message": "User tidak ditemukan"
}
```

## ๐Ÿงช Contoh Response (Debug Mode)

```json
{
"code": 500,
"status": "error",
"message": "Kesalahan database",
"debug": "gagal query role_id 123"
}
```