Files
metabuilder/dbal/shared/api/schema/entities/packages/irc.yaml
2025-12-30 21:27:49 +00:00

250 lines
4.6 KiB
YAML

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