From 0cbaba6a4d0aac93b58d4fd0f4b2465576c61cef Mon Sep 17 00:00:00 2001 From: renaldybrada Date: Thu, 5 Feb 2026 10:16:31 +0700 Subject: [PATCH] api list tindakan --- docs/docs.go | 44 ++++++++++++ docs/swagger.json | 44 ++++++++++++ docs/swagger.yaml | 28 ++++++++ internal/domain/reference/diagnosa/routes.go | 4 +- internal/domain/reference/tindakan/handler.go | 41 +++++++++++ internal/domain/reference/tindakan/model.go | 6 ++ .../domain/reference/tindakan/repository.go | 69 +++++++++++++++++++ internal/domain/reference/tindakan/routes.go | 17 +++++ internal/routes/routes.go | 2 + 9 files changed, 253 insertions(+), 2 deletions(-) create mode 100644 internal/domain/reference/tindakan/handler.go create mode 100644 internal/domain/reference/tindakan/model.go create mode 100644 internal/domain/reference/tindakan/repository.go create mode 100644 internal/domain/reference/tindakan/routes.go diff --git a/docs/docs.go b/docs/docs.go index 03b04c6..fd605f9 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -353,6 +353,39 @@ const docTemplate = `{ } } } + }, + "/reference/tindakan/": { + "get": { + "tags": [ + "Reference" + ], + "summary": "Get List Tindakan", + "parameters": [ + { + "type": "string", + "description": "Search keyword", + "name": "search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/tindakan.TindakanModel" + } + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/shared.BaseErrorResponse" + } + } + } + } } }, "definitions": { @@ -753,6 +786,17 @@ const docTemplate = `{ "type": "string" } } + }, + "tindakan.TindakanModel": { + "type": "object", + "properties": { + "KodeTindakan": { + "type": "string" + }, + "Tindakan": { + "type": "string" + } + } } } }` diff --git a/docs/swagger.json b/docs/swagger.json index e42752f..2adefaa 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -347,6 +347,39 @@ } } } + }, + "/reference/tindakan/": { + "get": { + "tags": [ + "Reference" + ], + "summary": "Get List Tindakan", + "parameters": [ + { + "type": "string", + "description": "Search keyword", + "name": "search", + "in": "query" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/tindakan.TindakanModel" + } + } + }, + "500": { + "description": "Internal Server Error", + "schema": { + "$ref": "#/definitions/shared.BaseErrorResponse" + } + } + } + } } }, "definitions": { @@ -747,6 +780,17 @@ "type": "string" } } + }, + "tindakan.TindakanModel": { + "type": "object", + "properties": { + "KodeTindakan": { + "type": "string" + }, + "Tindakan": { + "type": "string" + } + } } } } \ No newline at end of file diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 26cddd8..c89b18b 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -263,6 +263,13 @@ definitions: sub_spesialis: type: string type: object + tindakan.TindakanModel: + properties: + KodeTindakan: + type: string + Tindakan: + type: string + type: object host: localhost:8080 info: contact: {} @@ -489,4 +496,25 @@ paths: summary: Get List Sub Spesialis tags: - Reference + /reference/tindakan/: + get: + parameters: + - description: Search keyword + in: query + name: search + type: string + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/tindakan.TindakanModel' + type: array + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/shared.BaseErrorResponse' + summary: Get List Tindakan + tags: + - Reference swagger: "2.0" diff --git a/internal/domain/reference/diagnosa/routes.go b/internal/domain/reference/diagnosa/routes.go index a3d426e..f337882 100644 --- a/internal/domain/reference/diagnosa/routes.go +++ b/internal/domain/reference/diagnosa/routes.go @@ -10,8 +10,8 @@ func RegisterRoutes(r *gin.RouterGroup, dbService database.Service) { diagnosaRepo := NewRepository(dbService) DiagnosaHandler := NewDiagnosaHandler(diagnosaRepo) - kategori := r.Group("/diagnosa") + diagnosa := r.Group("/diagnosa") { - kategori.GET("", DiagnosaHandler.ListDiagnosa) + diagnosa.GET("", DiagnosaHandler.ListDiagnosa) } } diff --git a/internal/domain/reference/tindakan/handler.go b/internal/domain/reference/tindakan/handler.go new file mode 100644 index 0000000..9fd5ba0 --- /dev/null +++ b/internal/domain/reference/tindakan/handler.go @@ -0,0 +1,41 @@ +package tindakan + +import ( + "net/http" + + baseResponse "antrian-operasi/internal/shared" + + "github.com/gin-gonic/gin" +) + +type TindakanHandler struct { + repo ITindakanRepository +} + +func NewTindakanHandler(repo ITindakanRepository) TindakanHandler { + return TindakanHandler{repo} +} + +// List Tindakan godoc +// @Summary Get List Tindakan +// @Tags Reference +// @Param search query string false "Search keyword" +// @Success 200 {object} []TindakanModel +// @Failure 500 {object} shared.BaseErrorResponse +// @Router /reference/tindakan/ [get] +func (h TindakanHandler) ListDiagnosa(c *gin.Context) { + list, err := h.repo.SearchableListTindakan(c) + if err != nil { + errorResponse := baseResponse.BaseErrorResponse{ + Success: false, + Code: 500, + Message: err.Error(), + } + c.JSON(http.StatusInternalServerError, errorResponse) + return + } + + response := baseResponse.ToBaseResponse(list, true, 200, "success get diagnosa") + + c.JSON(http.StatusOK, response) +} diff --git a/internal/domain/reference/tindakan/model.go b/internal/domain/reference/tindakan/model.go new file mode 100644 index 0000000..7dcdc6b --- /dev/null +++ b/internal/domain/reference/tindakan/model.go @@ -0,0 +1,6 @@ +package tindakan + +type TindakanModel struct { + KodeTindakan string `db:"kode" json:"KodeTindakan"` + Keterangan string `db:"keterangan" json:"Tindakan"` +} diff --git a/internal/domain/reference/tindakan/repository.go b/internal/domain/reference/tindakan/repository.go new file mode 100644 index 0000000..f5368a3 --- /dev/null +++ b/internal/domain/reference/tindakan/repository.go @@ -0,0 +1,69 @@ +package tindakan + +import ( + "antrian-operasi/internal/database" + + queryUtils "antrian-operasi/internal/utils/query" + + "github.com/gin-gonic/gin" +) + +const DB_NAME = "db_simrs" +const TBL_NAME = "icd_cm" + +type ITindakanRepository interface { + SearchableListTindakan(c *gin.Context) ([]TindakanModel, error) +} + +type diagnosaRepo struct { + queryBuilder *queryUtils.QueryBuilder + db database.Service +} + +func NewRepository(dbService database.Service) ITindakanRepository { + queryBuilder := queryUtils.NewQueryBuilder(queryUtils.DBTypePostgreSQL). + SetAllowedColumns([]string{ + "kode", "keterangan", + }). + SetSecurityOptions(false, 100) + + return diagnosaRepo{ + queryBuilder: queryBuilder, + db: dbService, + } +} + +func (r diagnosaRepo) SearchableListTindakan(c *gin.Context) ([]TindakanModel, error) { + var result []TindakanModel + search := c.Query("search") + + query := queryUtils.DynamicQuery{ + From: TBL_NAME, + Fields: []queryUtils.SelectField{ + {Expression: "kode"}, + {Expression: "keterangan"}, + }, + Limit: 10, + } + + if search != "" { + searchFilters := []queryUtils.DynamicFilter{ + {Column: "kode", Operator: queryUtils.OpILike, Value: "%" + search + "%"}, + {Column: "keterangan", Operator: queryUtils.OpILike, Value: "%" + search + "%"}, + } + query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: searchFilters, LogicOp: "OR"}) + } + + dbconn, err := r.db.GetSQLXDB(DB_NAME) + if err != nil { + return result, err + } + + err = r.queryBuilder.ExecuteQuery( + c, dbconn, query, &result) + if err != nil { + return result, err + } + + return result, nil +} diff --git a/internal/domain/reference/tindakan/routes.go b/internal/domain/reference/tindakan/routes.go new file mode 100644 index 0000000..3fb11e4 --- /dev/null +++ b/internal/domain/reference/tindakan/routes.go @@ -0,0 +1,17 @@ +package tindakan + +import ( + "antrian-operasi/internal/database" + + "github.com/gin-gonic/gin" +) + +func RegisterRoutes(r *gin.RouterGroup, dbService database.Service) { + tindakanRepo := NewRepository(dbService) + tindakanHandler := NewTindakanHandler(tindakanRepo) + + tindakan := r.Group("/tindakan") + { + tindakan.GET("", tindakanHandler.ListDiagnosa) + } +} diff --git a/internal/routes/routes.go b/internal/routes/routes.go index 1dc754b..3921ba2 100644 --- a/internal/routes/routes.go +++ b/internal/routes/routes.go @@ -10,6 +10,7 @@ import ( "antrian-operasi/internal/domain/reference/kategori" "antrian-operasi/internal/domain/reference/pasien" "antrian-operasi/internal/domain/reference/spesialis" + "antrian-operasi/internal/domain/reference/tindakan" "antrian-operasi/internal/middleware" "net/http" @@ -44,6 +45,7 @@ func RegisterRoutes(cfg *config.Config, dbService database.Service) *gin.Engine dokter.RegisterRoutes(reference, dbService) pasien.RegisterRoutes(reference, dbService) diagnosa.RegisterRoutes(reference, dbService) + tindakan.RegisterRoutes(reference, dbService) } dboard := api.Group("dashboard") {