src/azurechat/features/reporting/reporting-service.ts (74 lines of code) (raw):
import { SqlQuerySpec } from "@azure/cosmos";
import {
CHAT_THREAD_ATTRIBUTE,
ChatMessageModel,
ChatThreadModel,
MESSAGE_ATTRIBUTE,
} from "../chat/chat-services/models";
import { CosmosDBContainer } from "../common/cosmos";
export const FindAllChatThreadsForReporting = async (
pageSize = 10,
pageNumber = 0
) => {
const instance = await CosmosDBContainer.getInstance();
const container = await instance.getContainer();
const querySpec: SqlQuerySpec = {
query: `SELECT * FROM root r WHERE r.type=@type ORDER BY r.createdAt DESC OFFSET ${
pageNumber * pageSize
} LIMIT ${pageSize}`,
parameters: [
{
name: "@type",
value: CHAT_THREAD_ATTRIBUTE,
},
],
};
const { resources } = await container.items
.query<ChatThreadModel>(querySpec, {
maxItemCount: pageSize,
})
.fetchNext();
return { resources };
};
export const FindChatThreadByID = async (chatThreadID: string) => {
const instance = await CosmosDBContainer.getInstance();
const container = await instance.getContainer();
const querySpec: SqlQuerySpec = {
query: "SELECT * FROM root r WHERE r.type=@type AND r.id=@id",
parameters: [
{
name: "@type",
value: CHAT_THREAD_ATTRIBUTE,
},
{
name: "@id",
value: chatThreadID,
},
],
};
const { resources } = await container.items
.query<ChatThreadModel>(querySpec)
.fetchAll();
return resources;
};
export const FindAllChatsInThread = async (chatThreadID: string) => {
const instance = await CosmosDBContainer.getInstance();
const container = await instance.getContainer();
const querySpec: SqlQuerySpec = {
query: "SELECT * FROM root r WHERE r.type=@type AND r.threadId = @threadId",
parameters: [
{
name: "@type",
value: MESSAGE_ATTRIBUTE,
},
{
name: "@threadId",
value: chatThreadID,
},
],
};
const { resources } = await container.items
.query<ChatMessageModel>(querySpec)
.fetchAll();
return resources;
};