API update status antrian

This commit is contained in:
renaldybrada
2026-02-11 14:15:36 +07:00
parent d87474484f
commit c67fc44270
7 changed files with 217 additions and 13 deletions
+33
View File
@@ -173,6 +173,39 @@ const docTemplate = `{
}
}
},
"/antrian-operasi/{id}/update-status": {
"put": {
"tags": [
"Antrian Operasi"
],
"summary": "Update Status Antrian Operasi",
"parameters": [
{
"description": "Update Status Pasien Operasi",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/antrianoperasi.StatusPasienRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/shared.BaseResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/shared.BaseErrorResponse"
}
}
}
}
},
"/dashboard/antrian-per-kategori/": {
"get": {
"tags": [
+33
View File
@@ -167,6 +167,39 @@
}
}
},
"/antrian-operasi/{id}/update-status": {
"put": {
"tags": [
"Antrian Operasi"
],
"summary": "Update Status Antrian Operasi",
"parameters": [
{
"description": "Update Status Pasien Operasi",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/antrianoperasi.StatusPasienRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/shared.BaseResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/shared.BaseErrorResponse"
}
}
}
}
},
"/dashboard/antrian-per-kategori/": {
"get": {
"tags": [
+21
View File
@@ -485,6 +485,27 @@ paths:
summary: Update Antrian Operasi
tags:
- Antrian Operasi
/antrian-operasi/{id}/update-status:
put:
parameters:
- description: Update Status Pasien Operasi
in: body
name: body
required: true
schema:
$ref: '#/definitions/antrianoperasi.StatusPasienRequest'
responses:
"200":
description: OK
schema:
$ref: '#/definitions/shared.BaseResponse'
"500":
description: Internal Server Error
schema:
$ref: '#/definitions/shared.BaseErrorResponse'
summary: Update Status Antrian Operasi
tags:
- Antrian Operasi
/dashboard/antrian-per-kategori/:
get:
responses:
+60 -9
View File
@@ -48,9 +48,9 @@ func (h AntrianOperasiHandler) CreateAntrianOperasi(c *gin.Context) {
var req CreatePasienOperasiRequest
// Binding format JSON
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(500, shared.BaseErrorResponse{
c.JSON(400, shared.BaseErrorResponse{
Success: false,
Code: 500,
Code: 400,
Message: "error bind json",
Errors: shared.ValidationError(err),
})
@@ -61,9 +61,9 @@ func (h AntrianOperasiHandler) CreateAntrianOperasi(c *gin.Context) {
isValid, errValidation := req.DataValidation(c, h)
if isValid == false {
log.Printf("validation error : %s", errValidation)
c.JSON(500, shared.BaseErrorResponse{
c.JSON(400, shared.BaseErrorResponse{
Success: false,
Code: 500,
Code: 400,
Message: "validation error",
Errors: errValidation,
})
@@ -153,9 +153,9 @@ func (h AntrianOperasiHandler) UpdateAntrianOperasi(c *gin.Context) {
var req CreatePasienOperasiRequest
// Binding format JSON
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(500, shared.BaseErrorResponse{
c.JSON(400, shared.BaseErrorResponse{
Success: false,
Code: 500,
Code: 400,
Message: "error bind json",
Errors: shared.ValidationError(err),
})
@@ -166,9 +166,9 @@ func (h AntrianOperasiHandler) UpdateAntrianOperasi(c *gin.Context) {
isValid, errValidation := req.DataValidation(c, h)
if isValid == false {
log.Printf("validation error : %s", errValidation)
c.JSON(500, shared.BaseErrorResponse{
c.JSON(400, shared.BaseErrorResponse{
Success: false,
Code: 500,
Code: 400,
Message: "validation error",
Errors: errValidation,
})
@@ -189,5 +189,56 @@ func (h AntrianOperasiHandler) UpdateAntrianOperasi(c *gin.Context) {
return
}
c.JSON(201, shared.ToBaseResponse(res, true, 201, "success update antrian operasi"))
c.JSON(200, shared.ToBaseResponse(res, true, 200, "success update antrian operasi"))
}
// UpdateStatusAntrianOperasi godoc
// @Summary Update Status Antrian Operasi
// @Tags Antrian Operasi
// @Param body body StatusPasienRequest true "Update Status Pasien Operasi"
// @Success 200 {object} shared.BaseResponse
// @Failure 500 {object} shared.BaseErrorResponse
// @Router /antrian-operasi/{id}/update-status [put]
func (h AntrianOperasiHandler) UpdateStatusAntrianOperasi(c *gin.Context) {
id := c.Param("id")
var req StatusPasienRequest
// Binding format JSON
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(400, shared.BaseErrorResponse{
Success: false,
Code: 400,
Message: "error bind json",
Errors: shared.ValidationError(err),
})
return
}
// Request data master validation
isValid, errValidation := req.UpdateStatusValidation()
if isValid == false {
log.Printf("validation error : %s", errValidation)
c.JSON(400, shared.BaseErrorResponse{
Success: false,
Code: 400,
Message: "validation error",
Errors: errValidation,
})
return
}
// Start update database
res, err := h.repo.UpdateStatusAntrianOperasi(c, id, req)
if err != nil {
log.Printf("update antrian error : %s", err)
errMessage := []string{err.Error()}
c.JSON(500, shared.BaseErrorResponse{
Success: false,
Code: 500,
Message: "update error",
Errors: errMessage,
})
return
}
c.JSON(200, shared.ToBaseResponse(res, true, 200, "success update antrian operasi"))
}
+50 -4
View File
@@ -26,6 +26,7 @@ type IAntrianOperasiRepository interface {
SearchableListAntrianOperasi(c *gin.Context) (ListPasienOperasiPaginate, error)
GetAntrianOperasiById(c *gin.Context, id string) (DetailPasienOperasiResultQuery, error)
UpdateAntrianOperasi(c *gin.Context, id string, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error)
UpdateStatusAntrianOperasi(c *gin.Context, id string, req StatusPasienRequest) (StatusPasienRequest, error)
}
type antrianOperasiRepo struct {
@@ -307,7 +308,7 @@ func (r antrianOperasiRepo) CreateAntrianOperasi(c *gin.Context, req CreatePasie
"\"Nomor_spesialis\"", "\"Nomor_sub_spesialis\"",
}, Values: []interface{}{
idAntrian,
req.StatusPasienData.StatusOperasi,
"draft",
time.Now(),
req.FormData.NoRekamMedis,
req.FormData.NoKtp,
@@ -319,7 +320,7 @@ func (r antrianOperasiRepo) CreateAntrianOperasi(c *gin.Context, req CreatePasie
req.RencanaOperasiData.TanggalDaftar,
req.RencanaOperasiData.KategoriOperasi,
req.RencanaOperasiData.RencanaOperasi,
req.StatusPasienData.StatusOperasi,
"1",
1, // nomor
req.RencanaOperasiData.Spesialis,
req.RencanaOperasiData.SubSpesialis,
@@ -778,13 +779,13 @@ func (r antrianOperasiRepo) UpdateAntrianOperasi(c *gin.Context, id string, req
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\"",
"\"Rencana_operasi\"", "\"Keterangan\"",
"\"Status_operasi\"", "\"Spesialis\"", "\"Sub_spesialis\"",
},
Values: []interface{}{
time.Now(), req.FormData.NoRekamMedis, req.FormData.NoKtp, req.FormData.NamaPasien, req.FormData.JenisKelamin,
req.FormData.TglLahir, req.FormData.Umur, req.FormData.Alamat, req.RencanaOperasiData.KategoriOperasi,
req.RencanaOperasiData.RencanaOperasi, req.RencanaOperasiData.Keterangan, req.StatusPasienData.TglSelesai,
req.RencanaOperasiData.RencanaOperasi, req.RencanaOperasiData.Keterangan,
req.StatusPasienData.StatusOperasi, req.RencanaOperasiData.Spesialis, req.RencanaOperasiData.SubSpesialis,
},
}
@@ -842,3 +843,48 @@ func (r antrianOperasiRepo) UpdateAntrianOperasi(c *gin.Context, id string, req
return req, nil
}
func (r antrianOperasiRepo) UpdateStatusAntrianOperasi(c *gin.Context, id string, req StatusPasienRequest) (StatusPasienRequest, error) {
// Update main table
updateMainQuery := queryUtils.UpdateData{
Columns: []string{
"date_updated", "\"Keterangan\"", "\"Status_operasi\"",
},
Values: []interface{}{
time.Now(), req.KeteranganStatus, req.StatusOperasi,
},
}
if req.StatusOperasi == "2" {
updateMainQuery.Columns = append(updateMainQuery.Columns, "\"Tanggal_selesai_operasi\"")
updateMainQuery.Values = append(updateMainQuery.Values, req.TglSelesai)
}
filters := []queryUtils.FilterGroup{
{
Filters: []queryUtils.DynamicFilter{
{Column: "id", Operator: queryUtils.OpEqual, Value: id},
},
},
}
sqlUpdateMain, args, err := r.queryBuilder.BuildUpdateQuery(TBL_NAME, updateMainQuery, filters)
if err != nil {
log.Printf("Unable to create query update : %s", err)
return req, err
}
db, err := r.db.GetSQLXDB(DB_NAME)
if err != nil {
log.Printf("Erorr initiating db : %v", err)
return req, err
}
_, err = db.ExecContext(c, sqlUpdateMain, args...)
if err != nil {
log.Printf("Error executing query : %v", err)
return req, err
}
return req, nil
}
@@ -71,3 +71,22 @@ func (req CreatePasienOperasiRequest) DataValidation(c *gin.Context, handler Ant
return isValid, errValidation
}
func (req StatusPasienRequest) UpdateStatusValidation() (bool, []string) {
isValid := false
var errValidation []string
if req.StatusOperasi != "2" && req.TglSelesai != nil {
errValidation = append(errValidation, "Tanggal selesai terisi ketika status belum selesai")
}
if req.StatusOperasi == "2" && req.TglSelesai == nil {
errValidation = append(errValidation, "Tanggal selesai harus diisi ketika status selesai")
}
if len(errValidation) == 0 {
isValid = true
}
return isValid, errValidation
}
@@ -28,4 +28,5 @@ func RegisterRoutes(r *gin.RouterGroup, dbService database.Service) {
r.GET("/antrian-operasi", antrianOperasiHandler.GetListAntrianOperasi)
r.GET("/antrian-operasi/:id", antrianOperasiHandler.GetDetailAntrianOperasi)
r.PUT("/antrian-operasi/:id", antrianOperasiHandler.UpdateAntrianOperasi)
r.PUT("/antrian-operasi/:id/update-status", antrianOperasiHandler.UpdateStatusAntrianOperasi)
}