config: yaml,packages,entities (11 files)

This commit is contained in:
Richard Ward
2025-12-30 22:09:26 +00:00
parent 048f3c7e19
commit 667e92a20b
11 changed files with 1537 additions and 0 deletions

View File

@@ -0,0 +1,166 @@
# Arcade Lobby Schema Definitions
# Package: arcade_lobby
# Version: 1.0.0
entities:
- name: Game
description: Game definition for the arcade lobby
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: name
type: String
required: true
- name: slug
type: String
required: true
- name: description
type: String
required: false
- name: thumbnail
type: String
required: false
- name: category
type: String
required: true
- name: minPlayers
type: Int
required: true
default: 1
- name: maxPlayers
type: Int
required: true
default: 1
- name: config
type: Json
required: false
description: Game-specific configuration
- name: isActive
type: Boolean
required: true
default: true
- name: playCount
type: Int
required: true
default: 0
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: game_tenant_slug_idx
fields: [tenantId, slug]
unique: true
- name: game_tenant_category_idx
fields: [tenantId, category]
acl:
create: [admin]
read: [public]
update: [admin]
delete: [admin]
- name: LeaderboardEntry
description: High score entry for a game
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: gameId
type: String
required: true
- name: userId
type: String
required: true
- name: username
type: String
required: true
- name: score
type: Int
required: true
- name: metadata
type: Json
required: false
description: Game-specific score metadata
- name: submittedAt
type: DateTime
required: true
indexes:
- name: leaderboard_game_score_idx
fields: [gameId, score]
- name: leaderboard_game_user_idx
fields: [gameId, userId]
relations:
- name: game
type: belongsTo
target: Game
foreignKey: gameId
acl:
create: [user]
read: [public]
update: [none]
delete: [admin]
- name: GameSession
description: Multiplayer game session/lobby
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: gameId
type: String
required: true
- name: hostId
type: String
required: true
- name: status
type: String
required: true
description: waiting, playing, finished
- name: maxPlayers
type: Int
required: true
- name: currentPlayers
type: Int
required: true
default: 1
- name: players
type: Json
required: true
description: Array of player user IDs
- name: createdAt
type: DateTime
required: true
- name: startedAt
type: DateTime
required: false
- name: endedAt
type: DateTime
required: false
indexes:
- name: session_game_status_idx
fields: [gameId, status]
relations:
- name: game
type: belongsTo
target: Game
foreignKey: gameId
acl:
create: [user]
read: [user]
update: [owner, admin]
delete: [owner, admin]

View File

@@ -0,0 +1,163 @@
# Code Editor Schema Definitions
# Package: code_editor
# Version: 1.0.0
entities:
- name: CodeSnippet
description: Saved code snippet
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: userId
type: String
required: true
- name: title
type: String
required: true
- name: language
type: String
required: true
- name: code
type: String
required: true
- name: description
type: String
required: false
- name: tags
type: Json
required: false
description: Array of tag strings
- name: isPublic
type: Boolean
required: true
default: false
- name: version
type: Int
required: true
default: 1
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: snippet_tenant_user_idx
fields: [tenantId, userId]
- name: snippet_tenant_public_idx
fields: [tenantId, isPublic]
- name: snippet_language_idx
fields: [language]
acl:
create: [user]
read: [owner, public_if_public, admin]
update: [owner]
delete: [owner, admin]
- name: EditorSession
description: Saved editor session state
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: userId
type: String
required: true
- name: name
type: String
required: true
- name: files
type: Json
required: true
description: Array of open file states
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: session_tenant_user_name_idx
fields: [tenantId, userId, name]
unique: true
acl:
create: [user]
read: [owner]
update: [owner]
delete: [owner]
- name: FileRevision
description: File revision history
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: filePath
type: String
required: true
- name: content
type: String
required: true
- name: userId
type: String
required: true
- name: message
type: String
required: false
- name: createdAt
type: DateTime
required: true
indexes:
- name: revision_tenant_file_idx
fields: [tenantId, filePath]
acl:
create: [user]
read: [user, admin]
update: [none]
delete: [admin]
- name: LanguageConfig
description: Language-specific editor configuration
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: language
type: String
required: true
- name: config
type: Json
required: true
description: Language-specific settings
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: lang_config_tenant_lang_idx
fields: [tenantId, language]
unique: true
acl:
create: [admin]
read: [user, admin]
update: [admin]
delete: [admin]

View File

@@ -0,0 +1,191 @@
# Codegen Studio Schema Definitions
# Package: codegen_studio
# Version: 1.0.0
entities:
- name: CodegenProject
description: Code generation project
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: name
type: String
required: true
- name: description
type: String
required: false
- name: language
type: String
required: true
description: Target language (typescript, python, lua, etc.)
- name: framework
type: String
required: false
description: Target framework
- name: config
type: Json
required: false
description: Project configuration
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: project_tenant_name_idx
fields: [tenantId, name]
acl:
create: [user]
read: [user, admin]
update: [owner, admin]
delete: [owner, admin]
- name: CodegenBlueprint
description: Code generation blueprint/template definition
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: projectId
type: String
required: true
- name: name
type: String
required: true
- name: type
type: String
required: true
description: entity, component, service, api, etc.
- name: spec
type: Json
required: true
description: Blueprint specification
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: blueprint_project_idx
fields: [projectId]
- name: blueprint_tenant_type_idx
fields: [tenantId, type]
relations:
- name: project
type: belongsTo
target: CodegenProject
foreignKey: projectId
acl:
create: [user]
read: [user, admin]
update: [owner, admin]
delete: [owner, admin]
- name: CodegenTemplate
description: Code generation template
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: name
type: String
required: true
- name: language
type: String
required: true
- name: type
type: String
required: true
description: Template type (entity, component, etc.)
- name: template
type: String
required: true
description: Template content with placeholders
- name: variables
type: Json
required: false
description: Available template variables
- name: isBuiltin
type: Boolean
required: true
default: false
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: template_tenant_lang_type_idx
fields: [tenantId, language, type]
acl:
create: [admin]
read: [user, admin]
update: [admin]
delete: [admin]
- name: CodegenGeneration
description: Code generation execution record
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: projectId
type: String
required: true
- name: blueprintId
type: String
required: false
- name: templateId
type: String
required: false
- name: input
type: Json
required: true
description: Generation input parameters
- name: output
type: String
required: false
description: Generated code
- name: status
type: String
required: true
description: pending, completed, failed
- name: error
type: String
required: false
- name: createdAt
type: DateTime
required: true
indexes:
- name: generation_project_idx
fields: [projectId]
relations:
- name: project
type: belongsTo
target: CodegenProject
foreignKey: projectId
acl:
create: [user]
read: [owner, admin]
update: [none]
delete: [owner, admin]

View File

@@ -0,0 +1,138 @@
# CSS Designer Schema Definitions
# Package: css_designer
# Version: 1.0.0
entities:
- name: Theme
description: Theme definition with CSS variables
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: name
type: String
required: true
- name: baseTheme
type: String
required: false
description: Parent theme (light, dark, or theme ID)
- name: variables
type: Json
required: true
description: CSS variable definitions
- name: metadata
type: Json
required: false
- name: isActive
type: Boolean
required: true
default: true
- name: version
type: Int
required: true
default: 1
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: theme_tenant_name_idx
fields: [tenantId, name]
unique: true
acl:
create: [moderator, admin]
read: [user, admin]
update: [moderator, admin]
delete: [admin]
- name: StyleComponent
description: Reusable style component definition
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: themeId
type: String
required: false
description: Associated theme (null for global)
- name: name
type: String
required: true
- name: selector
type: String
required: true
description: CSS selector
- name: styles
type: Json
required: true
description: CSS property-value pairs
- name: variants
type: Json
required: false
description: Pseudo-class/state variants
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: style_tenant_theme_idx
fields: [tenantId, themeId]
- name: style_tenant_name_idx
fields: [tenantId, name]
relations:
- name: theme
type: belongsTo
target: Theme
foreignKey: themeId
acl:
create: [moderator, admin]
read: [user, admin]
update: [moderator, admin]
delete: [admin]
- name: ThemePreset
description: Saved theme preset for quick application
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: name
type: String
required: true
- name: description
type: String
required: false
- name: variables
type: Json
required: true
- name: baseTheme
type: String
required: false
- name: createdAt
type: DateTime
required: true
indexes:
- name: preset_tenant_name_idx
fields: [tenantId, name]
unique: true
acl:
create: [moderator, admin]
read: [user, admin]
update: [admin]
delete: [admin]

View File

@@ -0,0 +1,89 @@
# Dashboard Schema Definitions
# Package: dashboard
# Version: 1.0.0
entities:
- name: DashboardLayout
description: User or tenant dashboard layout configuration
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: userId
type: String
required: false
description: If null, this is a tenant-wide layout
- name: name
type: String
required: true
- name: widgets
type: Json
required: true
description: Array of widget configurations with positions
- name: settings
type: Json
required: false
description: Layout-specific settings
- name: isDefault
type: Boolean
required: true
default: false
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: dashboard_tenant_user_idx
fields: [tenantId, userId]
- name: dashboard_tenant_name_idx
fields: [tenantId, name]
unique: true
acl:
create: [user, admin]
read: [user, admin]
update: [owner, admin]
delete: [owner, admin]
- name: WidgetCache
description: Cached data for dashboard widgets
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: cacheKey
type: String
required: true
- name: widgetType
type: String
required: true
- name: data
type: Json
required: true
- name: expiresAt
type: DateTime
required: false
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: widget_cache_tenant_key_idx
fields: [tenantId, cacheKey]
unique: true
acl:
create: [system]
read: [user, admin]
update: [system]
delete: [system]

View File

@@ -0,0 +1,75 @@
# Data Table Schema Definitions
# Package: data_table
# Version: 1.0.0
entities:
- name: TableConfig
description: Table display configuration
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: tableKey
type: String
required: true
description: Unique identifier for the table
- name: config
type: Json
required: true
description: Column definitions, filters, default sort
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: table_config_tenant_key_idx
fields: [tenantId, tableKey]
unique: true
acl:
create: [admin]
read: [user, admin]
update: [admin]
delete: [admin]
- name: UserTablePreference
description: User-specific table preferences
fields:
- name: id
type: String
required: true
primary: true
- name: userId
type: String
required: true
- name: tableKey
type: String
required: true
- name: columns
type: Json
required: false
description: Visible columns in order
- name: columnWidths
type: Json
required: false
description: Column width preferences
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: user_pref_user_table_idx
fields: [userId, tableKey]
unique: true
acl:
create: [user]
read: [owner]
update: [owner]
delete: [owner]

View File

@@ -0,0 +1,118 @@
# Form Builder Schema Definitions
# Package: form_builder
# Version: 1.0.0
entities:
- name: Form
description: Form definition with fields and validation
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: name
type: String
required: true
- name: description
type: String
required: false
- name: fields
type: Json
required: true
description: Array of field definitions
- name: settings
type: Json
required: false
description: Form-level settings
- name: validationRules
type: Json
required: false
description: Custom validation rules
- name: isActive
type: Boolean
required: true
default: true
- name: version
type: Int
required: true
default: 1
- name: submissionCount
type: Int
required: true
default: 0
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: form_tenant_name_idx
fields: [tenantId, name]
- name: form_tenant_active_idx
fields: [tenantId, isActive]
acl:
create: [moderator, admin]
read: [user, admin]
update: [moderator, admin]
delete: [admin]
- name: FormSubmission
description: Submitted form response
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: formId
type: String
required: true
- name: userId
type: String
required: false
description: Null for anonymous submissions
- name: data
type: Json
required: true
description: Submitted form data
- name: metadata
type: Json
required: false
description: Submission metadata (IP, user agent, etc.)
- name: status
type: String
required: true
default: submitted
description: submitted, reviewed, approved, rejected
- name: reviewNotes
type: String
required: false
- name: reviewedAt
type: DateTime
required: false
- name: submittedAt
type: DateTime
required: true
indexes:
- name: submission_form_idx
fields: [formId]
- name: submission_form_status_idx
fields: [formId, status]
- name: submission_user_idx
fields: [userId]
relations:
- name: form
type: belongsTo
target: Form
foreignKey: formId
acl:
create: [public, user]
read: [owner, moderator, admin]
update: [moderator, admin]
delete: [admin]

View File

@@ -0,0 +1,141 @@
# Package Validator Schema Definitions
# Package: package_validator
# Version: 1.0.0
entities:
- name: ValidationRun
description: Package validation execution record
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: packageName
type: String
required: true
- name: packageVersion
type: String
required: false
- name: status
type: String
required: true
description: pending, running, completed, failed
- name: results
type: Json
required: false
description: Validation results summary
- name: startedAt
type: DateTime
required: true
- name: completedAt
type: DateTime
required: false
indexes:
- name: validation_tenant_package_idx
fields: [tenantId, packageName]
- name: validation_status_idx
fields: [status]
acl:
create: [system, admin]
read: [user, admin]
update: [system]
delete: [admin]
- name: ValidationIssue
description: Individual validation issue/warning
fields:
- name: id
type: String
required: true
primary: true
- name: runId
type: String
required: true
- name: severity
type: String
required: true
description: error, warning, info
- name: code
type: String
required: true
description: Issue code for categorization
- name: message
type: String
required: true
- name: file
type: String
required: false
- name: line
type: Int
required: false
- name: suggestion
type: String
required: false
- name: createdAt
type: DateTime
required: true
indexes:
- name: issue_run_idx
fields: [runId]
- name: issue_severity_idx
fields: [runId, severity]
relations:
- name: run
type: belongsTo
target: ValidationRun
foreignKey: runId
acl:
create: [system]
read: [user, admin]
update: [none]
delete: [admin]
- name: ValidationRule
description: Custom validation rule definition
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: name
type: String
required: true
- name: code
type: String
required: true
description: Unique rule code
- name: severity
type: String
required: true
- name: description
type: String
required: true
- name: check
type: String
required: true
description: Lua function body for validation
- name: enabled
type: Boolean
required: true
default: true
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: rule_tenant_code_idx
fields: [tenantId, code]
unique: true
acl:
create: [admin]
read: [user, admin]
update: [admin]
delete: [admin]

View File

@@ -0,0 +1,90 @@
# Schema Editor Schema Definitions
# Package: schema_editor
# Version: 1.0.0
entities:
- name: EntitySchema
description: Dynamic entity schema definition
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: name
type: String
required: true
description: Entity name
- name: fields
type: Json
required: true
description: Array of field definitions
- name: indexes
type: Json
required: false
description: Array of index definitions
- name: relations
type: Json
required: false
description: Array of relation definitions
- name: acl
type: Json
required: false
description: Access control rules
- name: version
type: Int
required: true
default: 1
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: entity_schema_tenant_name_idx
fields: [tenantId, name]
unique: true
acl:
create: [admin]
read: [admin]
update: [admin]
delete: [admin]
- name: SchemaVersion
description: Schema version history for rollback
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: entityName
type: String
required: true
- name: version
type: Int
required: true
- name: snapshot
type: Json
required: true
description: Complete schema snapshot
- name: changeNote
type: String
required: false
- name: createdAt
type: DateTime
required: true
indexes:
- name: schema_version_entity_idx
fields: [tenantId, entityName, version]
unique: true
acl:
create: [system]
read: [admin]
update: [none]
delete: [admin]

View File

@@ -0,0 +1,202 @@
# Screenshot Analyzer Schema Definitions
# Package: screenshot_analyzer
# Version: 1.0.0
entities:
- name: Screenshot
description: Uploaded screenshot for analysis
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: userId
type: String
required: true
- name: url
type: String
required: true
description: Image URL or base64 data
- name: filename
type: String
required: false
- name: metadata
type: Json
required: false
description: Image dimensions, format, etc.
- name: status
type: String
required: true
default: uploaded
description: uploaded, analyzing, analyzed, failed
- name: createdAt
type: DateTime
required: true
indexes:
- name: screenshot_tenant_user_idx
fields: [tenantId, userId]
- name: screenshot_status_idx
fields: [status]
acl:
create: [user]
read: [owner, admin]
update: [owner, admin]
delete: [owner, admin]
- name: ScreenshotAnalysis
description: Analysis result for a screenshot
fields:
- name: id
type: String
required: true
primary: true
- name: screenshotId
type: String
required: true
- name: analysisType
type: String
required: true
description: component, color, layout, accessibility
- name: result
type: Json
required: true
description: Analysis result data
- name: confidence
type: Float
required: false
- name: createdAt
type: DateTime
required: true
indexes:
- name: analysis_screenshot_idx
fields: [screenshotId]
- name: analysis_type_idx
fields: [screenshotId, analysisType]
relations:
- name: screenshot
type: belongsTo
target: Screenshot
foreignKey: screenshotId
acl:
create: [system]
read: [owner, admin]
update: [none]
delete: [admin]
- name: DetectedComponent
description: UI component detected in screenshot
fields:
- name: id
type: String
required: true
primary: true
- name: analysisId
type: String
required: true
- name: componentType
type: String
required: true
description: button, input, card, etc.
- name: bounds
type: Json
required: true
description: x, y, width, height
- name: confidence
type: Float
required: true
- name: properties
type: Json
required: false
description: Detected properties (color, text, etc.)
- name: createdAt
type: DateTime
required: true
indexes:
- name: component_analysis_idx
fields: [analysisId]
relations:
- name: analysis
type: belongsTo
target: ScreenshotAnalysis
foreignKey: analysisId
acl:
create: [system]
read: [owner, admin]
update: [none]
delete: [admin]
- name: ColorPalette
description: Extracted color palette from screenshot
fields:
- name: id
type: String
required: true
primary: true
- name: analysisId
type: String
required: true
- name: colors
type: Json
required: true
description: Array of color objects
- name: dominantColor
type: String
required: false
- name: createdAt
type: DateTime
required: true
indexes:
- name: palette_analysis_idx
fields: [analysisId]
relations:
- name: analysis
type: belongsTo
target: ScreenshotAnalysis
foreignKey: analysisId
acl:
create: [system]
read: [owner, admin]
update: [none]
delete: [admin]
- name: GeneratedCode
description: Code generated from screenshot analysis
fields:
- name: id
type: String
required: true
primary: true
- name: screenshotId
type: String
required: true
- name: framework
type: String
required: true
description: react, vue, html, qml
- name: code
type: String
required: true
- name: metadata
type: Json
required: false
- name: createdAt
type: DateTime
required: true
indexes:
- name: generated_screenshot_idx
fields: [screenshotId]
- name: generated_framework_idx
fields: [screenshotId, framework]
relations:
- name: screenshot
type: belongsTo
target: Screenshot
foreignKey: screenshotId
acl:
create: [system]
read: [owner, admin]
update: [none]
delete: [owner, admin]

View File

@@ -0,0 +1,164 @@
# Social Hub Schema Definitions
# Package: social_hub
# Version: 1.0.0
entities:
- name: SocialProfile
description: User social profile
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: userId
type: String
required: true
- name: displayName
type: String
required: true
- name: bio
type: String
required: false
- name: avatar
type: String
required: false
- name: links
type: Json
required: false
description: Social media links
- name: settings
type: Json
required: false
description: Privacy settings
- name: createdAt
type: DateTime
required: true
- name: updatedAt
type: DateTime
required: true
indexes:
- name: profile_tenant_user_idx
fields: [tenantId, userId]
unique: true
acl:
create: [user]
read: [public]
update: [owner]
delete: [owner, admin]
- name: SocialConnection
description: Follow relationship between users
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: followerId
type: String
required: true
description: User doing the following
- name: followingId
type: String
required: true
description: User being followed
- name: createdAt
type: DateTime
required: true
indexes:
- name: connection_follower_idx
fields: [tenantId, followerId]
- name: connection_following_idx
fields: [tenantId, followingId]
- name: connection_unique_idx
fields: [tenantId, followerId, followingId]
unique: true
acl:
create: [user]
read: [user]
update: [none]
delete: [owner]
- name: SocialActivity
description: User activity feed item
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: userId
type: String
required: true
- name: type
type: String
required: true
description: post, like, comment, follow, etc.
- name: content
type: String
required: false
- name: targetId
type: String
required: false
description: Reference to target object
- name: targetType
type: String
required: false
description: Type of target object
- name: metadata
type: Json
required: false
- name: createdAt
type: DateTime
required: true
indexes:
- name: activity_tenant_user_idx
fields: [tenantId, userId]
- name: activity_created_idx
fields: [tenantId, createdAt]
acl:
create: [user]
read: [user]
update: [none]
delete: [owner, admin]
- name: SocialLike
description: Like on content
fields:
- name: id
type: String
required: true
primary: true
- name: tenantId
type: String
required: true
- name: userId
type: String
required: true
- name: targetId
type: String
required: true
- name: targetType
type: String
required: true
- name: createdAt
type: DateTime
required: true
indexes:
- name: like_target_idx
fields: [tenantId, targetId]
- name: like_user_target_idx
fields: [tenantId, userId, targetId]
unique: true
acl:
create: [user]
read: [user]
update: [none]
delete: [owner]