From e0fbc4531a4446a509ba08294c585074a3c7b29f Mon Sep 17 00:00:00 2001 From: renaldybrada Date: Mon, 9 Feb 2026 08:56:28 +0700 Subject: [PATCH] API detail antrian operasi --- docs/docs.go | 75 ++++++ docs/swagger.json | 75 ++++++ docs/swagger.yaml | 50 ++++ internal/domain/antrian_operasi/handler.go | 25 ++ internal/domain/antrian_operasi/model.go | 42 ++++ internal/domain/antrian_operasi/repository.go | 216 +++++++++++++++++- internal/domain/antrian_operasi/request.go | 14 +- internal/domain/antrian_operasi/response.go | 98 ++++++++ internal/domain/antrian_operasi/routes.go | 1 + 9 files changed, 587 insertions(+), 9 deletions(-) create mode 100644 internal/domain/antrian_operasi/response.go diff --git a/docs/docs.go b/docs/docs.go index 94b6310..ba9e0eb 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -111,6 +111,37 @@ const docTemplate = `{ } } }, + "/antrian-operasi/{id}": { + "get": { + "tags": [ + "Antrian Operasi" + ], + "summary": "Detail List Antrian Operasi", + "parameters": [ + { + "type": "string", + "description": "id antrian", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/antrianoperasi.DetailPasienOperasiResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/shared.BaseErrorResponse" + } + } + } + } + }, "/dashboard/antrian-per-kategori/": { "get": { "tags": [ @@ -452,6 +483,44 @@ const docTemplate = `{ } } }, + "antrianoperasi.DetailPasienOperasiResponse": { + "type": "object", + "required": [ + "diagnosisItems", + "tindakanItems" + ], + "properties": { + "diagnosisItems": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/antrianoperasi.DiagnosisItemRequest" + } + }, + "dokterPelaksanaItems": { + "type": "array", + "items": { + "$ref": "#/definitions/antrianoperasi.DokterPelaksanaItemRequest" + } + }, + "formData": { + "$ref": "#/definitions/antrianoperasi.FormDataRequest" + }, + "rencanaOperasiData": { + "$ref": "#/definitions/antrianoperasi.RencanaOperasiRequest" + }, + "statusPasienData": { + "$ref": "#/definitions/antrianoperasi.StatusPasienRequest" + }, + "tindakanItems": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/antrianoperasi.TindakanItemRequest" + } + } + } + }, "antrianoperasi.DiagnosisItemRequest": { "type": "object", "required": [ @@ -596,9 +665,15 @@ const docTemplate = `{ "spesialis": { "type": "integer" }, + "spesialisName": { + "type": "string" + }, "subSpesialis": { "type": "integer" }, + "subSpesialisName": { + "type": "string" + }, "tanggalDaftar": { "type": "string" } diff --git a/docs/swagger.json b/docs/swagger.json index 7a45fe8..a2c33a6 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -105,6 +105,37 @@ } } }, + "/antrian-operasi/{id}": { + "get": { + "tags": [ + "Antrian Operasi" + ], + "summary": "Detail List Antrian Operasi", + "parameters": [ + { + "type": "string", + "description": "id antrian", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/antrianoperasi.DetailPasienOperasiResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/shared.BaseErrorResponse" + } + } + } + } + }, "/dashboard/antrian-per-kategori/": { "get": { "tags": [ @@ -446,6 +477,44 @@ } } }, + "antrianoperasi.DetailPasienOperasiResponse": { + "type": "object", + "required": [ + "diagnosisItems", + "tindakanItems" + ], + "properties": { + "diagnosisItems": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/antrianoperasi.DiagnosisItemRequest" + } + }, + "dokterPelaksanaItems": { + "type": "array", + "items": { + "$ref": "#/definitions/antrianoperasi.DokterPelaksanaItemRequest" + } + }, + "formData": { + "$ref": "#/definitions/antrianoperasi.FormDataRequest" + }, + "rencanaOperasiData": { + "$ref": "#/definitions/antrianoperasi.RencanaOperasiRequest" + }, + "statusPasienData": { + "$ref": "#/definitions/antrianoperasi.StatusPasienRequest" + }, + "tindakanItems": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/antrianoperasi.TindakanItemRequest" + } + } + } + }, "antrianoperasi.DiagnosisItemRequest": { "type": "object", "required": [ @@ -590,9 +659,15 @@ "spesialis": { "type": "integer" }, + "spesialisName": { + "type": "string" + }, "subSpesialis": { "type": "integer" }, + "subSpesialisName": { + "type": "string" + }, "tanggalDaftar": { "type": "string" } diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 38e61da..b1d4a53 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -26,6 +26,32 @@ definitions: - diagnosisItems - tindakanItems type: object + antrianoperasi.DetailPasienOperasiResponse: + properties: + diagnosisItems: + items: + $ref: '#/definitions/antrianoperasi.DiagnosisItemRequest' + minItems: 1 + type: array + dokterPelaksanaItems: + items: + $ref: '#/definitions/antrianoperasi.DokterPelaksanaItemRequest' + type: array + formData: + $ref: '#/definitions/antrianoperasi.FormDataRequest' + rencanaOperasiData: + $ref: '#/definitions/antrianoperasi.RencanaOperasiRequest' + statusPasienData: + $ref: '#/definitions/antrianoperasi.StatusPasienRequest' + tindakanItems: + items: + $ref: '#/definitions/antrianoperasi.TindakanItemRequest' + minItems: 1 + type: array + required: + - diagnosisItems + - tindakanItems + type: object antrianoperasi.DiagnosisItemRequest: properties: diagnosa: @@ -119,8 +145,12 @@ definitions: type: string spesialis: type: integer + spesialisName: + type: string subSpesialis: type: integer + subSpesialisName: + type: string tanggalDaftar: type: string required: @@ -381,6 +411,26 @@ paths: summary: Create Antrian Operasi tags: - Antrian Operasi + /antrian-operasi/{id}: + get: + parameters: + - description: id antrian + in: path + name: id + required: true + type: string + responses: + "200": + description: OK + schema: + $ref: '#/definitions/antrianoperasi.DetailPasienOperasiResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/shared.BaseErrorResponse' + summary: Detail List Antrian Operasi + tags: + - Antrian Operasi /dashboard/antrian-per-kategori/: get: responses: diff --git a/internal/domain/antrian_operasi/handler.go b/internal/domain/antrian_operasi/handler.go index 18d46bf..4461993 100644 --- a/internal/domain/antrian_operasi/handler.go +++ b/internal/domain/antrian_operasi/handler.go @@ -106,3 +106,28 @@ func (h AntrianOperasiHandler) GetListAntrianOperasi(c *gin.Context) { res.Data, res.Paging, true, 200, "success get list antrian operasi", )) } + +// DetailAntrianOperasi godoc +// @Summary Detail List Antrian Operasi +// @Tags Antrian Operasi +// @Param id path string true "id antrian" +// @Success 200 {object} DetailPasienOperasiResponse +// @Failure 500 {object} shared.BaseErrorResponse +// @Router /antrian-operasi/{id} [get] +func (h AntrianOperasiHandler) GetDetailAntrianOperasi(c *gin.Context) { + id := c.Param("id") + res, err := h.repo.GetAntrianOperasiById(c, id) + if err != nil { + c.JSON(500, shared.BaseErrorResponse{ + Success: false, + Code: 500, + Message: err.Error(), + }) + return + } + + c.JSON(200, + shared.ToBaseResponse( + res.MapToResponse(), true, 200, "success get antrian operasi", + )) +} diff --git a/internal/domain/antrian_operasi/model.go b/internal/domain/antrian_operasi/model.go index 9584cb9..1b39dec 100644 --- a/internal/domain/antrian_operasi/model.go +++ b/internal/domain/antrian_operasi/model.go @@ -36,3 +36,45 @@ type DiagnosaOperasiModel struct { JenisDiagnosa string `db:"Jenis_diagnosa"` AntrianId string `db:"antrian_id"` } + +type TindakanOperasiModel struct { + ID string `db:"id"` + KodeTindakan string `db:"Kode_tindakan"` + Tindakan *string `db:"Tindakan"` + TindakanTambahan *string `db:"Tindakan_tambahan"` +} + +type TeleponPasienModel struct { + ID string `db:"id"` + NomorTelepon string `db:"Nomor_telepon"` +} + +type DokterOperasiModel struct { + ID string `db:"id"` + Nip string `db:"nip"` + NamaDepan string `db:"nama_depan"` + NamaBelakang string `db:"nama_belakang"` + SatuanKerja string `db:"satker"` +} + +type DetailPasienOperasi struct { + ID string `db:"id" json:"id"` + TglDaftar time.Time `db:"tanggal_daftar"` + TglSelesai *time.Time `db:"tanggal_selesai"` + TglLahir *time.Time `db:"tanggal_lahir"` + Umur *string `db:"umur"` + Alamat *string `db:"alamat"` + NoKtp *string `db:"no_ktp"` + NoRekamMedis *string `db:"no_rekam_medis"` + NamaPasien *string `db:"nama_pasien"` + IdSpesialis int `db:"id_spesialis"` + IdSubSpesialis int `db:"id_sub_spesialis"` + IdKategori int `db:"id_kategori"` + Spesialis *string `db:"spesialis"` + SubSpesialis *string `db:"subspesialis"` + Kategori *string `db:"kategori"` + StatusOperasi *string `db:"status_operasi"` + JenisKelamin *string `db:"jenis_kelamin"` + Keterangan *string `db:"keterangan"` + RencanaOperasi *string `db:"rencana_operasi"` +} diff --git a/internal/domain/antrian_operasi/repository.go b/internal/domain/antrian_operasi/repository.go index abf436c..14a9cd4 100644 --- a/internal/domain/antrian_operasi/repository.go +++ b/internal/domain/antrian_operasi/repository.go @@ -20,6 +20,7 @@ const TBL_DIAGNOSA_OPERASI = "data_diagnosa_pasien_operasi" type IAntrianOperasiRepository interface { CreateAntrianOperasi(c *gin.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error) SearchableListAntrianOperasi(c *gin.Context) (ListPasienOperasiPaginate, error) + GetAntrianOperasiById(c *gin.Context, id string) (DetailPasienOperasiResultQuery, error) } type antrianOperasiRepo struct { @@ -36,10 +37,10 @@ func NewRepository(dbService database.Service) IAntrianOperasiRepository { "\"Spesialis\"", "\"Sub_spesialis\"", "\"Keterangan_status_pasien\"", "\"Nomor_spesialis\"", "\"Nomor_sub_spesialis\"", "\"Nomor_telepon\"", - "\"FK_pasien_operasi_telepon_pasien_operasi_ID\"", + "\"FK_pasien_operasi_telepon_pasien_operasi_ID\"", "FK_pasien_operasi_telepon_pasien_operasi_ID", "\"Kode_diagnosa\"", "\"Diagnosa\"", "\"Jenis_diagnosa\"", "\"FK_pasien_operasi_diagnosa_pasien_operasi_ID\"", "FK_pasien_operasi_diagnosa_pasien_operasi_ID", - "\"Kode_tindakan\"", "\"Tindakan\"", "\"Tindakan_tambahan\"", "\"FK_pasien_operasi_tindakan_pasien_operasi_ID\"", - "\"data_pasien_operasi_id\"", "\"data_pegawai_id\"", + "\"Kode_tindakan\"", "\"Tindakan\"", "\"Tindakan_tambahan\"", "\"FK_pasien_operasi_tindakan_pasien_operasi_ID\"", "FK_pasien_operasi_tindakan_pasien_operasi_ID", + "\"data_pasien_operasi_id\"", "\"data_pegawai_id\"", "data_pasien_operasi_id", }). SetAllowedTables([]string{TBL_NAME, TBL_DIAGNOSA_OPERASI}) queryBuilder.SetSecurityOptions(false, 100) @@ -477,3 +478,212 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPa return result, nil } + +func (r antrianOperasiRepo) GetAntrianOperasiById(c *gin.Context, id string) (DetailPasienOperasiResultQuery, error) { + var result DetailPasienOperasiResultQuery + + // main query + query := queryUtils.DynamicQuery{ + From: TBL_NAME, + Aliases: "dpo", + Fields: []queryUtils.SelectField{ + {Expression: "dpo.id"}, + {Expression: "dpo.Tanggal_daftar", Alias: "tanggal_daftar"}, + {Expression: "dpo.Tanggal_selesai_operasi", Alias: "tanggal_selesai"}, + {Expression: "dpo.Tanggal_lahir", Alias: "tanggal_lahir"}, + {Expression: "dpo.Umur", Alias: "umur"}, + {Expression: "dpo.Alamat", Alias: "alamat"}, + {Expression: "dpo.No_KTP", Alias: "no_ktp"}, + {Expression: "dpo.No_rekam_medis", Alias: "no_rekam_medis"}, + {Expression: "dpo.Nama_pasien", Alias: "nama_pasien"}, + {Expression: "dpo.Status_operasi", Alias: "status_operasi"}, + {Expression: "dpo.Jenis_kelamin", Alias: "jenis_kelamin"}, + {Expression: "dpo.Spesialis", Alias: "id_spesialis"}, + {Expression: "dpo.Sub_spesialis", Alias: "id_sub_spesialis"}, + {Expression: "dpo.Kategori_operasi", Alias: "id_kategori"}, + {Expression: "ds.Spesialis", Alias: "spesialis"}, + {Expression: "dss.Subspesialis", Alias: "subspesialis"}, + {Expression: "dko.Kategori", Alias: "kategori"}, + }, + Filters: []queryUtils.FilterGroup{ + { + Filters: []queryUtils.DynamicFilter{ + {Column: "dpo.id", Operator: queryUtils.OpEqual, Value: id}, + }, LogicOp: "AND", + }, + }, + Joins: []queryUtils.Join{ + { + Type: "LEFT", + Table: "daftar_spesialis", + Alias: "ds", + OnConditions: queryUtils.FilterGroup{ + Filters: []queryUtils.DynamicFilter{ + { + Column: "ds.id", Operator: queryUtils.OpEqual, Value: "dpo.Spesialis", + }, + }, + }, + }, + { + Type: "LEFT", + Table: "daftar_subspesialis", + Alias: "dss", + OnConditions: queryUtils.FilterGroup{ + Filters: []queryUtils.DynamicFilter{ + { + Column: "dpo.Sub_spesialis", Operator: queryUtils.OpEqual, Value: "dss.id", + }, + }, + }, + }, + { + Type: "LEFT", + Table: "daftar_kategori_operasi", + Alias: "dko", + OnConditions: queryUtils.FilterGroup{ + Filters: []queryUtils.DynamicFilter{ + { + Column: "dpo.Kategori_operasi", Operator: queryUtils.OpEqual, Value: "dko.id", + }, + }, + }, + }, + }, + } + + dbconn, err := r.db.GetSQLXDB(DB_NAME) + if err != nil { + log.Printf("Unable to connect db : %s", err) + return result, err + } + err = r.queryBuilder.ExecuteQueryRow(c, dbconn, query, &result.ResultMain) + if err != nil { + log.Printf("Unable to execute main query : %s", err) + return result, err + } + + // query diagnosa + queryDiagnosa := queryUtils.DynamicQuery{ + From: "data_diagnosa_pasien_operasi", + Fields: []queryUtils.SelectField{ + {Expression: "id"}, + {Expression: "Kode_diagnosa"}, + {Expression: "Diagnosa"}, + {Expression: "Jenis_diagnosa"}, + }, + Filters: []queryUtils.FilterGroup{ + { + Filters: []queryUtils.DynamicFilter{ + {Column: "FK_pasien_operasi_diagnosa_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: result.ResultMain.ID}, + }, LogicOp: "AND", + }, + }, + } + + err = r.queryBuilder.ExecuteQuery(c, dbconn, queryDiagnosa, &result.ResultDiagnosa) + if err != nil { + log.Printf("Unable to execute diagnosa query : %s", err) + return result, err + } + + // query tindakan + queryTindakan := queryUtils.DynamicQuery{ + From: "data_tindakan_pasien_operasi", + Fields: []queryUtils.SelectField{ + {Expression: "id"}, + {Expression: "Kode_tindakan"}, + {Expression: "Tindakan"}, + {Expression: "Tindakan_tambahan"}, + }, + Filters: []queryUtils.FilterGroup{ + { + Filters: []queryUtils.DynamicFilter{ + {Column: "FK_pasien_operasi_tindakan_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: result.ResultMain.ID}, + }, LogicOp: "AND", + }, + }, + } + + err = r.queryBuilder.ExecuteQuery(c, dbconn, queryTindakan, &result.ResultTindakan) + if err != nil { + log.Printf("Unable to execute tindakan query : %s", err) + return result, err + } + + // query telepon + queryTelepon := queryUtils.DynamicQuery{ + From: "data_telepon_pasien_operasi", + Fields: []queryUtils.SelectField{ + {Expression: "id"}, + {Expression: "Nomor_telepon"}, + }, + Filters: []queryUtils.FilterGroup{ + { + Filters: []queryUtils.DynamicFilter{ + {Column: "FK_pasien_operasi_telepon_pasien_operasi_ID", Operator: queryUtils.OpEqual, Value: result.ResultMain.ID}, + }, LogicOp: "AND", + }, + }, + } + + err = r.queryBuilder.ExecuteQuery(c, dbconn, queryTelepon, &result.ResultTeleponOperasi) + if err != nil { + log.Printf("Unable to execute telepon query : %s", err) + return result, err + } + + // query dokter + queryDokter := queryUtils.DynamicQuery{ + From: "data_pasien_operasi_data_pegawai_2", + Aliases: "dpodp", + Fields: []queryUtils.SelectField{ + {Expression: "dpodp.id"}, + {Expression: "dp.NIP", Alias: "nip"}, + {Expression: "dp.Nama_depan", Alias: "nama_depan"}, + {Expression: "dp.Nama_belakang", Alias: "nama_belakang"}, + {Expression: "dk.Nama_ksm", Alias: "satker"}, + }, + Filters: []queryUtils.FilterGroup{ + { + Filters: []queryUtils.DynamicFilter{ + {Column: "data_pasien_operasi_id", Operator: queryUtils.OpEqual, Value: result.ResultMain.ID}, + }, LogicOp: "AND", + }, + }, + Joins: []queryUtils.Join{ + { + Type: "LEFT", + Table: "data_pegawai", + Alias: "dp", + OnConditions: queryUtils.FilterGroup{ + Filters: []queryUtils.DynamicFilter{ + { + Column: "dpodp.data_pegawai_id", Operator: queryUtils.OpEqual, Value: "dp.id", + }, + }, + }, + }, + { + Type: "LEFT", + Table: "daftar_ksm", + Alias: "dk", + OnConditions: queryUtils.FilterGroup{ + Filters: []queryUtils.DynamicFilter{ + { + Column: "dp.KSM", Operator: queryUtils.OpEqual, Value: "dk.id", + }, + }, + }, + }, + }, + } + + err = r.queryBuilder.ExecuteQuery(c, dbconn, queryDokter, &result.ResultDokterOperasi) + if err != nil { + log.Printf("Unable to execute dokter query : %s", err) + return result, err + } + + return result, nil +} diff --git a/internal/domain/antrian_operasi/request.go b/internal/domain/antrian_operasi/request.go index e45e086..7a53c35 100644 --- a/internal/domain/antrian_operasi/request.go +++ b/internal/domain/antrian_operasi/request.go @@ -28,12 +28,14 @@ type TindakanItemRequest struct { } type RencanaOperasiRequest struct { - Spesialis int `json:"spesialis" binding:"required"` - SubSpesialis int `json:"subSpesialis" binding:"required"` - TanggalDaftar *time.Time `json:"tanggalDaftar"` - KategoriOperasi int `json:"kategoriOperasi"` - RencanaOperasi *string `json:"rencanaOperasi"` - Keterangan *string `json:"keterangan"` + Spesialis int `json:"spesialis" binding:"required"` + SpesialisName *string + SubSpesialis int `json:"subSpesialis" binding:"required"` + SubSpesialisName *string + TanggalDaftar *time.Time `json:"tanggalDaftar"` + KategoriOperasi int `json:"kategoriOperasi"` + RencanaOperasi *string `json:"rencanaOperasi"` + Keterangan *string `json:"keterangan"` } type DokterPelaksanaItemRequest struct { diff --git a/internal/domain/antrian_operasi/response.go b/internal/domain/antrian_operasi/response.go new file mode 100644 index 0000000..a7f41a9 --- /dev/null +++ b/internal/domain/antrian_operasi/response.go @@ -0,0 +1,98 @@ +package antrianoperasi + +import ( + "strings" +) + +type DetailPasienOperasiResultQuery struct { + ResultMain DetailPasienOperasi + ResultDiagnosa []DiagnosaOperasiModel + ResultTindakan []TindakanOperasiModel + ResultTeleponOperasi []TeleponPasienModel + ResultDokterOperasi []DokterOperasiModel +} + +type DetailPasienOperasiResponse struct { + FormData FormDataRequest `json:"formData"` + DiagnosisItem []DiagnosisItemRequest `json:"diagnosisItems" binding:"required,min=1,dive"` + TindakanItems []TindakanItemRequest `json:"tindakanItems" binding:"required,min=1,dive"` + RencanaOperasiData RencanaOperasiRequest `json:"rencanaOperasiData"` + DokterPelaksanaItems []DokterPelaksanaItemRequest `json:"dokterPelaksanaItems"` + StatusPasienData StatusPasienRequest `json:"statusPasienData"` +} + +func handleStringPointer(str *string) string { + var result string + if str != nil { + result = *str + } + return result +} + +func (model DetailPasienOperasiResultQuery) MapToResponse() DetailPasienOperasiResponse { + var result DetailPasienOperasiResponse + + // map main data + var tglLahir string + if model.ResultMain.TglLahir != nil { + tglLahir = model.ResultMain.TglLahir.Format("2006-01-02") + } + result.FormData = FormDataRequest{ + NoRekamMedis: handleStringPointer(model.ResultMain.NoRekamMedis), + NoKtp: model.ResultMain.NoKtp, + NamaPasien: model.ResultMain.NamaPasien, + JenisKelamin: model.ResultMain.JenisKelamin, + TglLahir: &tglLahir, + Umur: model.ResultMain.Umur, + Alamat: model.ResultMain.Alamat, + } + + for _, tlp := range model.ResultTeleponOperasi { + result.FormData.NoTelepon = append(result.FormData.NoTelepon, tlp.NomorTelepon) + } + + for _, d := range model.ResultDiagnosa { + result.DiagnosisItem = append(result.DiagnosisItem, DiagnosisItemRequest{ + KodeDiagnosa: d.KodeDiagnosa, + Diagnosa: d.Diagnosa.String, + JenisDiagnosa: d.JenisDiagnosa, + }) + } + + for _, t := range model.ResultTindakan { + result.TindakanItems = append(result.TindakanItems, TindakanItemRequest{ + KodeTindakan: &t.KodeTindakan, + Tindakan: t.Tindakan, + TindakanTambahan: t.TindakanTambahan, + }) + } + + result.RencanaOperasiData = RencanaOperasiRequest{ + Spesialis: model.ResultMain.IdSpesialis, + SpesialisName: model.ResultMain.Spesialis, + SubSpesialis: model.ResultMain.IdSubSpesialis, + SubSpesialisName: model.ResultMain.SubSpesialis, + TanggalDaftar: &model.ResultMain.TglDaftar, + KategoriOperasi: model.ResultMain.IdKategori, + RencanaOperasi: model.ResultMain.RencanaOperasi, + Keterangan: model.ResultMain.Keterangan, + } + + for _, dk := range model.ResultDokterOperasi { + joinedName := strings.ToUpper(dk.NamaDepan) + " " + strings.ToUpper(dk.NamaBelakang) + result.DokterPelaksanaItems = append(result.DokterPelaksanaItems, DokterPelaksanaItemRequest{ + Id: dk.ID, + Nip: &dk.Nip, + Nama: &joinedName, + SatuanKerja: &dk.SatuanKerja, + }) + } + + result.StatusPasienData = StatusPasienRequest{ + TglSelesai: model.ResultMain.TglSelesai, + StatusOperasi: model.ResultMain.StatusOperasi, + KeteranganStatus: model.ResultMain.Keterangan, + } + + return result +} diff --git a/internal/domain/antrian_operasi/routes.go b/internal/domain/antrian_operasi/routes.go index e2a3650..12ee187 100644 --- a/internal/domain/antrian_operasi/routes.go +++ b/internal/domain/antrian_operasi/routes.go @@ -20,4 +20,5 @@ func RegisterRoutes(r *gin.RouterGroup, dbService database.Service) { r.POST("/antrian-operasi", antrianOperasiHandler.CreateAntrianOperasi) r.GET("/antrian-operasi", antrianOperasiHandler.GetListAntrianOperasi) + r.GET("/antrian-operasi/:id", antrianOperasiHandler.GetDetailAntrianOperasi) }