72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
package diagnosa
|
|
|
|
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"
|
|
|
|
type IDiagnosaRepository interface {
|
|
SearchableListDiagnosa(c *gin.Context) (ListDiagnosaModel, error)
|
|
}
|
|
|
|
type diagnosaRepo struct {
|
|
queryBuilder *queryUtils.QueryBuilder
|
|
db database.Service
|
|
}
|
|
|
|
func NewRepository(dbService database.Service) IDiagnosaRepository {
|
|
queryBuilder := queryUtils.NewQueryBuilder(queryUtils.DBTypePostgreSQL).
|
|
SetAllowedColumns([]string{
|
|
"icd_code", "jenis_penyakit", "sebabpenyakit",
|
|
}).
|
|
SetSecurityOptions(false, 100)
|
|
|
|
return diagnosaRepo{
|
|
queryBuilder: queryBuilder,
|
|
db: dbService,
|
|
}
|
|
}
|
|
|
|
func (r diagnosaRepo) SearchableListDiagnosa(c *gin.Context) (ListDiagnosaModel, error) {
|
|
var result ListDiagnosaModel
|
|
search := c.Query("search")
|
|
|
|
query := queryUtils.DynamicQuery{
|
|
From: TBL_NAME,
|
|
Fields: []queryUtils.SelectField{
|
|
{Expression: "icd_code"},
|
|
{Expression: "jenis_penyakit"},
|
|
{Expression: "sebabpenyakit"},
|
|
},
|
|
Limit: 10,
|
|
}
|
|
|
|
if search != "" {
|
|
searchFilters := []queryUtils.DynamicFilter{
|
|
{Column: "icd_code", Operator: queryUtils.OpILike, Value: "%" + search + "%"},
|
|
{Column: "jenis_penyakit", Operator: queryUtils.OpILike, Value: "%" + search + "%"},
|
|
{Column: "sebabpenyakit", 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
|
|
}
|