first commit
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
package reference
|
||||
|
||||
import (
|
||||
"api-service/internal/config"
|
||||
"api-service/internal/database"
|
||||
"api-service/internal/models"
|
||||
modelsReference "api-service/internal/models/reference"
|
||||
"api-service/pkg/logger"
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-playground/validator/v10"
|
||||
"github.com/jmoiron/sqlx"
|
||||
"net/http"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
db database.Service
|
||||
once sync.Once
|
||||
validate *validator.Validate
|
||||
)
|
||||
|
||||
func init() {
|
||||
once.Do(func() {
|
||||
db = database.New(config.LoadConfig())
|
||||
validate = validator.New()
|
||||
|
||||
// Register custom validations if needed
|
||||
validate.RegisterValidation("retribusi_status", validateRetribusiStatus)
|
||||
|
||||
if db == nil {
|
||||
logger.Fatal("Failed to initialize database connection")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func validateRetribusiStatus(fl validator.FieldLevel) bool {
|
||||
return models.IsValidStatus(fl.Field().String())
|
||||
}
|
||||
|
||||
type referenceHandler struct {
|
||||
db database.Service
|
||||
}
|
||||
|
||||
func NewreferenceHandler() *referenceHandler {
|
||||
return &referenceHandler{
|
||||
db: db,
|
||||
}
|
||||
}
|
||||
|
||||
func (h *referenceHandler) Getvisitpasien(c *gin.Context) {
|
||||
ctx, cancel := context.WithTimeout(c.Request.Context(), 120*time.Second)
|
||||
defer cancel()
|
||||
|
||||
dbAntrean, err := h.db.GetSQLXDB("postgres_antrean")
|
||||
if err != nil {
|
||||
logger.Error("Failed to connect postgres_antrean", map[string]interface{}{"error": err.Error()})
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Database connection failed"})
|
||||
return
|
||||
}
|
||||
|
||||
Listvisit, err := h.Getrefvisitpasien(ctx, dbAntrean)
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
c.JSON(http.StatusOK, modelsReference.VisitStatusResponse{
|
||||
Message: "Data visit status tidak ditemukan",
|
||||
Data: []*modelsReference.VisitStatus{},
|
||||
Meta: map[string]interface{}{
|
||||
"total": 0,
|
||||
},
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
logger.Error("Failed to get visit status", map[string]interface{}{"error": err.Error()})
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to retrieve data"})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, modelsReference.VisitStatusResponse{
|
||||
Message: "Data visit status berhasil diambil",
|
||||
Data: Listvisit,
|
||||
Meta: map[string]interface{}{
|
||||
"total": len(Listvisit),
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func (h *referenceHandler) Getrefvisitpasien(ctx context.Context, dbConn *sqlx.DB) ([]*modelsReference.VisitStatus, error) {
|
||||
query := `
|
||||
SELECT
|
||||
rvs.id as idvisit,
|
||||
rvs.name as namastatus,
|
||||
rvs.description as deskripsistatus,
|
||||
rhs.id as idklinikstatus,
|
||||
rhs.name as namastatusklinik
|
||||
FROM reference.ref_visit_status rvs
|
||||
LEFT JOIN reference.ref_healthcare_status rhs
|
||||
ON rvs.fk_ref_healthcare_status_id = rhs.id
|
||||
ORDER BY rvs.id ASC
|
||||
`
|
||||
|
||||
var visitStatusList []*modelsReference.VisitStatus
|
||||
|
||||
err := dbConn.SelectContext(ctx, &visitStatusList, query)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get visit status: %w", err)
|
||||
}
|
||||
|
||||
if len(visitStatusList) == 0 {
|
||||
return nil, sql.ErrNoRows
|
||||
}
|
||||
|
||||
logger.Info("Visit status retrieved successfully", map[string]interface{}{
|
||||
"total": len(visitStatusList),
|
||||
})
|
||||
|
||||
return visitStatusList, nil
|
||||
}
|
||||
Reference in New Issue
Block a user