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
@@ -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)
}
@@ -2,7 +2,7 @@ package kategori
import (
"antrian-operasi/internal/database"
"log"
"errors"
queryUtils "antrian-operasi/internal/utils/query"
@@ -10,9 +10,11 @@ import (
)
const DB_NAME = "db_antrian"
const TBL_NAME = "daftar_kategori_operasi"
type IKategoriRepository interface {
SearchableListKategori(c *gin.Context) ([]KategoriOperasiModel, error)
GetKategoriById(c *gin.Context, id int) (KategoriOperasiModel, error)
}
type kategoriRepo struct {
@@ -37,12 +39,9 @@ func NewRepository(dbService database.Service) IKategoriRepository {
}
}
func (r kategoriRepo) SearchableListKategori(c *gin.Context) ([]KategoriOperasiModel, error) {
var result []KategoriOperasiModel
search := c.Query("search")
query := queryUtils.DynamicQuery{
From: "daftar_kategori_operasi",
func baseSelectQuery() queryUtils.DynamicQuery {
return queryUtils.DynamicQuery{
From: TBL_NAME,
Fields: []queryUtils.SelectField{
{Expression: "id"},
{Expression: "status"},
@@ -54,6 +53,13 @@ func (r kategoriRepo) SearchableListKategori(c *gin.Context) ([]KategoriOperasiM
{Column: "date_created", Order: "DESC"},
},
}
}
func (r kategoriRepo) SearchableListKategori(c *gin.Context) ([]KategoriOperasiModel, error) {
var result []KategoriOperasiModel
search := c.Query("search")
query := baseSelectQuery()
if search != "" {
searchFilters := []queryUtils.DynamicFilter{
@@ -64,14 +70,47 @@ func (r kategoriRepo) SearchableListKategori(c *gin.Context) ([]KategoriOperasiM
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, err
}
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, err
}
return result, nil
}
func (r kategoriRepo) GetKategoriById(c *gin.Context, id int) (KategoriOperasiModel, error) {
var resultQuery []KategoriOperasiModel
var result KategoriOperasiModel
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
}
+107 -33
View File
@@ -2,7 +2,7 @@ package spesialis
import (
"antrian-operasi/internal/database"
"log"
"errors"
queryUtils "antrian-operasi/internal/utils/query"
@@ -14,6 +14,8 @@ const DB_NAME = "db_antrian"
type ISpesialisRepository interface {
SearchableListSpesialis(c *gin.Context) ([]SpesialisModel, error)
SearchableListSubSpesialis(c *gin.Context) ([]SubSpesialisModel, error)
GetSpesialisById(c *gin.Context, id int) (SpesialisModel, error)
GetSubSpesialisById(c *gin.Context, id int) (SubSpesialisModel, error)
}
type spesialisRepo struct {
@@ -38,11 +40,8 @@ func NewRepository(dbService database.Service) ISpesialisRepository {
}
}
func (r spesialisRepo) SearchableListSpesialis(c *gin.Context) ([]SpesialisModel, error) {
var result []SpesialisModel
search := c.Query("search")
query := queryUtils.DynamicQuery{
func baseQueryListSpesialis() queryUtils.DynamicQuery {
return queryUtils.DynamicQuery{
From: "daftar_spesialis",
Fields: []queryUtils.SelectField{
{Expression: "id"},
@@ -50,33 +49,9 @@ func (r spesialisRepo) SearchableListSpesialis(c *gin.Context) ([]SpesialisModel
{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")
func baseQueryListSubSpesialis() queryUtils.DynamicQuery {
query := queryUtils.DynamicQuery{
From: "daftar_subspesialis",
Aliases: "dss",
@@ -105,6 +80,45 @@ func (r spesialisRepo) SearchableListSubSpesialis(c *gin.Context) ([]SubSpesiali
},
}
return query
}
func (r spesialisRepo) SearchableListSpesialis(c *gin.Context) ([]SpesialisModel, error) {
var result []SpesialisModel
search := c.Query("search")
query := baseQueryListSpesialis()
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)
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 spesialisRepo) SearchableListSubSpesialis(c *gin.Context) ([]SubSpesialisModel, error) {
var result []SubSpesialisModel
search := c.Query("search")
query := baseQueryListSubSpesialis()
if search != "" {
searchFilters := []queryUtils.DynamicFilter{
{Column: "dss.Kode", Operator: queryUtils.OpILike, Value: "%" + search + "%"},
@@ -115,14 +129,74 @@ func (r spesialisRepo) SearchableListSubSpesialis(c *gin.Context) ([]SubSpesiali
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, err
}
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, err
}
return result, nil
}
func (r spesialisRepo) GetSpesialisById(c *gin.Context, id int) (SpesialisModel, error) {
var resultQuery []SpesialisModel
var result SpesialisModel
query := baseQueryListSpesialis()
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 {
return result, err
}
err = r.queryBuilder.ExecuteQuery(
c, dbconn, query, &resultQuery)
if err != nil {
return result, err
}
if len(resultQuery) == 0 {
notFoundError := errors.New("spesialis not found")
return result, notFoundError
}
return resultQuery[0], nil
}
func (r spesialisRepo) GetSubSpesialisById(c *gin.Context, id int) (SubSpesialisModel, error) {
var resultQuery []SubSpesialisModel
var result SubSpesialisModel
query := baseQueryListSubSpesialis()
query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: []queryUtils.DynamicFilter{
{Column: "dss.id", Operator: queryUtils.OpEqual, Value: id},
}})
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 {
notFoundError := errors.New("sub spesialisasi not found")
return result, notFoundError
}
return resultQuery[0], nil
}