120 lines
2.8 KiB
Go
120 lines
2.8 KiB
Go
package diagnosa
|
|
|
|
import (
|
|
"antrian-operasi/internal/database"
|
|
"log"
|
|
|
|
queryUtils "antrian-operasi/internal/utils/query"
|
|
|
|
"errors"
|
|
|
|
"context"
|
|
)
|
|
|
|
const DB_NAME = "db_simrs"
|
|
const TBL_NAME = "icd"
|
|
|
|
type IDiagnosaRepository interface {
|
|
SearchableListDiagnosa(c context.Context, search string) (ListDiagnosaModel, error)
|
|
GetDiagnosaByKode(c context.Context, kode string) (DiagnosaModel, 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 context.Context, search string) (ListDiagnosaModel, error) {
|
|
var result ListDiagnosaModel
|
|
|
|
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
|
|
}
|
|
|
|
func (r diagnosaRepo) GetDiagnosaByKode(c context.Context, kode string) (DiagnosaModel, error) {
|
|
var resultQuery []DiagnosaModel
|
|
var result DiagnosaModel
|
|
|
|
query := queryUtils.DynamicQuery{
|
|
From: TBL_NAME,
|
|
Fields: []queryUtils.SelectField{
|
|
{Expression: "icd_code"},
|
|
{Expression: "jenis_penyakit"},
|
|
{Expression: "sebabpenyakit"},
|
|
},
|
|
Filters: []queryUtils.FilterGroup{
|
|
{
|
|
Filters: []queryUtils.DynamicFilter{
|
|
{Column: "icd_code", Operator: queryUtils.OpILike, Value: kode},
|
|
}, LogicOp: "AND",
|
|
},
|
|
},
|
|
Limit: 1,
|
|
}
|
|
|
|
dbconn, err := r.db.GetSQLXDB(DB_NAME)
|
|
if err != nil {
|
|
return result, err
|
|
}
|
|
|
|
err = r.queryBuilder.ExecuteQuery(
|
|
c, dbconn, query, &resultQuery)
|
|
if err != nil {
|
|
return result, err
|
|
}
|
|
|
|
if len(resultQuery) == 0 {
|
|
log.Println(query)
|
|
notFoundError := errors.New("diagnosa not found : " + kode)
|
|
return result, notFoundError
|
|
}
|
|
|
|
for _, x := range resultQuery {
|
|
log.Println(x.KodeDiagnosa)
|
|
}
|
|
|
|
return resultQuery[0], nil
|
|
}
|