fixing reference query get by id

This commit is contained in:
renaldybrada
2026-01-29 10:19:13 +07:00
parent 10f0437333
commit 1e15a2e1ec
5 changed files with 240 additions and 53 deletions

No files matched your search

@@ -1,6 +1,7 @@
package dokter
import (
"log"
"net/http"
baseResponse "antrian-operasi/internal/shared"
@@ -32,3 +33,25 @@ func (h DokterHandler) ListDokter(c *gin.Context) {
c.JSON(http.StatusOK, response)
}
// Test repository GetDokterById, soon to be deleted
func (h DokterHandler) GetDokterById(c *gin.Context) {
var result DokterModel
idDokter := c.Param("id")
result, err := h.repo.GetDokterById(c, idDokter)
if err != nil {
log.Printf("something went wrong : %s", err)
c.JSON(http.StatusInternalServerError, err)
return
}
response := baseResponse.ToBaseResponse(
result.ToResponse(),
true,
200,
"success get doctor's list")
c.JSON(http.StatusOK, response)
}
+61 -11
View File
@@ -2,7 +2,7 @@ package dokter
import (
"antrian-operasi/internal/database"
"log"
"errors"
queryUtils "antrian-operasi/internal/utils/query"
@@ -10,12 +10,14 @@ import (
)
const DB_NAME = "db_antrian"
const TBL_NAME = "data_pegawai"
type IDokterRepository interface {
SearchableListDokter(c *gin.Context) ([]DokterModel, error)
GetDokterById(c *gin.Context, id string) (DokterModel, error)
}
type kategoriRepo struct {
type dokterRepo struct {
queryBuilder *queryUtils.QueryBuilder
db database.Service
}
@@ -32,19 +34,15 @@ func NewRepository(dbService database.Service) IDokterRepository {
})
queryBuilder.SetSecurityOptions(false, 100)
return kategoriRepo{
return dokterRepo{
queryBuilder: queryBuilder,
db: dbService,
}
}
func (r kategoriRepo) SearchableListDokter(c *gin.Context) ([]DokterModel, error) {
var result []DokterModel
search := c.Query("search")
// base query
func baseSelectQuery() queryUtils.DynamicQuery {
query := queryUtils.DynamicQuery{
From: "data_pegawai",
From: TBL_NAME,
Aliases: "dp",
Fields: []queryUtils.SelectField{
{Expression: "dp.id", Alias: "id"},
@@ -71,6 +69,16 @@ func (r kategoriRepo) SearchableListDokter(c *gin.Context) ([]DokterModel, error
},
}
return query
}
func (r dokterRepo) SearchableListDokter(c *gin.Context) ([]DokterModel, error) {
var result []DokterModel
search := c.Query("search")
// base query
query := baseSelectQuery()
// base filtering
var baseFilter []queryUtils.DynamicFilter
baseFilter = append(baseFilter, queryUtils.DynamicFilter{Column: "dp.KSM", Operator: queryUtils.OpNotNull})
@@ -93,14 +101,56 @@ func (r kategoriRepo) SearchableListDokter(c *gin.Context) ([]DokterModel, error
dbconn, err := r.db.GetSQLXDB(DB_NAME)
if err != nil {
log.Fatalf("unable to connect db %s", err)
// log.Fatalf("unable to connect db %s", err)
return result, nil
}
err = r.queryBuilder.ExecuteQuery(
c, dbconn, query, &result)
if err != nil {
log.Fatalf("unable to execute query %s", err)
// log.Fatalf("unable to execute query %s", err)
return result, nil
}
return result, nil
}
func (r dokterRepo) GetDokterById(c *gin.Context, id string) (DokterModel, error) {
var resultQuery []DokterModel
var result DokterModel
// base query
query := baseSelectQuery()
// LIMIT 1
query.Limit = 1
// base filtering
var baseFilter []queryUtils.DynamicFilter
baseFilter = append(baseFilter, queryUtils.DynamicFilter{Column: "dp.KSM", Operator: queryUtils.OpNotNull})
// filter by id
baseFilter = append(baseFilter, queryUtils.DynamicFilter{Column: "dp.id", Operator: queryUtils.OpEqual, Value: id})
query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: baseFilter, LogicOp: "AND"})
dbconn, err := r.db.GetSQLXDB(DB_NAME)
if err != nil {
// log.Fatalf("unable to connect db %s", err) // TODO : handling error
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("doctor not found")
return result, notFoundError
}
return resultQuery[0], nil
}
@@ -11,4 +11,5 @@ func RegisterRoutes(r *gin.RouterGroup, dbService database.Service) {
dokterHandler := NewDokterHandler(dokterRepo)
r.GET("/dokter", dokterHandler.ListDokter)
// r.GET("/dokter/:id", dokterHandler.GetDokterById)
}