2.5 KiB
2.5 KiB
PROJECT KNOWLEDGE BASE
Generated: 2026-04-11
Commit: 3d5ce0d
Branch: dev
OVERVIEW
Go backend API for telecom network asset management (NAM). Manages ODP/OTB/OLT/Tower infrastructure with Gin + GORM.
STRUCTURE
backend_nam/
├── config/ # Environment config (DB, JWT, API)
├── delivery/ # HTTP layer (server.go, controllers/)
├── manager/ # Dependency injection wiring
├── middleware/ # Auth, CORS, RBAC, rate limiting, logging
├── model/ # DTOs (req/res) + Entities
├── repository/ # Database operations
├── usecase/ # Business logic
├── utils/ # Helpers, services, migrations, common
├── main.go # Entry point
└── go.mod
WHERE TO LOOK
| Task | Location | Notes |
|---|---|---|
| Add API endpoint | delivery/controller/ | New {name}_controller.go |
| Business logic | usecase/ | New {name}_usecase.go |
| DB operations | repository/ | New {name}_repo.go |
| Data models | model/entity/ | GORM structs |
| Config changes | config/config.go | env vars |
CONVENTIONS
- Package path:
users_management/m/... - File naming: snake_case (
device_usecase.go) - Interface naming:
{Entity}Repo,{Entity}UseCase - Constructor:
New{Entity}{Layer}(deps) *{entity}{Layer} - GORM tags:
json:"field" gorm:"type:uuid;primaryKey" - Response format:
common.SingleResponses(c, "message", data) - Error format:
common.ErrorResponses(c, http.StatusBadRequest, "message")
ANTI-PATTERNS (THIS PROJECT)
- DO NOT use
as any- strict typing required - DO NOT skip validation in usecases - use
validator.New() - DO NOT commit
.envfiles - DO NOT hardcode file paths - use constants in helper/
UNIQUE STYLES
- Auth middleware: Conditional based on
USER_AUTH_ENABLEDenv var - Image handling: Local filesystem at
./uploads/+/uploads/static route - Bulk operations: Return
{Successful, Failed, TotalRequested, Errors[], Results[]} - DevicePort auto-create: Created automatically when Device is created
COMMANDS
go run main.go # Local dev
go build -o main . # Build binary
docker build -t nam-backend . # Docker build
go test ./... # Run all tests
go test -v ./usecase/... # Run usecase tests
NOTES
- Port:
:5678(Dockerfile EXPOSE) - UUID primary keys everywhere
- Geocoding service with caching layer
- Activity logging middleware captures all mutations