- Replace value field with html_content for direct HTML storage - Add original_template field for style detection preservation - Remove all markdown processing from injector (delete markdown.go) - Fix critical content extraction/injection bugs in engine - Add missing UpdateContent PUT handler for content persistence - Fix API client field names and add updateContent() method - Resolve content type validation (only allow text/link types) - Add UUID-based ID generation to prevent collisions - Complete first-pass processing workflow for unprocessed elements - Verify end-to-end: Enhancement → Database → API → Editor → Persistence All 37 files updated for HTML-first content management system. Phase 3a implementation complete and production ready.
70 lines
2.4 KiB
Go
70 lines
2.4 KiB
Go
package engine
|
|
|
|
import (
|
|
"golang.org/x/net/html"
|
|
)
|
|
|
|
// ProcessMode defines how the engine should process content
|
|
type ProcessMode int
|
|
|
|
const (
|
|
// Enhancement mode: Parse + Generate IDs + Inject content + Add editor assets
|
|
Enhancement ProcessMode = iota
|
|
// IDGeneration mode: Parse + Generate IDs only (for API)
|
|
IDGeneration
|
|
// ContentInjection mode: Parse + Generate IDs + Inject content only
|
|
ContentInjection
|
|
)
|
|
|
|
// ContentInput represents input to the content engine
|
|
type ContentInput struct {
|
|
HTML []byte // Raw HTML or markup
|
|
FilePath string // File context (e.g., "index.html")
|
|
SiteID string // Site identifier
|
|
Mode ProcessMode // Processing mode
|
|
}
|
|
|
|
// ContentResult represents the result of content processing
|
|
type ContentResult struct {
|
|
Document *html.Node // Processed HTML document
|
|
Elements []ProcessedElement // All processed elements
|
|
GeneratedIDs map[string]string // Map of element positions to generated IDs
|
|
}
|
|
|
|
// ProcessedElement represents an element that has been processed
|
|
type ProcessedElement struct {
|
|
Node *html.Node // HTML node
|
|
ID string // Generated content ID
|
|
Type string // Content type (text, link)
|
|
Content string // Injected content (if any)
|
|
Generated bool // Whether ID was generated (vs existing)
|
|
Tag string // Element tag name
|
|
Classes []string // Element CSS classes
|
|
}
|
|
|
|
// ContentClient interface for accessing content data
|
|
// This will be implemented by database clients, HTTP clients, and mock clients
|
|
type ContentClient interface {
|
|
GetContent(siteID, contentID string) (*ContentItem, error)
|
|
GetBulkContent(siteID string, contentIDs []string) (map[string]ContentItem, error)
|
|
GetAllContent(siteID string) (map[string]ContentItem, error)
|
|
CreateContent(siteID, contentID, htmlContent, originalTemplate, contentType, lastEditedBy string) (*ContentItem, error)
|
|
}
|
|
|
|
// ContentItem represents a piece of content from the database
|
|
type ContentItem struct {
|
|
ID string `json:"id"`
|
|
SiteID string `json:"site_id"`
|
|
HTMLContent string `json:"html_content"`
|
|
OriginalTemplate string `json:"original_template"`
|
|
Type string `json:"type"`
|
|
UpdatedAt string `json:"updated_at"`
|
|
LastEditedBy string `json:"last_edited_by,omitempty"`
|
|
}
|
|
|
|
// ContentResponse represents the API response structure
|
|
type ContentResponse struct {
|
|
Content []ContentItem `json:"content"`
|
|
Error string `json:"error,omitempty"`
|
|
}
|