import { ConsumerDevicesSelect } from '@/generated/prisma/models' import { PrismaService } from '@/prisma/prisma.service' import { BadRequestException, Injectable } from '@nestjs/common' import { ResponseMapper } from 'common/response/response-mapper' import { CreateConfigDto } from './dto/create-config.dto' @Injectable() export class ConfigService { constructor(private prisma: PrismaService) {} private readonly defaultSelect: ConsumerDevicesSelect = { uuid: true, app_version: true, brand: true, browser_name: true, build_number: true, device: true, os_version: true, fcm_token: true, model: true, platform: true, release_number: true, sdk_version: true, consumer: { select: { id: true, first_name: true, last_name: true, }, }, } async findOne(uuid: string) { const config = await this.prisma.consumerDevices.findUnique({ where: { uuid, }, select: this.defaultSelect, }) return ResponseMapper.single(config) } async create(consumer_id: string, data: CreateConfigDto) { const prevConfig = await this.prisma.consumerDevices.findUnique({ where: { uuid: data.uuid, }, select: { consumer_id: true, }, }) if (prevConfig && consumer_id !== prevConfig.consumer_id) { throw new BadRequestException('این دستگاه با کاربری دیگری ثبت شده است.') } const config = await this.prisma.consumerDevices.upsert({ where: { uuid: data.uuid, }, update: { ...data, consumer: { connect: { id: consumer_id, }, }, }, create: { ...data, consumer: { connect: { id: consumer_id, }, }, }, select: this.defaultSelect, }) return ResponseMapper.create(config) } }