/* * Copyright ©️ 2018 Galt•Space Society Construction and Terraforming Company * (Founded by [Nikolai Popeka](https://github.com/npopeka), * [Dima Starodubcev](https://github.com/xhipster), * [Valery Litvin](https://github.com/litvintech) by * [Basic Agreement](http://cyb.ai/QmSAWEG5u5aSsUyMNYuX2A2Eaz4kEuoYWUkVBRdmu9qmct:ipfs)). * * Copyright ©️ 2018 Galt•Core Blockchain Company * (Founded by [Nikolai Popeka](https://github.com/npopeka) and * Galt•Space Society Construction and Terraforming Company by * [Basic Agreement](http://cyb.ai/QmaCiXUmSrP16Gz8Jdzq6AJESY1EAANmmwha15uR3c1bsS:ipfs)). */ export interface IDatabase { getSessionStore(): any; flushDatabase(): Promise; addApiKey(apiKey): Promise; getApiKeyByHash(valueHash: string): Promise; getApiKeysByUser(userId: number, isDisabled?: boolean, search?: string, listParams?: IListParams): Promise; getApiKeysCountByUser(userId: number, isDisabled?: boolean, search?: string): Promise; updateUser(id, updateData: any): Promise; addContent(content: IContent): Promise; updateContent(id, updateData: any): Promise; deleteContent(id): Promise; getContentList(accountAddress, listParams?: IListParams): Promise; getContent(id): Promise; getContentByStorageId(storageId): Promise; getContentByManifestId(manifestId): Promise; addPost(post: IPost): Promise; updatePost(id, updateData: any): Promise; getPostSizeSum(id): Promise; setPostContents(postId, contentsIds): Promise; getUsersCount(): Promise; addUser(user: IUser): Promise; getUserByName(name): Promise; getUserByNameOrEmail(nameOrEmail): Promise; getUser(id): Promise; getGroup(id): Promise; getGroupByManifestId(manifestId, staticManifestId): Promise; getGroupWhereStaticOutdated(outdatedForHours): Promise; getRemoteGroups(): Promise; addGroup(group): Promise; updateGroup(id, updateData): Promise; addMemberToGroup(userId, groupId): Promise; removeMemberFromGroup(userId, groupId): Promise; getMemberInGroups(userId): Promise; addAdminToGroup(userId, groupId): Promise; removeAdminFromGroup(userId, groupId): Promise; getAdminInGroups(userId): Promise; getGroupSizeSum(id): Promise; addCorePermission(userId, permissionName): Promise; removeCorePermission(userId, permissionName): Promise; isHaveCorePermission(userId, permissionName): Promise; isAdminInGroup(userId, groupId): Promise; isMemberInGroup(userId, groupId): Promise; getGroupPosts(groupId, listParams?: IListParams): Promise; getPost(postId): Promise; getFileCatalogItem(itemId): Promise; getFileCatalogItemByDefaultFolderFor(userId, defaultFolderFor): Promise; getFileCatalogItems(userId, parentItemId, type?, search?, listParams?: IListParams): Promise; getFileCatalogItemsByContent(userId, contentId, type?, listParams?: IListParams): Promise; getFileCatalogItemsBreadcrumbs(itemId): Promise; getFileCatalogItemsCount(userId, parentItemId, type?, search?): Promise; isFileCatalogItemExistWithContent(userId, parentItemId, contentId): Promise; getContentsIdsByFileCatalogIds(catalogIds): Promise; addFileCatalogItem(item: IFileCatalogItem): Promise; updateFileCatalogItem(id, updateData): Promise; getFileCatalogItemsSizeSum(parentItemId): Promise; getAllUserList(searchString, listParams?: IListParams): Promise; getAllContentList(searchString, listParams?: IListParams): Promise; getAllGroupList(searchString, listParams?: IListParams): Promise; addUserContentAction(userContentActionData): Promise; getUserContentActionsSizeSum(userId, name, periodTimestamp?): Promise; addUserLimit(limitData): Promise; updateUserLimit(limitId, limitData): Promise; getUserLimit(userId, name): Promise; addStaticIdHistoryItem(staticIdHistoryItem): Promise; getActualStaticIdItem(staticId): Promise; getStaticIdItemByDynamicId(dynamicId): Promise; getValue(key: string): Promise; setValue(key: string, content: string): Promise; clearValue(key: string): Promise; } export interface IListParams { limit?: number; offset?: number; sortBy?: string; sortDir?: string; } export interface IUserApiKey { id?: number; title?: string; userId: number; valueHash: string; expiredOn?: Date; } export interface IContent { id?: number; storageType: ContentStorageType; mimeType: ContentMimeType; extension?: string; view?: ContentView; name?: string; description?: string; size?: number; server?: string; isPublic?: boolean; isPinned?: boolean; peersCount?: number; userId: number; groupId?: number; localId?: number; largePreviewSize?: number; largePreviewStorageId?: string; mediumPreviewSize?: number; mediumPreviewStorageId?: string; smallPreviewSize?: number; smallPreviewStorageId?: string; previewMimeType?: ContentMimeType; previewExtension?: string; storageId?: string; staticStorageId?: string; manifestStorageId?: string; manifestStaticStorageId?: string; } export enum ContentStorageType { IPFS = 'ipfs', IPLD = 'ipld' } export enum ContentMimeType { Unknown = 'unknown', Text = 'text', TextHtml = 'text/html', TextMarkdown = 'text/md', ImagePng = 'image/png', ImageJpg = 'image/jpg' } export enum ContentView { Attachment = 'attachment', Contents = 'contents' } export interface IPost { id?: number; status: PostStatus; publishedAt?; publishOn?; groupId; userId; view?; type?; contents?: IContent[]; size?; isPinned?: boolean; isFullyPinned?: boolean; peersCount?: number; fullyPeersCount?: number; localId?; storageId?; staticStorageId?; manifestStorageId?: string; manifestStaticStorageId?: string; } export enum PostStatus { Queue = 'queue', Published = 'published', Draft = 'draft', Deleted = 'deleted' } export interface IUser { id?: number; name: string; email: string; passwordHash: string; title?: string; storageAccountId?: string; avatarImageId?: number; avatarImage?: IContent; } export interface IGroup { id?: number; name: string; title: string; type: GroupType; view: GroupView; isPublic: boolean; isRemote: boolean; description?: string; avatarImageId?: number; avatarImage?: IContent; coverImageId?: number; coverImage?: IContent; size?: number; isPinned?: boolean; isFullyPinned?: boolean; peersCount?: number; fullyPeersCount?: number; storageId?: string; staticStorageId?: string; manifestStorageId?: string; manifestStaticStorageId?: string; publishedPostsCount?: number; storageUpdatedAt: Date; staticStorageUpdatedAt: Date; } export enum GroupType { Channel = 'channel', Chat = 'chat' } export enum GroupView { PinterestLike = 'pinterest-like', InstagramLike = 'instagram-like', TumblrLike = 'tumblr-like', TelegramLike = 'telegram-like' } export interface IFileCatalogItem { id?: number; name: string; type: IFileCatalogItemType; position: number; userId: number; defaultFolderFor?: string; linkOfId?: number; parentItemId?: number; contentId?: number; groupId?: number; size?: number; manifestStorageId?: string; nativeStorageId?: string; } export enum IFileCatalogItemType { Folder = 'folder', File = 'file' } export interface IUserContentAction { id?: number; name: UserContentActionName; size: number; userId: number; userApiKeyId?: number; contentId?: number; } export enum UserContentActionName { Upload = 'upload', Pin = 'pin' } export interface IUserLimit { id?: number; name: UserLimitName; value: number; userId: number; adminId: number; periodTimestamp: number; isActive: boolean; } export interface IStaticIdHistoryItem { id?: number; staticId: string; dynamicId: string; periodTimestamp: number; isActive: boolean; boundAt: Date; } export enum UserLimitName { SaveContentSize = 'save_content:size' } export enum CorePermissionName { AdminRead = 'admin:read', AdminAddUser = 'admin:add_user', AdminSetPermissions = 'admin:set_permissions', AdminSetUserLimit = 'admin:set_user_limit', AdminAddUserApiKey = 'admin:add_user_api_key', AdminAddBootNode = 'admin:add_boot_node', AdminRemoveBootNode = 'admin:remove_boot_node' }