package core import ( "context" "time" ) type ( // Canvas represents the metadata and content of a user-saved drawing. Canvas struct { ID string `json:"id"` UserID string `json:"-"` // Not exposed in JSON responses, used internally. Name string `json:"name"` Thumbnail string `json:"thumbnail,omitempty"` Data []byte `json:"data,omitempty"` // The full canvas data, not included in list views. CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` } // CanvasStore defines the persistence layer for user-owned canvases. // All operations are scoped to a specific user. CanvasStore interface { // List returns metadata for all canvases owned by a user. // The returned Canvas objects should not contain the `Data` field to keep the response light. List(ctx context.Context, userID string) ([]*Canvas, error) // Get returns a single canvas by its ID, ensuring it belongs to the user. Get(ctx context.Context, userID, id string) (*Canvas, error) // Save creates or updates a canvas for a user. Save(ctx context.Context, canvas *Canvas) error // Delete removes a canvas, ensuring it belongs to the user. Delete(ctx context.Context, userID, id string) error } )