mattermost-mobile/app/database/models/server/channel_bookmark.ts
2024-02-05 17:07:01 +08:00

115 lines
4.1 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {field, immutableRelation} from '@nozbe/watermelondb/decorators';
import Model, {type Associations} from '@nozbe/watermelondb/Model';
import {MM_TABLES} from '@constants/database';
import type {Relation} from '@nozbe/watermelondb';
import type ChannelModel from '@typings/database/models/servers/channel';
import type ChannelBookmarkInterface from '@typings/database/models/servers/channel_bookmark';
import type FileModel from '@typings/database/models/servers/file';
import type UserModel from '@typings/database/models/servers/user';
const {
CHANNEL,
CHANNEL_BOOKMARK,
FILE,
USER,
} = MM_TABLES.SERVER;
/**
* The Channel model represents a channel in the Mattermost app.
*/
export default class ChannelBookmarkModel extends Model implements ChannelBookmarkInterface {
/** table (name) : Channel */
static table = CHANNEL_BOOKMARK;
/** associations : Describes every relationship to this table. */
static associations: Associations = {
/** A CHANNEL can be associated to CHANNEL_BOOKMARK (relationship is 1:N) */
[CHANNEL]: {type: 'belongs_to', key: 'channel_id'},
/** A USER can create multiple CHANNEL_BOOKMARK (relationship is 1:N) */
[USER]: {type: 'belongs_to', key: 'owner_id'},
/** A FILE is associated with one CHANNEL_BOOKMARK**/
[FILE]: {type: 'has_many', foreignKey: 'file_id'},
};
/** create_at : The creation date for this channel bookmark */
@field('create_at') createAt!: number;
/** update_at : The timestamp to when this channel bookmark was last updated on the server */
@field('update_at') updateAt!: number;
/** delete_at : The deletion/archived date of this channel bookmark */
@field('delete_at') deleteAt!: number;
/** channel_id : The channel to which this bookmarks belongs */
@field('channel_id') channelId!: string;
/** owner_id : The user who created this channel bookmark */
@field('owner_id') ownerId!: string;
/** file_id : The file attached this channel bookmark */
@field('file_id') fileId?: string;
/** display_name : The channel bookmark display name (e.g. Important document ) */
@field('display_name') displayName!: string;
/** sort_order : the order in which the bookmark is displayed in the UI. */
@field('sort_order') sortOrder!: number;
/** link_url : The channel bookmark url if of type link */
@field('link_url') linkUrl?: string;
/** image_url : The channel bookmark image url if of type link (optional) */
@field('image_url') imageUrl?: string;
/** emoji : The channel bookmark emoji (optional) */
@field('emoji') emoji?: string;
/** type : The channel bookmark type it can be link or file */
@field('type') type!: ChannelBookmarkType;
/** original_id : The channel bookmark original identifier before it was edited */
@field('original_id') originalId?: string;
/** parent_id : The channel bookmark parent in case is nested */
@field('parent_id') parentId?: string;
/** channel : The CHANNEL to which this CHANNEL_BOOKMARK belongs */
@immutableRelation(CHANNEL, 'channel_id') channel!: Relation<ChannelModel>;
/** creator : The USER who created this CHANNEL_BOOKMARK */
@immutableRelation(USER, 'owner_id') owner!: Relation<UserModel>;
/** file : The FILE attached to this CHANNEL_BOOKMARK */
@immutableRelation(FILE, 'file_id') file!: Relation<FileModel>;
toApi = () => {
const b: ChannelBookmark = {
id: this.id,
create_at: this.createAt,
update_at: this.updateAt,
delete_at: this.deleteAt,
channel_id: this.channelId,
owner_id: this.ownerId,
file_id: this.fileId,
display_name: this.displayName,
sort_order: this.sortOrder,
link_url: this.linkUrl,
image_url: this.imageUrl,
emoji: this.emoji,
type: this.type,
original_id: this.originalId,
parent_id: this.parentId,
};
return b;
};
}