interfaces - refactor: split UserRepository into AuthUserRepository and AdminUserRepository capabilities - refactor: split SessionRepository into AuthSessionRepository and repository-owned CLI/admin methods - refactor: replace generic Repository Update/Delete with operation-specific params and ownership predicates - refactor: replace CredentialRepository generic CRUD with passkey-specific methods - refactor: replace FileRepository generic Create/Update/Delete with UploadedFileParams, DirectoryParams, and owned soft-delete - refactor: remove repository fields from WebApp struct; repositories are now composition-time wiring only - feat: add domain error kinds ErrParentNotFound, ErrParentNotDir, ErrDirectoryNotEmpty, ErrInvalidMove - feat: add CredentialTypeAppPasskey constant - feat: add testutil.SetUserAdmin for test fixture setup that bypasses production service ports - test: add architecture test banning GORM Save in repository package - test: add capability interface contract tests ensuring each service receives the minimal interface - test: add blockingStorage helper for concurrent promotion tests - test: add preserved DSN parameter test for sqliteImmediateDSN - docs: update architecture decisions with repository write rules and capability separation - docs: update roadmap to clarify atomic single-use refresh sessions - docs: add -race test target to development docs
2.3 KiB
Development
Prerequisites
- Go 1.26.2 (pinned in
mise.toml) mise(https://mise.jdx.dev) — runmise installto install toolchain
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
Lint & Format
go vet ./...
go fmt ./...
Repository Review
Use the repository-scoped $mygo-api-repo-review skill for evidence-based architecture, design, security, resilience, data-consistency, performance, and implementation audits. Reviews are read-only unless fixes are requested separately.
Select one review mode:
diffcompares the current workspace, including relevant untracked files, withHEAD.maincompares the current workspace with the merge base ofHEADand the localmainbranch without fetching remote refs.fullreviews the current repository as a whole.
Optionally limit any mode to a target path, Go package, or logical component. For example:
Use $mygo-api-repo-review in main mode with target internal/storage.
Dependencies
go mod tidy # after adding/removing imports
Config
Server config is loaded via viper from config.yaml (defaults in internal/config/load.go).
For SQLite, the repository preserves configured DSN parameters and adds
_txlock=immediate. Write transactions therefore reserve the database before
performing hierarchy or refresh-session reads, matching the locking assumptions
used by the repository commands. Keep this behavior when supplying a SQLite URI
such as file:mygo.db?cache=shared.
server:
host: 0.0.0.0
port: 10086
database:
driver: sqlite3
sqlite:
path: data/mygo.db
storage:
driver: local
local:
path: data/files
jwt:
secret: dev-secret-do-not-use-in-production
access_ttl: 15m
refresh_ttl: 168h
Environment variables use MYGO_ prefix with underscore separators: MYGO_SERVER_PORT=8080, MYGO_JWT_SECRET=...
The default JWT secret is a development placeholder. At startup, MyGO replaces
it with an ephemeral runtime secret; set a stable jwt.secret or
MYGO_JWT_SECRET when tokens must survive restarts or when running multiple
instances.