Skip to content

Commit b7e6adf

Browse files
committed
Refactor query keys to use constants for better maintainability and consistency across reports and chat functionalities
1 parent df841c1 commit b7e6adf

File tree

6 files changed

+56
-19
lines changed

6 files changed

+56
-19
lines changed

backend/src/services/perplexity.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Injectable, Logger } from '@nestjs/common';
22
import { ConfigService } from '@nestjs/config';
33
import axios from 'axios';
44
import { AwsSecretsService } from './aws-secrets.service';
5-
import { LabValue } from 'src/document-processor/services/aws-bedrock.service';
5+
import { LabValue } from '../document-processor/services/aws-bedrock.service';
66

77
export interface PerplexityMessage {
88
role: 'system' | 'user' | 'assistant';

frontend/src/common/hooks/useChat.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,28 @@
11
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
22
import { bedrockService } from '../services/ai/bedrock.service';
3-
4-
export const CHAT_QUERY_KEY = 'chat';
3+
import { QueryKey } from 'common/utils/constants';
54

65
export function useChat(sessionId?: string) {
76
const queryClient = useQueryClient();
87

98
// Query for getting chat session
109
const { data: session } = useQuery({
11-
queryKey: [CHAT_QUERY_KEY, sessionId],
10+
queryKey: [QueryKey.Chat, sessionId],
1211
queryFn: () => (sessionId ? bedrockService.getChatSession(sessionId) : undefined),
1312
enabled: !!sessionId,
1413
});
1514

1615
// Query for getting all sessions
1716
const { data: sessions } = useQuery({
18-
queryKey: [CHAT_QUERY_KEY, 'sessions'],
17+
queryKey: [QueryKey.Chat, 'sessions'],
1918
queryFn: () => bedrockService.getAllSessions(),
2019
});
2120

2221
// Mutation for creating a new session
2322
const createSession = useMutation({
2423
mutationFn: () => bedrockService.createChatSession(),
2524
onSuccess: (newSessionId) => {
26-
queryClient.invalidateQueries({ queryKey: [CHAT_QUERY_KEY, 'sessions'] });
25+
queryClient.invalidateQueries({ queryKey: [QueryKey.Chat, 'sessions'] });
2726
return newSessionId;
2827
},
2928
});
@@ -35,8 +34,8 @@ export function useChat(sessionId?: string) {
3534
return bedrockService.sendMessage(sessionId, message);
3635
},
3736
onSuccess: () => {
38-
queryClient.invalidateQueries({ queryKey: [CHAT_QUERY_KEY, sessionId] });
39-
queryClient.invalidateQueries({ queryKey: [CHAT_QUERY_KEY, 'sessions'] });
37+
queryClient.invalidateQueries({ queryKey: [QueryKey.Chat, sessionId] });
38+
queryClient.invalidateQueries({ queryKey: [QueryKey.Chat, 'sessions'] });
4039
},
4140
});
4241

frontend/src/common/hooks/useReports.ts

Lines changed: 41 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
2-
import { fetchAllReports, fetchLatestReports, markReportAsRead } from '../api/reportService';
2+
import {
3+
fetchAllReports,
4+
fetchLatestReports,
5+
markReportAsRead,
6+
toggleReportBookmark,
7+
} from '../api/reportService';
38
import { MedicalReport } from '../models/medicalReport';
4-
5-
// Query keys
6-
const REPORTS_KEY = 'reports';
7-
const LATEST_REPORTS_KEY = 'latestReports';
9+
import { QueryKey } from 'common/utils/constants';
810

911
/**
1012
* Hook to fetch the latest reports.
@@ -13,7 +15,7 @@ const LATEST_REPORTS_KEY = 'latestReports';
1315
*/
1416
export const useGetLatestReports = (limit = 3) => {
1517
return useQuery({
16-
queryKey: [LATEST_REPORTS_KEY, limit],
18+
queryKey: [QueryKey.LatestReports, limit],
1719
queryFn: () => fetchLatestReports(limit),
1820
refetchOnMount: true,
1921
refetchOnWindowFocus: true,
@@ -27,7 +29,7 @@ export const useGetLatestReports = (limit = 3) => {
2729
*/
2830
export const useGetAllReports = () => {
2931
return useQuery({
30-
queryKey: [REPORTS_KEY],
32+
queryKey: [QueryKey.Reports],
3133
queryFn: fetchAllReports,
3234
});
3335
};
@@ -43,15 +45,45 @@ export const useMarkReportAsRead = () => {
4345
mutationFn: (reportId: string) => markReportAsRead(reportId),
4446
onSuccess: (updatedReport: MedicalReport) => {
4547
// Update the reports cache
46-
queryClient.setQueryData<MedicalReport[]>([REPORTS_KEY], (oldReports) => {
48+
queryClient.setQueryData<MedicalReport[]>([QueryKey.Reports], (oldReports) => {
49+
if (!oldReports) return undefined;
50+
return oldReports.map((report) =>
51+
report.id === updatedReport.id ? updatedReport : report,
52+
);
53+
});
54+
55+
// Update the latest reports cache
56+
queryClient.setQueryData<MedicalReport[]>([QueryKey.LatestReports], (oldReports) => {
57+
if (!oldReports) return undefined;
58+
return oldReports.map((report) =>
59+
report.id === updatedReport.id ? updatedReport : report,
60+
);
61+
});
62+
},
63+
});
64+
};
65+
66+
/**
67+
* Hook to toggle the bookmark status of a report.
68+
* @returns Mutation result for toggling the bookmark status
69+
*/
70+
export const useToggleReportBookmark = () => {
71+
const queryClient = useQueryClient();
72+
73+
return useMutation({
74+
mutationFn: (params: { reportId: string; isBookmarked: boolean }) =>
75+
toggleReportBookmark(params.reportId, params.isBookmarked),
76+
onSuccess: (updatedReport: MedicalReport) => {
77+
// Update the reports cache
78+
queryClient.setQueryData<MedicalReport[]>([QueryKey.Reports], (oldReports) => {
4779
if (!oldReports) return undefined;
4880
return oldReports.map((report) =>
4981
report.id === updatedReport.id ? updatedReport : report,
5082
);
5183
});
5284

5385
// Update the latest reports cache
54-
queryClient.setQueryData<MedicalReport[]>([LATEST_REPORTS_KEY], (oldReports) => {
86+
queryClient.setQueryData<MedicalReport[]>([QueryKey.LatestReports], (oldReports) => {
5587
if (!oldReports) return undefined;
5688
return oldReports.map((report) =>
5789
report.id === updatedReport.id ? updatedReport : report,

frontend/src/common/utils/constants.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ export enum QueryKey {
99
UserProfile = 'UserProfile',
1010
Users = 'Users',
1111
UserTokens = 'UserTokens',
12+
Chat = 'Chat',
13+
Reports = 'Reports',
14+
LatestReports = 'LatestReports',
15+
ReportDetail = 'ReportDetail',
1216
}
1317

1418
/**

frontend/src/pages/Reports/ReportDetailPage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import InfoCard from './components/InfoCard';
1616
import ActionButtons from './components/ActionButtons';
1717
import AiAnalysisTab from './components/AiAnalysisTab';
1818
import UploadModal from 'common/components/Upload/UploadModal';
19+
import { QueryKey } from 'common/utils/constants';
1920

2021
const API_URL = import.meta.env.VITE_BASE_URL_API || '';
2122

@@ -46,7 +47,7 @@ const ReportDetailPage: React.FC = () => {
4647

4748
// Fetch report data using react-query
4849
const { data, isLoading, error } = useQuery<MedicalReport>({
49-
queryKey: ['report', reportId],
50+
queryKey: [QueryKey.ReportDetail, reportId],
5051
queryFn: () => fetchReportById(reportId!),
5152
enabled: !!reportId,
5253
});

frontend/src/pages/Reports/ReportsListPage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import CategoryTag from './components/CategoryTag/CategoryTag';
3131
import ReportsFilterEmpty from './components/ReportsFilterEmpty/ReportsFilterEmpty';
3232

3333
import './ReportsListPage.scss';
34+
import { QueryKey } from 'common/utils/constants';
3435

3536
type FilterOption = 'all' | 'bookmarked';
3637
type SortDirection = 'desc' | 'asc';
@@ -65,7 +66,7 @@ const ReportsListPage: React.FC = () => {
6566
isError,
6667
refetch,
6768
} = useQuery({
68-
queryKey: ['reports'],
69+
queryKey: [QueryKey.Reports],
6970
queryFn: fetchAllReports,
7071
refetchOnMount: true,
7172
});

0 commit comments

Comments
 (0)