refactor(backend): strengthen domain layer types and add missing page types
- DomainError struct with Code() string method replaces plain errors.New sentinels; errors.Is() still works via pointer equality - UUIDCreatedAt(uuid.UUID) time.Time helper extracts timestamp from UUID v7 - Add TagOffsetPage, CategoryOffsetPage, PoolOffsetPage - FileListParams fields grouped with comments matching openapi.yaml params - Fix mismatched comment on UserPage Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -29,21 +29,26 @@ type File struct {
|
||||
CreatorName string // denormalized from core.users
|
||||
IsPublic bool
|
||||
IsDeleted bool
|
||||
CreatedAt time.Time // extracted from UUID v7
|
||||
CreatedAt time.Time // extracted from UUID v7 via UUIDCreatedAt
|
||||
Tags []Tag // loaded with the file
|
||||
}
|
||||
|
||||
// FileListParams holds all parameters for listing/filtering files.
|
||||
type FileListParams struct {
|
||||
Filter string
|
||||
Sort string
|
||||
Order string
|
||||
// Pagination
|
||||
Cursor string
|
||||
Anchor *uuid.UUID
|
||||
Direction string // "forward" or "backward"
|
||||
Anchor *uuid.UUID
|
||||
Limit int
|
||||
Trash bool
|
||||
Search string
|
||||
|
||||
// Sorting
|
||||
Sort string // "content_datetime" | "created" | "original_name" | "mime"
|
||||
Order string // "asc" | "desc"
|
||||
|
||||
// Filtering
|
||||
Filter string // filter DSL expression
|
||||
Search string // substring match on original_name
|
||||
Trash bool // if true, return only soft-deleted files
|
||||
}
|
||||
|
||||
// FilePage is the result of a cursor-based file listing.
|
||||
@@ -52,3 +57,11 @@ type FilePage struct {
|
||||
NextCursor *string
|
||||
PrevCursor *string
|
||||
}
|
||||
|
||||
// UUIDCreatedAt extracts the creation timestamp embedded in a UUID v7.
|
||||
// UUID v7 stores Unix milliseconds in the most-significant 48 bits.
|
||||
func UUIDCreatedAt(id uuid.UUID) time.Time {
|
||||
ms := int64(id[0])<<40 | int64(id[1])<<32 | int64(id[2])<<24 |
|
||||
int64(id[3])<<16 | int64(id[4])<<8 | int64(id[5])
|
||||
return time.Unix(ms/1000, (ms%1000)*int64(time.Millisecond)).UTC()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user