返回 AiToEarn
engagement-task.repository.ts
根目录 / project / aitoearn-backend / libs / channel-db / src / repositories / engagement-task.repository.ts
1 import { Injectable } from '@nestjs/common'
2 import { InjectModel } from '@nestjs/mongoose'
3 import { Model } from 'mongoose'
4 import { DB_CONNECTION_NAME } from '../common'
5 import { EngagementTask, EngagementTaskStatus } from '../schemas'
6 import { BaseRepository } from './base.repository'
7
8 @Injectable()
9 export class EngagementTaskRepository extends BaseRepository<EngagementTask> {
10 constructor(
11 @InjectModel(EngagementTask.name, DB_CONNECTION_NAME) private engagementTaskModel: Model<EngagementTask>,
12 ) {
13 super(engagementTaskModel)
14 }
15
16 async createEngagementTask(data: Partial<EngagementTask>): Promise<EngagementTask> {
17 return this.engagementTaskModel.create(data)
18 }
19
20 async findById(taskId: string): Promise<EngagementTask | null> {
21 return this.engagementTaskModel.findById(taskId).lean({ virtuals: true })
22 }
23
24 async searchEngagementTaskInProgress(postId: string, status: EngagementTaskStatus): Promise<EngagementTask[] | null> {
25 return this.engagementTaskModel.find({ postId, status: { $ne: status } }).lean({ virtuals: true })
26 }
27
28 async updateInfo(taskId: string, updateData: Partial<EngagementTask>): Promise<EngagementTask | null> {
29 return this.engagementTaskModel.findByIdAndUpdate(taskId, updateData).lean({ virtuals: true })
30 }
31
32 async updateStatus(taskId: string, status: EngagementTaskStatus): Promise<EngagementTask | null> {
33 return this.engagementTaskModel.findByIdAndUpdate(taskId, { status }).lean({ virtuals: true })
34 }
35
36 async updateFailedSubTaskCount(taskId: string, count: number): Promise<EngagementTask | null> {
37 return this.engagementTaskModel.findByIdAndUpdate(taskId, { $inc: { failedSubTaskCount: count } }, { new: true }).lean({ virtuals: true })
38 }
39
40 async updateSubTaskCount(taskId: string, count: number): Promise<EngagementTask | null> {
41 return this.engagementTaskModel.findByIdAndUpdate(taskId, { $inc: { subTaskCount: count } }, { new: true }).lean({ virtuals: true })
42 }
43
44 async updateCompletedSubTaskCount(taskId: string, count: number): Promise<EngagementTask | null> {
45 return this.engagementTaskModel.findByIdAndUpdate(taskId, { $inc: { completedSubTaskCount: count } }, { new: true }).lean({ virtuals: true })
46 }
47 }
48
48 lines TYPESCRIPT