Files
pad/internal/models/document.go
T
xarmian 157ca4e88f chore: bump Go toolchain to 1.26 (TASK-763) (#247)
* chore: bump Go toolchain to 1.26 (TASK-763)

Bump Go from 1.25 to 1.26 across all toolchain pins:

- go.mod — go 1.25.0 → go 1.26.0
- Dockerfile — golang:1.25-alpine → golang:1.26-alpine
- .github/workflows/ci.yml — three setup-go steps (Go, Go-Postgres, E2E jobs)
- .github/workflows/release.yml — release pipeline

No `toolchain` directive: the repo is pre-launch with no external
contributors yet, so we set the floor where we want it (hard requirement).

Verified locally before commit:
- golangci-lint v2.11.4 builds and runs under Go 1.26.2 (pinned in CI)
- golang:1.26-alpine and 1.26.2-alpine images present on Docker Hub
- go build ./... clean
- go vet ./... clean
- go test ./... all pass

Parent: PLAN-644 (OSS Repo Hygiene and Launch Polish).

* chore: gofmt -w under Go 1.26 (TASK-763)

Apply Go 1.26's gofmt to the codebase. ~41 files reformatted, all
struct-tag whitespace realignment — no semantic changes. Verified:

- gofmt -l ./cmd ./internal returns empty after
- go build ./... still clean
- go test ./... still passes (run before commit)

Bundling the gofmt diff with the toolchain bump in the same PR because
the formatting drift is a direct consequence of moving from 1.25 to
1.26; splitting them creates a mandatory two-PR ordering for no value.

Parent: PLAN-644.

* docs: bump documented Go floor to 1.26 (TASK-763)

Match go.mod's hard 1.26.0 requirement in the source-build instructions.
Caught by Codex review round 1 on PR #247.

- README.md:158 — "Go 1.25+" → "Go 1.26+"
- CONTRIBUTING.md:9 — "Go 1.25+" → "Go 1.26+"
2026-04-25 11:35:19 -04:00

111 lines
3.0 KiB
Go

package models
import "time"
// Valid document types
var ValidDocTypes = []string{
"roadmap", "plan", "architecture", "ideation",
"feature-spec", "notes", "prompt-library", "reference",
}
// Valid document statuses
var ValidStatuses = []string{
"draft", "active", "completed", "archived",
}
// Valid actors
var ValidActors = []string{"user", "agent"}
// Valid sources
var ValidSources = []string{"cli", "web", "skill"}
type Document struct {
ID string `json:"id"`
WorkspaceID string `json:"workspace_id"`
Title string `json:"title"`
Slug string `json:"slug"`
Content string `json:"content"`
DocType string `json:"doc_type"`
Status string `json:"status"`
Tags string `json:"tags"` // JSON array
Pinned bool `json:"pinned"`
SortOrder int `json:"sort_order"`
CreatedBy string `json:"created_by"`
LastModifiedBy string `json:"last_modified_by"`
Source string `json:"source"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt *time.Time `json:"deleted_at,omitempty"`
}
type DocumentCreate struct {
Title string `json:"title"`
Content string `json:"content,omitempty"`
DocType string `json:"doc_type,omitempty"`
Status string `json:"status,omitempty"`
Tags string `json:"tags,omitempty"`
Pinned bool `json:"pinned,omitempty"`
CreatedBy string `json:"created_by,omitempty"`
Source string `json:"source,omitempty"`
}
type DocumentUpdate struct {
Title *string `json:"title,omitempty"`
Content *string `json:"content,omitempty"`
DocType *string `json:"doc_type,omitempty"`
Status *string `json:"status,omitempty"`
Tags *string `json:"tags,omitempty"`
Pinned *bool `json:"pinned,omitempty"`
SortOrder *int `json:"sort_order,omitempty"`
LastModifiedBy string `json:"last_modified_by,omitempty"`
Source string `json:"source,omitempty"`
ChangeSummary string `json:"change_summary,omitempty"`
}
type QuickSave struct {
Title string `json:"title"`
Content string `json:"content"`
DocType string `json:"doc_type,omitempty"`
Status string `json:"status,omitempty"`
Tags string `json:"tags,omitempty"`
CreatedBy string `json:"created_by,omitempty"`
Source string `json:"source,omitempty"`
ChangeSummary string `json:"change_summary,omitempty"`
}
type DocumentListParams struct {
Type string
Status string
Tag string
Pinned *bool
Query string
Sort string
Order string
}
func IsValidDocType(t string) bool {
for _, v := range ValidDocTypes {
if v == t {
return true
}
}
return false
}
func IsValidStatus(s string) bool {
for _, v := range ValidStatuses {
if v == s {
return true
}
}
return false
}
func IsValidActor(a string) bool {
return a == "user" || a == "agent"
}
func IsValidSource(s string) bool {
return s == "cli" || s == "web" || s == "skill"
}