sms-task.service.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { Repository, Like } from 'typeorm'
  2. import { FastifyInstance } from 'fastify'
  3. import { SmsTask } from '../entities/sms-task.entity'
  4. import { PaginationResponse } from '../dto/common.dto'
  5. import { CreateSmsTaskBody, UpdateSmsTaskBody, ListSmsTaskQuery } from '../dto/sms-task.dto'
  6. import { TaskStatus } from '../enum/task.enum'
  7. export class SmsTaskService {
  8. private smsTaskRepository: Repository<SmsTask>
  9. constructor(app: FastifyInstance) {
  10. this.smsTaskRepository = app.dataSource.getRepository(SmsTask)
  11. }
  12. async create(data: CreateSmsTaskBody): Promise<SmsTask> {
  13. const task = this.smsTaskRepository.create({
  14. userId: data.userId,
  15. name: data.name,
  16. message: data.message,
  17. remark: data.remark,
  18. delFlag: false
  19. })
  20. return this.smsTaskRepository.save(task)
  21. }
  22. async findById(id: number): Promise<SmsTask> {
  23. return this.smsTaskRepository.findOneOrFail({
  24. where: { id, delFlag: false }
  25. })
  26. }
  27. async findAll(query: ListSmsTaskQuery): Promise<PaginationResponse<SmsTask>> {
  28. const { page = 0, size = 20, userId, status, name } = query
  29. const where: any = {
  30. delFlag: false
  31. }
  32. if (userId) {
  33. where.userId = userId
  34. }
  35. if (status) {
  36. where.status = status
  37. }
  38. if (name) {
  39. where.name = Like(`%${name}%`)
  40. }
  41. const [tasks, total] = await this.smsTaskRepository.findAndCount({
  42. where,
  43. skip: Number(page) * Number(size),
  44. take: Number(size),
  45. order: {
  46. createdAt: 'DESC'
  47. }
  48. })
  49. return {
  50. content: tasks,
  51. metadata: {
  52. total: Number(total),
  53. page: Number(page),
  54. size: Number(size)
  55. }
  56. }
  57. }
  58. async update(id: number, data: UpdateSmsTaskBody): Promise<SmsTask> {
  59. const task = await this.findById(id)
  60. const updateData: Partial<SmsTask> = {}
  61. if (data.name !== undefined) updateData.name = data.name
  62. if (data.message !== undefined) updateData.message = data.message
  63. if (data.status !== undefined) updateData.status = data.status
  64. if (data.processed !== undefined) updateData.processed = data.processed
  65. if (data.successed !== undefined) updateData.successed = data.successed
  66. if (data.total !== undefined) updateData.total = data.total
  67. if (data.startedAt !== undefined) updateData.startedAt = data.startedAt
  68. if (data.remark !== undefined) updateData.remark = data.remark
  69. await this.smsTaskRepository.update(id, updateData)
  70. return this.findById(id)
  71. }
  72. async delete(id: number): Promise<void> {
  73. const task = await this.findById(id)
  74. await this.smsTaskRepository.update(id, { delFlag: true })
  75. }
  76. }