import {Injectable} from "@nestjs/common"; import {ProgramGroupMessageEntity, ReadDto, UsersEntity} from "../entity"; import {RedisService} from "./redis.service"; import {ResultData} from "../const/result"; import {InjectRepository} from "@nestjs/typeorm"; import {Repository} from "typeorm"; @Injectable() export class MessageService { constructor( private readonly redisService: RedisService, @InjectRepository(ProgramGroupMessageEntity) private readonly messageRepository: Repository, ) { } // 获取未读消息 async getUnread(readDto: ReadDto) { let data = await this.redisService.getValue(`${readDto.groupId}_${readDto.userId}`) data = data == null ? [] : JSON.parse(data) return ResultData.success(data) } // 未读 -> 已读 async read(readDto: ReadDto) { this.redisService.delValue(`${readDto.groupId}_${readDto.userId}`) return ResultData.success() } async getList(message: ProgramGroupMessageEntity) { try { message.page = message.page || 1; message.size = message.size || 10; const offset = (message.page - 1) * message.size; let queryBuilder = this.messageRepository.createQueryBuilder("message") queryBuilder.leftJoinAndMapOne( "message.userInfo", UsersEntity, "user", "message.create_id = user.id" ).where("message.group_id = :groupId", {groupId: message.groupId}) queryBuilder .orderBy('message.createTime', 'DESC') .take(message.size || 10) .skip(offset || 0); let [items, total] = await queryBuilder.getManyAndCount() let data = { list: items, total, page: message.page || 1, size: message.size || 10, pages: Math.ceil(total / (message.size || 10)) } return ResultData.success(data); } catch (err) { return ResultData.fail(500, err.message) } } }