Refactor Directus types: rename to schemas.ts, fix imports, and resolve type errors

This commit is contained in:
cawcenter
2025-12-14 12:48:08 -05:00
parent 99f406e998
commit a74a4e946d
15 changed files with 716 additions and 915 deletions

386
frontend/src/lib/schemas.ts Normal file
View File

@@ -0,0 +1,386 @@
/**
* Spark Platform - Directus Schema Types
* Auto-generated from Golden Schema
*
* This provides full TypeScript coverage for all Directus collections
*/
// ============================================================================
// BATCH 1: FOUNDATION TABLES
// ============================================================================
export interface Sites {
id: string;
status: 'active' | 'inactive' | 'archived';
name: string;
url?: string;
date_created?: string;
date_updated?: string;
}
export interface CampaignMasters {
id: string;
status: 'active' | 'inactive' | 'completed';
site_id: string | Sites;
name: string;
headline_spintax_root?: string;
target_word_count?: number;
location_mode?: string;
batch_count?: number;
date_created?: string;
date_updated?: string;
}
export interface AvatarIntelligence {
id: string;
status: 'published' | 'draft';
base_name?: string; // Corrected from name
wealth_cluster?: string;
business_niches?: Record<string, any>;
pain_points?: Record<string, any>;
demographics?: Record<string, any>;
}
export interface AvatarVariants {
id: string;
status: 'published' | 'draft';
name?: string;
prompt_modifier?: string;
}
export interface CartesianPatterns {
id: string;
status: 'published' | 'draft';
name?: string;
pattern_logic?: string;
}
export interface GeoIntelligence {
id: string;
status: 'published' | 'draft';
city?: string;
state?: string;
population?: number;
}
export interface OfferBlocks {
id: string;
status: 'published' | 'draft';
name?: string;
html_content?: string;
}
// ============================================================================
// BATCH 2: FIRST-LEVEL CHILDREN
// ============================================================================
export interface GeneratedArticles {
id: string;
status: 'draft' | 'published' | 'archived';
site_id: string | Sites;
campaign_id?: string | CampaignMasters;
title?: string;
content?: string;
slug?: string;
schema_json?: Record<string, any>;
date_created?: string;
}
export interface GenerationJobs {
id: string;
status: 'pending' | 'processing' | 'completed' | 'failed';
site_id: string | Sites;
batch_size?: number;
target_quantity?: number;
filters?: Record<string, any>;
current_offset?: number;
progress?: number;
}
export interface Pages {
id: string;
status: 'published' | 'draft';
site_id: string | Sites;
title?: string;
slug?: string;
content?: string;
schema_json?: Record<string, any>;
}
export interface Posts {
id: string;
status: 'published' | 'draft';
site_id: string | Sites;
title?: string;
slug?: string;
content?: string;
schema_json?: Record<string, any>;
}
export interface Leads {
id: string;
status: 'new' | 'contacted' | 'qualified' | 'converted';
site_id?: string | Sites;
email?: string;
name?: string;
source?: string;
}
export interface HeadlineInventory {
id: string;
status: 'active' | 'used' | 'archived';
campaign_id: string | CampaignMasters;
headline_text?: string;
is_used?: boolean;
}
export interface ContentFragments {
id: string;
status: 'active' | 'archived';
campaign_id: string | CampaignMasters;
fragment_text?: string;
fragment_type?: string;
}
// ============================================================================
// BATCH 3: COMPLEX CHILDREN
// ============================================================================
export interface LinkTargets {
id: string;
status: 'active' | 'inactive';
site_id: string | Sites;
target_url?: string;
anchor_text?: string;
keyword_focus?: string;
}
export interface Globals {
id: string;
site_id: string | Sites;
title?: string;
description?: string;
logo?: string | DirectusFiles;
}
export interface Navigation {
id: string;
site_id: string | Sites;
label: string;
url: string;
parent?: string | Navigation;
sort?: number;
}
// ============================================================================
// DIRECTUS SYSTEM COLLECTIONS
// ============================================================================
export interface DirectusUsers {
id: string;
first_name?: string;
last_name?: string;
email: string;
password?: string;
location?: string;
title?: string;
description?: string;
tags?: string[];
avatar?: string;
language?: string;
theme?: 'auto' | 'light' | 'dark';
tfa_secret?: string;
status: 'active' | 'invited' | 'draft' | 'suspended' | 'archived';
role: string;
token?: string;
}
export interface DirectusFiles {
id: string;
storage: string;
filename_disk?: string;
filename_download: string;
title?: string;
type?: string;
folder?: string;
uploaded_by?: string | DirectusUsers;
uploaded_on?: string;
modified_by?: string | DirectusUsers;
modified_on?: string;
charset?: string;
filesize?: number;
width?: number;
height?: number;
duration?: number;
embed?: string;
description?: string;
location?: string;
tags?: string[];
metadata?: Record<string, any>;
}
export interface DirectusActivity {
id: number;
action: string;
user?: string | DirectusUsers;
timestamp: string;
ip?: string;
user_agent?: string;
collection: string;
item: string;
comment?: string;
}
// ============================================================================
// MAIN SCHEMA TYPE
// ============================================================================
export interface DirectusSchema {
// Batch 1: Foundation
sites: Sites;
campaign_masters: CampaignMasters;
avatar_intelligence: AvatarIntelligence;
avatar_variants: AvatarVariants;
cartesian_patterns: CartesianPatterns;
geo_intelligence: GeoIntelligence;
offer_blocks: OfferBlocks;
// Batch 2: Children
generated_articles: GeneratedArticles;
generation_jobs: GenerationJobs;
pages: Pages;
posts: Posts;
leads: Leads;
headline_inventory: HeadlineInventory;
content_fragments: ContentFragments;
// Batch 3: Complex
link_targets: LinkTargets;
globals: Globals;
navigation: Navigation;
// System & Analytics
work_log: WorkLog;
hub_pages: HubPages;
forms: Forms;
form_submissions: FormSubmissions;
site_analytics: SiteAnalytics;
events: AnalyticsEvents;
pageviews: PageViews;
conversions: Conversions;
locations_states: LocationsStates;
locations_counties: LocationsCounties;
locations_cities: LocationsCities;
// Directus System
directus_users: DirectusUsers;
directus_files: DirectusFiles;
directus_activity: DirectusActivity;
}
// ============================================================================
// SYSTEM & ANALYTICS TYPES
// ============================================================================
export interface WorkLog {
id: number;
site_id?: string | Sites;
action: string;
entity_type?: string;
entity_id?: string;
details?: any;
level?: string;
status?: string;
timestamp?: string;
date_created?: string;
user?: string | DirectusUsers;
}
export interface HubPages {
id: string;
site_id: string | Sites;
title: string;
slug: string;
parent_hub?: string | HubPages;
level?: number;
articles_count?: number;
schema_json?: Record<string, any>;
}
export interface Forms {
id: string;
site_id: string | Sites;
name: string;
fields: any[];
submit_action?: string;
success_message?: string;
redirect_url?: string;
}
export interface FormSubmissions {
id: string;
form: string | Forms;
data: Record<string, any>;
date_created?: string;
}
export interface SiteAnalytics {
id: string;
site_id: string | Sites;
google_ads_id?: string;
fb_pixel_id?: string;
}
export interface AnalyticsEvents {
id: string;
site_id: string | Sites;
event_name: string;
page_path: string;
timestamp?: string;
}
export interface PageViews {
id: string;
site_id: string | Sites;
page_path: string;
session_id?: string;
timestamp?: string;
}
export interface Conversions {
id: string;
site_id: string | Sites;
lead?: string | Leads;
conversion_type: string;
value?: number;
}
export interface LocationsStates {
id: string;
name: string;
code: string;
}
export interface LocationsCities {
id: string;
name: string;
state: string | LocationsStates;
population?: number;
}
export interface LocationsCounties {
id: string;
name: string;
state: string | LocationsStates;
population?: number;
}
// ============================================================================
// HELPER TYPES
// ============================================================================
export type Collections = keyof DirectusSchema;
export type Item<Collection extends Collections> = DirectusSchema[Collection];
export type QueryFilter<Collection extends Collections> = Partial<Item<Collection>>;