Compare commits
33
Commits
da86cb2bc6
...
d21cae7ded
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d21cae7ded | ||
|
|
1ec7cf517e | ||
|
|
87baa898f6 | ||
|
|
44b37e2d49 | ||
|
|
ec2a02dffd | ||
|
|
46f85ea7ac | ||
|
|
bafd7dbeb0 | ||
|
|
b840f801c8 | ||
|
|
ba4283a020 | ||
|
|
b41a3d00a7 | ||
|
|
1c6292158d | ||
|
|
58db5b5043 | ||
|
|
0e7d50265d | ||
|
|
191a850bde | ||
|
|
d5023bd93c | ||
|
|
ad7cb3c42a | ||
|
|
f651a185b3 | ||
|
|
a8c83f9547 | ||
|
|
aa3877c68e | ||
|
|
ee3413e15b | ||
|
|
158e57f6f2 | ||
|
|
125c43bc66 | ||
|
|
2011b318ca | ||
|
|
bc1209a270 | ||
|
|
233918cecf | ||
|
|
a892e5ee43 | ||
|
|
261f3cdeb3 | ||
|
|
c7f2876e6e | ||
|
|
37f2c215ef | ||
|
|
4a62316548 | ||
|
|
2c22acc556 | ||
|
|
4214bd00bd | ||
|
|
2e70cd727c |
No files matched your search
@@ -27,8 +27,6 @@ go.work.sum
|
||||
# env file
|
||||
.env
|
||||
config.yml
|
||||
Dockerfile-main-api
|
||||
Dockerfile-sync-api
|
||||
**/atlas.hcl
|
||||
!**/atlas.hcl.example
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ RUN CGO_ENABLED=0 GOOS=linux go build -o ./cmd/main-api/main-api ./cmd/main-api/
|
||||
|
||||
FROM alpine:latest
|
||||
WORKDIR /app
|
||||
COPY --from=builder /src/assets .
|
||||
COPY --from=builder /src/assets ./assets
|
||||
COPY --from=builder /src/cmd/main-api/main-api .
|
||||
COPY --from=builder /src/cmd/main-api/config.yml .
|
||||
EXPOSE 8010
|
||||
@@ -0,0 +1,14 @@
|
||||
FROM golang:1.24.10 AS builder
|
||||
WORKDIR /src
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
COPY . .
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -o ./cmd/sync-api/sync-api ./cmd/sync-api/main.go
|
||||
|
||||
FROM alpine:latest
|
||||
WORKDIR /app
|
||||
COPY --from=builder /src/assets ./assets
|
||||
COPY --from=builder /src/cmd/sync-api/sync-api .
|
||||
COPY --from=builder /src/cmd/sync-api/config.yml .
|
||||
EXPOSE 8011
|
||||
CMD ["./sync-api"]
|
||||
@@ -1,14 +0,0 @@
|
||||
FROM golang:1.24.10 AS builder
|
||||
WORKDIR /src
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
COPY . .
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -o ./cmd/simgos-sync-api/simgos-sync-api ./cmd/simgos-sync-api/main.go
|
||||
|
||||
FROM alpine:latest
|
||||
WORKDIR /app
|
||||
COPY --from=builder /src/assets .
|
||||
COPY --from=builder /src/cmd/simgos-sync-api/simgos-sync-api .
|
||||
COPY --from=builder /src/cmd/simgos-sync-api/config.yml .
|
||||
EXPOSE 8011
|
||||
CMD ["./simgos-sync-api"]
|
||||
@@ -1,4 +1,4 @@
|
||||
h1:IfSOZ5RxGCWboRtqCJrYxCJa1HYSrlROJLXcElq1P3I=
|
||||
h1:bNByj2VsHOaJEMfbX3xRNdLNTeYIVgInihZwRFfBUpc=
|
||||
20250904105930.sql h1:MEM6blCgke9DzWQSTnLzasbPIrcHssNNrJqZpSkEo6k=
|
||||
20250904141448.sql h1:J8cmYNk4ZrG9fhfbi2Z1IWz7YkfvhFqTzrLFo58BPY0=
|
||||
20250908062237.sql h1:Pu23yEW/aKkwozHoOuROvHS/GK4ngARJGdO7FB7HZuI=
|
||||
@@ -162,4 +162,4 @@ h1:IfSOZ5RxGCWboRtqCJrYxCJa1HYSrlROJLXcElq1P3I=
|
||||
20251209084929.sql h1:u4LPMvkGAH4RfGC2IlBTIm7T7paMHoBSvTQ0w5Br7d0=
|
||||
20251210145148.sql h1:rejGrnTpaygxPv06v0vxMytF4rk1OJBXaw3ttSmidgc=
|
||||
20251211101547.sql h1:+jT5yRCEsSRExzoawrqymS/I7lVfwUQQSgSzbxCxgRk=
|
||||
20251211113942.sql h1:F8go8XaJf4GFa4RuoMlo4U/NtbDtbDkVYHZOJz7GYhM=
|
||||
20251211113942.sql h1:hRwiVZnXGzgUbqOk5TZ6ZHzGs1GebIFeIKkJNb+6+f0=
|
||||
@@ -13,7 +13,7 @@ require (
|
||||
github.com/jackc/pgx/v5 v5.5.5
|
||||
github.com/karincake/apem v0.0.17
|
||||
github.com/karincake/dodol v0.0.1
|
||||
github.com/karincake/getuk v0.3.1
|
||||
github.com/karincake/getuk v0.3.2
|
||||
github.com/karincake/hongkue v0.0.4
|
||||
github.com/karincake/lepet v0.0.1
|
||||
github.com/karincake/risoles v0.0.3
|
||||
|
||||
@@ -81,8 +81,8 @@ github.com/karincake/apem v0.0.17 h1:y3WXCr9GWLFFFH4Qyq/VWlWWpijHh5zpTc3Lm96twa4
|
||||
github.com/karincake/apem v0.0.17/go.mod h1:cQP2sJfDrLRIiwWoaLWw/z8uAya+DWu/FpmYeinMQXM=
|
||||
github.com/karincake/dodol v0.0.1 h1:jUXmJh1r0Ei4fmHPZ6IUkoplW/V9d27L63JEl6zudL0=
|
||||
github.com/karincake/dodol v0.0.1/go.mod h1:2f1NcvkvY0J3GMUkwILNDYVvRUpz0W3lpPp/Ha/Ld24=
|
||||
github.com/karincake/getuk v0.3.1 h1:yRqBTrwpnjYcZD3gPDoSxFlsLgI9/GKCr3ZCsS4TtYQ=
|
||||
github.com/karincake/getuk v0.3.1/go.mod h1:NVnvxSGAkQ/xuq99FzWACvY5efyKPLFla1cKB8czm7c=
|
||||
github.com/karincake/getuk v0.3.2 h1:Qe+PRQ2qdgdiJlWiVEq37N8rrgS654nUnY0PWS6pMzA=
|
||||
github.com/karincake/getuk v0.3.2/go.mod h1:nFl133aKQqxRbe5q9lo8q7BxlYBavmbkpglBhq/dNWk=
|
||||
github.com/karincake/hongkue v0.0.4 h1:oWthq6cDg5DvDm1Z3e7mCLOATQf+oAdtHxN9OPnCfA8=
|
||||
github.com/karincake/hongkue v0.0.4/go.mod h1:YVi5Lyh3DE+GRHx2OSODOr7FwvLi8U4idvcPHO7yeag=
|
||||
github.com/karincake/lepet v0.0.1 h1:eq/cwn5BBg0jWZ1c/MmvhFIBma0zBpVs2LwkfDOncy4=
|
||||
|
||||
@@ -26,14 +26,15 @@ type ReadListDto struct {
|
||||
}
|
||||
|
||||
type FilterDto struct {
|
||||
Code *string `json:"code"`
|
||||
Employee_Id *uint `json:"employee-id"`
|
||||
IHS_Number *string `json:"ihs-number" validate:"maxLength=20"`
|
||||
SIP_Number *string `json:"sip-number" validate:"maxLength=20"`
|
||||
SIP_ExpiredDate *string `json:"sip-expiredDate"`
|
||||
Unit_Code *string `json:"unit-code"`
|
||||
Specialist_Code *string `json:"specialist-code"`
|
||||
Subspecialist_Code *string `json:"subspecialist-code"`
|
||||
Code *string `json:"code"`
|
||||
Employee_Id *uint `json:"employee-id"`
|
||||
IHS_Number *string `json:"ihs-number" validate:"maxLength=20"`
|
||||
SIP_Number *string `json:"sip-number" validate:"maxLength=20"`
|
||||
SIP_ExpiredDate *string `json:"sip-expiredDate"`
|
||||
Unit_Code *string `json:"unit-code"`
|
||||
Specialist_Code *string `json:"specialist-code"`
|
||||
Specialist_Code_Opt *string `json:"specialist-code-opt"`
|
||||
Subspecialist_Code *string `json:"subspecialist-code"`
|
||||
}
|
||||
|
||||
type ReadDetailDto struct {
|
||||
|
||||
@@ -105,6 +105,7 @@ type FilterDto struct {
|
||||
RegisteredAt *time.Time `json:"registeredAt"`
|
||||
Class_Code ere.EncounterClassCode `json:"class-code" validate:"maxLength=10"`
|
||||
Specialist_Code *string `json:"specialist-code"`
|
||||
Specialist_Code_Opt *string `json:"specialist-code-opt"`
|
||||
Subspecialist_Code *string `json:"subspecialist-code"`
|
||||
VisitDate time.Time `json:"visitDate"`
|
||||
Appoinment_Doctor_Code *string `json:"appointment-doctor-code"`
|
||||
|
||||
@@ -14,6 +14,10 @@ type CreateDto struct {
|
||||
EncounterClass_Code ere.EncounterClassCode `json:"encounterClass_code" validate:"maxLength=20"`
|
||||
}
|
||||
|
||||
type CreateBulkDto struct {
|
||||
Value []CreateDto `json:"value"`
|
||||
}
|
||||
|
||||
type ReadListDto struct {
|
||||
FilterDto
|
||||
Includes string `json:"includes"`
|
||||
|
||||
@@ -2,6 +2,7 @@ package resume
|
||||
|
||||
import (
|
||||
ecore "simrs-vx/internal/domain/base-entities/core"
|
||||
ed "simrs-vx/internal/domain/main-entities/doctor"
|
||||
"time"
|
||||
|
||||
erc "simrs-vx/internal/domain/references/common"
|
||||
@@ -54,6 +55,7 @@ type ResponseDto struct {
|
||||
ecore.Main
|
||||
Encounter_Id *uint `json:"encounter_id"`
|
||||
Doctor_Code *string `json:"doctor_code"`
|
||||
Doctor *ed.Doctor `json:"doctor,omitempty" gorm:"foreignKey:Doctor_Code;references:Code"`
|
||||
Value *string `json:"value"`
|
||||
FileUrl *string `json:"fileUrl"`
|
||||
Status_Code erc.DataVerifiedCode `json:"status_code"`
|
||||
@@ -63,6 +65,7 @@ func (d Resume) ToResponse() ResponseDto {
|
||||
resp := ResponseDto{
|
||||
Encounter_Id: d.Encounter_Id,
|
||||
Doctor_Code: d.Doctor_Code,
|
||||
Doctor: d.Doctor,
|
||||
Value: d.Value,
|
||||
FileUrl: d.FileUrl,
|
||||
Status_Code: d.Status_Code,
|
||||
|
||||
@@ -7,10 +7,10 @@ import (
|
||||
)
|
||||
|
||||
type CreateDto struct {
|
||||
Id *uint `json:"id"`
|
||||
Installation_Code string `json:"installation_code"`
|
||||
Code string `json:"code" validate:"maxLength=10"`
|
||||
Name string `json:"name" validate:"maxLength=50"`
|
||||
Id *uint `json:"id"`
|
||||
Installation_Code *string `json:"installation_code"`
|
||||
Code string `json:"code" validate:"maxLength=10"`
|
||||
Name string `json:"name" validate:"maxLength=50"`
|
||||
}
|
||||
|
||||
type ReadListDto struct {
|
||||
@@ -42,6 +42,10 @@ type DeleteDto struct {
|
||||
Code *string `json:"code"`
|
||||
}
|
||||
|
||||
type CreateBulkDto struct {
|
||||
Value []CreateDto `json:"value"`
|
||||
}
|
||||
|
||||
type MetaDto struct {
|
||||
PageNumber int `json:"page_number"`
|
||||
PageSize int `json:"page_size"`
|
||||
|
||||
@@ -11,7 +11,7 @@ type Specialist struct {
|
||||
ecore.SmallMain // adjust this according to the needs
|
||||
Code string `json:"code" gorm:"unique;size:20"`
|
||||
Name string `json:"name" gorm:"size:50"`
|
||||
Installation_Code string `json:"installation_code" gorm:"size:20"`
|
||||
Installation_Code *string `json:"installation_code" gorm:"size:20"`
|
||||
Installation *ei.Installation `json:"installation,omitempty" gorm:"foreignKey:Installation_Code;references:Code"`
|
||||
SpecialistPositions []eub.Basic `json:"specialistPositions,omitempty" gorm:"foreignKey:Specialist_Code;references:Code"`
|
||||
Subspecialists []essb.Basic `json:"subspecialists,omitempty" gorm:"foreignKey:Specialist_Code;references:Code"`
|
||||
|
||||
@@ -43,6 +43,10 @@ type DeleteDto struct {
|
||||
Code *string `json:"code"`
|
||||
}
|
||||
|
||||
type CreateBulkDto struct {
|
||||
Value []CreateDto `json:"value"`
|
||||
}
|
||||
|
||||
type MetaDto struct {
|
||||
PageNumber int `json:"page_number"`
|
||||
PageSize int `json:"page_size"`
|
||||
|
||||
@@ -70,7 +70,7 @@ const (
|
||||
OCCHcu OutpatientClassCode = "hcu" // HCU
|
||||
OCCVk OutpatientClassCode = "vk" // Verlos kamer
|
||||
|
||||
ACCReg AmbulatoryClassCode = "reg" // Regular
|
||||
ACCReg AmbulatoryClassCode = "regular" // Regular
|
||||
// ACCRehab ACCRme AmbulatoryClassCode = "rme" // Rehab Medik
|
||||
// ACCCad AmbulatoryClassCode = "chemo-adm" // Chemotherapy
|
||||
// ACCCac AmbulatoryClassCode = "chemo-act" // Chemotherapy
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package daftar_specialist
|
||||
|
||||
type DaftarSpesialis struct {
|
||||
ID uint `json:"id" gorm:"column:id;primaryKey;autoIncrement"`
|
||||
Kode string `json:"kode" gorm:"column:Kode"`
|
||||
Spesialis string `json:"spesialis" gorm:"column:Spesialis"`
|
||||
IdGroupLocationSimgos *string `json:"id_group_location_simgos" gorm:"column:Id_group_location_simgos"`
|
||||
}
|
||||
|
||||
func (DaftarSpesialis) TableName() string {
|
||||
return "daftar_spesialis"
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package m_ruang
|
||||
|
||||
type MRuang struct {
|
||||
No uint `json:"no" gorm:"column:no;primaryKey;autoIncrement"`
|
||||
Nama string `json:"nama" gorm:"column:nama"`
|
||||
Kelas string `json:"kelas" gorm:"column:kelas"`
|
||||
IdxRuang string `json:"idx_ruang" gorm:"column:idx_ruang"`
|
||||
Kelompok string `json:"kelompok" gorm:"column:kelompok"`
|
||||
Ruang *string `json:"ruang" gorm:"column:ruang"`
|
||||
KdUnit int `json:"kdunit" gorm:"column:kdunit"`
|
||||
JumlahTT int `json:"jumlah_tt" gorm:"column:jumlah_tt"`
|
||||
KetRuang *string `json:"ket_ruang" gorm:"column:ket_ruang"`
|
||||
Fasilitas *string `json:"fasilitas" gorm:"column:fasilitas"`
|
||||
Keterangan *string `json:"keterangan" gorm:"column:keterangan"`
|
||||
SubSistem string `json:"subsistem" gorm:"column:subsistem"`
|
||||
StAktif int16 `json:"st_aktif" gorm:"column:st_aktif"`
|
||||
KodeRuang *string `json:"kode_ruang" gorm:"column:kode_ruang"`
|
||||
IsPartial *string `json:"is_partial" gorm:"column:is_partial"`
|
||||
}
|
||||
|
||||
// Nama tabel (opsional jika nama struct ≠ nama tabel)
|
||||
func (MRuang) TableName() string {
|
||||
return "m_ruang"
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package simgos_db
|
||||
|
||||
import (
|
||||
dg "github.com/karincake/apem/db-gorm-pg"
|
||||
)
|
||||
|
||||
func SetInstance() {
|
||||
I = dg.IS["satu"]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package simgos_db
|
||||
|
||||
import "gorm.io/gorm"
|
||||
|
||||
var I *gorm.DB
|
||||
@@ -71,3 +71,12 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
|
||||
res, err := u.Delete(dto)
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
|
||||
func (obj myBase) CreateBulk(w http.ResponseWriter, r *http.Request) {
|
||||
dto := e.CreateBulkDto{}
|
||||
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
|
||||
return
|
||||
}
|
||||
res, err := u.CreateBulk(dto)
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
@@ -366,10 +366,31 @@ func SetRoutes() http.Handler {
|
||||
/******************** sources ********************/
|
||||
hc.RegCrudByCode(r, "/v1/division", division.O)
|
||||
hc.RegCrudByCode(r, "/v1/division-position", divisionposition.O)
|
||||
hc.RegCrudByCode(r, "/v1/installation", installation.O)
|
||||
hk.GroupRoutes("/v1/installation", r, hk.MapHandlerFunc{
|
||||
"GET /": installation.O.GetList,
|
||||
"GET /{id}": installation.O.GetDetail,
|
||||
"POST /": installation.O.Create,
|
||||
"PATCH /{id}": installation.O.Update,
|
||||
"DELETE /{id}": installation.O.Delete,
|
||||
"POST /bulk": installation.O.CreateBulk,
|
||||
})
|
||||
hc.RegCrudByCode(r, "/v1/installation-position", installationposition.O)
|
||||
hc.RegCrudByCode(r, "/v1/specialist", specialist.O)
|
||||
hc.RegCrudByCode(r, "/v1/subspecialist", subspecialist.O)
|
||||
hk.GroupRoutes("/v1/specialist", r, hk.MapHandlerFunc{
|
||||
"GET /": specialist.O.GetList,
|
||||
"GET /{id}": specialist.O.GetDetail,
|
||||
"POST /": specialist.O.Create,
|
||||
"PATCH /{id}": specialist.O.Update,
|
||||
"DELETE /{id}": specialist.O.Delete,
|
||||
"POST /bulk": specialist.O.CreateBulk,
|
||||
})
|
||||
hk.GroupRoutes("/v1/subspecialist", r, hk.MapHandlerFunc{
|
||||
"GET /": subspecialist.O.GetList,
|
||||
"GET /{id}": subspecialist.O.GetDetail,
|
||||
"POST /": subspecialist.O.Create,
|
||||
"PATCH /{id}": subspecialist.O.Update,
|
||||
"DELETE /{id}": subspecialist.O.Delete,
|
||||
"POST /bulk": subspecialist.O.CreateBulk,
|
||||
})
|
||||
hc.RegCrudByCode(r, "/v1/specialist-position", specialistposition.O)
|
||||
hc.RegCrudByCode(r, "/v1/subspecialist-position", subspecialistposition.O)
|
||||
hc.RegCrudByCode(r, "/v1/infra", infra.O)
|
||||
|
||||
@@ -71,3 +71,12 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
|
||||
res, err := u.Delete(dto)
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
|
||||
func (obj myBase) CreateBulk(w http.ResponseWriter, r *http.Request) {
|
||||
dto := e.CreateBulkDto{}
|
||||
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
|
||||
return
|
||||
}
|
||||
res, err := u.CreateBulk(dto)
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
@@ -71,3 +71,12 @@ func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
|
||||
res, err := u.Delete(dto)
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
|
||||
func (obj myBase) CreateBulk(w http.ResponseWriter, r *http.Request) {
|
||||
dto := e.CreateBulkDto{}
|
||||
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
|
||||
return
|
||||
}
|
||||
res, err := u.CreateBulk(dto)
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
|
||||
/******************** infra ********************/
|
||||
gs "simrs-vx/internal/infra/gorm-setting"
|
||||
satudb "simrs-vx/internal/infra/satu-db"
|
||||
simgosdb "simrs-vx/internal/infra/simgos-db"
|
||||
sync "simrs-vx/internal/infra/sync-cfg"
|
||||
|
||||
@@ -43,6 +44,7 @@ func SetRoutes() http.Handler {
|
||||
a.RegisterExtCall(lh.Populate)
|
||||
a.RegisterExtCall(sync.SetConfig)
|
||||
a.RegisterExtCall(simgosdb.SetInstance)
|
||||
a.RegisterExtCall(satudb.SetInstance)
|
||||
|
||||
r := http.NewServeMux()
|
||||
|
||||
|
||||
@@ -889,7 +889,7 @@ func ApproveSwitchSpecialist(input e.ApproveCancelSpecialistDto) (*d.Data, error
|
||||
}
|
||||
|
||||
// Set doctor_code; nil indicates no change.
|
||||
if input.Dst_Doctor_Code == nil {
|
||||
if input.Dst_Doctor_Code == nil || *input.Dst_Doctor_Code == "" {
|
||||
input.Dst_Doctor_Code = irData.Doctor_Code
|
||||
}
|
||||
|
||||
|
||||
@@ -83,15 +83,17 @@ func ReadListData(input e.ReadListDto, event *pl.Event, dbx ...*gorm.DB) ([]e.En
|
||||
tx = tx.Where("\"Encounter\".\"Status_Code\" = ?", *input.Status_Code)
|
||||
}
|
||||
|
||||
if input.Specialist_Code != nil {
|
||||
tx = tx.Where("\"Encounter\".\"Specialist_Code\" = ?", *input.Specialist_Code)
|
||||
}
|
||||
// if input.Specialist_Code != nil {
|
||||
// tx = tx.Where("\"Encounter\".\"Specialist_Code\" = ?", *input.Specialist_Code)
|
||||
// }
|
||||
|
||||
if input.PaymentMethod_Code != nil {
|
||||
tx = tx.Where("\"Encounter\".\"PaymentMethod_Code\" = ?", *input.PaymentMethod_Code)
|
||||
}
|
||||
|
||||
tx = tx.Scopes(gh.Preload(input.Includes)).
|
||||
tx = tx.Debug().
|
||||
Scopes(gh.Filter(input.FilterDto)).
|
||||
Scopes(gh.Preload(input.Includes)).
|
||||
Count(&count).
|
||||
Scopes(gh.Paginate(input, &pagination)).
|
||||
Order("\"CreatedAt\" DESC")
|
||||
|
||||
@@ -241,6 +241,40 @@ func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
|
||||
}
|
||||
|
||||
func CreateBulk(input e.CreateBulkDto) (*d.Data, error) {
|
||||
var data []e.Installation
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "Create",
|
||||
Source: source,
|
||||
}
|
||||
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
err := dg.I.Transaction(func(tx *gorm.DB) error {
|
||||
if resData, err := CreateBulkData(input.Value, &event, tx); err != nil {
|
||||
return err
|
||||
} else {
|
||||
data = *resData
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
return &d.Data{
|
||||
Meta: d.II{
|
||||
"source": source,
|
||||
"structure": "single-data",
|
||||
"status": "created",
|
||||
},
|
||||
Data: e.ToResponseList(data),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func runLogMiddleware(err error, input any, mwRunner *middlewareRunner) error {
|
||||
var errMsg string
|
||||
inputLog := esync.SimxLogDto{
|
||||
|
||||
@@ -21,3 +21,15 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Installation) {
|
||||
data.Name = inputSrc.Name
|
||||
data.EncounterClass_Code = inputSrc.EncounterClass_Code
|
||||
}
|
||||
|
||||
func setBulkData(input []e.CreateDto) (data []e.Installation) {
|
||||
for _, i := range input {
|
||||
data = append(data, e.Installation{
|
||||
Code: *i.Code,
|
||||
Name: i.Name,
|
||||
EncounterClass_Code: i.EncounterClass_Code,
|
||||
})
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package installation
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
e "simrs-vx/internal/domain/main-entities/installation"
|
||||
|
||||
plh "simrs-vx/pkg/lib-helper"
|
||||
@@ -147,3 +148,26 @@ func DeleteData(data *e.Installation, event *pl.Event, dbx ...*gorm.DB) error {
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreateBulkData(input []e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*[]e.Installation, error) {
|
||||
pl.SetLogInfo(event, nil, "started", "DBBulkCreate")
|
||||
|
||||
data := setBulkData(input)
|
||||
|
||||
var tx *gorm.DB
|
||||
if len(dbx) > 0 {
|
||||
tx = dbx[0]
|
||||
} else {
|
||||
tx = dg.I
|
||||
}
|
||||
|
||||
result := tx.Create(&data)
|
||||
if err := result.Error; err != nil {
|
||||
return nil, plh.HandleCreateError(input, event, err)
|
||||
}
|
||||
|
||||
fmt.Println("Inserted:", result.RowsAffected)
|
||||
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return &data, nil
|
||||
}
|
||||
@@ -295,3 +295,37 @@ func runLogMiddleware(err error, input any, mwRunner *middlewareRunner) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreateBulk(input e.CreateBulkDto) (*d.Data, error) {
|
||||
var data []e.Specialist
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "CreateBulk",
|
||||
Source: source,
|
||||
}
|
||||
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
err := dg.I.Transaction(func(tx *gorm.DB) error {
|
||||
if resData, err := CreateBulkData(input.Value, &event, tx); err != nil {
|
||||
return err
|
||||
} else {
|
||||
data = *resData
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
return &d.Data{
|
||||
Meta: d.II{
|
||||
"source": source,
|
||||
"structure": "single-data",
|
||||
"status": "created",
|
||||
},
|
||||
Data: e.ToResponseList(data),
|
||||
}, nil
|
||||
}
|
||||
@@ -21,3 +21,15 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Specialist) {
|
||||
data.Name = inputSrc.Name
|
||||
data.Installation_Code = inputSrc.Installation_Code
|
||||
}
|
||||
|
||||
func setBulkData(input []e.CreateDto) (data []e.Specialist) {
|
||||
for _, i := range input {
|
||||
data = append(data, e.Specialist{
|
||||
Code: i.Code,
|
||||
Name: i.Name,
|
||||
Installation_Code: i.Installation_Code,
|
||||
})
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package specialist
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
e "simrs-vx/internal/domain/main-entities/specialist"
|
||||
|
||||
plh "simrs-vx/pkg/lib-helper"
|
||||
@@ -147,3 +148,26 @@ func DeleteData(data *e.Specialist, event *pl.Event, dbx ...*gorm.DB) error {
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreateBulkData(input []e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*[]e.Specialist, error) {
|
||||
pl.SetLogInfo(event, nil, "started", "DBBulkCreate")
|
||||
|
||||
data := setBulkData(input)
|
||||
|
||||
var tx *gorm.DB
|
||||
if len(dbx) > 0 {
|
||||
tx = dbx[0]
|
||||
} else {
|
||||
tx = dg.I
|
||||
}
|
||||
|
||||
result := tx.Create(&data)
|
||||
if err := result.Error; err != nil {
|
||||
return nil, plh.HandleCreateError(input, event, err)
|
||||
}
|
||||
|
||||
fmt.Println("Inserted:", result.RowsAffected)
|
||||
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return &data, nil
|
||||
}
|
||||
@@ -293,3 +293,37 @@ func runLogMiddleware(err error, input any, mwRunner *middlewareRunner) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreateBulk(input e.CreateBulkDto) (*d.Data, error) {
|
||||
var data []e.Subspecialist
|
||||
|
||||
event := pl.Event{
|
||||
Feature: "CreateBulk",
|
||||
Source: source,
|
||||
}
|
||||
|
||||
// Start log
|
||||
pl.SetLogInfo(&event, input, "started", "create")
|
||||
err := dg.I.Transaction(func(tx *gorm.DB) error {
|
||||
if resData, err := CreateBulkData(input.Value, &event, tx); err != nil {
|
||||
return err
|
||||
} else {
|
||||
data = *resData
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pl.SetLogInfo(&event, nil, "complete")
|
||||
|
||||
return &d.Data{
|
||||
Meta: d.II{
|
||||
"source": source,
|
||||
"structure": "single-data",
|
||||
"status": "created",
|
||||
},
|
||||
Data: e.ToResponseList(data),
|
||||
}, nil
|
||||
}
|
||||
@@ -6,6 +6,7 @@ package subspecialist
|
||||
|
||||
import (
|
||||
e "simrs-vx/internal/domain/main-entities/subspecialist"
|
||||
"simrs-vx/internal/domain/main-entities/subspecialist/base"
|
||||
)
|
||||
|
||||
func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Subspecialist) {
|
||||
@@ -21,3 +22,16 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.Subspecialist) {
|
||||
data.Name = inputSrc.Name
|
||||
data.Specialist_Code = inputSrc.Specialist_Code
|
||||
}
|
||||
|
||||
func setBulkData(input []e.CreateDto) (data []e.Subspecialist) {
|
||||
for _, i := range input {
|
||||
data = append(data, e.Subspecialist{
|
||||
Basic: base.Basic{
|
||||
Code: i.Code,
|
||||
Name: i.Name,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package subspecialist
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
e "simrs-vx/internal/domain/main-entities/subspecialist"
|
||||
|
||||
plh "simrs-vx/pkg/lib-helper"
|
||||
@@ -147,3 +148,26 @@ func DeleteData(data *e.Subspecialist, event *pl.Event, dbx ...*gorm.DB) error {
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreateBulkData(input []e.CreateDto, event *pl.Event, dbx ...*gorm.DB) (*[]e.Subspecialist, error) {
|
||||
pl.SetLogInfo(event, nil, "started", "DBBulkCreate")
|
||||
|
||||
data := setBulkData(input)
|
||||
|
||||
var tx *gorm.DB
|
||||
if len(dbx) > 0 {
|
||||
tx = dbx[0]
|
||||
} else {
|
||||
tx = dg.I
|
||||
}
|
||||
|
||||
result := tx.Create(&data)
|
||||
if err := result.Error; err != nil {
|
||||
return nil, plh.HandleCreateError(input, event, err)
|
||||
}
|
||||
|
||||
fmt.Println("Inserted:", result.RowsAffected)
|
||||
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return &data, nil
|
||||
}
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
esimgos "simrs-vx/internal/domain/simgos-entities/m-instalasi"
|
||||
esync "simrs-vx/internal/domain/sync-entities/installation"
|
||||
esyncLog "simrs-vx/internal/domain/sync-entities/log"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func setDataSimgos[T *e.CreateDto | *e.UpdateDto](input T) (data esimgos.MInstalasi) {
|
||||
@@ -56,3 +57,14 @@ func setDataSimxLink(simxId, simgosId uint) (data esync.InstallationLink) {
|
||||
data.Simgos_Id = simgosId
|
||||
return
|
||||
}
|
||||
|
||||
func setBulkDataSimxLink(input []e.Installation) (data []esync.InstallationLink) {
|
||||
for _, i := range input {
|
||||
kode, _ := strconv.Atoi(i.Code)
|
||||
data = append(data, esync.InstallationLink{
|
||||
Simx_Id: uint(i.Id),
|
||||
Simgos_Id: uint(kode),
|
||||
})
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package installation
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
plh "simrs-vx/pkg/lib-helper"
|
||||
pl "simrs-vx/pkg/logger"
|
||||
pu "simrs-vx/pkg/use-case-helper"
|
||||
@@ -212,3 +213,25 @@ func CreateLogData(input esynclog.SimxLogDto, event *pl.Event, dbx ...*gorm.DB)
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreateBulkLinkData(input []e.Installation, event *pl.Event, dbx ...*gorm.DB) (*[]esync.InstallationLink, error) {
|
||||
pl.SetLogInfo(event, nil, "started", "DBCreate")
|
||||
data := setBulkDataSimxLink(input)
|
||||
|
||||
var tx *gorm.DB
|
||||
if len(dbx) > 0 {
|
||||
tx = dbx[0]
|
||||
} else {
|
||||
tx = dg.I
|
||||
}
|
||||
|
||||
result := tx.Create(&data)
|
||||
if err := result.Error; err != nil {
|
||||
return nil, plh.HandleCreateError(input, event, err)
|
||||
}
|
||||
|
||||
fmt.Println("Inserted Link:", result.RowsAffected)
|
||||
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return &data, nil
|
||||
}
|
||||
@@ -7,6 +7,7 @@ package specialist
|
||||
import (
|
||||
"encoding/json"
|
||||
erc "simrs-vx/internal/domain/references/common"
|
||||
"strconv"
|
||||
|
||||
e "simrs-vx/internal/domain/main-entities/specialist"
|
||||
esimgos "simrs-vx/internal/domain/simgos-entities/m-polihfis"
|
||||
@@ -58,3 +59,14 @@ func setDataSimxLink(simxId, simgosId uint) (data esync.SpecialistLink) {
|
||||
data.Simgos_Id = simgosId
|
||||
return
|
||||
}
|
||||
|
||||
func setBulkDataSimxLink(input []e.Specialist) (data []esync.SpecialistLink) {
|
||||
for _, i := range input {
|
||||
kode, _ := strconv.Atoi(i.Code)
|
||||
data = append(data, esync.SpecialistLink{
|
||||
Simx_Id: uint(i.Id),
|
||||
Simgos_Id: uint(kode),
|
||||
})
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package specialist
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
plh "simrs-vx/pkg/lib-helper"
|
||||
pl "simrs-vx/pkg/logger"
|
||||
pu "simrs-vx/pkg/use-case-helper"
|
||||
@@ -189,3 +190,25 @@ func CreateLogData(input esynclog.SimxLogDto, event *pl.Event, dbx ...*gorm.DB)
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreateBulkLinkData(input []e.Specialist, event *pl.Event, dbx ...*gorm.DB) (*[]esync.SpecialistLink, error) {
|
||||
pl.SetLogInfo(event, nil, "started", "DBCreate")
|
||||
data := setBulkDataSimxLink(input)
|
||||
|
||||
var tx *gorm.DB
|
||||
if len(dbx) > 0 {
|
||||
tx = dbx[0]
|
||||
} else {
|
||||
tx = dg.I
|
||||
}
|
||||
|
||||
result := tx.Create(&data)
|
||||
if err := result.Error; err != nil {
|
||||
return nil, plh.HandleCreateError(input, event, err)
|
||||
}
|
||||
|
||||
fmt.Println("Inserted Link:", result.RowsAffected)
|
||||
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return &data, nil
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import (
|
||||
erc "simrs-vx/internal/domain/references/common"
|
||||
//esimgos "simrs-vx/internal/domain/simgos-entities/specialist"
|
||||
esyncLog "simrs-vx/internal/domain/sync-entities/log"
|
||||
esync "simrs-vx/internal/domain/sync-entities/specialist"
|
||||
esync "simrs-vx/internal/domain/sync-entities/subspecialist"
|
||||
)
|
||||
|
||||
//func setDataSimgos[T *e.CreateDto | *e.UpdateDto](input T) (data esimgos.MPolihfis) {
|
||||
@@ -30,7 +30,7 @@ import (
|
||||
// return
|
||||
//}
|
||||
|
||||
func setDataSimxLog(input *esyncLog.SimxLogDto) (data esync.SpecialistSimxLog) {
|
||||
func setDataSimxLog(input *esyncLog.SimxLogDto) (data esync.SubspecialistSimxLog) {
|
||||
// encode to JSON
|
||||
jsonData, _ := json.MarshalIndent(input.Payload, "", " ")
|
||||
jsonString := string(jsonData)
|
||||
@@ -52,7 +52,7 @@ func setDataSimxLog(input *esyncLog.SimxLogDto) (data esync.SpecialistSimxLog) {
|
||||
return
|
||||
}
|
||||
|
||||
func setDataSimxLink(simxId, simgosId uint) (data esync.SpecialistLink) {
|
||||
func setDataSimxLink(simxId, simgosId uint) (data esync.SubspecialistLink) {
|
||||
data.Simx_Id = simxId
|
||||
data.Simgos_Id = simgosId
|
||||
return
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package subspecialist
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
plh "simrs-vx/pkg/lib-helper"
|
||||
pl "simrs-vx/pkg/logger"
|
||||
pu "simrs-vx/pkg/use-case-helper"
|
||||
@@ -9,9 +10,8 @@ import (
|
||||
dg "github.com/karincake/apem/db-gorm-pg"
|
||||
"gorm.io/gorm"
|
||||
|
||||
//esimgos "simrs-vx/internal/domain/simgos-entities/specialist"
|
||||
esynclog "simrs-vx/internal/domain/sync-entities/log"
|
||||
esync "simrs-vx/internal/domain/sync-entities/specialist"
|
||||
esync "simrs-vx/internal/domain/sync-entities/subspecialist"
|
||||
)
|
||||
|
||||
var now = time.Now()
|
||||
@@ -106,7 +106,7 @@ var now = time.Now()
|
||||
// return nil
|
||||
//}
|
||||
|
||||
func CreateLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) (*esync.SpecialistLink, error) {
|
||||
func CreateLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) (*esync.SubspecialistLink, error) {
|
||||
pl.SetLogInfo(event, nil, "started", "DBCreate")
|
||||
data := setDataSimxLink(simxId, simgosId)
|
||||
|
||||
@@ -125,9 +125,9 @@ func CreateLinkData(simxId, simgosId uint, event *pl.Event, dbx ...*gorm.DB) (*e
|
||||
return &data, nil
|
||||
}
|
||||
|
||||
func ReadDetailLinkData(simxId uint16, event *pl.Event) (*esync.SpecialistLink, error) {
|
||||
func ReadDetailLinkData(simxId uint16, event *pl.Event) (*esync.SubspecialistLink, error) {
|
||||
pl.SetLogInfo(event, simxId, "started", "DBReadDetail")
|
||||
data := esync.SpecialistLink{}
|
||||
data := esync.SubspecialistLink{}
|
||||
|
||||
var tx = dg.I
|
||||
|
||||
@@ -143,7 +143,7 @@ func ReadDetailLinkData(simxId uint16, event *pl.Event) (*esync.SpecialistLink,
|
||||
return &data, nil
|
||||
}
|
||||
|
||||
func DeleteLinkData(data *esync.SpecialistLink, event *pl.Event, dbx ...*gorm.DB) error {
|
||||
func DeleteLinkData(data *esync.SubspecialistLink, event *pl.Event, dbx ...*gorm.DB) error {
|
||||
pl.SetLogInfo(event, data, "started", "DBDelete")
|
||||
|
||||
var tx *gorm.DB
|
||||
@@ -185,3 +185,24 @@ func CreateLogData(input esynclog.SimxLogDto, event *pl.Event, dbx ...*gorm.DB)
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreateBulkLinkData(data []esync.SubspecialistLink, event *pl.Event, dbx ...*gorm.DB) (*[]esync.SubspecialistLink, error) {
|
||||
pl.SetLogInfo(event, nil, "started", "DBCreate")
|
||||
|
||||
var tx *gorm.DB
|
||||
if len(dbx) > 0 {
|
||||
tx = dbx[0]
|
||||
} else {
|
||||
tx = dg.I
|
||||
}
|
||||
|
||||
result := tx.Create(&data)
|
||||
if err := result.Error; err != nil {
|
||||
return nil, plh.HandleCreateError(data, event, err)
|
||||
}
|
||||
|
||||
fmt.Println("Inserted Link:", result.RowsAffected)
|
||||
|
||||
pl.SetLogInfo(event, nil, "complete")
|
||||
return &data, nil
|
||||
}
|
||||
@@ -15,6 +15,7 @@ import (
|
||||
type Dto struct {
|
||||
LoginNip []string `json:"loginNip"`
|
||||
Instalasi_Code string `json:"instalasi_code"`
|
||||
SeedTableName string `json:"seedTableName"`
|
||||
}
|
||||
|
||||
func Send(method string, endpoint string, body *bytes.Buffer, username string) ([]byte, error) {
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
package installation
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"log"
|
||||
"net/http"
|
||||
ere "simrs-vx/internal/domain/references/encounter"
|
||||
db "simrs-vx/pkg/dualtrx-helper"
|
||||
pl "simrs-vx/pkg/logger"
|
||||
"strconv"
|
||||
|
||||
ei "simrs-vx/internal/domain/main-entities/installation"
|
||||
eu "simrs-vx/internal/domain/simgos-entities/m-unit"
|
||||
|
||||
ui "simrs-vx/internal/use-case/simgos-sync-use-case/new/installation"
|
||||
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder"
|
||||
)
|
||||
|
||||
func SeedInstallation(event *pl.Event, tx *db.Dualtx) error {
|
||||
unit := []eu.MUnit{}
|
||||
|
||||
// Get M_Unit
|
||||
err := tx.Simgos.Model(&eu.MUnit{}).
|
||||
Find(&unit).Error
|
||||
if err != nil {
|
||||
log.Println("Error Querying MUnit:", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// Mapping To Installation
|
||||
var installationData []ei.CreateDto
|
||||
for _, v := range unit {
|
||||
|
||||
codeString := strconv.Itoa(int(v.KodeUnit))
|
||||
installationData = append(installationData, ei.CreateDto{
|
||||
Name: v.NamaUnit,
|
||||
EncounterClass_Code: ere.ECAmbulatory,
|
||||
Code: &codeString,
|
||||
})
|
||||
}
|
||||
|
||||
dataInstallation, err := CreateBulkInstallation(ei.CreateBulkDto{Value: installationData})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = ui.CreateBulkLinkData(dataInstallation, event, tx.Sync)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func CreateBulkInstallation(ins ei.CreateBulkDto) ([]ei.Installation, error) {
|
||||
var path = "installation/bulk"
|
||||
|
||||
// create request body
|
||||
jsonData, err := json.Marshal(ins)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
reqBody := bytes.NewBuffer(jsonData)
|
||||
// send data to main-api
|
||||
resp, err := seeder.Send(http.MethodPost, path, reqBody, "von")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
type MetaData struct {
|
||||
Source string `json:"source"`
|
||||
Status string `json:"status"`
|
||||
Structure string `json:"structure"`
|
||||
}
|
||||
|
||||
type MainApiResp struct {
|
||||
Meta MetaData `json:"meta"`
|
||||
Data []ei.Installation `json:"data"`
|
||||
}
|
||||
|
||||
// getting response
|
||||
var data MainApiResp
|
||||
err = json.Unmarshal(resp, &data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return data.Data, nil
|
||||
}
|
||||
@@ -2,9 +2,6 @@ package seeder
|
||||
|
||||
import (
|
||||
"log"
|
||||
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/doctor"
|
||||
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/nurse"
|
||||
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/regular"
|
||||
|
||||
db "simrs-vx/pkg/dualtrx-helper"
|
||||
pl "simrs-vx/pkg/logger"
|
||||
@@ -14,6 +11,13 @@ import (
|
||||
el "simrs-vx/internal/domain/simgos-entities/m-login"
|
||||
|
||||
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder"
|
||||
|
||||
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/doctor"
|
||||
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/installation"
|
||||
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/nurse"
|
||||
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/regular"
|
||||
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/specialist"
|
||||
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder/subspecialist"
|
||||
)
|
||||
|
||||
const source = "seeder"
|
||||
@@ -33,52 +37,69 @@ func SeedToSimx(input seeder.Dto) (*d.Data, error) {
|
||||
kddokter, kdperawat []uint
|
||||
)
|
||||
|
||||
// Get M_login
|
||||
err := tx.Simgos.Model(&el.MLogin{}).
|
||||
Select(`DISTINCT ON (nip) m_login.*`).
|
||||
Where(`"nip" IN (?)`, input.LoginNip).
|
||||
Find(&mlogin).Error
|
||||
if err != nil {
|
||||
log.Println("Error Querying Mlogin:", err)
|
||||
return nil, err
|
||||
}
|
||||
switch input.SeedTableName {
|
||||
case "installation":
|
||||
if err := installation.SeedInstallation(&event, tx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
case "specialist":
|
||||
if err := specialist.SeedSpecialist(&event, tx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
case "subspecialist":
|
||||
if err := subspecialist.SeedSubspecialist(&event, tx); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// SET data
|
||||
if len(mlogin) > 0 {
|
||||
for _, l := range mlogin {
|
||||
if l.KdDokter != 0 {
|
||||
kddokter = append(kddokter, l.KdDokter)
|
||||
continue
|
||||
default:
|
||||
|
||||
// Get M_login
|
||||
err := tx.Simgos.Model(&el.MLogin{}).
|
||||
Select(`DISTINCT ON (nip) m_login.*`).
|
||||
Where(`"nip" IN (?)`, input.LoginNip).
|
||||
Find(&mlogin).Error
|
||||
if err != nil {
|
||||
log.Println("Error Querying Mlogin:", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// SET data
|
||||
if len(mlogin) > 0 {
|
||||
for _, l := range mlogin {
|
||||
if l.KdDokter != 0 {
|
||||
kddokter = append(kddokter, l.KdDokter)
|
||||
continue
|
||||
}
|
||||
|
||||
if l.KdPerawat != 0 {
|
||||
kdperawat = append(kdperawat, l.KdPerawat)
|
||||
continue
|
||||
}
|
||||
|
||||
regLogin = append(regLogin, l)
|
||||
}
|
||||
}
|
||||
|
||||
if l.KdPerawat != 0 {
|
||||
kdperawat = append(kdperawat, l.KdPerawat)
|
||||
continue
|
||||
// Seed based on role
|
||||
if len(kddokter) > 0 {
|
||||
err = doctor.SeedDoctor(kddokter, &event, tx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
regLogin = append(regLogin, l)
|
||||
}
|
||||
}
|
||||
|
||||
// Seed based on role
|
||||
if len(kddokter) > 0 {
|
||||
err = doctor.SeedDoctor(kddokter, &event, tx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
if len(kdperawat) > 0 {
|
||||
err = nurse.SeedNurse(kdperawat, &event, tx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if len(kdperawat) > 0 {
|
||||
err = nurse.SeedNurse(kdperawat, &event, tx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if len(regLogin) > 0 {
|
||||
err = regular.SeedRegular(regLogin, input.Instalasi_Code)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
if len(regLogin) > 0 {
|
||||
err = regular.SeedRegular(regLogin, input.Instalasi_Code)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
package specialist
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"log"
|
||||
"net/http"
|
||||
db "simrs-vx/pkg/dualtrx-helper"
|
||||
pl "simrs-vx/pkg/logger"
|
||||
"strconv"
|
||||
|
||||
es "simrs-vx/internal/domain/main-entities/specialist"
|
||||
er "simrs-vx/internal/domain/simgos-entities/m-ruang"
|
||||
|
||||
us "simrs-vx/internal/use-case/simgos-sync-use-case/new/specialist"
|
||||
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder"
|
||||
)
|
||||
|
||||
func SeedSpecialist(event *pl.Event, tx *db.Dualtx) error {
|
||||
ruang := []er.MRuang{}
|
||||
|
||||
// Get M_Ruang
|
||||
err := tx.Simgos.Model(&er.MRuang{}).
|
||||
Find(&ruang).Error
|
||||
if err != nil {
|
||||
log.Println("Error Querying MRuang:", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// Mapping To Specialist
|
||||
var speData []es.CreateDto
|
||||
for _, v := range ruang {
|
||||
if v.StAktif == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
speCode := strconv.Itoa(int(v.No))
|
||||
|
||||
var insCode *string
|
||||
if v.KdUnit != 0 {
|
||||
code := strconv.Itoa(v.KdUnit)
|
||||
insCode = &code
|
||||
}
|
||||
|
||||
speData = append(speData, es.CreateDto{
|
||||
Code: speCode,
|
||||
Name: v.Nama,
|
||||
Installation_Code: insCode,
|
||||
})
|
||||
}
|
||||
|
||||
dataSpe, err := CreateBulkSpecialist(es.CreateBulkDto{Value: speData})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = us.CreateBulkLinkData(dataSpe, event, tx.Sync)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func CreateBulkSpecialist(ins es.CreateBulkDto) ([]es.Specialist, error) {
|
||||
var path = "specialist/bulk"
|
||||
|
||||
// create request body
|
||||
jsonData, err := json.Marshal(ins)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
reqBody := bytes.NewBuffer(jsonData)
|
||||
// send data to main-api
|
||||
resp, err := seeder.Send(http.MethodPost, path, reqBody, "von")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
type MetaData struct {
|
||||
Source string `json:"source"`
|
||||
Status string `json:"status"`
|
||||
Structure string `json:"structure"`
|
||||
}
|
||||
|
||||
type MainApiResp struct {
|
||||
Meta MetaData `json:"meta"`
|
||||
Data []es.Specialist `json:"data"`
|
||||
}
|
||||
|
||||
// getting response
|
||||
var data MainApiResp
|
||||
err = json.Unmarshal(resp, &data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return data.Data, nil
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
package subspecialist
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"log"
|
||||
"net/http"
|
||||
db "simrs-vx/pkg/dualtrx-helper"
|
||||
pl "simrs-vx/pkg/logger"
|
||||
|
||||
es "simrs-vx/internal/domain/main-entities/subspecialist"
|
||||
eds "simrs-vx/internal/domain/satu-entities/daftar-specialist"
|
||||
esb "simrs-vx/internal/domain/sync-entities/subspecialist"
|
||||
|
||||
us "simrs-vx/internal/use-case/simgos-sync-use-case/new/subspecialist"
|
||||
"simrs-vx/internal/use-case/simgos-sync-use-case/seeder"
|
||||
)
|
||||
|
||||
func SeedSubspecialist(event *pl.Event, tx *db.Dualtx) error {
|
||||
dspe := []eds.DaftarSpesialis{}
|
||||
subspeMap := make(map[string]uint)
|
||||
|
||||
// Get Daftar Specialist
|
||||
err := tx.Satu.Model(&eds.DaftarSpesialis{}).
|
||||
Find(&dspe).Error
|
||||
if err != nil {
|
||||
log.Println("Error Querying DaftarSpecialist:", err)
|
||||
return err
|
||||
}
|
||||
|
||||
// Mapping To Subspecialist
|
||||
var speData []es.CreateDto
|
||||
for _, v := range dspe {
|
||||
speData = append(speData, es.CreateDto{
|
||||
Code: v.Kode,
|
||||
Name: v.Spesialis,
|
||||
})
|
||||
|
||||
subspeMap[v.Kode] = v.ID
|
||||
}
|
||||
|
||||
dataSpe, err := CreateBulkSubSpecialist(es.CreateBulkDto{Value: speData})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// mapping link for subspecialist
|
||||
var subspecliast []esb.SubspecialistLink
|
||||
for _, v := range dataSpe {
|
||||
subspecliast = append(subspecliast, esb.SubspecialistLink{
|
||||
Simx_Id: uint(v.Id),
|
||||
Simgos_Id: subspeMap[v.Code],
|
||||
})
|
||||
}
|
||||
|
||||
_, err = us.CreateBulkLinkData(subspecliast, event, tx.Sync)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func CreateBulkSubSpecialist(ins es.CreateBulkDto) ([]es.Subspecialist, error) {
|
||||
var path = "subspecialist/bulk"
|
||||
|
||||
// create request body
|
||||
jsonData, err := json.Marshal(ins)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
reqBody := bytes.NewBuffer(jsonData)
|
||||
// send data to main-api
|
||||
resp, err := seeder.Send(http.MethodPost, path, reqBody, "von")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
type MetaData struct {
|
||||
Source string `json:"source"`
|
||||
Status string `json:"status"`
|
||||
Structure string `json:"structure"`
|
||||
}
|
||||
|
||||
type MainApiResp struct {
|
||||
Meta MetaData `json:"meta"`
|
||||
Data []es.Subspecialist `json:"data"`
|
||||
}
|
||||
|
||||
// getting response
|
||||
var data MainApiResp
|
||||
err = json.Unmarshal(resp, &data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return data.Data, nil
|
||||
}
|
||||
@@ -8,6 +8,7 @@ import (
|
||||
type Dualtx struct {
|
||||
Sync *gorm.DB
|
||||
Simgos *gorm.DB
|
||||
Satu *gorm.DB
|
||||
}
|
||||
|
||||
func NewDualtx() *Dualtx {
|
||||
@@ -24,6 +25,7 @@ func NewTx() *Dualtx {
|
||||
return &Dualtx{
|
||||
Sync: dg.I,
|
||||
Simgos: dg.IS["simrs"],
|
||||
Satu: dg.IS["satu"],
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user