1.4 KiB
1.4 KiB
Dealspace Coding Guide
Build & Test
make build # Local build
make build-linux # Linux/amd64 with CGO + fts5
make test # Run all tests
CGO_ENABLED=1 go test -tags fts5 ./lib -run TestPackUnpack -v # Single test
Code Style
- Format:
gofmt(standard Go formatting) - Imports: stdlib → third-party → internal (github.com/mish/dealspace)
- Types: Use JSON tags with
snake_case, e.g.,EntryID stringjson:"entry_id"`` - Naming: PascalCase for exported, camelCase for unexported; constants use prefix like
TypeProject,StageDataroom - Errors: Wrap with
fmt.Errorf("context: %w", err); check sentinel errors with==
Architecture Rules
Database access ONLY through three choke points in lib/dbcore.go:
EntryRead(db, cfg, actorID, projectID, filter)— all readsEntryWrite(db, cfg, actorID, entries...)— all writesEntryDelete(db, actorID, projectID, entryIDs...)— all deletes
FORBIDDEN: db.Exec(), db.Query(), db.QueryRow() outside dbcore.go; wrapper functions bypassing choke points; modifications to dbcore.go without explicit approval.
actorID="" = system/internal access (always granted). RBAC enforced at DB level, not UI.
Tech Stack
Go 1.24, SQLite with mattn/go-sqlite3 (CGO required), chi router, uuid, pdfcpu, excelize, golang.org/x/crypto