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 }