2025-09-30 16:41:10 +08:00
|
|
|
import {Injectable} from "@nestjs/common";
|
2025-10-09 15:15:09 +08:00
|
|
|
import {ProgramGroupMessageEntity, ReadDto, UsersEntity} from "../entity";
|
2025-09-30 16:41:10 +08:00
|
|
|
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";
|
2025-09-30 16:41:10 +08:00
|
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
|
export class MessageService {
|
2025-10-09 09:18:20 +08:00
|
|
|
constructor(
|
|
|
|
|
private readonly redisService: RedisService,
|
|
|
|
|
@InjectRepository(ProgramGroupMessageEntity) private readonly messageRepository: Repository<ProgramGroupMessageEntity>,
|
|
|
|
|
) {
|
2025-09-30 16:41:10 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取未读消息
|
|
|
|
|
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
|
|
|
|
|
|
|
|
}
|
2025-09-30 16:41:10 +08:00
|
|
|
}
|