|
|
@@ -1,16 +1,20 @@
|
|
|
-import { Inject, Injectable, forwardRef } from '@nestjs/common'
|
|
|
+import { Inject, Injectable, OnModuleInit, forwardRef } from '@nestjs/common'
|
|
|
import { InjectRepository } from '@nestjs/typeorm'
|
|
|
import { PhoneList } from './entities/phone-list.entity'
|
|
|
import { Repository } from 'typeorm'
|
|
|
import { Phone } from './entities/phone.entity'
|
|
|
-import { Task } from './entities/task.entity'
|
|
|
+import { Task, TaskStatus } from './entities/task.entity'
|
|
|
import { TaskItem } from './entities/task-item.entity'
|
|
|
import { PageRequest } from 'src/common/dto/page-request'
|
|
|
import { Pagination, paginate } from 'nestjs-typeorm-paginate'
|
|
|
import { EventsGateway } from 'src/events/events.gateway'
|
|
|
+import axios from 'axios'
|
|
|
+import { USACodeApiService } from './usacode-api-service'
|
|
|
+import { Device } from './entities/device.entity'
|
|
|
+import { NumberRequest } from './entities/number-request.entity'
|
|
|
|
|
|
@Injectable()
|
|
|
-export class RcsService {
|
|
|
+export class RcsService implements OnModuleInit {
|
|
|
constructor(
|
|
|
@InjectRepository(PhoneList)
|
|
|
private phoneListRepository: Repository<PhoneList>,
|
|
|
@@ -20,10 +24,20 @@ export class RcsService {
|
|
|
private taskRepository: Repository<Task>,
|
|
|
@InjectRepository(TaskItem)
|
|
|
private taskItemRepository: Repository<TaskItem>,
|
|
|
+ @InjectRepository(Device)
|
|
|
+ private deviceRepository: Repository<Device>,
|
|
|
+ @InjectRepository(NumberRequest)
|
|
|
+ private numberRequestRepository: Repository<NumberRequest>,
|
|
|
@Inject(forwardRef(() => EventsGateway))
|
|
|
private readonly eventsGateway: EventsGateway,
|
|
|
+ @Inject(forwardRef(() => USACodeApiService))
|
|
|
+ private readonly USACodeApiService: USACodeApiService
|
|
|
) {}
|
|
|
|
|
|
+ onModuleInit() {
|
|
|
+ this.deviceRepository.update({}, { online: false })
|
|
|
+ }
|
|
|
+
|
|
|
async findAllPhoneList(req: PageRequest<PhoneList>): Promise<Pagination<PhoneList>> {
|
|
|
return await paginate<PhoneList>(this.phoneListRepository, req.page, req.search)
|
|
|
}
|
|
|
@@ -44,12 +58,35 @@ export class RcsService {
|
|
|
return await this.phoneListRepository.save(phoneList)
|
|
|
}
|
|
|
|
|
|
+ async importList(listId: number, phones: string[]): Promise<Phone[]> {
|
|
|
+ return await this.phoneRepository.save(
|
|
|
+ phones.map((number) => {
|
|
|
+ const phone = new Phone()
|
|
|
+ phone.listId = listId
|
|
|
+ phone.number = number
|
|
|
+ return phone
|
|
|
+ })
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
async createPhone(phone: Phone): Promise<Phone> {
|
|
|
return await this.phoneRepository.save(phone)
|
|
|
}
|
|
|
|
|
|
async createTask(task: Task): Promise<Task> {
|
|
|
- return await this.taskRepository.save(task)
|
|
|
+ task = await this.taskRepository.save(task)
|
|
|
+ const phones = await this.phoneRepository.findBy({ listId: task.listId })
|
|
|
+ await this.taskItemRepository.save(
|
|
|
+ phones.map((phone) => {
|
|
|
+ const taskItem = new TaskItem()
|
|
|
+ taskItem.taskId = task.id
|
|
|
+ taskItem.number = phone.number
|
|
|
+ taskItem.message = task.message
|
|
|
+ taskItem.status = TaskStatus.IDLE
|
|
|
+ return taskItem
|
|
|
+ })
|
|
|
+ )
|
|
|
+ return task
|
|
|
}
|
|
|
|
|
|
async delPhoneList(id: number): Promise<void> {
|
|
|
@@ -64,5 +101,55 @@ export class RcsService {
|
|
|
await this.taskRepository.delete(id)
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ async startTask(id: number): Promise<void> {
|
|
|
+ const task = await this.taskRepository.findOneBy({ id })
|
|
|
+ if (task && task.status === TaskStatus.IDLE) {
|
|
|
+ task.status = TaskStatus.PENDING
|
|
|
+ await this.taskRepository.save(task)
|
|
|
+ this.runTask(task)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async runTask(task: Task) {
|
|
|
+ const taskItems = await this.taskItemRepository.findBy({ taskId: task.id, status: TaskStatus.IDLE })
|
|
|
+ for (const taskItem of taskItems) {
|
|
|
+ taskItem.status = TaskStatus.PENDING
|
|
|
+ await this.taskItemRepository.save(taskItem)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async findAllDevice(req: PageRequest<Device>): Promise<Pagination<Device>> {
|
|
|
+ return await paginate<Device>(this.deviceRepository, req.page, req.search)
|
|
|
+ }
|
|
|
+
|
|
|
+ async deviceConnect(id: string, model: string, name?: string, canSend: boolean = false) {
|
|
|
+ let device = await this.deviceRepository.findOneBy({ id })
|
|
|
+ if (!device) {
|
|
|
+ device = new Device()
|
|
|
+ }
|
|
|
+ device.id = id
|
|
|
+ device.model = model
|
|
|
+ device.name = name
|
|
|
+ device.online = true
|
|
|
+ device.canSend = canSend
|
|
|
+ await this.deviceRepository.save(device)
|
|
|
+ }
|
|
|
+
|
|
|
+ async deviceDisconnect(id: string) {
|
|
|
+ const device = await this.deviceRepository.findOneBy({ id })
|
|
|
+ if (device) {
|
|
|
+ device.online = false
|
|
|
+ await this.deviceRepository.save(device)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async updateDevice(id: string, data: any) {
|
|
|
+ const device = await this.deviceRepository.findOneBy({ id })
|
|
|
+ if (device) {
|
|
|
+ Object.assign(device, data)
|
|
|
+ await this.deviceRepository.save(device)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ async requestNumber(device: string) {}
|
|
|
}
|