Files
jurong_circle_chat_black/src/service/message.service.ts

65 lines
2.1 KiB
TypeScript
Raw Normal View History

import {Injectable} from "@nestjs/common";
2025-10-09 15:15:09 +08:00
import {ProgramGroupMessageEntity, ReadDto, UsersEntity} from "../entity";
import {RedisService} from "./redis.service";
import {ResultData} from "../const/result";
2025-10-09 09:18:20 +08:00
import {InjectRepository} from "@nestjs/typeorm";
import {Repository} from "typeorm";
@Injectable()
export class MessageService {
2025-10-09 09:18:20 +08:00
constructor(
private readonly redisService: RedisService,
@InjectRepository(ProgramGroupMessageEntity) private readonly messageRepository: Repository<ProgramGroupMessageEntity>,
) {
}
// 获取未读消息
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()
}
2025-10-09 09:18:20 +08:00
async getList(message: ProgramGroupMessageEntity) {
2025-10-09 15:15:09 +08:00
try {
message.page = message.page || 1;
message.size = message.size || 10;
const offset = (message.page - 1) * message.size;
2025-10-09 09:18:20 +08:00
2025-10-09 15:15:09 +08:00
let queryBuilder = this.messageRepository.createQueryBuilder("message")
2025-10-09 09:18:20 +08:00
2025-10-09 15:15:09 +08:00
queryBuilder.leftJoinAndMapOne(
"message.userInfo",
UsersEntity,
"user",
"message.create_id = user.id"
).where("message.group_id = :groupId", {groupId: message.groupId})
2025-10-09 09:18:20 +08:00
2025-10-09 15:15:09 +08:00
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)
}
2025-10-09 09:18:20 +08:00
}
}