Database models
Database models of channel
Channels
channels
The main channel table, this table should only be used when changing things on the channel (not frequently) so we don't add counters or last_activity or anything like that.
{
//Primary key
"company_id": "uuid-v4",
"workspace_id": "string" // ("uuid-v4" | "direct")
"id": "uuid-v4",
//Content
"owner": "uuid-v4", //User-id of the channel owner (invisible but used on some access restriction-
"icon": "String",
"name": "String",
"description": "String",
"channel_group": "String",
"visibility": "private" | "public" | "direct"
"default": true | false, //The new members join by default this channel
"archived": false | true,
"archivation_date": 0, //Timestamp
}
channel_defaults
Contain the default channels
{
//Primary key
"company_id": "uuid-v4",
"workspace_id": "uuid-v4"
"id": "uuid-v4" //Channel id
}
channel_counters
We use a separated table to manage counters for this channel. Currently this is not used to do statistics but can be used to this goal in the future.
{
//Primary key
"company_id": "uuid-v4",
"workspace_id": "string", // "uuid-v4" | "direct"
"channel_id": "uuid-v4",
"type": "members" | "guests" | "messages",
"value": 0,
}
channel_last_activity
Store last channel activity for bold/not bold management
{
//Primary key
"company_id": "uuid-v4",
"channel_id": "uuid-v4",
"last_activity": 0, //Timestamp in seconds
}
direct_channel_identifiers
This table is used to find an existing discussion with a group of members. The "identifier" is generated from the group of members.
{
//Primary key
"company_id": "uuid-v4",
"identifier": "string", // ordered CSV list of user ids
"channel_id": "uuid-v4" //A way to find it in the channel table
}
Channels tabs
channel_tabs
Channels can have tabs that are connexion to other apps or different views.
{
//Primary key
"company_id": "uuid-v4",
"workspace_id": "string", // "uuid-v4" | "direct"
"channel_id": "uuid-v4",
"tab_id": "uuid-v4",
"name": "String",
"configuration": JSON,
"application_id": "uuid-v4",
"owner": "uuid-v4",
"order": "string"
}
Channels members
channel_members
List of channels for an user
{
//Primary key
"company_id": "uuid-v4", //Partition Key
"workspace_id": "string", // "uuid-v4" | "direct", //Clustering key
"user_id": "uuid-v4",
"channel_id": "uuid-v4",
"type": "member" | "guest" | "bot",
"last_access": 0, //Timestamp in seconds
"last_increment": 0, //Number
"favorite": false | true, //Did the user add this channel to its favorites
"notification_level": "all" | "none" | "group_mentions" | "user_mentions",
"expiration": false | Timestamp, //Member expiration in channel (only for guests)
}
channel_members_reversed
List of users in channel
Not implemented: We need to ensure this replication regularly (on each user open channel) ?
{
//Primary key
"company_id": "uuid-v4",
"workspace_id": "string", // "uuid-v4" | "direct",
"channel_id": "uuid-v4",
"type": "guest" | "bot" | "member",
"user_id": "uuid-v4",
}
Last updated
Was this helpful?