Skip to content

Commit

Permalink
feat: ems to er request 상태 업데이트 API - [이송중, 이송완료처리]
Browse files Browse the repository at this point in the history
  • Loading branch information
de-novo committed Nov 30, 2023
1 parent 8905220 commit 0ef6f04
Show file tree
Hide file tree
Showing 8 changed files with 139 additions and 15 deletions.
3 changes: 2 additions & 1 deletion prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -934,8 +934,9 @@ enum RequestStatus {
ACCEPTED /// 수락됨
REJECTED /// 거절됨
CANCELED /// 취소됨
TRANSFER ///이송중
TRANSFER_COMPLETED /// 이송완료
COMPLETED /// 완료됨
@@schema("request")
}

Expand Down
10 changes: 8 additions & 2 deletions src/controllers/er/er.requestPatient.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,15 @@ import { Controller, HttpStatus, UseGuards } from '@nestjs/common';
import { ErJwtAccessAuthGuard } from '@src/auth/guard/er.jwt.access.guard';
import { ErAuth } from '@src/auth/interface';
import { ErRequestPatientService } from '@src/providers/er/er.requestPatient.service';
import { ReqEmsToErProducer } from '@src/providers/req/req.emsToEr.producer';
import { ErRequestPatientRequest, ErRequestPatientResponse, TryCatch } from '@src/types';

@Controller('/er/request-patients')
export class ErRequestPatientController {
constructor(private readonly erRequestPatientService: ErRequestPatientService) {}
constructor(
private readonly erRequestPatientService: ErRequestPatientService,
private readonly reqEmsToErProducer: ReqEmsToErProducer,
) {}

/**
* 요청 받은 환자 상세정보 조회 API
Expand Down Expand Up @@ -101,7 +105,9 @@ export class ErRequestPatientController {
nurse_id,
});
if (isError(result)) return throwError(result);
const { ems_to_er_request, ...patient } = result;
await this.reqEmsToErProducer.sendEmsToErUpdate({ patient, updated_list: ems_to_er_request });

return createResponse(result);
return createResponse('SUCCESS');
}
}
40 changes: 40 additions & 0 deletions src/controllers/request/req.emsToEr.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,46 @@ export class ReqEmsToErController {
return createResponse(undefined);
}

@TypedRoute.Put('/:patient_id')
@UseGuards(EmsJwtAccessAuthGuard)
async cancelEmsToErRequest() {}

/**
* ems to er 요청 상태 변경 API - EMS
*
*
* 본 API는 EMS 시스템에서만 호출 가능합니다.
* EMS에서 요청 상태를 변경하는 API 입니다.
*
* 변경 가능 상태
* - ACCEPTED -> TRANSFER // 수락 후 환자 이송
* - TRANSFER -> TRANSFER_COMPLETED // 환자 이송 완료
*
* ## body
* - request_status: "TRANSFER" | "TRANSFER_COMPLETED";
*
*/
@TypedRoute.Patch('/:patient_id')
@TypedException<AUTH_ERROR.FORBIDDEN>(403, 'AUTH_ERROR.FORBIDDEN')
@TypedException<REQ_EMS_TO_ER_ERROR.REQUEST_NOT_FOUND>(404.1, 'REQUEST_NOT_FOUND')
@UseGuards(EmsJwtAccessAuthGuard)
async updateEmsToErRequest(
@TypedParam('patient_id') patient_id: string,
@TypedBody() body: ReqEmsToErRequest.UpdateEmsToErRequestDto,
@CurrentUser() user: EmsAuth.AccessTokenSignPayload,
): Promise<TryCatch<'SUCCESS', REQ_EMS_TO_ER_ERROR.REQUEST_NOT_FOUND>> {
const { request_status } = body;
const result = await this.reqEmsToErService.updateEmsToErRequest({ patient_id, request_status, user });

if (isError(result)) {
return throwError(result);
}

const { ems_to_er_request, ...patient } = result;
await this.reqEmsToErProducer.sendEmsToErUpdate({ patient, updated_list: ems_to_er_request });
return createResponse('SUCCESS');
}

//1분마다 실행
@Cron('0 * * * * *')
async batchNewEmsToErRequest() {
Expand Down
3 changes: 2 additions & 1 deletion src/modules/er/patient.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ import { ErPatientController } from '@src/controllers/er/er.patient.controller';
import { ErRequestPatientController } from '@src/controllers/er/er.requestPatient.controller';
import { ErPatientService } from '@src/providers/er/er.patient.service';
import { ErRequestPatientService } from '@src/providers/er/er.requestPatient.service';
import { ReqEmsToErProducer } from '@src/providers/req/req.emsToEr.producer';

@Module({
controllers: [ErPatientController, ErRequestPatientController],
providers: [ErPatientService, ErRequestPatientService],
providers: [ErPatientService, ErRequestPatientService, ReqEmsToErProducer],
})
export class ErPatientModule {}
39 changes: 28 additions & 11 deletions src/providers/er/er.requestPatient.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ export class ErRequestPatientService {
ems_to_er_request: {
some: {
emergency_center_id,
request_status: 'ACCEPTED',
request_status: 'TRANSFER_COMPLETED',
},
},
},
Expand Down Expand Up @@ -156,26 +156,43 @@ export class ErRequestPatientService {
patient_status: 'COMPLETED',
},
});
const updateRequest = this.prismaService.req_EmsToErRequest.update({
const updateRequestPatient = this.prismaService.req_Patient.update({
where: {
patient_id_emergency_center_id: {
patient_id,
emergency_center_id,
},
patient_id,
},
data: {
request_status: 'COMPLETED',
ems_to_er_request: {
update: {
where: {
patient_id_emergency_center_id: {
patient_id,
emergency_center_id,
},
},
data: {
request_status: 'COMPLETED',
},
},
},
},
include: {
ems_to_er_request: {
where: {
emergency_center_id,
patient_id,
},
},
},
});
await this.prismaService.$transaction([
const [reqUpdatedResult] = await this.prismaService.$transaction([
updateRequestPatient,
createErPatient,
createBadLog,
updateEmergencyRoomBed,
updateEmsPatient,
updateRequest,
updateEmergencyRoomBed,
]);

return 'SUCCESS';
return reqUpdatedResult;
}

async getEmsPatientDetail(patient_id: string) {
Expand Down
6 changes: 6 additions & 0 deletions src/providers/interface/req/req.emsToEr.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,12 @@ export namespace ReqEmsToEr {
complete_req_list: req_EmsToErRequest[];
response: req_EmsToErRequest;
};

export type UpdateEmsToErRequestArg = {
user: EmsAuth.AccessTokenSignPayload;
patient_id: string;
request_status: 'TRANSFER' | 'TRANSFER_COMPLETED';
};
}

export namespace ReqEmsToErMessage {
Expand Down
49 changes: 49 additions & 0 deletions src/providers/req/req.emsToEr.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -513,4 +513,53 @@ export class ReqEmsToErService {

return result;
}

async updateEmsToErRequest({ user, patient_id, request_status }: ReqEmsToEr.UpdateEmsToErRequestArg) {
const { employee_id } = user;

const reqeustStatusWhere: RequestStatus = request_status === 'TRANSFER' ? 'ACCEPTED' : 'TRANSFER';
const reqEmsToErRequest = await this.prismaService.req_EmsToErRequest.findFirst({
where: {
patient_id,
patient: {
ems_employee_id: employee_id,
},
request_status: reqeustStatusWhere,
},
});

if (!reqEmsToErRequest) {
return typia.random<REQ_EMS_TO_ER_ERROR.REQUEST_NOT_FOUND>();
}

const patient = await this.prismaService.req_Patient.update({
where: {
patient_id,
},
data: {
ems_to_er_request: {
update: {
where: {
patient_id_emergency_center_id: {
patient_id,
emergency_center_id: reqEmsToErRequest.emergency_center_id,
},
},
data: {
request_status,
},
},
},
},
include: {
ems_to_er_request: {
where: {
emergency_center_id: reqEmsToErRequest.emergency_center_id,
},
},
},
});

return patient;
}
}
4 changes: 4 additions & 0 deletions src/types/req.request.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,8 @@ export namespace ReqEmsToErRequest {
export interface CreateEmsToErRequestDto {
departments: string[];
}

export interface UpdateEmsToErRequestDto {
request_status: 'TRANSFER' | 'TRANSFER_COMPLETED';
}
}

0 comments on commit 0ef6f04

Please sign in to comment.