initiate reference pasien
This commit is contained in:
@@ -0,0 +1,41 @@
|
|||||||
|
package pasien
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
baseResponse "antrian-operasi/internal/shared"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PasienHandler struct {
|
||||||
|
repo IPasienRepository
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewPasienHandler(repo IPasienRepository) PasienHandler {
|
||||||
|
return PasienHandler{repo}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListPasien godoc
|
||||||
|
// @Summary Get List Pasien
|
||||||
|
// @Tags Pasien
|
||||||
|
// @Param search query string false "Search keyword"
|
||||||
|
// @Success 200 {object} []PasienModel
|
||||||
|
// @Failure 500 {object} shared.BaseErrorResponse
|
||||||
|
// @Router /reference/pasien/ [get]
|
||||||
|
func (h PasienHandler) ListPasienOperasi(c *gin.Context) {
|
||||||
|
list, err := h.repo.SearchableListPasien(c)
|
||||||
|
if err != nil {
|
||||||
|
errorResponse := baseResponse.BaseErrorResponse{
|
||||||
|
Success: false,
|
||||||
|
Code: 500,
|
||||||
|
Message: err.Error(),
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusInternalServerError, errorResponse)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
response := baseResponse.ToBaseResponse(list, true, 200, "success get pasien")
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, response)
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package pasien
|
||||||
|
|
||||||
|
type PasienModel struct {
|
||||||
|
Id int `db:"id"`
|
||||||
|
Alamat string `db:"alamat"`
|
||||||
|
AlamatKtp string `db:"alamat_ktp"`
|
||||||
|
JenisKelamin string `db:"jeniskelamin"`
|
||||||
|
Nama string `db:"nama"`
|
||||||
|
Nik string `db:"noktp"`
|
||||||
|
NoMr string `db:"nomr"`
|
||||||
|
TglLahir string `db:"tgllahir"`
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package pasien
|
||||||
|
|
||||||
|
import (
|
||||||
|
"antrian-operasi/internal/database"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func RegisterRoutes(r *gin.RouterGroup, dbService database.Service) {
|
||||||
|
pasienRepo := NewRepository(dbService)
|
||||||
|
PasienHandler := NewPasienHandler(pasienRepo)
|
||||||
|
|
||||||
|
kategori := r.Group("/pasien")
|
||||||
|
{
|
||||||
|
kategori.GET("", PasienHandler.ListPasienOperasi)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user