routing table
2.6 KiB
Server Development
Prerequisites
- Go 1.26.2, pinned in
mise.toml misefor installing the pinned toolchain
mise install
Build
go build ./...
go build -o mygo .
Test
go test ./...
go test -v -run TestName ./internal/...
go test -race ./internal/repository ./internal/service ./internal/server
Format and Static Analysis
go fmt ./...
go vet ./...
Dependencies
Run module cleanup after adding or removing imports:
go mod tidy
Repository Review
Use $mygo-api-repo-review for evidence-based architecture, design, security, resilience, data-consistency, performance, and implementation audits.
| Mode | Scope |
|---|---|
diff |
Workspace, including relevant untracked files, compared with HEAD |
main |
Workspace compared with the merge base of HEAD and local main |
full |
Complete repository |
Reviews are read-only unless the user also requests fixes. A mode can target a path, Go package, or logical component.
Configuration
The server reads config.yaml from the working directory when present. Environment variables use the MYGO_ prefix and underscores, for example MYGO_SERVER_PORT and MYGO_JWT_SECRET.
server:
host: 0.0.0.0
port: 10086
database:
driver: sqlite3
sqlite:
path: data/mygo.db
storage:
driver: local
max_upload_size: 0
local:
path: data/files
jwt:
secret: dev-secret-do-not-use-in-production
access_ttl: 15m
refresh_ttl: 168h
log:
level: info
file_path: ""
file_level: debug
| Setting | Behavior |
|---|---|
database.driver |
Selects sqlite3 or postgres |
storage.max_upload_size |
0 allows any upload size; a positive byte count enables request and service limits |
jwt.secret |
Signs access and refresh tokens |
log.level |
Sets stderr logging to debug, info, warn, or error |
log.file_path |
Enables an additional text log file when set |
log.file_level |
Sets the file log level independently |
PostgreSQL uses the database.postgres host, port, user, password, database name, and SSL mode fields defined in internal/config.
The SQLite connector preserves configured DSN parameters and sets _txlock=immediate. This setting establishes the transaction behavior required by hierarchy and refresh-session commands.
The default JWT secret is a development placeholder. Configuration loading replaces it with a random in-memory secret for the current process. Set a stable secret for multi-instance deployments and tokens that must survive a restart.