123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- import { pick } from '@shared/core-utils'
- import { HttpStatusCode, ResultList, VideoComment, VideoCommentThreads, VideoCommentThreadTree } from '@shared/models'
- import { unwrapBody } from '../requests'
- import { AbstractCommand, OverrideCommandOptions } from '../shared'
- export class CommentsCommand extends AbstractCommand {
- private lastVideoId: number | string
- private lastThreadId: number
- private lastReplyId: number
- listForAdmin (options: OverrideCommandOptions & {
- start?: number
- count?: number
- sort?: string
- isLocal?: boolean
- onLocalVideo?: boolean
- search?: string
- searchAccount?: string
- searchVideo?: string
- } = {}) {
- const { sort = '-createdAt' } = options
- const path = '/api/v1/videos/comments'
- const query = { sort, ...pick(options, [ 'start', 'count', 'isLocal', 'onLocalVideo', 'search', 'searchAccount', 'searchVideo' ]) }
- return this.getRequestBody<ResultList<VideoComment>>({
- ...options,
- path,
- query,
- implicitToken: true,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- listThreads (options: OverrideCommandOptions & {
- videoId: number | string
- start?: number
- count?: number
- sort?: string
- }) {
- const { start, count, sort, videoId } = options
- const path = '/api/v1/videos/' + videoId + '/comment-threads'
- return this.getRequestBody<VideoCommentThreads>({
- ...options,
- path,
- query: { start, count, sort },
- implicitToken: false,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- getThread (options: OverrideCommandOptions & {
- videoId: number | string
- threadId: number
- }) {
- const { videoId, threadId } = options
- const path = '/api/v1/videos/' + videoId + '/comment-threads/' + threadId
- return this.getRequestBody<VideoCommentThreadTree>({
- ...options,
- path,
- implicitToken: false,
- defaultExpectedStatus: HttpStatusCode.OK_200
- })
- }
- async createThread (options: OverrideCommandOptions & {
- videoId: number | string
- text: string
- }) {
- const { videoId, text } = options
- const path = '/api/v1/videos/' + videoId + '/comment-threads'
- const body = await unwrapBody<{ comment: VideoComment }>(this.postBodyRequest({
- ...options,
- path,
- fields: { text },
- implicitToken: true,
- defaultExpectedStatus: HttpStatusCode.OK_200
- }))
- this.lastThreadId = body.comment?.id
- this.lastVideoId = videoId
- return body.comment
- }
- async addReply (options: OverrideCommandOptions & {
- videoId: number | string
- toCommentId: number
- text: string
- }) {
- const { videoId, toCommentId, text } = options
- const path = '/api/v1/videos/' + videoId + '/comments/' + toCommentId
- const body = await unwrapBody<{ comment: VideoComment }>(this.postBodyRequest({
- ...options,
- path,
- fields: { text },
- implicitToken: true,
- defaultExpectedStatus: HttpStatusCode.OK_200
- }))
- this.lastReplyId = body.comment?.id
- return body.comment
- }
- async addReplyToLastReply (options: OverrideCommandOptions & {
- text: string
- }) {
- return this.addReply({ ...options, videoId: this.lastVideoId, toCommentId: this.lastReplyId })
- }
- async addReplyToLastThread (options: OverrideCommandOptions & {
- text: string
- }) {
- return this.addReply({ ...options, videoId: this.lastVideoId, toCommentId: this.lastThreadId })
- }
- async findCommentId (options: OverrideCommandOptions & {
- videoId: number | string
- text: string
- }) {
- const { videoId, text } = options
- const { data } = await this.listThreads({ videoId, count: 25, sort: '-createdAt' })
- return data.find(c => c.text === text).id
- }
- delete (options: OverrideCommandOptions & {
- videoId: number | string
- commentId: number
- }) {
- const { videoId, commentId } = options
- const path = '/api/v1/videos/' + videoId + '/comments/' + commentId
- return this.deleteRequest({
- ...options,
- path,
- implicitToken: true,
- defaultExpectedStatus: HttpStatusCode.NO_CONTENT_204
- })
- }
- }
|