返回 AiToEarn
interaction-record.repository.ts
根目录 / project / aitoearn-backend / libs / channel-db / src / repositories / interaction-record.repository.ts
1 import { Injectable } from '@nestjs/common'
2 import { InjectModel } from '@nestjs/mongoose'
3 import { AccountType, TableDto } from '@yikart/common'
4 import { Model, RootFilterQuery } from 'mongoose'
5 import { DB_CONNECTION_NAME } from '../common'
6 import { InteractionRecord } from '../schemas'
7 import { BaseRepository } from './base.repository'
8
9 @Injectable()
10 export class InteractionRecordRepository extends BaseRepository<InteractionRecord> {
11 constructor(
12 @InjectModel(InteractionRecord.name, DB_CONNECTION_NAME) private interactionRecordModel: Model<InteractionRecord>,
13 ) {
14 super(interactionRecordModel)
15 }
16
17 async add(data: Partial<InteractionRecord>): Promise<InteractionRecord> {
18 const createdRecord = new this.interactionRecordModel(data)
19 const saved = await createdRecord.save()
20 return saved.toObject()
21 }
22
23 async getList(
24 filters: {
25 userId: string
26 accountId?: string
27 type?: AccountType
28 worksId?: string
29 time?: [Date?, Date?, ...unknown[]]
30 },
31 page: TableDto,
32 ): Promise<{
33 total: number
34 list: InteractionRecord[]
35 }> {
36 const filter: RootFilterQuery<InteractionRecord> = {
37 userId: filters.userId,
38 ...(filters.time && filters.time.length === 2 && {
39 createdAt: { $gte: filters.time[0], $lte: filters.time[1] },
40 }),
41 ...(filters.accountId && { accountId: filters.accountId }),
42 ...(filters.type && { type: filters.type }),
43 ...(filters.worksId && { worksId: filters.worksId }),
44 }
45
46 const [list, total] = await Promise.all([
47 this.interactionRecordModel
48 .find(filter)
49 .sort({ createdAt: -1 })
50 .skip(((page.pageNo || 1) - 1) * page.pageSize)
51 .limit(page.pageSize)
52 .lean({ virtuals: true })
53 .exec(),
54 this.interactionRecordModel.countDocuments(filter),
55 ])
56
57 return { total, list }
58 }
59
60 // 删除
61 async delete(id: string): Promise<{ deleted: boolean }> {
62 const result = await this.interactionRecordModel.deleteOne({ _id: id }).exec()
63 return { deleted: result.deletedCount > 0 }
64 }
65 }
66
66 lines TYPESCRIPT