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