initiate repo
This commit is contained in:
No files matched your search
@@ -0,0 +1,128 @@
|
||||
package spesialis
|
||||
|
||||
import (
|
||||
"antrian-operasi/internal/database"
|
||||
"log"
|
||||
|
||||
queryUtils "antrian-operasi/internal/utils/query"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
const DB_NAME = "db_antrian"
|
||||
|
||||
type ISpesialisRepository interface {
|
||||
SearchableListSpesialis(c *gin.Context) ([]SpesialisModel, error)
|
||||
SearchableListSubSpesialis(c *gin.Context) ([]SubSpesialisModel, error)
|
||||
}
|
||||
|
||||
type spesialisRepo struct {
|
||||
queryBuilder *queryUtils.QueryBuilder
|
||||
db database.Service
|
||||
}
|
||||
|
||||
func NewRepository(dbService database.Service) ISpesialisRepository {
|
||||
queryBuilder := queryUtils.NewQueryBuilder(queryUtils.DBTypePostgreSQL).
|
||||
SetAllowedColumns([]string{
|
||||
"id",
|
||||
"Kode",
|
||||
"Spesialis",
|
||||
"Subspesialis",
|
||||
"FK_daftar_spesialis_ID",
|
||||
})
|
||||
queryBuilder.SetSecurityOptions(false, 100)
|
||||
|
||||
return spesialisRepo{
|
||||
queryBuilder: queryBuilder,
|
||||
db: dbService,
|
||||
}
|
||||
}
|
||||
|
||||
func (r spesialisRepo) SearchableListSpesialis(c *gin.Context) ([]SpesialisModel, error) {
|
||||
var result []SpesialisModel
|
||||
search := c.Query("search")
|
||||
|
||||
query := queryUtils.DynamicQuery{
|
||||
From: "daftar_spesialis",
|
||||
Fields: []queryUtils.SelectField{
|
||||
{Expression: "id"},
|
||||
{Expression: "Kode"},
|
||||
{Expression: "Spesialis"},
|
||||
},
|
||||
}
|
||||
|
||||
if search != "" {
|
||||
searchFilters := []queryUtils.DynamicFilter{
|
||||
{Column: "Kode", Operator: queryUtils.OpILike, Value: "%" + search + "%"},
|
||||
{Column: "Spesialis", 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)
|
||||
}
|
||||
|
||||
err = r.queryBuilder.ExecuteQuery(
|
||||
c, dbconn, query, &result)
|
||||
if err != nil {
|
||||
log.Fatalf("unable to execute query %s", err)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (r spesialisRepo) SearchableListSubSpesialis(c *gin.Context) ([]SubSpesialisModel, error) {
|
||||
var result []SubSpesialisModel
|
||||
search := c.Query("search")
|
||||
|
||||
query := queryUtils.DynamicQuery{
|
||||
From: "daftar_subspesialis",
|
||||
Aliases: "dss",
|
||||
Fields: []queryUtils.SelectField{
|
||||
{Expression: "dss.id", Alias: "id"},
|
||||
{Expression: "dss.Kode", Alias: "Kode"},
|
||||
{Expression: "Subspesialis", Alias: "Subspesialis"},
|
||||
{Expression: "ds.Kode", Alias: "kode_spesialis"},
|
||||
{Expression: "ds.Spesialis", Alias: "spesialis"},
|
||||
{Expression: "ds.id", Alias: "id_spesialis"},
|
||||
},
|
||||
}
|
||||
|
||||
query.Joins = []queryUtils.Join{
|
||||
{
|
||||
Type: "LEFT",
|
||||
Table: "daftar_spesialis",
|
||||
Alias: "ds",
|
||||
OnConditions: queryUtils.FilterGroup{
|
||||
Filters: []queryUtils.DynamicFilter{
|
||||
{
|
||||
Column: "FK_daftar_spesialis_ID", Operator: queryUtils.OpEqual, Value: "ds.id",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
if search != "" {
|
||||
searchFilters := []queryUtils.DynamicFilter{
|
||||
{Column: "dss.Kode", Operator: queryUtils.OpILike, Value: "%" + search + "%"},
|
||||
{Column: "dss.Subspesialis", 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)
|
||||
}
|
||||
|
||||
err = r.queryBuilder.ExecuteQuery(
|
||||
c, dbconn, query, &result)
|
||||
if err != nil {
|
||||
log.Fatalf("unable to execute query %s", err)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
Reference in New Issue
Block a user