initiate reference pasien
This commit is contained in:
No files matched your search
@@ -0,0 +1,125 @@
|
||||
package pasien
|
||||
|
||||
import (
|
||||
"antrian-operasi/internal/database"
|
||||
"errors"
|
||||
|
||||
queryUtils "antrian-operasi/internal/utils/query"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
const DB_NAME = "db_simrs"
|
||||
const TBL_NAME = "m_pasien"
|
||||
|
||||
type IPasienRepository interface {
|
||||
SearchableListPasien(c *gin.Context) ([]PasienModel, error)
|
||||
GetPasienByNoMr(c *gin.Context, id int) (PasienModel, error)
|
||||
}
|
||||
|
||||
type pasienRepo struct {
|
||||
queryBuilder *queryUtils.QueryBuilder
|
||||
db database.Service
|
||||
}
|
||||
|
||||
func NewRepository(dbService database.Service) IPasienRepository {
|
||||
queryBuilder := queryUtils.NewQueryBuilder(queryUtils.DBTypePostgreSQL).
|
||||
SetAllowedColumns([]string{
|
||||
"id",
|
||||
"alamat",
|
||||
"alamat_ktp",
|
||||
"jeniskelamin",
|
||||
"nama",
|
||||
"noktp",
|
||||
"nomr",
|
||||
"tgllahir",
|
||||
})
|
||||
queryBuilder.SetSecurityOptions(false, 100)
|
||||
|
||||
return pasienRepo{
|
||||
queryBuilder: queryBuilder,
|
||||
db: dbService,
|
||||
}
|
||||
}
|
||||
|
||||
func baseSelectQuery() queryUtils.DynamicQuery {
|
||||
return queryUtils.DynamicQuery{
|
||||
From: TBL_NAME,
|
||||
Fields: []queryUtils.SelectField{
|
||||
{Expression: "id"},
|
||||
{Expression: "alamat"},
|
||||
{Expression: "alamat_ktp"},
|
||||
{Expression: "jeniskelamin"},
|
||||
{Expression: "nama"},
|
||||
{Expression: "noktp"},
|
||||
{Expression: "nomr"},
|
||||
{Expression: "tgllahir"},
|
||||
},
|
||||
Sort: []queryUtils.SortField{
|
||||
{Column: "id", Order: "DESC"},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (r pasienRepo) SearchableListPasien(c *gin.Context) ([]PasienModel, error) {
|
||||
var result []PasienModel
|
||||
search := c.Query("search")
|
||||
|
||||
query := baseSelectQuery()
|
||||
query.Limit = 10 // default limit
|
||||
|
||||
if search != "" {
|
||||
searchFilters := []queryUtils.DynamicFilter{
|
||||
{Column: "nama", Operator: queryUtils.OpILike, Value: "%" + search + "%"},
|
||||
{Column: "noktp", Operator: queryUtils.OpILike, Value: "%" + search + "%"},
|
||||
{Column: "nomr", 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 {
|
||||
// log.Fatalf("unable to connect db %s", err)
|
||||
return result, err
|
||||
}
|
||||
|
||||
err = r.queryBuilder.ExecuteQuery(
|
||||
c, dbconn, query, &result)
|
||||
if err != nil {
|
||||
// log.Fatalf("unable to execute query %s", err)
|
||||
return result, err
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (r pasienRepo) GetPasienByNoMr(c *gin.Context, id int) (PasienModel, error) {
|
||||
var resultQuery []PasienModel
|
||||
var result PasienModel
|
||||
|
||||
query := baseSelectQuery()
|
||||
|
||||
query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: []queryUtils.DynamicFilter{
|
||||
{Column: "id", Operator: queryUtils.OpEqual, Value: id},
|
||||
}})
|
||||
|
||||
dbconn, err := r.db.GetSQLXDB(DB_NAME)
|
||||
if err != nil {
|
||||
// log.Fatalf("unable to connect db %s", err)
|
||||
return result, err
|
||||
}
|
||||
|
||||
err = r.queryBuilder.ExecuteQuery(
|
||||
c, dbconn, query, &resultQuery)
|
||||
if err != nil {
|
||||
// log.Fatalf("unable to execute query %s", err)
|
||||
return result, err
|
||||
}
|
||||
|
||||
if len(resultQuery) == 0 {
|
||||
notFoundError := errors.New("kategori not found")
|
||||
return result, notFoundError
|
||||
}
|
||||
|
||||
return resultQuery[0], nil
|
||||
}
|
||||
Reference in New Issue
Block a user