progress
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
dbx "cpone/package/database"
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"go.uber.org/zap"
|
||||
@@ -13,11 +14,34 @@ import (
|
||||
|
||||
type MDNonLabTemplateServices struct {
|
||||
MDNonLabTemplateStore db.AppStore
|
||||
DetailStore []models.MDNonLabTemplateDetail
|
||||
addChan chan models.MDNonLabTemplateDetail
|
||||
delChan chan models.MDNonLabTemplateDetail
|
||||
}
|
||||
|
||||
func NewMDNonLabTemplateServices(uStore db.AppStore) *MDNonLabTemplateServices {
|
||||
return &MDNonLabTemplateServices{
|
||||
aChan := make(chan models.MDNonLabTemplateDetail)
|
||||
dChan := make(chan models.MDNonLabTemplateDetail)
|
||||
|
||||
serv := MDNonLabTemplateServices{
|
||||
MDNonLabTemplateStore: uStore,
|
||||
DetailStore: []models.MDNonLabTemplateDetail{},
|
||||
addChan: aChan,
|
||||
delChan: dChan,
|
||||
}
|
||||
|
||||
go serv.runner()
|
||||
return &serv
|
||||
}
|
||||
|
||||
func (mdnlt *MDNonLabTemplateServices) runner() {
|
||||
for {
|
||||
select {
|
||||
case x := <-mdnlt.addChan:
|
||||
mdnlt.DetailStore = append(mdnlt.DetailStore, x)
|
||||
case y := <-mdnlt.delChan:
|
||||
mdnlt.DetailStore = append(mdnlt.DetailStore, y)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,6 +136,109 @@ func (mdnlt *MDNonLabTemplateServices) GetMDNonLabTemplateByID(id string) (model
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (mdnlt *MDNonLabTemplateServices) GetListingDetailByID(id string) ([]models.MDNonLabTemplateDetail, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret []models.MDNonLabTemplateDetail
|
||||
|
||||
q := `
|
||||
SELECT
|
||||
NonlabTemplateDetailID,
|
||||
NonlabTemplateDetailNonlabTemplateID,
|
||||
NonlabTemplateDetailCode,
|
||||
NonlabTemplateDetailName,
|
||||
NonlabTemplateDetailIsActive
|
||||
FROM nonlab_template_detail
|
||||
WHERE NonlabTemplateDetailIsActive = 'Y'
|
||||
AND NonlabTemplateDetailNonlabTemplateID = ?
|
||||
`
|
||||
|
||||
if err := dbx.Handlex.Select(&ret, q, id); err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("Error get detail",
|
||||
zap.String("ID", id),
|
||||
zap.Error(err),
|
||||
)
|
||||
return nil, fmt.Errorf("error get list detail: %v", err)
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (mdnlt *MDNonLabTemplateServices) AddDataMDNLT(input models.InputDetailNonLabTemplate) (models.MDNonLabTemplate, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret models.MDNonLabTemplate
|
||||
|
||||
// cek duplicate non lab template name
|
||||
var count int
|
||||
prm := "%" + input.NonLabTemplateName + "%"
|
||||
q := `SELECT COUNT(*) FROM nonlab_template WHERE NonlabTemplateIsActive = 'Y' AND NonlabTemplateName LIKE ?`
|
||||
err := dbx.Handlex.Get(&count, q, prm)
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("cek duplicate", zap.Any("name", input.NonLabTemplateName))
|
||||
return ret, fmt.Errorf("query failed to cek duplicate")
|
||||
}
|
||||
if count > 0 {
|
||||
defer logger.Sync()
|
||||
logger.Error("duplicate data", zap.Any("name", input.NonLabTemplateName))
|
||||
return ret, fmt.Errorf("duplicate code or name")
|
||||
}
|
||||
|
||||
// insert data
|
||||
tx, err := dbx.Handlex.Beginx()
|
||||
if err != nil {
|
||||
return ret, err
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
qnlt := `
|
||||
INSERT INTO nonlab_template (
|
||||
NonlabTemplateName,
|
||||
NonlabTemplateFlagFisik,
|
||||
NonlabTemplateCreated
|
||||
) VALUES (?,?,NOW());
|
||||
`
|
||||
rsp := tx.MustExec(qnlt, input.NonLabTemplateName, input.NonLabTemplateFlagFisik)
|
||||
insertedID, err := rsp.LastInsertId()
|
||||
if err != nil {
|
||||
defer logger.Sync()
|
||||
logger.Error("failed insert data template", zap.Any("name", input.NonLabTemplateName), zap.Any("flag fisik", input.NonLabTemplateFlagFisik))
|
||||
return ret, fmt.Errorf("query failed insert data template")
|
||||
}
|
||||
|
||||
qry, err := tx.Preparex(`
|
||||
INSERT INTO nonlab_template_detail (
|
||||
NonlabTemplateDetailNonlabTemplateID,
|
||||
NonlabTemplateDetailCode,
|
||||
NonlabTemplateDetailName,
|
||||
NonlabTemplateDetailFlagActive
|
||||
) VALUES (?,?,?,?)
|
||||
`)
|
||||
if err != nil {
|
||||
return ret, fmt.Errorf("query failed: %v", err)
|
||||
}
|
||||
defer qry.Close()
|
||||
|
||||
for _, detail := range input.NonLabTemplatDetail {
|
||||
_, err := qry.Exec(
|
||||
insertedID,
|
||||
detail.NonlabTemplateDetailCode,
|
||||
detail.NonlabTemplateDetailName,
|
||||
detail.NonlabTemplateDetailFlagActive,
|
||||
)
|
||||
if err != nil {
|
||||
return ret, fmt.Errorf("query insert detail failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
if err := tx.Commit(); err != nil {
|
||||
return ret, fmt.Errorf("commit query failed: %v", err)
|
||||
}
|
||||
|
||||
s := strconv.Itoa(int(insertedID))
|
||||
return mdnlt.GetMDNonLabTemplateByID(s)
|
||||
}
|
||||
|
||||
func (mdnlt *MDNonLabTemplateServices) DeleteDataMDNLT(id string) (models.MDNonLabTemplate, error) {
|
||||
logger, _ := zap.NewProduction()
|
||||
var ret models.MDNonLabTemplate
|
||||
@@ -133,3 +260,18 @@ func (mdnlt *MDNonLabTemplateServices) DeleteDataMDNLT(id string) (models.MDNonL
|
||||
|
||||
return mdnlt.GetMDNonLabTemplateByID(id)
|
||||
}
|
||||
|
||||
func (mdnlt *MDNonLabTemplateServices) SaveInMemoryDetail(kode string, name string) (models.MDNonLabTemplateDetail, error) {
|
||||
data := models.MDNonLabTemplateDetail{
|
||||
NonlabTemplateDetailCode: kode,
|
||||
NonlabTemplateDetailName: name,
|
||||
}
|
||||
|
||||
mdnlt.addChan <- data
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (mdnlt *MDNonLabTemplateServices) ListMemoryDetail() ([]models.MDNonLabTemplateDetail, error) {
|
||||
return mdnlt.DetailStore, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user