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:
@@ -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,
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
export enum ErrorReason {
|
||||
JOB_ASSIGNED = 'JOB_ASSIGNED',
|
||||
UNKNOWN = 'UNKNOWN',
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user