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.
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"github.com/insertr/insertr/internal/db"
|
||||
"github.com/insertr/insertr/internal/db/postgresql"
|
||||
"github.com/insertr/insertr/internal/db/sqlite"
|
||||
"github.com/insertr/insertr/internal/engine"
|
||||
)
|
||||
|
||||
// DatabaseClient implements ContentClient for direct database access
|
||||
@@ -24,7 +25,7 @@ func NewDatabaseClient(database *db.Database) *DatabaseClient {
|
||||
}
|
||||
|
||||
// GetContent fetches a single content item by ID
|
||||
func (d *DatabaseClient) GetContent(siteID, contentID string) (*ContentItem, error) {
|
||||
func (d *DatabaseClient) GetContent(siteID, contentID string) (*engine.ContentItem, error) {
|
||||
ctx := context.Background()
|
||||
var content interface{}
|
||||
var err error
|
||||
@@ -56,9 +57,9 @@ func (d *DatabaseClient) GetContent(siteID, contentID string) (*ContentItem, err
|
||||
}
|
||||
|
||||
// GetBulkContent fetches multiple content items by IDs
|
||||
func (d *DatabaseClient) GetBulkContent(siteID string, contentIDs []string) (map[string]ContentItem, error) {
|
||||
func (d *DatabaseClient) GetBulkContent(siteID string, contentIDs []string) (map[string]engine.ContentItem, error) {
|
||||
if len(contentIDs) == 0 {
|
||||
return make(map[string]ContentItem), nil
|
||||
return make(map[string]engine.ContentItem), nil
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
@@ -87,7 +88,7 @@ func (d *DatabaseClient) GetBulkContent(siteID string, contentIDs []string) (map
|
||||
items := d.convertToContentItemList(dbContent)
|
||||
|
||||
// Convert slice to map for easy lookup
|
||||
result := make(map[string]ContentItem)
|
||||
result := make(map[string]engine.ContentItem)
|
||||
for _, item := range items {
|
||||
result[item.ID] = item
|
||||
}
|
||||
@@ -96,7 +97,7 @@ func (d *DatabaseClient) GetBulkContent(siteID string, contentIDs []string) (map
|
||||
}
|
||||
|
||||
// GetAllContent fetches all content for a site
|
||||
func (d *DatabaseClient) GetAllContent(siteID string) (map[string]ContentItem, error) {
|
||||
func (d *DatabaseClient) GetAllContent(siteID string) (map[string]engine.ContentItem, error) {
|
||||
ctx := context.Background()
|
||||
var dbContent interface{}
|
||||
var err error
|
||||
@@ -117,7 +118,7 @@ func (d *DatabaseClient) GetAllContent(siteID string) (map[string]ContentItem, e
|
||||
items := d.convertToContentItemList(dbContent)
|
||||
|
||||
// Convert slice to map for easy lookup
|
||||
result := make(map[string]ContentItem)
|
||||
result := make(map[string]engine.ContentItem)
|
||||
for _, item := range items {
|
||||
result[item.ID] = item
|
||||
}
|
||||
@@ -125,12 +126,12 @@ func (d *DatabaseClient) GetAllContent(siteID string) (map[string]ContentItem, e
|
||||
return result, nil
|
||||
}
|
||||
|
||||
// convertToContentItem converts database models to content.ContentItem
|
||||
func (d *DatabaseClient) convertToContentItem(content interface{}) ContentItem {
|
||||
// convertToContentItem converts database models to engine.ContentItem
|
||||
func (d *DatabaseClient) convertToContentItem(content interface{}) engine.ContentItem {
|
||||
switch d.db.GetDBType() {
|
||||
case "sqlite3":
|
||||
c := content.(sqlite.Content)
|
||||
return ContentItem{
|
||||
return engine.ContentItem{
|
||||
ID: c.ID,
|
||||
SiteID: c.SiteID,
|
||||
Value: c.Value,
|
||||
@@ -139,7 +140,7 @@ func (d *DatabaseClient) convertToContentItem(content interface{}) ContentItem {
|
||||
}
|
||||
case "postgresql":
|
||||
c := content.(postgresql.Content)
|
||||
return ContentItem{
|
||||
return engine.ContentItem{
|
||||
ID: c.ID,
|
||||
SiteID: c.SiteID,
|
||||
Value: c.Value,
|
||||
@@ -147,26 +148,26 @@ func (d *DatabaseClient) convertToContentItem(content interface{}) ContentItem {
|
||||
UpdatedAt: time.Unix(c.UpdatedAt, 0).Format(time.RFC3339),
|
||||
}
|
||||
}
|
||||
return ContentItem{} // Should never happen
|
||||
return engine.ContentItem{} // Should never happen
|
||||
}
|
||||
|
||||
// convertToContentItemList converts database model lists to content.ContentItem slice
|
||||
func (d *DatabaseClient) convertToContentItemList(contentList interface{}) []ContentItem {
|
||||
// convertToContentItemList converts database model lists to engine.ContentItem slice
|
||||
func (d *DatabaseClient) convertToContentItemList(contentList interface{}) []engine.ContentItem {
|
||||
switch d.db.GetDBType() {
|
||||
case "sqlite3":
|
||||
list := contentList.([]sqlite.Content)
|
||||
items := make([]ContentItem, len(list))
|
||||
items := make([]engine.ContentItem, len(list))
|
||||
for i, content := range list {
|
||||
items[i] = d.convertToContentItem(content)
|
||||
}
|
||||
return items
|
||||
case "postgresql":
|
||||
list := contentList.([]postgresql.Content)
|
||||
items := make([]ContentItem, len(list))
|
||||
items := make([]engine.ContentItem, len(list))
|
||||
for i, content := range list {
|
||||
items[i] = d.convertToContentItem(content)
|
||||
}
|
||||
return items
|
||||
}
|
||||
return []ContentItem{} // Should never happen
|
||||
return []engine.ContentItem{} // Should never happen
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user