config: yaml,shared,dbal (2 files)

This commit is contained in:
Richard Ward
2025-12-30 21:27:49 +00:00
parent 3e1e351d56
commit 78b9ff896f
2 changed files with 540 additions and 0 deletions

View File

@@ -0,0 +1,249 @@
entity: IRCChannel
version: "1.0"
description: "IRC-style chat channel"
package: irc_webchat
fields:
id:
type: cuid
primary: true
generated: true
description: "Unique channel identifier"
tenantId:
type: uuid
required: true
index: true
description: "Tenant this channel belongs to"
name:
type: string
required: true
max_length: 50
pattern: "^#[a-zA-Z0-9_-]+$"
description: "Channel name (e.g., #general)"
topic:
type: string
nullable: true
max_length: 500
description: "Channel topic"
description:
type: string
nullable: true
description: "Channel description"
mode:
type: enum
required: true
values: [public, private, secret]
default: public
description: "Channel visibility mode"
password:
type: string
nullable: true
description: "Password for private channels"
maxUsers:
type: integer
nullable: true
description: "Maximum users limit"
slowMode:
type: integer
nullable: true
description: "Seconds between messages"
isDefault:
type: boolean
default: false
index: true
description: "Whether users auto-join this channel"
createdAt:
type: bigint
required: true
description: "Creation timestamp"
createdBy:
type: uuid
nullable: true
description: "Creator user ID"
indexes:
- fields: [tenantId, name]
unique: true
name: tenant_name
acl:
create:
moderator: true
read:
user: true
update:
moderator: true
delete:
admin: true
---
entity: IRCMessage
version: "1.0"
description: "IRC chat message"
package: irc_webchat
fields:
id:
type: cuid
primary: true
generated: true
description: "Unique message identifier"
tenantId:
type: uuid
required: true
description: "Tenant this message belongs to"
channelId:
type: cuid
required: true
index: true
description: "Channel this message belongs to"
userId:
type: uuid
required: true
index: true
description: "User who sent the message"
username:
type: string
required: true
description: "Username at time of message"
type:
type: enum
required: true
values: [message, action, notice, system, join, part, kick, ban]
default: message
description: "Message type"
content:
type: string
required: true
description: "Message content"
isCommand:
type: boolean
default: false
description: "Whether message was a command"
metadata:
type: json
nullable: true
description: "Additional data (mentions, links, etc.)"
createdAt:
type: bigint
required: true
index: true
description: "Message timestamp"
indexes:
- fields: [channelId, createdAt]
name: channel_time
acl:
create:
user: true
read:
user: true
update:
supergod: true
delete:
moderator: true
---
entity: IRCMembership
version: "1.0"
description: "User membership in an IRC channel"
package: irc_webchat
fields:
id:
type: cuid
primary: true
generated: true
description: "Unique membership identifier"
channelId:
type: cuid
required: true
index: true
description: "Channel ID"
userId:
type: uuid
required: true
index: true
description: "User ID"
username:
type: string
required: true
description: "Username"
role:
type: enum
required: true
values: [user, voice, halfop, op, admin, owner]
default: user
description: "User role in channel"
joinedAt:
type: bigint
required: true
description: "Join timestamp"
lastActive:
type: bigint
nullable: true
description: "Last activity timestamp"
isBanned:
type: boolean
default: false
description: "Whether user is banned"
isKicked:
type: boolean
default: false
description: "Whether user was kicked"
kickReason:
type: string
nullable: true
description: "Reason for kick"
metadata:
type: json
nullable: true
description: "User preferences in channel"
indexes:
- fields: [channelId, userId]
unique: true
name: channel_user
acl:
create:
user: true
read:
user: true
update:
moderator: true
delete:
moderator: true

View File

@@ -0,0 +1,291 @@
entity: StreamChannel
version: "1.0"
description: "Live streaming channel"
package: stream_cast
fields:
id:
type: cuid
primary: true
generated: true
description: "Unique stream channel identifier"
tenantId:
type: uuid
required: true
index: true
description: "Tenant this channel belongs to"
name:
type: string
required: true
max_length: 100
description: "Channel name"
slug:
type: string
required: true
pattern: "^[a-z0-9-]+$"
description: "URL-friendly slug"
description:
type: string
nullable: true
description: "Channel description"
thumbnail:
type: string
nullable: true
description: "Thumbnail image path"
category:
type: string
nullable: true
index: true
description: "Content category"
status:
type: enum
required: true
values: [offline, live, scheduled]
default: offline
index: true
description: "Current stream status"
viewerCount:
type: integer
default: 0
description: "Current viewer count"
streamKey:
type: string
nullable: true
unique: true
description: "Secret stream key"
rtmpUrl:
type: string
nullable: true
description: "RTMP ingest URL"
hlsUrl:
type: string
nullable: true
description: "HLS playback URL"
chatEnabled:
type: boolean
default: true
description: "Whether chat is enabled"
isPublic:
type: boolean
default: true
description: "Whether channel is publicly visible"
isMature:
type: boolean
default: false
description: "Whether content is mature"
metadata:
type: json
nullable: true
description: "Additional data (bitrate, resolution, etc.)"
createdAt:
type: bigint
required: true
description: "Creation timestamp"
updatedAt:
type: bigint
nullable: true
description: "Last update timestamp"
createdBy:
type: uuid
required: true
description: "Channel owner"
indexes:
- fields: [tenantId, slug]
unique: true
name: tenant_slug
- fields: [status, viewerCount]
name: live_popular
acl:
create:
user: true
read:
public: true
update:
self: true
row_level: "createdBy = $user.id"
admin: true
delete:
self: true
row_level: "createdBy = $user.id"
admin: true
---
entity: StreamSchedule
version: "1.0"
description: "Scheduled stream event"
package: stream_cast
fields:
id:
type: cuid
primary: true
generated: true
description: "Unique schedule identifier"
channelId:
type: cuid
required: true
index: true
description: "Parent channel"
title:
type: string
required: true
max_length: 200
description: "Stream title"
description:
type: string
nullable: true
description: "Stream description"
startTime:
type: bigint
required: true
index: true
description: "Scheduled start timestamp"
endTime:
type: bigint
nullable: true
description: "Expected end timestamp"
duration:
type: integer
nullable: true
description: "Expected duration in minutes"
isRecurring:
type: boolean
default: false
description: "Whether schedule repeats"
recurrence:
type: json
nullable: true
description: "Recurrence rule (cron/rrule)"
notifyAt:
type: bigint
nullable: true
description: "Notification timestamp"
metadata:
type: json
nullable: true
description: "Additional data (guests, topics, etc.)"
createdAt:
type: bigint
required: true
description: "Creation timestamp"
indexes:
- fields: [channelId, startTime]
name: channel_time
acl:
create:
user: true
read:
public: true
update:
self: true
admin: true
delete:
self: true
admin: true
---
entity: StreamScene
version: "1.0"
description: "Stream scene/layout configuration"
package: stream_cast
fields:
id:
type: cuid
primary: true
generated: true
description: "Unique scene identifier"
channelId:
type: cuid
required: true
index: true
description: "Parent channel"
name:
type: string
required: true
max_length: 100
description: "Scene name"
layout:
type: json
required: true
description: "Scene layout composition"
sources:
type: json
required: true
description: "Media sources (cameras, screens, overlays)"
transitions:
type: json
nullable: true
description: "Scene transitions"
isActive:
type: boolean
default: false
index: true
description: "Whether scene is currently active"
sortOrder:
type: integer
default: 0
description: "Display order"
createdAt:
type: bigint
required: true
description: "Creation timestamp"
indexes:
- fields: [channelId, isActive]
name: channel_active
acl:
create:
user: true
read:
user: true
update:
self: true
admin: true
delete:
self: true
admin: true