From f670c7ffc83bdc3293f54a284e0562c5b953b575 Mon Sep 17 00:00:00 2001 From: renaldybrada Date: Tue, 10 Feb 2026 08:47:38 +0700 Subject: [PATCH] testing update antrian + dokumentasi swagger --- docs/docs.go | 34 +++++++++++++ docs/swagger.json | 34 +++++++++++++ docs/swagger.yaml | 22 ++++++++ internal/domain/antrian_operasi/handler.go | 51 +++++++++++++++++++ internal/domain/antrian_operasi/model.go | 2 +- internal/domain/antrian_operasi/repository.go | 27 +++++----- internal/domain/antrian_operasi/request.go | 2 +- .../antrian_operasi/requestValidation.go | 6 ++- internal/domain/antrian_operasi/routes.go | 1 + 9 files changed, 164 insertions(+), 15 deletions(-) diff --git a/docs/docs.go b/docs/docs.go index ba9e0eb..f62f1f9 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -140,6 +140,37 @@ const docTemplate = `{ } } } + }, + "put": { + "tags": [ + "Antrian Operasi" + ], + "summary": "Update Antrian Operasi", + "parameters": [ + { + "description": "Update Pasien Operasi", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/antrianoperasi.CreatePasienOperasiRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shared.BaseResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/shared.BaseErrorResponse" + } + } + } } }, "/dashboard/antrian-per-kategori/": { @@ -653,6 +684,9 @@ const docTemplate = `{ "subSpesialis" ], "properties": { + "kategoriName": { + "type": "string" + }, "kategoriOperasi": { "type": "integer" }, diff --git a/docs/swagger.json b/docs/swagger.json index a2c33a6..6441afa 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -134,6 +134,37 @@ } } } + }, + "put": { + "tags": [ + "Antrian Operasi" + ], + "summary": "Update Antrian Operasi", + "parameters": [ + { + "description": "Update Pasien Operasi", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/antrianoperasi.CreatePasienOperasiRequest" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/shared.BaseResponse" + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/shared.BaseErrorResponse" + } + } + } } }, "/dashboard/antrian-per-kategori/": { @@ -647,6 +678,9 @@ "subSpesialis" ], "properties": { + "kategoriName": { + "type": "string" + }, "kategoriOperasi": { "type": "integer" }, diff --git a/docs/swagger.yaml b/docs/swagger.yaml index b1d4a53..1446922 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -137,6 +137,8 @@ definitions: type: object antrianoperasi.RencanaOperasiRequest: properties: + kategoriName: + type: string kategoriOperasi: type: integer keterangan: @@ -431,6 +433,26 @@ paths: summary: Detail List Antrian Operasi tags: - Antrian Operasi + put: + parameters: + - description: Update Pasien Operasi + in: body + name: body + required: true + schema: + $ref: '#/definitions/antrianoperasi.CreatePasienOperasiRequest' + responses: + "200": + description: OK + schema: + $ref: '#/definitions/shared.BaseResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/shared.BaseErrorResponse' + summary: Update 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 4461993..9955b92 100644 --- a/internal/domain/antrian_operasi/handler.go +++ b/internal/domain/antrian_operasi/handler.go @@ -131,3 +131,54 @@ func (h AntrianOperasiHandler) GetDetailAntrianOperasi(c *gin.Context) { res.MapToResponse(), true, 200, "success get antrian operasi", )) } + +// UpdateAntrianOperasi godoc +// @Summary Update Antrian Operasi +// @Tags Antrian Operasi +// @Param body body CreatePasienOperasiRequest true "Update Pasien Operasi" +// @Success 200 {object} shared.BaseResponse +// @Failure 500 {object} shared.BaseErrorResponse +// @Router /antrian-operasi/{id} [put] +func (h AntrianOperasiHandler) UpdateAntrianOperasi(c *gin.Context) { + id := c.Param("id") + var req CreatePasienOperasiRequest + // Binding format JSON + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(500, shared.BaseErrorResponse{ + Success: false, + Code: 500, + Message: "error bind json", + Errors: shared.ValidationError(err), + }) + return + } + + // Request data master validation + isValid, errValidation := req.DataValidation(c, h) + if isValid == false { + log.Printf("validation error : %s", errValidation) + c.JSON(500, shared.BaseErrorResponse{ + Success: false, + Code: 500, + Message: "validation error", + Errors: errValidation, + }) + return + } + + // Start insert database + res, err := h.repo.UpdateAntrianOperasi(c, id, req) + if err != nil { + log.Printf("insert error : %s", err) + errMessage := []string{err.Error()} + c.JSON(500, shared.BaseErrorResponse{ + Success: false, + Code: 500, + Message: "update error", + Errors: errMessage, + }) + return + } + + c.JSON(201, shared.ToBaseResponse(res, true, 201, "success update antrian operasi")) +} diff --git a/internal/domain/antrian_operasi/model.go b/internal/domain/antrian_operasi/model.go index d681718..d50d9ad 100644 --- a/internal/domain/antrian_operasi/model.go +++ b/internal/domain/antrian_operasi/model.go @@ -73,7 +73,7 @@ type DetailPasienOperasi struct { Spesialis *string `db:"spesialis"` SubSpesialis *string `db:"subspesialis"` Kategori *string `db:"kategori"` - StatusOperasi *string `db:"status_operasi"` + 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 4eaed9d..8104826 100644 --- a/internal/domain/antrian_operasi/repository.go +++ b/internal/domain/antrian_operasi/repository.go @@ -36,12 +36,12 @@ type antrianOperasiRepo struct { func NewRepository(dbService database.Service) IAntrianOperasiRepository { queryBuilder := queryUtils.NewQueryBuilder(queryUtils.DBTypePostgreSQL). SetAllowedColumns([]string{ - "id", "status", "date_created", "\"No_rekam_medis\"", "\"No_KTP\"", "\"Nama_pasien\"", + "id", "status", "date_created", "date_updated", "\"No_rekam_medis\"", "\"No_KTP\"", "\"Nama_pasien\"", "\"Jenis_kelamin\"", "\"Tanggal_lahir\"", "\"Umur\"", "\"Alamat\"", "\"Tanggal_daftar\"", "\"Kategori_operasi\"", "\"Rencana_operasi\"", "\"Status_operasi\"", "\"Nomor\"", - "\"Spesialis\"", "\"Sub_spesialis\"", "\"Keterangan_status_pasien\"", + "\"Spesialis\"", "\"Sub_spesialis\"", "\"Keterangan\"", "\"Nomor_spesialis\"", "\"Nomor_sub_spesialis\"", - "\"Nomor_telepon\"", + "\"Nomor_telepon\"", "\"Tanggal_selesai_operasi\"", "\"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\"", "FK_pasien_operasi_tindakan_pasien_operasi_ID", @@ -203,6 +203,7 @@ func (r antrianOperasiRepo) insertAntrianChildTables(c *gin.Context, tx *sql.Tx, } func (r antrianOperasiRepo) deleteAntrianChildTables(c *gin.Context, tx *sql.Tx, idAntrian string) error { + // parsedId := uuid.MustParse(idAntrian) // delete telephone filters := []queryUtils.FilterGroup{ { @@ -216,7 +217,7 @@ func (r antrianOperasiRepo) deleteAntrianChildTables(c *gin.Context, tx *sql.Tx, log.Printf("Unable to create delete phone query : %v", err) return err } - _, err = tx.ExecContext(c, sql, args) + _, err = tx.ExecContext(c, sql, args...) if err != nil { log.Printf("Unable to executing delete phone : %v", err) return err @@ -235,7 +236,7 @@ func (r antrianOperasiRepo) deleteAntrianChildTables(c *gin.Context, tx *sql.Tx, log.Printf("Unable to create delete diagnosa query : %v", err) return err } - _, err = tx.ExecContext(c, sql, args) + _, err = tx.ExecContext(c, sql, args...) if err != nil { log.Printf("Unable to executing delete diagnosa : %v", err) return err @@ -254,7 +255,7 @@ func (r antrianOperasiRepo) deleteAntrianChildTables(c *gin.Context, tx *sql.Tx, log.Printf("Unable to create delete tindakan query : %v", err) return err } - _, err = tx.ExecContext(c, sql, args) + _, err = tx.ExecContext(c, sql, args...) if err != nil { log.Printf("Unable to executing delete tindakan : %v", err) return err @@ -273,7 +274,7 @@ func (r antrianOperasiRepo) deleteAntrianChildTables(c *gin.Context, tx *sql.Tx, log.Printf("Unable to create delete dokter operasi query : %v", err) return err } - _, err = tx.ExecContext(c, sql, args) + _, err = tx.ExecContext(c, sql, args...) if err != nil { log.Printf("Unable to executing delete dokter operasi : %v", err) return err @@ -302,7 +303,7 @@ func (r antrianOperasiRepo) CreateAntrianOperasi(c *gin.Context, req CreatePasie "id", "status", "date_created", "\"No_rekam_medis\"", "\"No_KTP\"", "\"Nama_pasien\"", "\"Jenis_kelamin\"", "\"Tanggal_lahir\"", "\"Umur\"", "\"Alamat\"", "\"Tanggal_daftar\"", "\"Kategori_operasi\"", "\"Rencana_operasi\"", "\"Status_operasi\"", "\"Nomor\"", - "\"Spesialis\"", "\"Sub_spesialis\"", "\"Keterangan_status_pasien\"", + "\"Spesialis\"", "\"Sub_spesialis\"", "\"Keterangan\"", "\"Nomor_spesialis\"", "\"Nomor_sub_spesialis\"", }, Values: []interface{}{ idAntrian, @@ -775,10 +776,10 @@ func (r antrianOperasiRepo) UpdateAntrianOperasi(c *gin.Context, id string, req // Update main table updateMainQuery := queryUtils.UpdateData{ Columns: []string{ - "date_updated", "No_rekam_medis", "No_ktp", "Nama_pasien", "Jenis_kelamin", - "Tanggal_lahir", "Umur", "Alamat", "Kategori_operasi", - "Rencana_operasi", "Keterangan", "Tanggal_selesai_operasi", - "Status_operasi", "Spesialis", "Sub_spesialis", + "date_updated", "\"No_rekam_medis\"", "\"No_KTP\"", "\"Nama_pasien\"", "\"Jenis_kelamin\"", + "\"Tanggal_lahir\"", "\"Umur\"", "\"Alamat\"", "\"Kategori_operasi\"", + "\"Rencana_operasi\"", "\"Keterangan\"", "\"Tanggal_selesai_operasi\"", + "\"Status_operasi\"", "\"Spesialis\"", "\"Sub_spesialis\"", }, Values: []interface{}{ time.Now(), req.FormData.NoRekamMedis, req.FormData.NoKtp, req.FormData.NamaPasien, req.FormData.JenisKelamin, @@ -837,5 +838,7 @@ func (r antrianOperasiRepo) UpdateAntrianOperasi(c *gin.Context, id string, req return req, err } + tx.Commit() + return req, nil } diff --git a/internal/domain/antrian_operasi/request.go b/internal/domain/antrian_operasi/request.go index e1be303..2612bee 100644 --- a/internal/domain/antrian_operasi/request.go +++ b/internal/domain/antrian_operasi/request.go @@ -48,7 +48,7 @@ type DokterPelaksanaItemRequest struct { type StatusPasienRequest struct { TglSelesai *time.Time `json:"tanggalSelesai"` - StatusOperasi *string `json:"statusOperasi"` + StatusOperasi string `json:"statusOperasi"` KeteranganStatus *string `json:"keteranganStatus"` } diff --git a/internal/domain/antrian_operasi/requestValidation.go b/internal/domain/antrian_operasi/requestValidation.go index e5067b3..522879f 100644 --- a/internal/domain/antrian_operasi/requestValidation.go +++ b/internal/domain/antrian_operasi/requestValidation.go @@ -10,23 +10,27 @@ func (req CreatePasienOperasiRequest) DataValidation(c *gin.Context, handler Ant isValid := false var errValidation []string + // validasi status operasi (1,2,3,4) + // validasi kategori _, err := handler.repoKategori.GetKategoriById(c, req.RencanaOperasiData.KategoriOperasi) if err != nil { log.Println(err) errValidation = append(errValidation, err.Error()) } + // validasi spesialis _, err = handler.repoSpesialis.GetSpesialisById(c, req.RencanaOperasiData.Spesialis) if err != nil { log.Println(err) errValidation = append(errValidation, err.Error()) } + // validasi subspesialis _, err = handler.repoSpesialis.GetSubSpesialisById(c, req.RencanaOperasiData.SubSpesialis) if err != nil { log.Println(err) errValidation = append(errValidation, err.Error()) } - + // validasi dokter pelaksana for _, dp := range req.DokterPelaksanaItems { _, err := handler.repoDokter.GetDokterById(c, dp.Id) if err != nil { diff --git a/internal/domain/antrian_operasi/routes.go b/internal/domain/antrian_operasi/routes.go index 12ee187..762a480 100644 --- a/internal/domain/antrian_operasi/routes.go +++ b/internal/domain/antrian_operasi/routes.go @@ -21,4 +21,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) + r.PUT("/antrian-operasi/:id", antrianOperasiHandler.UpdateAntrianOperasi) }