{"id":29019176,"url":"https://github.com/gogaruda/apperror","last_synced_at":"2025-06-26T00:08:22.074Z","repository":{"id":301137297,"uuid":"1007706568","full_name":"gogaruda/apperror","owner":"gogaruda","description":"Utilitas standar untuk menangani error","archived":false,"fork":false,"pushed_at":"2025-06-24T12:24:48.000Z","size":9,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-25T10:54:37.941Z","etag":null,"topics":["error-handling","error-log","error-messages","error-monitoring","error-reporting","go","golang","golang-library","golang-module","golang-package"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gogaruda.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-24T12:05:16.000Z","updated_at":"2025-06-24T12:24:28.000Z","dependencies_parsed_at":"2025-06-25T10:54:40.424Z","dependency_job_id":"5bf32570-4e3a-4103-b9ae-234c0760932d","html_url":"https://github.com/gogaruda/apperror","commit_stats":null,"previous_names":["gogaruda/apperror"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/gogaruda/apperror","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gogaruda%2Fapperror","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gogaruda%2Fapperror/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gogaruda%2Fapperror/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gogaruda%2Fapperror/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gogaruda","download_url":"https://codeload.github.com/gogaruda/apperror/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gogaruda%2Fapperror/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261973744,"owners_count":23238588,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["error-handling","error-log","error-messages","error-monitoring","error-reporting","go","golang","golang-library","golang-module","golang-package"],"created_at":"2025-06-26T00:08:20.765Z","updated_at":"2025-06-26T00:08:22.060Z","avatar_url":"https://github.com/gogaruda.png","language":"Go","readme":"# apperror\n\nModul `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.\n\n---\n\n## 🔧 Fitur\n\n- Standardisasi kode error (terstruktur)\n- Support log internal dan pesan aman untuk client\n- Debug mode untuk development\n- Integrasi mudah dengan Gin\n- Dukungan error wrapping \u0026 unwrapping (`errors.As`, `apperror.Is`)\n\n---\n\n## 📦 Instalasi\n\n```bash\ngo get github.com/gogaruda/apperror\n````\n---\n\n## 🚀 Cara Penggunaan\n\n### 1. Buat error di repository layer\n\n```go\nreturn apperror.New(\n    apperror.CodeDBError,\n    fmt.Sprintf(\"gagal query role_id %v\", roleID),\n    err,\n)\n```\n\n### 2. Tangani di handler controller\n\n```go\ndata, err := s.GetByID(id)\nif err != nil {\n    apperror.HandleHTTPError(c, err)\n    return\n}\n```\n\n### 3. (Opsional) Cek tipe error dengan `Is`\n\n```go\nif apperror.Is(err, apperror.CodeUserNotFound) {\n    // bisa return 404, atau log khusus\n}\n```\n\n---\n\n## 🐞 Debug Mode\n\nUntuk menampilkan pesan internal (`debug`) di response JSON saat development, aktifkan env var:\n\n```bash\nAPP_DEBUG=true\n```\n\n---\n\n## 🔐 Best Practice\n\n* Jangan tampilkan `err.Error()` langsung ke user.\n* Gunakan `apperror.New` untuk membungkus semua error.\n* Gunakan `apperror.Is` saat ingin handle khusus berdasarkan kode error.\n\n---\n\n## 📤 Contoh Response (Production)\n\n```json\n{\n  \"code\": 404,\n  \"status\": \"error\",\n  \"message\": \"User tidak ditemukan\"\n}\n```\n\n## 🧪 Contoh Response (Debug Mode)\n\n```json\n{\n  \"code\": 500,\n  \"status\": \"error\",\n  \"message\": \"Kesalahan database\",\n  \"debug\": \"gagal query role_id 123\"\n}\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgogaruda%2Fapperror","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgogaruda%2Fapperror","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgogaruda%2Fapperror/lists"}