MED-56: show specific error when job taken, other small improvements (#58)

* show specific error when job taken, other small improvements

* enum name case

* enum value case, actually
This commit is contained in:
Helena
2025-08-26 11:43:31 +03:00
committed by GitHub
parent f5abf2d21e
commit 5d92c34259
8 changed files with 94 additions and 51 deletions

View File

@@ -1,6 +1,6 @@
'use server';
import { revalidatePath, revalidateTag } from 'next/cache';
import { revalidatePath } from 'next/cache';
import { enhanceAction } from '@kit/next/actions';
import { getLogger } from '@kit/shared/logger';
@@ -13,6 +13,7 @@ import {
doctorJobSelectSchema,
doctorJobUnselectSchema,
} from '../schema/doctor-analysis.schema';
import { ErrorReason } from '../schema/error.type';
import {
selectJob,
submitFeedback,
@@ -29,14 +30,27 @@ export const selectJobAction = doctorAction(
async ({ analysisOrderId, userId }: DoctorJobSelect) => {
const logger = await getLogger();
logger.info({ analysisOrderId }, `Selecting new job`);
try {
logger.info({ analysisOrderId }, `Selecting new job`);
await selectJob(analysisOrderId, userId);
await selectJob(analysisOrderId, userId);
logger.info({ analysisOrderId }, `Successfully selected`);
logger.info({ analysisOrderId }, `Successfully selected`);
revalidateDoctorAnalysis();
return { success: true };
revalidateDoctorAnalysis();
return { success: true };
} catch (e) {
logger.error('Failed to select job', e);
if (e instanceof Error) {
return {
success: false,
reason:
e['message'] === ErrorReason.JOB_ASSIGNED
? ErrorReason.JOB_ASSIGNED
: ErrorReason.UNKNOWN,
};
}
return { success: false, reason: ErrorReason.UNKNOWN };
}
},
{
schema: doctorJobSelectSchema,
@@ -52,17 +66,21 @@ export const unselectJobAction = doctorAction(
enhanceAction(
async ({ analysisOrderId }: DoctorJobUnselect) => {
const logger = await getLogger();
try {
logger.info({ analysisOrderId }, `Removing doctor from job`);
logger.info({ analysisOrderId }, `Removing doctor from job`);
await unselectJob(analysisOrderId);
await unselectJob(analysisOrderId);
logger.info(
{ analysisOrderId },
`Successfully removed current doctor from job`,
);
revalidateDoctorAnalysis();
return { success: true };
logger.info(
{ analysisOrderId },
`Successfully removed current doctor from job`,
);
revalidateDoctorAnalysis();
return { success: true };
} catch (e) {
logger.error('Failed to unselect job', e);
return { success: false, reason: ErrorReason.UNKNOWN };
}
},
{
schema: doctorJobUnselectSchema,
@@ -89,21 +107,21 @@ export const giveFeedbackAction = doctorAction(
}) => {
const logger = await getLogger();
logger.info(
{ analysisOrderId },
`Submitting feedback for analysis order...`,
);
try {
logger.info(
{ analysisOrderId },
`Submitting feedback for analysis order...`,
);
const result = await submitFeedback(
analysisOrderId,
userId,
feedbackValue,
status,
);
logger.info({ analysisOrderId }, `Successfully submitted feedback`);
await submitFeedback(analysisOrderId, userId, feedbackValue, status);
logger.info({ analysisOrderId }, `Successfully submitted feedback`);
revalidateDoctorAnalysis();
return result;
revalidateDoctorAnalysis();
return { success: true };
} catch (e) {
logger.error('Failed to give feedback', e);
return { success: false, reason: ErrorReason.UNKNOWN };
}
},
{
schema: doctorAnalysisFeedbackSchema,

View File

@@ -0,0 +1,4 @@
export enum ErrorReason {
JOB_ASSIGNED = 'JOB_ASSIGNED',
UNKNOWN = 'UNKNOWN',
}

View File

@@ -12,6 +12,7 @@ import {
PaginationParams,
ResponseTable,
} from '../schema/doctor-analysis.schema';
import { ErrorReason } from '../schema/error.type';
async function enrichAnalysisData(analysisResponses?: AnalysisResponseBase[]) {
const supabase = getSupabaseServerClient();
@@ -534,7 +535,7 @@ export async function selectJob(analysisOrderId: number, userId: string) {
const jobAssignedToUserId = existingFeedback?.[0]?.doctor_user_id;
if (!!jobAssignedToUserId && jobAssignedToUserId !== user.id) {
throw new Error('Job already assigned to another doctor.');
throw new Error(ErrorReason.JOB_ASSIGNED);
}
const { data, error } = await supabase