Files
insertr/internal/content/mock.go
Joakim d877366be0 Consolidate type definitions and fix API contract
- Move all ContentItem, ContentClient, ContentResponse types to engine/types.go as single source of truth
- Remove duplicate type definitions from content/types.go
- Update all imports across codebase to use engine types
- Enhance engine to extract existing data-content-id from HTML markup
- Simplify frontend to always send html_markup, let server handle ID extraction/generation
- Fix contentId reference errors in frontend error handling
- Add getAttribute helper method to engine for ID extraction
- Add GetAllContent method to engine.DatabaseClient
- Update enhancer to use engine.ContentClient interface
- All builds and API endpoints verified working

This resolves the 400 Bad Request errors and creates a unified architecture where the server is the single source of truth for all ID generation and content type management.
2025-09-16 16:45:29 +02:00

141 lines
4.1 KiB
Go

package content
import (
"time"
"github.com/insertr/insertr/internal/engine"
)
// MockClient implements ContentClient with mock data for development
type MockClient struct {
data map[string]engine.ContentItem
}
// NewMockClient creates a new mock content client with sample data
func NewMockClient() *MockClient {
// Generate realistic mock content based on actual generated IDs
data := map[string]engine.ContentItem{
// Navigation (index.html has collision suffix)
"navbar-logo-2b10ad": {
ID: "navbar-logo-2b10ad",
SiteID: "demo",
Value: "Acme Consulting Solutions",
Type: "text",
UpdatedAt: time.Now().Format(time.RFC3339),
},
"navbar-logo-2b10ad-a44bad": {
ID: "navbar-logo-2b10ad-a44bad",
SiteID: "demo",
Value: "Acme Business Advisors",
Type: "text",
UpdatedAt: time.Now().Format(time.RFC3339),
},
// Hero Section - index.html (updated with actual IDs)
"hero-title-7cfeea": {
ID: "hero-title-7cfeea",
SiteID: "demo",
Value: "Transform Your Business with Strategic Expertise",
Type: "text",
UpdatedAt: time.Now().Format(time.RFC3339),
},
"hero-lead-e47475": {
ID: "hero-lead-e47475",
SiteID: "demo",
Value: "We help **ambitious businesses** grow through strategic planning, process optimization, and digital transformation. Our team brings 20+ years of experience to accelerate your success.",
Type: "markdown",
UpdatedAt: time.Now().Format(time.RFC3339),
},
"hero-link-76c620": {
ID: "hero-link-76c620",
SiteID: "demo",
Value: "Schedule Free Consultation",
Type: "link",
UpdatedAt: time.Now().Format(time.RFC3339),
},
// Hero Section - about.html
"hero-title-c70343": {
ID: "hero-title-c70343",
SiteID: "demo",
Value: "About Our Consulting Expertise",
Type: "text",
UpdatedAt: time.Now().Format(time.RFC3339),
},
"hero-lead-673026": {
ID: "hero-lead-673026",
SiteID: "demo",
Value: "We're a team of **experienced consultants** dedicated to helping small businesses thrive in today's competitive marketplace through proven strategies.",
Type: "markdown",
UpdatedAt: time.Now().Format(time.RFC3339),
},
// Services Section
"services-subtitle-c8927c": {
ID: "services-subtitle-c8927c",
SiteID: "demo",
Value: "Our Story",
Type: "text",
UpdatedAt: time.Now().Format(time.RFC3339),
},
"services-text-0d96da": {
ID: "services-text-0d96da",
SiteID: "demo",
Value: "**Founded in 2020**, Acme Consulting emerged from a simple observation: small businesses needed access to the same high-quality strategic advice that large corporations receive, but in a format that was accessible, affordable, and actionable.",
Type: "markdown",
UpdatedAt: time.Now().Format(time.RFC3339),
},
// Default fallback for any missing content
"default": {
ID: "default",
SiteID: "demo",
Value: "[Enhanced Content]",
Type: "text",
UpdatedAt: time.Now().Format(time.RFC3339),
},
}
return &MockClient{data: data}
}
// GetContent fetches a single content item by ID
func (m *MockClient) GetContent(siteID, contentID string) (*engine.ContentItem, error) {
if item, exists := m.data[contentID]; exists && item.SiteID == siteID {
return &item, nil
}
// Return nil for missing content - this will preserve original HTML content
return nil, nil
}
// GetBulkContent fetches multiple content items by IDs
func (m *MockClient) GetBulkContent(siteID string, contentIDs []string) (map[string]engine.ContentItem, error) {
result := make(map[string]engine.ContentItem)
for _, id := range contentIDs {
item, err := m.GetContent(siteID, id)
if err != nil {
return nil, err
}
if item != nil {
result[id] = *item
}
}
return result, nil
}
// GetAllContent fetches all content for a site
func (m *MockClient) GetAllContent(siteID string) (map[string]engine.ContentItem, error) {
result := make(map[string]engine.ContentItem)
for _, item := range m.data {
if item.SiteID == siteID {
result[item.ID] = item
}
}
return result, nil
}