diff --git a/backend/src/app.module.ts b/backend/src/app.module.ts
index 1ba5572..042e1e3 100644
--- a/backend/src/app.module.ts
+++ b/backend/src/app.module.ts
@@ -13,7 +13,7 @@ import { M_Charts } from './m-charts/entity/m-charts.entity';
import { MComplaintsModule } from './m-complaints/m-complaints.module';
import { M_Complaints } from './m-complaints/entity/m-complaints.entity';
import { MPrescriptionsModule } from './m-prescriptions/m-prescriptions.module';
-import { M_Prescriptions } from './m-prescriptions/entity/m-prescriotions.entity';
+import { M_Prescriptions } from './m-prescriptions/entity/m-prescriptions.entity';
import { HistoriesModule } from './patients/histories/histories.module';
import { Histories } from './patients/histories/entity/histories.entity';
import { Users } from './users/entity/users.entity';
@@ -30,7 +30,7 @@ import { KmComplaintsModule } from './km-complaints/km-complaints.module';
import { KmPrescriptionsModule } from './km-prescriptions/km-prescriptions.module';
import { KmMedicinesModule } from './km-medicines/km-medicines.module';
import { KM_Complaints } from './km-complaints/entity/km-complaints.entity';
-import { KM_Prescriptions } from './km-prescriptions/entity/km-prescriotions.entity';
+import { KM_Prescriptions } from './km-prescriptions/entity/km-prescriptions.entity';
import { KM_Medicines } from './km-medicines/entity/km-medicines.entity';
import {
ENV_DB_DATABASE_KEY,
diff --git a/backend/src/km-charts/entity/km-charts.entity.ts b/backend/src/km-charts/entity/km-charts.entity.ts
index 5d9ac33..d87d96c 100644
--- a/backend/src/km-charts/entity/km-charts.entity.ts
+++ b/backend/src/km-charts/entity/km-charts.entity.ts
@@ -1,6 +1,6 @@
import { BaseModel } from 'src/common/entity/base.entity';
import { KM_Complaints } from 'src/km-complaints/entity/km-complaints.entity';
-import { KM_Prescriptions } from 'src/km-prescriptions/entity/km-prescriotions.entity';
+import { KM_Prescriptions } from 'src/km-prescriptions/entity/km-prescriptions.entity';
import { Patients } from 'src/patients/entity/patients.entity';
import { Column, Entity, ManyToOne, OneToMany } from 'typeorm';
diff --git a/backend/src/km-charts/km-charts.controller.ts b/backend/src/km-charts/km-charts.controller.ts
index a9e992f..39f990d 100644
--- a/backend/src/km-charts/km-charts.controller.ts
+++ b/backend/src/km-charts/km-charts.controller.ts
@@ -1,12 +1,28 @@
-import { Body, Controller, Get, HttpStatus, Param, Post } from '@nestjs/common';
+import {
+ Body,
+ Controller,
+ Get,
+ HttpStatus,
+ NotFoundException,
+ Param,
+ ParseIntPipe,
+ Post,
+} from '@nestjs/common';
import { KmChartsService } from './km-charts.service';
import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
import { CreatePrediagnosisDto } from './dto/create-prediagnosis.dto';
+import { KmPrescriptionsService } from 'src/km-prescriptions/km-prescriptions.service';
+import { CreateKMPrescriptionDto } from 'src/km-prescriptions/dto/create-km-prescription.dto';
+import { KmMedicinesService } from 'src/km-medicines/km-medicines.service';
@ApiTags('한의과')
@Controller('km/charts')
export class KmChartsController {
- constructor(private readonly chartsService: KmChartsService) {}
+ constructor(
+ private readonly chartsService: KmChartsService,
+ private readonly prescriptionsService: KmPrescriptionsService,
+ private readonly medicinesService: KmMedicinesService,
+ ) {}
@Post('/:chartId/prediagnosis')
@ApiOperation({
@@ -89,4 +105,38 @@ export class KmChartsController {
getPastChart(@Param('chartId') chartId: number) {
return this.chartsService.getPastChart(chartId);
}
+
+ @Post(':chartId/prescriptions')
+ @ApiOperation({
+ summary: '처방 생성',
+ })
+ @ApiResponse({
+ status: HttpStatus.BAD_REQUEST,
+ description:
+ '존재하지 않는 약품입니다. medicineId에 해당하는 약품이 없는 경우',
+ })
+ @ApiResponse({
+ status: HttpStatus.NOT_FOUND,
+ })
+ async postPrescription(
+ @Param('chartId', ParseIntPipe) chartId: number,
+ @Body() createPrescriptionDto: CreateKMPrescriptionDto,
+ ) {
+ const chartExists = await this.chartsService.checkChartExistsById(chartId);
+ if (!chartExists) {
+ throw new NotFoundException();
+ }
+
+ const medicineExists = await this.medicinesService.checkMedicineExistsById(
+ createPrescriptionDto.medicineId,
+ );
+ if (!medicineExists) {
+ throw new NotFoundException('존재하지 않는 약품입니다.');
+ }
+
+ return await this.prescriptionsService.createPrescription(
+ chartId,
+ createPrescriptionDto,
+ );
+ }
}
diff --git a/backend/src/km-charts/km-charts.module.ts b/backend/src/km-charts/km-charts.module.ts
index 59cdeff..f06834e 100644
--- a/backend/src/km-charts/km-charts.module.ts
+++ b/backend/src/km-charts/km-charts.module.ts
@@ -7,12 +7,30 @@ import { Histories } from 'src/patients/histories/entity/histories.entity';
import { KM_Complaints } from 'src/km-complaints/entity/km-complaints.entity';
import { Orders } from 'src/orders/entity/orders.entity';
import { MComplaintsService } from 'src/m-complaints/m-complaints.service';
+import { KmPrescriptionsService } from 'src/km-prescriptions/km-prescriptions.service';
+import { KmMedicinesService } from 'src/km-medicines/km-medicines.service';
+import { KM_Prescriptions } from 'src/km-prescriptions/entity/km-prescriptions.entity';
+import { KM_Medicines } from 'src/km-medicines/entity/km-medicines.entity';
+import { CommonService } from 'src/common/common.service';
@Module({
imports: [
- TypeOrmModule.forFeature([KM_Charts, Histories, KM_Complaints, Orders]),
+ TypeOrmModule.forFeature([
+ KM_Charts,
+ Histories,
+ KM_Complaints,
+ Orders,
+ KM_Prescriptions,
+ KM_Medicines,
+ ]),
],
controllers: [KmChartsController],
- providers: [KmChartsService, MComplaintsService],
+ providers: [
+ KmChartsService,
+ MComplaintsService,
+ KmPrescriptionsService,
+ KmMedicinesService,
+ CommonService,
+ ],
})
export class KmChartsModule {}
diff --git a/backend/src/km-charts/km-charts.service.ts b/backend/src/km-charts/km-charts.service.ts
index 7e6e33f..7ef343d 100644
--- a/backend/src/km-charts/km-charts.service.ts
+++ b/backend/src/km-charts/km-charts.service.ts
@@ -142,4 +142,10 @@ export class KmChartsService {
where: { id: chartId },
});
}
+
+ async checkChartExistsById(id: number) {
+ return this.chartsRepository.exists({
+ where: { id },
+ });
+ }
}
diff --git a/backend/src/km-medicines/entity/km-medicines.entity.ts b/backend/src/km-medicines/entity/km-medicines.entity.ts
index ae3f6ea..3eb1cfc 100644
--- a/backend/src/km-medicines/entity/km-medicines.entity.ts
+++ b/backend/src/km-medicines/entity/km-medicines.entity.ts
@@ -1,5 +1,5 @@
import { BaseModel } from 'src/common/entity/base.entity';
-import { KM_Prescriptions } from 'src/km-prescriptions/entity/km-prescriotions.entity';
+import { KM_Prescriptions } from 'src/km-prescriptions/entity/km-prescriptions.entity';
import { Column, DeleteDateColumn, Entity, OneToMany } from 'typeorm';
@Entity()
diff --git a/backend/src/km-medicines/km-medicines.service.ts b/backend/src/km-medicines/km-medicines.service.ts
index 03b5761..fc113cd 100644
--- a/backend/src/km-medicines/km-medicines.service.ts
+++ b/backend/src/km-medicines/km-medicines.service.ts
@@ -173,4 +173,10 @@ export class KmMedicinesService {
throw new BadRequestException(error);
}
}
+
+ async checkMedicineExistsById(id: number) {
+ return this.medicinesRepository.exists({
+ where: { id },
+ });
+ }
}
diff --git a/backend/src/km-prescriptions/dto/create-km-prescription.dto.ts b/backend/src/km-prescriptions/dto/create-km-prescription.dto.ts
new file mode 100644
index 0000000..60d726a
--- /dev/null
+++ b/backend/src/km-prescriptions/dto/create-km-prescription.dto.ts
@@ -0,0 +1,55 @@
+import { PickType } from '@nestjs/mapped-types';
+import { KM_Prescriptions } from '../entity/km-prescriptions.entity';
+import { IsInt, IsNumber, IsOptional, IsString } from 'class-validator';
+import { ApiProperty } from '@nestjs/swagger';
+
+export class CreateKMPrescriptionDto extends PickType(KM_Prescriptions, [
+ 'doses',
+ 'dosesCountByDay',
+ 'dosesDay',
+ 'dosesTime',
+ 'memo',
+]) {
+ @ApiProperty({
+ description: '1회 투약량',
+ example: 1,
+ })
+ @IsNumber()
+ doses: number;
+
+ @ApiProperty({
+ description: '1일 복용횟수',
+ example: 'tid',
+ })
+ @IsString()
+ dosesCountByDay: string;
+
+ @ApiProperty({
+ description: '복용 일수',
+ example: 5,
+ })
+ @IsInt()
+ dosesDay: number;
+
+ @ApiProperty({
+ description: '복용 시간',
+ example: '식전',
+ })
+ @IsString()
+ dosesTime: string;
+
+ @ApiProperty({
+ description: '메모',
+ example: '',
+ })
+ @IsString()
+ @IsOptional()
+ memo: string;
+
+ @ApiProperty({
+ description: '약품 ID',
+ example: 1,
+ })
+ @IsNumber()
+ medicineId: number;
+}
diff --git a/backend/src/km-prescriptions/entity/km-prescriotions.entity.ts b/backend/src/km-prescriptions/entity/km-prescriptions.entity.ts
similarity index 93%
rename from backend/src/km-prescriptions/entity/km-prescriotions.entity.ts
rename to backend/src/km-prescriptions/entity/km-prescriptions.entity.ts
index 9ca6f60..747ae04 100644
--- a/backend/src/km-prescriptions/entity/km-prescriotions.entity.ts
+++ b/backend/src/km-prescriptions/entity/km-prescriptions.entity.ts
@@ -33,9 +33,11 @@ export class KM_Prescriptions extends BaseModel {
@IsInt()
dosesDay: number;
- @Column()
- @IsInt()
- dosesTime: number;
+ @Column('char', {
+ length: 10,
+ })
+ @IsString()
+ dosesTime: string;
@Column('float')
@IsNumber()
diff --git a/backend/src/km-prescriptions/km-prescriptions.module.ts b/backend/src/km-prescriptions/km-prescriptions.module.ts
index aaf8c15..ba0da1a 100644
--- a/backend/src/km-prescriptions/km-prescriptions.module.ts
+++ b/backend/src/km-prescriptions/km-prescriptions.module.ts
@@ -1,7 +1,7 @@
import { Module } from '@nestjs/common';
import { KmPrescriptionsService } from './km-prescriptions.service';
import { KmPrescriptionsController } from './km-prescriptions.controller';
-import { KM_Prescriptions } from './entity/km-prescriotions.entity';
+import { KM_Prescriptions } from './entity/km-prescriptions.entity';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
diff --git a/backend/src/km-prescriptions/km-prescriptions.service.ts b/backend/src/km-prescriptions/km-prescriptions.service.ts
index 634247e..88a1989 100644
--- a/backend/src/km-prescriptions/km-prescriptions.service.ts
+++ b/backend/src/km-prescriptions/km-prescriptions.service.ts
@@ -1,4 +1,31 @@
import { Injectable } from '@nestjs/common';
+import { InjectRepository } from '@nestjs/typeorm';
+import { KM_Prescriptions } from './entity/km-prescriptions.entity';
+import { Repository } from 'typeorm';
+import { CreateKMPrescriptionDto } from './dto/create-km-prescription.dto';
+import { convertDosesCountByDay } from 'src/common/util/convert.util';
@Injectable()
-export class KmPrescriptionsService {}
+export class KmPrescriptionsService {
+ constructor(
+ @InjectRepository(KM_Prescriptions)
+ private readonly prescriptionsRepository: Repository,
+ ) {}
+
+ async createPrescription(
+ chartId: number,
+ prescriptionDto: CreateKMPrescriptionDto,
+ ) {
+ const { medicineId, ...restPrescriptionDto } = prescriptionDto;
+
+ return await this.prescriptionsRepository.save({
+ ...restPrescriptionDto,
+ dosesTotal:
+ restPrescriptionDto.doses *
+ convertDosesCountByDay(restPrescriptionDto.dosesCountByDay) *
+ restPrescriptionDto.dosesDay,
+ chart: { id: chartId },
+ medicine: { id: medicineId },
+ });
+ }
+}
diff --git a/backend/src/m-charts/entity/m-charts.entity.ts b/backend/src/m-charts/entity/m-charts.entity.ts
index bb84cc2..94f943c 100644
--- a/backend/src/m-charts/entity/m-charts.entity.ts
+++ b/backend/src/m-charts/entity/m-charts.entity.ts
@@ -1,6 +1,6 @@
import { BaseModel } from 'src/common/entity/base.entity';
import { M_Complaints } from 'src/m-complaints/entity/m-complaints.entity';
-import { M_Prescriptions } from 'src/m-prescriptions/entity/m-prescriotions.entity';
+import { M_Prescriptions } from 'src/m-prescriptions/entity/m-prescriptions.entity';
import { Patients } from 'src/patients/entity/patients.entity';
import { Column, Entity, ManyToOne, OneToMany } from 'typeorm';
diff --git a/backend/src/m-charts/m-charts.controller.ts b/backend/src/m-charts/m-charts.controller.ts
index 3586d13..2518cdb 100644
--- a/backend/src/m-charts/m-charts.controller.ts
+++ b/backend/src/m-charts/m-charts.controller.ts
@@ -8,6 +8,7 @@ import {
ParseIntPipe,
Patch,
BadRequestException,
+ NotFoundException,
} from '@nestjs/common';
import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
import { MChartsService } from './m-charts.service';
@@ -24,7 +25,7 @@ export class MChartsController {
constructor(
private readonly chartsService: MChartsService,
private readonly prescriptionsService: MPrescriptionsService,
- private readonly medicineService: MMedicinesService,
+ private readonly medicinesService: MMedicinesService,
) {}
@Post('/:chartId/prediagnosis')
@@ -150,7 +151,7 @@ export class MChartsController {
const prescriptions = await Promise.all([
...createMDiagnosisDto.prescriptions.map((prescription) => {
- return this.prescriptionsService.createMPrescription(
+ return this.prescriptionsService.createPrescription(
chartId,
prescription,
);
@@ -223,7 +224,7 @@ export class MChartsController {
const prescriptions =
await this.prescriptionsService.getPrescriptions(chartId);
prescriptions.map(async (prescription) => {
- await this.medicineService.updateMedicineTotalAmount(
+ await this.medicinesService.updateMedicineTotalAmount(
prescription.medicine.id,
prescription,
);
@@ -251,13 +252,25 @@ export class MChartsController {
@ApiResponse({
status: HttpStatus.NOT_FOUND,
})
- async postMPrescription(
+ async postPrescription(
@Param('chartId', ParseIntPipe) chartId: number,
- @Body() createMPrescriptionDto: CreateMPrescriptionDto,
+ @Body() createPrescriptionDto: CreateMPrescriptionDto,
) {
- return await this.prescriptionsService.createMPrescription(
+ const chartExists = await this.chartsService.checkChartExistsById(chartId);
+ if (!chartExists) {
+ throw new NotFoundException();
+ }
+
+ const medicineExists = await this.medicinesService.checkMedicineExistsById(
+ createPrescriptionDto.medicineId,
+ );
+ if (!medicineExists) {
+ throw new NotFoundException('존재하지 않는 약품입니다.');
+ }
+
+ return await this.prescriptionsService.createPrescription(
chartId,
- createMPrescriptionDto,
+ createPrescriptionDto,
);
}
}
diff --git a/backend/src/m-charts/m-charts.service.ts b/backend/src/m-charts/m-charts.service.ts
index 2683cde..935e999 100644
--- a/backend/src/m-charts/m-charts.service.ts
+++ b/backend/src/m-charts/m-charts.service.ts
@@ -256,4 +256,10 @@ export class MChartsService {
relations: { prescriptions: { medicine: true } },
});
}
+
+ async checkChartExistsById(id: number) {
+ return this.chartsRepository.exists({
+ where: { id },
+ });
+ }
}
diff --git a/backend/src/m-medicines/entity/m-medicines.entity.ts b/backend/src/m-medicines/entity/m-medicines.entity.ts
index 709a8e9..07067c8 100644
--- a/backend/src/m-medicines/entity/m-medicines.entity.ts
+++ b/backend/src/m-medicines/entity/m-medicines.entity.ts
@@ -1,6 +1,6 @@
import { BaseModel } from 'src/common/entity/base.entity';
import { M_Medicine_Categories } from 'src/m-medicine-categories/entity/m_medicine_categories.entity';
-import { M_Prescriptions } from 'src/m-prescriptions/entity/m-prescriotions.entity';
+import { M_Prescriptions } from 'src/m-prescriptions/entity/m-prescriptions.entity';
import {
Column,
DeleteDateColumn,
diff --git a/backend/src/m-medicines/m-medicines.service.ts b/backend/src/m-medicines/m-medicines.service.ts
index 6179dbf..8e6ba6f 100644
--- a/backend/src/m-medicines/m-medicines.service.ts
+++ b/backend/src/m-medicines/m-medicines.service.ts
@@ -18,7 +18,7 @@ import { UpdateMMedicineDto } from './dto/update-m-medicine.dto';
import { PaginateMMedicineDto } from './dto/paginate-m-medicine.dto';
import { CommonService } from 'src/common/common.service';
import { convertDosesCountByDay } from 'src/common/util/convert.util';
-import { M_Prescriptions } from 'src/m-prescriptions/entity/m-prescriotions.entity';
+import { M_Prescriptions } from 'src/m-prescriptions/entity/m-prescriptions.entity';
@Injectable()
export class MMedicinesService {
@@ -211,6 +211,12 @@ export class MMedicinesService {
}
}
+ async checkMedicineExistsById(id: number) {
+ return this.medicinesRepository.exists({
+ where: { id },
+ });
+ }
+
async checkDeletedMedicineByCategoryId(categoryId: number) {
const [, deletedMedicineCount] =
await this.medicinesRepository.findAndCount({
diff --git a/backend/src/m-prescriptions/dto/create-m-prescription.dto.ts b/backend/src/m-prescriptions/dto/create-m-prescription.dto.ts
index 3ec2c4a..493c21b 100644
--- a/backend/src/m-prescriptions/dto/create-m-prescription.dto.ts
+++ b/backend/src/m-prescriptions/dto/create-m-prescription.dto.ts
@@ -1,5 +1,5 @@
import { PickType } from '@nestjs/mapped-types';
-import { M_Prescriptions } from '../entity/m-prescriotions.entity';
+import { M_Prescriptions } from '../entity/m-prescriptions.entity';
import { IsInt, IsNumber, IsOptional, IsString } from 'class-validator';
import { ApiProperty } from '@nestjs/swagger';
@@ -7,7 +7,6 @@ export class CreateMPrescriptionDto extends PickType(M_Prescriptions, [
'doses',
'dosesCountByDay',
'dosesDay',
- 'dosesTotal',
'bundle',
'memo',
]) {
diff --git a/backend/src/m-prescriptions/entity/m-prescriotions.entity.ts b/backend/src/m-prescriptions/entity/m-prescriptions.entity.ts
similarity index 100%
rename from backend/src/m-prescriptions/entity/m-prescriotions.entity.ts
rename to backend/src/m-prescriptions/entity/m-prescriptions.entity.ts
diff --git a/backend/src/m-prescriptions/m-prescriptions.module.ts b/backend/src/m-prescriptions/m-prescriptions.module.ts
index ef5bc58..6f20f59 100644
--- a/backend/src/m-prescriptions/m-prescriptions.module.ts
+++ b/backend/src/m-prescriptions/m-prescriptions.module.ts
@@ -1,7 +1,7 @@
import { Module } from '@nestjs/common';
import { MPrescriptionsService } from './m-prescriptions.service';
import { MPrescriptionsController } from './m-prescriptions.controller';
-import { M_Prescriptions } from './entity/m-prescriotions.entity';
+import { M_Prescriptions } from './entity/m-prescriptions.entity';
import { TypeOrmModule } from '@nestjs/typeorm';
import { M_Charts } from 'src/m-charts/entity/m-charts.entity';
import { M_Medicines } from 'src/m-medicines/entity/m-medicines.entity';
diff --git a/backend/src/m-prescriptions/m-prescriptions.service.ts b/backend/src/m-prescriptions/m-prescriptions.service.ts
index 9736945..7f92efd 100644
--- a/backend/src/m-prescriptions/m-prescriptions.service.ts
+++ b/backend/src/m-prescriptions/m-prescriptions.service.ts
@@ -4,7 +4,7 @@ import {
NotFoundException,
} from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
-import { M_Prescriptions } from './entity/m-prescriotions.entity';
+import { M_Prescriptions } from './entity/m-prescriptions.entity';
import { Repository } from 'typeorm';
import { CreateMPrescriptionDto } from './dto/create-m-prescription.dto';
import { M_Charts } from 'src/m-charts/entity/m-charts.entity';
@@ -40,7 +40,7 @@ export class MPrescriptionsService {
});
}
- async createMPrescription(
+ async createPrescription(
chartId: number,
prescriptionDto: CreateMPrescriptionDto,
) {