wip: optimizations
This commit is contained in:
27
electron/cqrs/queries/handlers/getRoomMessageStats.ts
Normal file
27
electron/cqrs/queries/handlers/getRoomMessageStats.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
import { DataSource } from 'typeorm';
|
||||
import { MessageEntity } from '../../../entities';
|
||||
import { GetRoomMessageStatsQuery } from '../../types';
|
||||
import { getCurrentUserScope } from '../../current-user-scope';
|
||||
|
||||
export async function handleGetRoomMessageStats(query: GetRoomMessageStatsQuery, dataSource: DataSource) {
|
||||
const repo = dataSource.getRepository(MessageEntity);
|
||||
const { roomId } = query.payload;
|
||||
const currentUserId = await getCurrentUserScope(dataSource);
|
||||
|
||||
if (!currentUserId) {
|
||||
return { count: 0,
|
||||
lastUpdated: 0 };
|
||||
}
|
||||
|
||||
const row = await repo.createQueryBuilder('message')
|
||||
.select('COUNT(message.id)', 'count')
|
||||
.addSelect('MAX(COALESCE(message.editedAt, message.timestamp, 0))', 'lastUpdated')
|
||||
.where('message.roomId = :roomId', { roomId })
|
||||
.andWhere('message.ownerUserId = :currentUserId', { currentUserId })
|
||||
.getRawOne<{ count?: string | number | null; lastUpdated?: string | number | null }>();
|
||||
|
||||
return {
|
||||
count: Number(row?.count ?? 0) || 0,
|
||||
lastUpdated: Number(row?.lastUpdated ?? 0) || 0
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user