Compare commits
108
Commits
@@ -1 +1,35 @@
|
|||||||
POSTGRES_DSN="postgres://sa:password@localhost:5432/postgres?sslmode=disable"
|
SATUDATA_HOST=10.10.123.165
|
||||||
|
SATUDATA_USERNAME=stim
|
||||||
|
SATUDATA_PASSWORD=stim*RS54
|
||||||
|
SATUDATA_NAME=satu_db
|
||||||
|
SATUDATA_PORT=5000
|
||||||
|
|
||||||
|
BASEURL_BPJS=https://apijkn.bpjs-kesehatan.go.id
|
||||||
|
ANTREAN_RS=/antreanrs
|
||||||
|
CONS_ID=5257
|
||||||
|
USER_KEY=4cf1cbef8c008440bbe9ef9ba789e482
|
||||||
|
SECRET_KEY=1bV363512D
|
||||||
|
|
||||||
|
CONS_ID_DEV=16041
|
||||||
|
USER_KEY_DEV=467a2817fde5070f66c9a41fbeb8dc2c
|
||||||
|
SECRET_KEY_DEV=8pP3D5431E
|
||||||
|
USER_KEY_ICARE=1cd65acaa349684be6353bea5149e2e2
|
||||||
|
|
||||||
|
BASEURL_BPJS_DEV=https://apijkn-dev.bpjs-kesehatan.go.id
|
||||||
|
VCLAIM_RS_DEV=/vclaim-rest-dev
|
||||||
|
SURAT_KONTROL_RS=/vclaim-rest
|
||||||
|
I_CARE_JKN=/wsihs
|
||||||
|
I_CARE_JKN_DEV=/ihs_dev
|
||||||
|
|
||||||
|
INSERT_SURAT_KONTROL=/RencanaKontrol/insert
|
||||||
|
UPDATE_SURAT_KONTROL=/RencanaKontrol/Update
|
||||||
|
DELETE_SURAT_KONTROL=/RencanaKontrol/Delete
|
||||||
|
GET_NOMOR_SURAT_KONTROL=/RencanaKontrol/noSuratKontrol/
|
||||||
|
GET_SURAT_KONTROL_SEP=/RencanaKontrol/nosep/
|
||||||
|
GET_NOMOR_RUJUKAN=/Rujukan/
|
||||||
|
GET_NOMOR_RUJUKAN_BATCH=/Rujukan/List/Peserta/
|
||||||
|
|
||||||
|
GET_FKRTL=/api/rs/validate
|
||||||
|
GET_FKTP=/api/pcare/validate
|
||||||
|
|
||||||
|
|
||||||
+23
-23
@@ -1,23 +1,23 @@
|
|||||||
# ---> Go
|
# ---> Go
|
||||||
# If you prefer the allow list template instead of the deny list, see community template:
|
# If you prefer the allow list template instead of the deny list, see community template:
|
||||||
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
|
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
|
||||||
#
|
#
|
||||||
# Binaries for programs and plugins
|
# Binaries for programs and plugins
|
||||||
*.exe
|
*.exe
|
||||||
*.exe~
|
*.exe~
|
||||||
*.dll
|
*.dll
|
||||||
*.so
|
*.so
|
||||||
*.dylib
|
*.dylib
|
||||||
|
|
||||||
# Test binary, built with `go test -c`
|
# Test binary, built with `go test -c`
|
||||||
*.test
|
*.test
|
||||||
|
|
||||||
# Output of the go coverage tool, specifically when used with LiteIDE
|
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||||
*.out
|
*.out
|
||||||
|
|
||||||
# Dependency directories (remove the comment below to include it)
|
# Dependency directories (remove the comment below to include it)
|
||||||
# vendor/
|
# vendor/
|
||||||
|
|
||||||
# Go workspace file
|
# Go workspace file
|
||||||
go.work
|
go.work
|
||||||
|
|
||||||
Generated
+8
@@ -0,0 +1,8 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
Generated
+13
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="Go" enabled="true">
|
||||||
|
<buildTags>
|
||||||
|
<option name="os" value="linux" />
|
||||||
|
</buildTags>
|
||||||
|
</component>
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
Generated
+8
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/api-bpjs-surkon.iml" filepath="$PROJECT_DIR$/.idea/api-bpjs-surkon.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
+26
@@ -0,0 +1,26 @@
|
|||||||
|
FROM golang:1.23-alpine AS builder
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY go.mod go.sum ./
|
||||||
|
|
||||||
|
RUN go mod tidy
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
|
||||||
|
# RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
|
||||||
|
|
||||||
|
FROM alpine:latest
|
||||||
|
|
||||||
|
# Set timezone ke Asia/Jakarta
|
||||||
|
ENV TZ=Asia/Jakarta
|
||||||
|
|
||||||
|
RUN apk --no-cache add ca-certificates tzdata
|
||||||
|
|
||||||
|
WORKDIR /root/
|
||||||
|
|
||||||
|
COPY --from=builder /app/main .
|
||||||
|
COPY --from=builder /app/.env .
|
||||||
|
EXPOSE 8080
|
||||||
|
CMD ["./main"]
|
||||||
@@ -0,0 +1,106 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/models/config"
|
||||||
|
"crypto/hmac"
|
||||||
|
"crypto/sha256"
|
||||||
|
"encoding/base64"
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"gorm.io/driver/postgres"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
var DB *gorm.DB
|
||||||
|
var SatuDataDB *gorm.DB
|
||||||
|
var err error
|
||||||
|
|
||||||
|
func ConnectDB() {
|
||||||
|
hostSatuData := os.Getenv("SATUDATA_HOST")
|
||||||
|
userNameSatuData := os.Getenv("SATUDATA_USERNAME")
|
||||||
|
passwordSatuData := os.Getenv("SATUDATA_PASSWORD")
|
||||||
|
dbNameSatuData := os.Getenv("SATUDATA_NAME")
|
||||||
|
portSatuData := os.Getenv("SATUDATA_PORT")
|
||||||
|
|
||||||
|
satuData := fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Jakarta", hostSatuData, userNameSatuData, passwordSatuData, dbNameSatuData, portSatuData)
|
||||||
|
|
||||||
|
SatuDataDB, err = gorm.Open(postgres.Open(satuData), &gorm.Config{})
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("Failed to connect to Satu Data database: ", err)
|
||||||
|
} else {
|
||||||
|
log.Println("Successfully connected to the database")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetHeader(isIcare bool, cfg config.ConfigBpjs) *config.Header {
|
||||||
|
|
||||||
|
timenow := time.Now().UTC()
|
||||||
|
time := time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC)
|
||||||
|
tstamp := timenow.Unix() - time.Unix()
|
||||||
|
|
||||||
|
cfg.Cons_id = os.Getenv("CONS_ID")
|
||||||
|
cfg.User_key = os.Getenv("USER_KEY")
|
||||||
|
cfg.Secret_key = os.Getenv("SECRET_KEY")
|
||||||
|
|
||||||
|
if isIcare {
|
||||||
|
cfg.User_key = os.Getenv("USER_KEY_ICARE")
|
||||||
|
}
|
||||||
|
secret := []byte(cfg.Secret_key)
|
||||||
|
message := []byte(cfg.Cons_id + "&" + fmt.Sprint(tstamp))
|
||||||
|
hash := hmac.New(sha256.New, secret)
|
||||||
|
hash.Write(message)
|
||||||
|
// to lowercase hexits
|
||||||
|
hex.EncodeToString(hash.Sum(nil))
|
||||||
|
// to base64
|
||||||
|
X_signature := base64.StdEncoding.EncodeToString(hash.Sum(nil))
|
||||||
|
|
||||||
|
header := &config.Header{
|
||||||
|
ConsID: cfg.Cons_id,
|
||||||
|
SecretKey: cfg.Secret_key,
|
||||||
|
UserKey: cfg.User_key,
|
||||||
|
TimeStamp: fmt.Sprint(tstamp),
|
||||||
|
XSignature: X_signature,
|
||||||
|
}
|
||||||
|
|
||||||
|
return header
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetHeaderDev(cfg config.ConfigBpjs) *config.Header {
|
||||||
|
|
||||||
|
timenow := time.Now().UTC()
|
||||||
|
time := time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC)
|
||||||
|
tstamp := timenow.Unix() - time.Unix()
|
||||||
|
|
||||||
|
cfg.Cons_id = os.Getenv("CONS_ID_DEV")
|
||||||
|
cfg.User_key = os.Getenv("USER_KEY_DEV")
|
||||||
|
cfg.Secret_key = os.Getenv("SECRET_KEY_DEV")
|
||||||
|
|
||||||
|
// cfg.Cons_id = os.Getenv("CONS_ID")
|
||||||
|
// cfg.User_key = os.Getenv("USER_KEY")
|
||||||
|
// cfg.Secret_key = os.Getenv("SECRET_KEY")
|
||||||
|
|
||||||
|
secret := []byte(cfg.Secret_key)
|
||||||
|
message := []byte(cfg.Cons_id + "&" + fmt.Sprint(tstamp))
|
||||||
|
hash := hmac.New(sha256.New, secret)
|
||||||
|
hash.Write(message)
|
||||||
|
// to lowercase hexits
|
||||||
|
hex.EncodeToString(hash.Sum(nil))
|
||||||
|
// to base64
|
||||||
|
X_signature := base64.StdEncoding.EncodeToString(hash.Sum(nil))
|
||||||
|
|
||||||
|
header := &config.Header{
|
||||||
|
ConsID: cfg.Cons_id,
|
||||||
|
SecretKey: cfg.Secret_key,
|
||||||
|
UserKey: cfg.User_key,
|
||||||
|
TimeStamp: fmt.Sprint(tstamp),
|
||||||
|
XSignature: X_signature,
|
||||||
|
}
|
||||||
|
|
||||||
|
return header
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
package database
|
|
||||||
|
|
||||||
import (
|
|
||||||
"log"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"gorm.io/driver/postgres"
|
|
||||||
"gorm.io/gorm"
|
|
||||||
)
|
|
||||||
|
|
||||||
var DB *gorm.DB
|
|
||||||
var err error
|
|
||||||
|
|
||||||
func ConnectDB() {
|
|
||||||
dsn := os.Getenv("POSTGRES_DSN")
|
|
||||||
if dsn == "" {
|
|
||||||
log.Fatal("POSTGRES_DSN environment variable not set")
|
|
||||||
}
|
|
||||||
|
|
||||||
DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{})
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal("Failed to connect to database: ", err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
package dokter
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/config"
|
||||||
|
"bridging-rssa/models/dokter"
|
||||||
|
"errors"
|
||||||
|
"log"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetDokter() ([]dokter.DaftarDokterRes, error) {
|
||||||
|
var listDokter []dokter.DaftarDokter
|
||||||
|
var res []dokter.DaftarDokterRes
|
||||||
|
result := config.SatuDataDB.Raw(`select "id", "HFIS_code" from "data_pegawai" where "HFIS_code" is not null`).Scan(&listDokter)
|
||||||
|
if result.Error != nil {
|
||||||
|
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||||
|
log.Fatalf("Error get data : %v", result.Error)
|
||||||
|
return nil, result.Error
|
||||||
|
}
|
||||||
|
log.Fatalf("Data kosong: %v", result.Error)
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("Data Pegawai: ", listDokter)
|
||||||
|
for _, v := range listDokter {
|
||||||
|
v.HfisCode = strings.TrimSpace(v.HfisCode)
|
||||||
|
hfisCode, err := strconv.Atoi(v.HfisCode)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed Convert ID to Int %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = append(res, dokter.DaftarDokterRes{
|
||||||
|
ID: v.ID,
|
||||||
|
HfisCode: hfisCode,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
log.Println("Data Pegawai: ", res)
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetNamaLengkapDokter(idDokter []string) ([]dokter.NamaLengkap, error) {
|
||||||
|
var namaDokter []dokter.NamaLengkap
|
||||||
|
result := config.SatuDataDB.Raw(`select dp.id,
|
||||||
|
array(
|
||||||
|
select dgd. "Gelar_depan"
|
||||||
|
from data_pegawai_daftar_gelar_depan dpdgd
|
||||||
|
left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id where dpdgd.data_pegawai_id = dp.id
|
||||||
|
) AS gelardepan ,
|
||||||
|
dk."Nama_lengkap" ,
|
||||||
|
array(
|
||||||
|
select dgb. "Gelar_belakang"
|
||||||
|
from data_pegawai_daftar_gelar_belakang dpdgb
|
||||||
|
left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id where dpdgb.data_pegawai_id = dp.id
|
||||||
|
) AS gelarbelakang,
|
||||||
|
dp."HFIS_code",
|
||||||
|
dp."Code_dpjp" as "DPJP_code"
|
||||||
|
from "data_pegawai" dp
|
||||||
|
left join data_ktp dk on dp."KTP" = dk.id
|
||||||
|
WHERE dp.id in ?`, idDokter).Find(&namaDokter)
|
||||||
|
if result.Error != nil {
|
||||||
|
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||||
|
log.Printf("Error get data : %v", result.Error)
|
||||||
|
return nil, result.Error
|
||||||
|
}
|
||||||
|
log.Printf("Data kosong: %v", result.Error)
|
||||||
|
return namaDokter, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return namaDokter, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetHFISCode(dpjp string) (*dokter.DaftarDokter, error) {
|
||||||
|
var dataDokter *dokter.DaftarDokter
|
||||||
|
err := config.SatuDataDB.Raw(`select dp."id", dp."HFIS_code" from data_pegawai dp where dp."Code_dpjp" = ?`, dpjp).First(&dataDokter).Error
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
errMsg := errors.New("Data tidak ditemukan")
|
||||||
|
log.Println("error :", errMsg)
|
||||||
|
return nil, errMsg
|
||||||
|
}
|
||||||
|
log.Println("error :", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
log.Println("Daftar Dokter :", dataDokter)
|
||||||
|
return dataDokter, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
package dokter
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/config"
|
||||||
|
"bridging-rssa/models/bpjs/jadwal_dokter"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"log"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetJadwalDokterByDPJP(dpjp string) (string, error) {
|
||||||
|
var id string
|
||||||
|
errSelect := config.SatuDataDB.Raw(`select "id" from "data_pegawai" where "Code_dpjp" = ?`, dpjp).First(&id).Error
|
||||||
|
if errSelect != nil {
|
||||||
|
log.Printf("Failed get data : %v", errSelect)
|
||||||
|
return "", errSelect
|
||||||
|
}
|
||||||
|
return id, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetJadwalHariDokterBySpesialis(id string) ([]jadwal_dokter.JadwalDokterSatuData, error) {
|
||||||
|
var hari []jadwal_dokter.JadwalDokterSatuData
|
||||||
|
errSelect := config.SatuDataDB.Raw(`select * from "daftar_jadwal_dokter" where "Dokter" = ? order by "id"`, id).Scan(&hari).Error
|
||||||
|
if errSelect != nil {
|
||||||
|
log.Printf("Failed get data : %v", errSelect)
|
||||||
|
return nil, errSelect
|
||||||
|
}
|
||||||
|
return hari, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetJadwalDokterByIDDokter(hari string) ([]string, error) {
|
||||||
|
var spesialis []string
|
||||||
|
errSelect := config.SatuDataDB.Raw(`select distinct "Spesialis" from "daftar_jadwal_dokter" where "Nama_hari" = ? order by "Spesialis"`, hari).Scan(&spesialis).Error
|
||||||
|
if errSelect != nil {
|
||||||
|
log.Printf("Failed get data : %v", errSelect)
|
||||||
|
return nil, errSelect
|
||||||
|
}
|
||||||
|
return spesialis, nil
|
||||||
|
}
|
||||||
|
func GetJadwalDokterByDate(hari string) ([]string, error) {
|
||||||
|
var spesialis []string
|
||||||
|
errSelect := config.SatuDataDB.Raw(`select distinct "Spesialis" from "daftar_jadwal_dokter" where "Nama_hari" = ? order by "Spesialis"`, hari).Scan(&spesialis).Error
|
||||||
|
if errSelect != nil {
|
||||||
|
log.Printf("Failed get data : %v", errSelect)
|
||||||
|
return nil, errSelect
|
||||||
|
}
|
||||||
|
return spesialis, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetJadwalSubspesialisByDate(hari string) ([]int, error) {
|
||||||
|
var subspesialis []int
|
||||||
|
errSelect := config.SatuDataDB.Raw(`select distinct "Sub_spesialis" from "daftar_jadwal_dokter" where "Nama_hari" = ? order by "Sub_spesialis"`, hari).Scan(&subspesialis).Error
|
||||||
|
if errSelect != nil {
|
||||||
|
log.Printf("Failed get data : %v", errSelect)
|
||||||
|
return nil, errSelect
|
||||||
|
}
|
||||||
|
return subspesialis, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetJadwalDokterBySpesialis(hari string, spesialis string) ([]string, error) {
|
||||||
|
var listDokter []string
|
||||||
|
errSelect := config.SatuDataDB.Raw(`select "Dokter" from "daftar_jadwal_dokter" where "Nama_hari" = ? and "Spesialis" = ? order by "Spesialis"`, hari, spesialis).Scan(&listDokter).Error
|
||||||
|
if errSelect != nil {
|
||||||
|
log.Printf("Failed get data : %v", errSelect)
|
||||||
|
return nil, errSelect
|
||||||
|
}
|
||||||
|
return listDokter, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetJadwalDokterBySubpesialis(hari string, subspesialis string) ([]string, error) {
|
||||||
|
var listDokter []string
|
||||||
|
errSelect := config.SatuDataDB.Raw(`select "Dokter" from "daftar_jadwal_dokter" where "Nama_hari" = ? and "Sub_spesialis" = ? order by "Sub_spesialis"`, hari, subspesialis).Scan(&listDokter).Error
|
||||||
|
if errSelect != nil {
|
||||||
|
log.Printf("Failed get data : %v", errSelect)
|
||||||
|
return nil, errSelect
|
||||||
|
}
|
||||||
|
return listDokter, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteJadwalDokter() error {
|
||||||
|
err := config.SatuDataDB.Exec(`truncate table "daftar_jadwal_dokter"`).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Failed truncate data : %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Println("Success truncate data")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func TruncateDataJadwalDokter() error {
|
||||||
|
err := config.SatuDataDB.Exec(`truncate table "data_jadwal_dokter"`).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Failed truncate data : %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Println("Success truncate data")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func DeleteJadwalDokterTemp() error {
|
||||||
|
err := config.SatuDataDB.Exec(`truncate table "daftar_jadwal_dokter_temp"`).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Failed truncate data : %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Println("Success truncate data")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func InsertJadwalDokter(reqInsert *jadwal_dokter.JadwalDokterSatuData) error {
|
||||||
|
err := config.SatuDataDB.Exec(`insert into "daftar_jadwal_dokter" ("Hari", "Nama_hari", "Waktu", "Dokter", "Spesialis", "Sub_spesialis", "Status") values (?, ? ,?, ?, ?, ?, ?)`, reqInsert.Hari, reqInsert.NamaHari, reqInsert.Waktu, reqInsert.Dokter, reqInsert.Spesialis, reqInsert.SubSpesialis, reqInsert.Status).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Failed insert data : %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Println("Success insert data")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func InsertJadwalDokterTemp(reqInsert *jadwal_dokter.JadwalDokterSatuData) error {
|
||||||
|
spesialis := strconv.Itoa(reqInsert.Spesialis)
|
||||||
|
subspesialis := strconv.Itoa(reqInsert.SubSpesialis)
|
||||||
|
id := uuid.New()
|
||||||
|
err := config.SatuDataDB.Exec(`insert into "daftar_jadwal_dokter_temp" ("id", "Hari", "Nama_hari", "Waktu", "Dokter", "Spesialis", "Sub_spesialis", "Status") values (?, ?, ?, ?, ?, ?, ?, ?)`, id, reqInsert.Hari, reqInsert.NamaHari, reqInsert.Waktu, reqInsert.Dokter, spesialis, subspesialis, reqInsert.Status).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Failed insert data : %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Println("Success insert data")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func InsertDataJadwalDokter(tx *gorm.DB, reqInsert *jadwal_dokter.DataJadwalDokterSatuData) error {
|
||||||
|
err := tx.Debug().Exec(`insert into "data_jadwal_dokter" ("id", "Hari", "Nama_hari", "Waktu", "Dokter", "Spesialis", "Sub_spesialis", "Tanggal_jadwal") values (?, ?, ? ,?, ?, ?, ?, ?)`, reqInsert.ID, reqInsert.Hari, reqInsert.NamaHari, reqInsert.Waktu, reqInsert.Dokter, reqInsert.Spesialis, reqInsert.SubSpesialis, reqInsert.TanggalJadwal).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Failed insert data : %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
log.Println("Success insert data")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package dokter
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/config"
|
||||||
|
"bridging-rssa/models/dokter"
|
||||||
|
"errors"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetSpesialis() ([]dokter.DaftarSpesialis, error) {
|
||||||
|
var daftarSpesialis []dokter.DaftarSpesialis
|
||||||
|
|
||||||
|
result := config.SatuDataDB.Raw(`select * from "daftar_spesialis"`).Find(&daftarSpesialis)
|
||||||
|
if result.Error != nil {
|
||||||
|
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||||
|
log.Printf("Error get data : %v", result.Error)
|
||||||
|
return nil, result.Error
|
||||||
|
}
|
||||||
|
log.Printf("Data kosong: %v", result.Error)
|
||||||
|
return daftarSpesialis, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return daftarSpesialis, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetSpesialisByID(idSpesialis []string) ([]dokter.DaftarSpesialis, error) {
|
||||||
|
var daftarSpesialis []dokter.DaftarSpesialis
|
||||||
|
result := config.SatuDataDB.Raw(`select * from "daftar_spesialis" where "id" in ?`, idSpesialis).Find(&daftarSpesialis)
|
||||||
|
if result.Error != nil {
|
||||||
|
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||||
|
log.Printf("Error get data : %v", result.Error)
|
||||||
|
return nil, result.Error
|
||||||
|
}
|
||||||
|
log.Printf("Data kosong: %v", result.Error)
|
||||||
|
return daftarSpesialis, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return daftarSpesialis, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
package dokter
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/config"
|
||||||
|
"bridging-rssa/models/dokter"
|
||||||
|
"errors"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetSubspesialis() ([]dokter.DaftarSubspesialis, error) {
|
||||||
|
var daftarSubspesialis []dokter.DaftarSubspesialis
|
||||||
|
|
||||||
|
result := config.SatuDataDB.Raw(`select * from "daftar_subspesialis"`).Find(&daftarSubspesialis)
|
||||||
|
if result.Error != nil {
|
||||||
|
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||||
|
log.Printf("Error get data : %v", result.Error)
|
||||||
|
return nil, result.Error
|
||||||
|
}
|
||||||
|
log.Printf("Data kosong: %v", result.Error)
|
||||||
|
return daftarSubspesialis, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println(daftarSubspesialis)
|
||||||
|
return daftarSubspesialis, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetSubspesialisByID(idSubspesialis int) (*dokter.DaftarSubspesialis, error) {
|
||||||
|
var daftarSubspesialis *dokter.DaftarSubspesialis
|
||||||
|
|
||||||
|
result := config.SatuDataDB.Raw(`select dss.*, ds."Spesialis"
|
||||||
|
from "daftar_subspesialis" dss
|
||||||
|
left join "daftar_spesialis" ds on ds."id" = dss."FK_daftar_spesialis_ID"
|
||||||
|
where dss.id = ?`, idSubspesialis).First(&daftarSubspesialis)
|
||||||
|
if result.Error != nil {
|
||||||
|
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||||
|
log.Printf("Error get data : %v", result.Error)
|
||||||
|
return nil, result.Error
|
||||||
|
}
|
||||||
|
log.Printf("Data kosong: %v", result.Error)
|
||||||
|
return daftarSubspesialis, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println(daftarSubspesialis)
|
||||||
|
return daftarSubspesialis, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetSubspesialisByIDBatch(idSubspesialis []int) ([]dokter.DaftarSubspesialis, error) {
|
||||||
|
var daftarSubspesialis []dokter.DaftarSubspesialis
|
||||||
|
result := config.SatuDataDB.Raw(`select dss.*, ds."Spesialis"
|
||||||
|
from "daftar_subspesialis" dss
|
||||||
|
left join "daftar_spesialis" ds on ds."id" = dss."FK_daftar_spesialis_ID"
|
||||||
|
where dss.id in ?
|
||||||
|
order by dss."id"`, idSubspesialis).Find(&daftarSubspesialis)
|
||||||
|
if result.Error != nil {
|
||||||
|
if !errors.Is(result.Error, gorm.ErrRecordNotFound) {
|
||||||
|
log.Printf("Error get data : %v", result.Error)
|
||||||
|
return nil, result.Error
|
||||||
|
}
|
||||||
|
log.Printf("Data kosong: %v", result.Error)
|
||||||
|
return daftarSubspesialis, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println(daftarSubspesialis)
|
||||||
|
return daftarSubspesialis, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package jadwal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/config"
|
||||||
|
"bridging-rssa/models/jadwal"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetJadwalLibur(date string) (*jadwal.DaftarJadwalLiburPelayanan, bool, error) {
|
||||||
|
var jadwalLibur *jadwal.DaftarJadwalLiburPelayanan
|
||||||
|
query := `select * from daftar_jadwal_libur_pelayanan where "Tanggal_libur_pelayanan" = ?`
|
||||||
|
q := config.SatuDataDB.Debug().Raw(query, date).Scan(&jadwalLibur)
|
||||||
|
if q.Error != nil {
|
||||||
|
log.Println(q.Error)
|
||||||
|
return nil, false, q.Error
|
||||||
|
} else if q.RowsAffected == 0 {
|
||||||
|
log.Println("Tidak pada hari libur")
|
||||||
|
return jadwalLibur, false, nil
|
||||||
|
}
|
||||||
|
return jadwalLibur, true, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package logapi
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/config"
|
||||||
|
logapi "bridging-rssa/models/log_api"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
|
func InsertLogAPI(reqInsert *logapi.DataLogAPI) error {
|
||||||
|
query := `insert into "data_log_api" (
|
||||||
|
"id", "date_created", "User_agent", "IP", "Parameter", "Header", "Method", "URL", "Request", "Respon", "Respon_code", "Respontime_start", "Respontime_end", "Comment"
|
||||||
|
) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
|
||||||
|
err := config.SatuDataDB.Exec(query,
|
||||||
|
reqInsert.ID,
|
||||||
|
reqInsert.DateCreated,
|
||||||
|
reqInsert.UserAgent,
|
||||||
|
reqInsert.IP,
|
||||||
|
reqInsert.Parameter,
|
||||||
|
reqInsert.Header,
|
||||||
|
reqInsert.Method,
|
||||||
|
reqInsert.Url,
|
||||||
|
reqInsert.Request,
|
||||||
|
reqInsert.Respon,
|
||||||
|
reqInsert.ResponCode,
|
||||||
|
reqInsert.ResponTimeStart,
|
||||||
|
reqInsert.ResponTimeEnd,
|
||||||
|
reqInsert.Comment,
|
||||||
|
).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package logapi
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/config"
|
||||||
|
logapi "bridging-rssa/models/log_api"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
|
func InsertLogICare(reqInsert *logapi.InsertLogICare) error {
|
||||||
|
query := `insert into "data_log_icare_bpjs" ("id", "date_created", "Ruangan", "Dokter", "Kunjungan_pasien", "Waktu_transaksi")
|
||||||
|
values (?, ?, ?, ?, ?, ?)`
|
||||||
|
errInsert := config.SatuDataDB.Exec(query,
|
||||||
|
reqInsert.ID,
|
||||||
|
reqInsert.DateCreated,
|
||||||
|
reqInsert.Ruangan,
|
||||||
|
reqInsert.Dokter,
|
||||||
|
reqInsert.Kunjungan_pasien,
|
||||||
|
reqInsert.WaktuTransaksi).Error
|
||||||
|
if errInsert != nil {
|
||||||
|
log.Println(errInsert)
|
||||||
|
return errInsert
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package lokasiruang
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/config"
|
||||||
|
"errors"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetDaftarLokasiRuang(idSimgos string) (int, error) {
|
||||||
|
var idRuangan int
|
||||||
|
query := `select dlr."id" from "daftar_lokasi_ruang" dlr where dlr."Id_location_simgos" = ?`
|
||||||
|
err := config.SatuDataDB.Raw(query, idSimgos).First(&idRuangan).Error
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
log.Println(err)
|
||||||
|
return 128, nil
|
||||||
|
}
|
||||||
|
log.Println(err)
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return idRuangan, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package pasien
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/config"
|
||||||
|
"bridging-rssa/models/pasien"
|
||||||
|
"errors"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetDataKunjunganPasien(idxdaftar string) (*pasien.KunjunganPasien, error) {
|
||||||
|
var kunjunganPasien *pasien.KunjunganPasien
|
||||||
|
query := `select dks."id", dks."Ruangan" from "data_kunjungan_pasien" dks where dks."IDXDAFTAR" = ?`
|
||||||
|
err := config.SatuDataDB.Raw(query, idxdaftar).First(&kunjunganPasien).Error
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
errMsg := errors.New("Data Tidak Ditemukan")
|
||||||
|
log.Println(errMsg)
|
||||||
|
return nil, errMsg
|
||||||
|
}
|
||||||
|
log.Println(err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
log.Println("Data Kunjungan Pasien : ", kunjunganPasien)
|
||||||
|
return kunjunganPasien, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package suratkontrol
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/config"
|
||||||
|
sk "bridging-rssa/models/bpjs/surat_kontrol"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
|
func UpdateKunjunganPasien(req sk.RequestInsertRencanaKontrol) error {
|
||||||
|
err := config.SatuDataDB.Exec(`update "data_kunjungan_pasien" set "Nomor_sep" = ?, "Diagnosis_akhir_keluar" = ?, "Display_diagnosis_akhir_keluar" = ?, "Diagnosis_primer_utama" = ?, "Display_diagnosis_primer_utama" = ? where "IDXDAFTAR" = ?`, req.NoSEP, req.KodeDiagnosa, req.NamaDiagnosa, req.KodeDiagnosa, req.NamaDiagnosa, req.IDXDaftar).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,369 @@
|
|||||||
|
package suratkontrol
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/config"
|
||||||
|
suratkontrol "bridging-rssa/models/bpjs/surat_kontrol"
|
||||||
|
"errors"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetDataKunjunganPasien(idxdaftar string) (*suratkontrol.KunjunganPasien, error) {
|
||||||
|
var kunjunganPasien *suratkontrol.KunjunganPasien
|
||||||
|
err := config.SatuDataDB.Raw(`select dkp."id", dkp."IDXDAFTAR" as idxdaftar, dkp."Nomor_sep" as nomorsep,
|
||||||
|
dlr."Nama" as namaklinik, dlr."Id_location_simgos" as idkliniksimgos, dlr."Kode_hfis_bpjs" as kodehfisklinik,
|
||||||
|
dk."Nama_lengkap" as namadokter,
|
||||||
|
dp."KDDOKTER" as kodedokter, dp."HFIS_code" as kodehfisdokter,
|
||||||
|
dsu."Kode" as kodesubspesialis, dsu."Subspesialis" as subspesialis,
|
||||||
|
ds."Spesialis" as spesialis,
|
||||||
|
array(
|
||||||
|
select dgd."Gelar_depan"
|
||||||
|
from data_pegawai_daftar_gelar_depan dpdgd
|
||||||
|
left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id
|
||||||
|
where dpdgd.data_pegawai_id = dp.id
|
||||||
|
) AS gelardepan,
|
||||||
|
array(
|
||||||
|
select dgb."Gelar_belakang"
|
||||||
|
from data_pegawai_daftar_gelar_belakang dpdgb
|
||||||
|
left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id
|
||||||
|
where dpdgb.data_pegawai_id = dp.id
|
||||||
|
) AS gelarbelakang,
|
||||||
|
dkp."Ruangan" as ruangan,
|
||||||
|
dkp."DPJP" as id_dokter,
|
||||||
|
dkp."NOMR" as "No_rm"
|
||||||
|
from data_kunjungan_pasien dkp
|
||||||
|
left join daftar_lokasi_ruang dlr on dkp."Ruangan" = dlr.id
|
||||||
|
left join data_pegawai dp on dkp."DPJP" = dp.id
|
||||||
|
left join data_ktp dk on dp."KTP" = dk.id
|
||||||
|
left join daftar_subspesialis dsu on dp."Subspesialis" = dsu.id
|
||||||
|
left join daftar_spesialis ds on dsu."FK_daftar_spesialis_ID" = ds.id
|
||||||
|
where dkp."IDXDAFTAR" = ?`, idxdaftar).First(&kunjunganPasien).Error
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
errMsg := errors.New("Data Tidak Ditemukan")
|
||||||
|
log.Println(errMsg)
|
||||||
|
return nil, errMsg
|
||||||
|
}
|
||||||
|
log.Println(err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
log.Println("Data Kunjungan Pasien : ", kunjunganPasien)
|
||||||
|
return kunjunganPasien, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func InsertDataSuratKontrol(reqInsert *suratkontrol.DataSuratKontrol) error {
|
||||||
|
log.Println("Req Insert Database : ", reqInsert)
|
||||||
|
insertQuery := `insert into "data_surat_kontrol" ("id", "date_created", "Tanggal_cetak_surat_kontrol", "Tanggal_rencana_kontrol",
|
||||||
|
"Nomor_surat_kontrol", "Kunjungan_pasien", "Ruangan_surat_kontrol", "DPJP_surat_kontrol", "Status_surat_kontrol",
|
||||||
|
"User_created_surat_kontrol", "Tipe_surat_kontrol", "User_updated_surat_kontrol", "Tipe_rawat")
|
||||||
|
values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`
|
||||||
|
err := config.SatuDataDB.Exec(insertQuery,
|
||||||
|
reqInsert.ID,
|
||||||
|
reqInsert.DateCreated,
|
||||||
|
reqInsert.TglCetakSurKon,
|
||||||
|
reqInsert.TglRencanaKontrol,
|
||||||
|
reqInsert.NomorSurKon,
|
||||||
|
reqInsert.KunjunganPasien,
|
||||||
|
reqInsert.RuanganSurKon,
|
||||||
|
reqInsert.DPJPSurKon,
|
||||||
|
reqInsert.StatusSurKon,
|
||||||
|
reqInsert.UserCreatedSurKon,
|
||||||
|
reqInsert.TipeSurKon,
|
||||||
|
reqInsert.UserUpdatedSurKon,
|
||||||
|
reqInsert.TipeRawat,
|
||||||
|
).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDataSuratKontrol(offset, limit string) ([]*suratkontrol.GetDataSuratKontrol, error) {
|
||||||
|
var dataSurKon []*suratkontrol.GetDataSuratKontrol
|
||||||
|
err := config.SatuDataDB.Raw(`select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol",
|
||||||
|
dsk."Nomor_surat_kontrol",
|
||||||
|
(select dlr."Nama"
|
||||||
|
from data_kunjungan_pasien dkp
|
||||||
|
left join daftar_lokasi_ruang dlr on dkp."Ruangan" = dlr.id where dkp."id" = dsk."Kunjungan_pasien" LIMIT 1) as "Poli_asal",
|
||||||
|
dlr."Nama" as "Poli_tuju",
|
||||||
|
dkp2."Nomor_sep", dkp2."Nama_lengkap", dkp2."IDXDAFTAR",
|
||||||
|
array(
|
||||||
|
select dgd. "Gelar_depan"
|
||||||
|
from data_pegawai_daftar_gelar_depan dpdgd
|
||||||
|
left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id where dpdgd.data_pegawai_id = dp.id
|
||||||
|
) AS gelardepan ,
|
||||||
|
dk."Nama_lengkap" as "Nama_lengkap_dokter",
|
||||||
|
array(
|
||||||
|
select dgb. "Gelar_belakang"
|
||||||
|
from data_pegawai_daftar_gelar_belakang dpdgb
|
||||||
|
left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id where dpdgb.data_pegawai_id = dp.id
|
||||||
|
) AS gelarbelakang,
|
||||||
|
ds."Subspesialis",
|
||||||
|
ds."Kode" as "Kode_poli",
|
||||||
|
ds."id" as "ID_poli",
|
||||||
|
dp."HFIS_code" as "Kode_dokter",
|
||||||
|
dp."id" as "id_dokter",
|
||||||
|
dp."Code_dpjp" as "Kode_dpjp",
|
||||||
|
dkp2."NOMR" as "No_rm",
|
||||||
|
dkp2."Diagnosis_primer_utama" as "Kode_diagnosa",
|
||||||
|
dkp2."Display_diagnosis_primer_utama" as "Nama_diagnosa",
|
||||||
|
dsk."Tipe_surat_kontrol" as "Tipe_SurKon"
|
||||||
|
from data_surat_kontrol dsk
|
||||||
|
left join data_kunjungan_pasien dkp2 on dkp2."id" = dsk."Kunjungan_pasien"
|
||||||
|
left join daftar_lokasi_ruang dlr on dsk."Ruangan_surat_kontrol" = dlr."id"
|
||||||
|
left join data_pegawai dp on dsk."DPJP_surat_kontrol" = dp."id"
|
||||||
|
left join data_ktp dk on dp."KTP" = dk. "id"
|
||||||
|
left join daftar_subspesialis ds on dp."Subspesialis" = ds."id"
|
||||||
|
where dsk."Status_surat_kontrol" = '1' offset ? limit ?`, offset, limit).Scan(&dataSurKon).Error
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
errMsg := errors.New("DPJP anda belum ada subspesialis")
|
||||||
|
log.Println(errMsg)
|
||||||
|
return nil, errMsg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dataSurKon, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDataSuratKontrolByIDTipe(idxdaftar string, tipe string) (*suratkontrol.GetDataSuratKontrol, error) {
|
||||||
|
var dataSurKon *suratkontrol.GetDataSuratKontrol
|
||||||
|
err := config.SatuDataDB.Raw(`select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol",
|
||||||
|
dsk."Nomor_surat_kontrol",
|
||||||
|
(select dlr."Nama"
|
||||||
|
from data_kunjungan_pasien dkp
|
||||||
|
left join daftar_lokasi_ruang dlr on dkp."Ruangan" = dlr.id where dkp."id" = dsk."Kunjungan_pasien" LIMIT 1) as "Poli_asal",
|
||||||
|
dlr."Nama" as "Poli_tuju",
|
||||||
|
dkp2."Nomor_sep", dkp2."Nama_lengkap", dkp2."IDXDAFTAR",
|
||||||
|
array(
|
||||||
|
select dgd. "Gelar_depan"
|
||||||
|
from data_pegawai_daftar_gelar_depan dpdgd
|
||||||
|
left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id where dpdgd.data_pegawai_id = dp.id
|
||||||
|
) AS gelardepan ,
|
||||||
|
dk."Nama_lengkap" as "Nama_lengkap_dokter",
|
||||||
|
array(
|
||||||
|
select dgb. "Gelar_belakang"
|
||||||
|
from data_pegawai_daftar_gelar_belakang dpdgb
|
||||||
|
left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id where dpdgb.data_pegawai_id = dp.id
|
||||||
|
) AS gelarbelakang,
|
||||||
|
ds."Subspesialis",
|
||||||
|
ds."Kode" as "Kode_poli",
|
||||||
|
ds."id" as "ID_poli",
|
||||||
|
dp."HFIS_code" as "Kode_dokter",
|
||||||
|
dp."id" as "id_dokter",
|
||||||
|
dp."Code_dpjp" as "Kode_dpjp",
|
||||||
|
dkp2."NOMR" as "No_rm",
|
||||||
|
dkp2."Diagnosis_primer_utama" as "Kode_diagnosa",
|
||||||
|
dkp2."Display_diagnosis_primer_utama" as "Nama_diagnosa",
|
||||||
|
dsk."Tipe_surat_kontrol" as "Tipe_SurKon",
|
||||||
|
dsk."User_created_surat_kontrol" as "User"
|
||||||
|
from data_surat_kontrol dsk
|
||||||
|
left join data_kunjungan_pasien dkp2 on dkp2."id" = dsk."Kunjungan_pasien"
|
||||||
|
left join daftar_lokasi_ruang dlr on dsk."Ruangan_surat_kontrol" = dlr."id"
|
||||||
|
left join data_pegawai dp on dsk."DPJP_surat_kontrol" = dp."id"
|
||||||
|
left join data_ktp dk on dp."KTP" = dk. "id"
|
||||||
|
left join daftar_subspesialis ds on dp."Subspesialis" = ds."id"
|
||||||
|
where dsk."Status_surat_kontrol" = '1' and dkp2."IDXDAFTAR" = ? and dsk."Tipe_rawat" = ?`, idxdaftar, tipe).First(&dataSurKon).Error
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
errMsg := errors.New("Data tidak ada")
|
||||||
|
log.Println(errMsg)
|
||||||
|
return nil, errMsg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dataSurKon, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDataSuratKontrolByID(idxdaftar string) (*suratkontrol.GetDataSuratKontrol, error) {
|
||||||
|
var dataSurKon *suratkontrol.GetDataSuratKontrol
|
||||||
|
err := config.SatuDataDB.Raw(`select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol",
|
||||||
|
dsk."Nomor_surat_kontrol",
|
||||||
|
(select dlr."Nama"
|
||||||
|
from data_kunjungan_pasien dkp
|
||||||
|
left join daftar_lokasi_ruang dlr on dkp."Ruangan" = dlr.id where dkp."id" = dsk."Kunjungan_pasien" LIMIT 1) as "Poli_asal",
|
||||||
|
dlr."Nama" as "Poli_tuju",
|
||||||
|
dkp2."Nomor_sep", dkp2."Nama_lengkap", dkp2."IDXDAFTAR",
|
||||||
|
array(
|
||||||
|
select dgd. "Gelar_depan"
|
||||||
|
from data_pegawai_daftar_gelar_depan dpdgd
|
||||||
|
left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id where dpdgd.data_pegawai_id = dp.id
|
||||||
|
) AS gelardepan ,
|
||||||
|
dk."Nama_lengkap" as "Nama_lengkap_dokter",
|
||||||
|
array(
|
||||||
|
select dgb. "Gelar_belakang"
|
||||||
|
from data_pegawai_daftar_gelar_belakang dpdgb
|
||||||
|
left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id where dpdgb.data_pegawai_id = dp.id
|
||||||
|
) AS gelarbelakang,
|
||||||
|
ds."Subspesialis",
|
||||||
|
ds."Kode" as "Kode_poli",
|
||||||
|
ds."id" as "ID_poli",
|
||||||
|
dp."HFIS_code" as "Kode_dokter",
|
||||||
|
dp."id" as "id_dokter",
|
||||||
|
dp."Code_dpjp" as "Kode_dpjp",
|
||||||
|
dkp2."NOMR" as "No_rm",
|
||||||
|
dkp2."Diagnosis_primer_utama" as "Kode_diagnosa",
|
||||||
|
dkp2."Display_diagnosis_primer_utama" as "Nama_diagnosa",
|
||||||
|
dsk."Tipe_surat_kontrol" as "Tipe_SurKon",
|
||||||
|
dsk."User_created_surat_kontrol" as "User"
|
||||||
|
from data_surat_kontrol dsk
|
||||||
|
left join data_kunjungan_pasien dkp2 on dkp2."id" = dsk."Kunjungan_pasien"
|
||||||
|
left join daftar_lokasi_ruang dlr on dsk."Ruangan_surat_kontrol" = dlr."id"
|
||||||
|
left join data_pegawai dp on dsk."DPJP_surat_kontrol" = dp."id"
|
||||||
|
left join data_ktp dk on dp."KTP" = dk. "id"
|
||||||
|
left join daftar_subspesialis ds on dp."Subspesialis" = ds."id"
|
||||||
|
where dsk."Status_surat_kontrol" = '1' and dkp2."IDXDAFTAR" = ? and dsk."Tipe_rawat" is null`, idxdaftar).First(&dataSurKon).Error
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
errMsg := errors.New("Data tidak ada")
|
||||||
|
log.Println(errMsg)
|
||||||
|
return nil, errMsg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dataSurKon, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func UpdateDataSuratKontrol(reqUpdate *suratkontrol.DataSuratKontrol) error {
|
||||||
|
err := config.SatuDataDB.Exec(`update "data_surat_kontrol" set "date_updated" = ?, "Status_surat_kontrol" = ?, "User_updated_surat_kontrol" = ? where "id" = ?`, reqUpdate.DateUpdated, reqUpdate.StatusSurKon, reqUpdate.UserUpdatedSurKon, reqUpdate.ID).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetIDXDaftarBySurKon(idSurKon string) (string, error) {
|
||||||
|
var idxDaftar string
|
||||||
|
err := config.SatuDataDB.Raw(`select dkp."IDXDAFTAR"
|
||||||
|
from "data_surat_kontrol" dsk
|
||||||
|
left join "data_kunjungan_pasien" dkp on dkp."id" = dsk."Kunjungan_pasien"
|
||||||
|
where dsk."id" = ?`, idSurKon).First(&idxDaftar).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return idxDaftar, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetAllDataSuratKontrol(idSurKon string) (*suratkontrol.DataSuratKontrol, error) {
|
||||||
|
var dataSurKon *suratkontrol.DataSuratKontrol
|
||||||
|
err := config.SatuDataDB.Raw(`select * from "data_surat_kontrol" where "id" = ?`, idSurKon).First(&dataSurKon).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return dataSurKon, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func SearchDataSurKon(req suratkontrol.RequestCariPasien, query string, args []interface{}) ([]*suratkontrol.GetDataSuratKontrol, error) {
|
||||||
|
var dataSurKon []*suratkontrol.GetDataSuratKontrol
|
||||||
|
query += ` and date(dsk."Tanggal_rencana_kontrol") between ? and ? offset ? limit ?`
|
||||||
|
querySelect := `select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol",
|
||||||
|
dsk."Nomor_surat_kontrol",
|
||||||
|
(select dlr."Nama"
|
||||||
|
from data_kunjungan_pasien dkp
|
||||||
|
left join daftar_lokasi_ruang dlr on dkp."Ruangan" = dlr.id where dkp."id" = dsk."Kunjungan_pasien" LIMIT 1) as "Poli_asal",
|
||||||
|
dlr."Nama" as "Poli_tuju",
|
||||||
|
dkp2."Nomor_sep", dkp2."Nama_lengkap", dkp2."IDXDAFTAR",
|
||||||
|
array(
|
||||||
|
select dgd. "Gelar_depan"
|
||||||
|
from data_pegawai_daftar_gelar_depan dpdgd
|
||||||
|
left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id where dpdgd.data_pegawai_id = dp.id
|
||||||
|
) AS gelardepan ,
|
||||||
|
dk."Nama_lengkap" as "Nama_lengkap_dokter",
|
||||||
|
array(
|
||||||
|
select dgb. "Gelar_belakang"
|
||||||
|
from data_pegawai_daftar_gelar_belakang dpdgb
|
||||||
|
left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id where dpdgb.data_pegawai_id = dp.id
|
||||||
|
) AS gelarbelakang,
|
||||||
|
ds."Subspesialis",
|
||||||
|
ds."Kode" as "Kode_poli",
|
||||||
|
ds."id" as "ID_poli",
|
||||||
|
dp."HFIS_code" as "Kode_dokter",
|
||||||
|
dp."id" as "id_dokter",
|
||||||
|
dp."Code_dpjp" as "Kode_dpjp",
|
||||||
|
dkp2."NOMR" as "No_rm",
|
||||||
|
dkp2."Diagnosis_primer_utama" as "Kode_diagnosa",
|
||||||
|
dkp2."Display_diagnosis_primer_utama" as "Nama_diagnosa",
|
||||||
|
dsk."Tipe_surat_kontrol" as "Tipe_SurKon"
|
||||||
|
from data_surat_kontrol dsk
|
||||||
|
left join data_kunjungan_pasien dkp2 on dkp2."id" = dsk."Kunjungan_pasien"
|
||||||
|
left join daftar_lokasi_ruang dlr on dsk."Ruangan_surat_kontrol" = dlr."id"
|
||||||
|
left join data_pegawai dp on dsk."DPJP_surat_kontrol" = dp."id"
|
||||||
|
left join data_ktp dk on dp."KTP" = dk. "id"
|
||||||
|
left join daftar_subspesialis ds on dp."Subspesialis" = ds."id"
|
||||||
|
where dsk."Status_surat_kontrol" = '1' and dsk."Tipe_surat_kontrol" = ? `
|
||||||
|
querySelect += query
|
||||||
|
err := config.SatuDataDB.Raw(querySelect, args...).Find(&dataSurKon).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return dataSurKon, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func CountDataSurKon(req suratkontrol.RequestCariPasien, query string, args []interface{}) (int, error) {
|
||||||
|
var jumlahData int
|
||||||
|
query += ` and date(dsk."Tanggal_rencana_kontrol") between ? and ?`
|
||||||
|
querySelect := `select count(dsk.*)
|
||||||
|
from data_surat_kontrol dsk
|
||||||
|
left join data_kunjungan_pasien dkp2 on dkp2."id" = dsk."Kunjungan_pasien"
|
||||||
|
left join daftar_lokasi_ruang dlr on dsk."Ruangan_surat_kontrol" = dlr."id"
|
||||||
|
left join data_pegawai dp on dsk."DPJP_surat_kontrol" = dp."id"
|
||||||
|
left join data_ktp dk on dp."KTP" = dk. "id"
|
||||||
|
left join daftar_subspesialis ds on dp."Subspesialis" = ds."id"
|
||||||
|
where dsk."Status_surat_kontrol" = '1' and dsk."Tipe_surat_kontrol" = ? `
|
||||||
|
querySelect += query
|
||||||
|
err := config.SatuDataDB.Raw(querySelect, args...).Find(&jumlahData).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return jumlahData, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetNomorSurKon(idPasien string) (string, error) {
|
||||||
|
var noSurKon string
|
||||||
|
querySelect := `select dsk."Nomor_surat_kontrol" from data_surat_kontrol dsk where dsk."Kunjungan_pasien" = ? and dsk."Tipe_surat_kontrol" <> '1' order by dsk."date_created"`
|
||||||
|
err := config.SatuDataDB.Raw(querySelect, idPasien).Scan(&noSurKon).Error
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
log.Println("Nomor SurKon :", noSurKon)
|
||||||
|
return noSurKon, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func Getdatahistori(norm string, offset, limit string) ([]*suratkontrol.HistoriSurkon, error) {
|
||||||
|
var dataHistoriSurKon []*suratkontrol.HistoriSurkon
|
||||||
|
err := config.SatuDataDB.Raw(`select dkp2."Nama_lengkap",dkp2."Nomor_sep", dsk."Nomor_surat_kontrol",dsk."Tanggal_rencana_kontrol",dsk."Tanggal_cetak_surat_kontrol",
|
||||||
|
ds2."Spesialis",ds."Subspesialis",
|
||||||
|
array(
|
||||||
|
select dgd. "Gelar_depan"
|
||||||
|
from data_pegawai_daftar_gelar_depan dpdgd
|
||||||
|
left join daftar_gelar_depan dgd on dpdgd.daftar_gelar_depan_id = dgd.id where dpdgd.data_pegawai_id = dp.id
|
||||||
|
) AS gelardepan ,
|
||||||
|
dk."Nama_lengkap" as "Nama_lengkap_dokter",
|
||||||
|
array(
|
||||||
|
select dgb. "Gelar_belakang"
|
||||||
|
from data_pegawai_daftar_gelar_belakang dpdgb
|
||||||
|
left join daftar_gelar_belakang dgb on dpdgb.daftar_gelar_belakang_id = dgb.id where dpdgb.data_pegawai_id = dp.id
|
||||||
|
) AS gelarbelakang, dsk."User_created_surat_kontrol", dsk."User_updated_surat_kontrol",dsk."Tipe_rawat" ,
|
||||||
|
dsk."Status_surat_kontrol"
|
||||||
|
from data_surat_kontrol dsk
|
||||||
|
left join data_kunjungan_pasien dkp2 on dkp2."id" = dsk."Kunjungan_pasien"
|
||||||
|
left join daftar_lokasi_ruang dlr on dsk."Ruangan_surat_kontrol" = dlr."id"
|
||||||
|
left join data_pegawai dp on dsk."DPJP_surat_kontrol" = dp."id"
|
||||||
|
left join data_ktp dk on dp."KTP" = dk. "id"
|
||||||
|
left join daftar_subspesialis ds on dp."Subspesialis" = ds."id"
|
||||||
|
left join daftar_spesialis ds2 on ds."FK_daftar_spesialis_ID" = ds2."id"
|
||||||
|
where dkp2."NOMR" = ? order by dsk."Tanggal_rencana_kontrol" desc offset ? limit ?`, norm, offset, limit).Scan(&dataHistoriSurKon).Error
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
errMsg := errors.New("data tidak ada")
|
||||||
|
log.Println(errMsg)
|
||||||
|
return nil, errMsg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dataHistoriSurKon, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
version: '3.8'
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: api-rssa
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- 8080:8080
|
||||||
|
volumes:
|
||||||
|
- .:/app
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
environment:
|
||||||
|
# TIMEZONE
|
||||||
|
- TZ=Asia/Jakarta
|
||||||
|
# DATABASE SIMRS V3.0
|
||||||
|
- POSTGRE_DB_HOST=10.10.123.223
|
||||||
|
- POSTGRE_DB_PORT=5432
|
||||||
|
- POSTGRE_DB_NAME=simrsbackup
|
||||||
|
- POSTGRE_DB_USER=simtest
|
||||||
|
- POSTGRE_DB_PASS=12345
|
||||||
|
# DATABASE SATU DATA
|
||||||
|
- SATUDATA_HOST=10.10.123.165
|
||||||
|
- SATUDATA_USERNAME=stim
|
||||||
|
- SATUDATA_PASSWORD=stim*RS54
|
||||||
|
- SATUDATA_NAME=satu_db
|
||||||
|
- SATUDATA_PORT=5000
|
||||||
|
# BPJS
|
||||||
|
- BASEURL_BPJS=https://apijkn.bpjs-kesehatan.go.id/
|
||||||
|
- CONS_ID=5257
|
||||||
|
- USER_KEY=4cf1cbef8c008440bbe9ef9ba789e482
|
||||||
|
- SECRET_KEY=1bV363512D
|
||||||
|
# SERVICE ANTROL
|
||||||
|
- ANTREAN_RS=antreanrs
|
||||||
|
# BPJS VCLAIM
|
||||||
|
- VCALIM_RS=vclaim-rest
|
||||||
|
# BPJS PCARE
|
||||||
|
- PCARE_RS=pcare-rest
|
||||||
|
# BPJS ICARE
|
||||||
|
- PCARE_APLICARE=ihs
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
!/bin/bash
|
||||||
|
|
||||||
|
#get image name
|
||||||
|
remote_url=$(git remote get-url origin)
|
||||||
|
image=$(echo $remote_url | sed 's|https://||g; s|.git||g')
|
||||||
|
|
||||||
|
#get branch name
|
||||||
|
branch_name=$(git rev-parse --abbrev-ref HEAD)
|
||||||
|
clean_branch_name=${branch_name##*/}
|
||||||
|
|
||||||
|
#get timestamp for the tag
|
||||||
|
timestamp=$(date +%Y%m%d%H%M%S)
|
||||||
|
|
||||||
|
tag=$image:$timestamp-$clean_branch_name
|
||||||
|
latest=$image:latest-$clean_branch_name
|
||||||
|
|
||||||
|
#build image
|
||||||
|
docker build -t $tag .
|
||||||
|
docker tag $tag $latest
|
||||||
|
|
||||||
|
#push to dockerhub
|
||||||
|
docker login git.rssa.top -u stim -p 4fde63b07906e7bfa6b3493d76d153a3981039b9
|
||||||
|
docker push $tag
|
||||||
|
docker push $latest
|
||||||
|
|
||||||
|
#remove dangling images
|
||||||
|
docker system prune -f
|
||||||
+141
-79
@@ -1,79 +1,141 @@
|
|||||||
// Package docs Code generated by swaggo/swag. DO NOT EDIT
|
// Package docs Code generated by swaggo/swag. DO NOT EDIT
|
||||||
package docs
|
package docs
|
||||||
|
|
||||||
import "github.com/swaggo/swag"
|
import "github.com/swaggo/swag"
|
||||||
|
|
||||||
const docTemplate = `{
|
const docTemplate = `{
|
||||||
"schemes": {{ marshal .Schemes }},
|
"schemes": {{ marshal .Schemes }},
|
||||||
"swagger": "2.0",
|
"swagger": "2.0",
|
||||||
"info": {
|
"info": {
|
||||||
"description": "{{escape .Description}}",
|
"description": "{{escape .Description}}",
|
||||||
"title": "{{.Title}}",
|
"title": "{{.Title}}",
|
||||||
"contact": {},
|
"contact": {},
|
||||||
"version": "{{.Version}}"
|
"version": "{{.Version}}"
|
||||||
},
|
},
|
||||||
"host": "{{.Host}}",
|
"host": "{{.Host}}",
|
||||||
"basePath": "{{.BasePath}}",
|
"basePath": "{{.BasePath}}",
|
||||||
"paths": {
|
"paths": {
|
||||||
"/api/v1/user": {
|
"/api/user": {
|
||||||
"get": {
|
"get": {
|
||||||
"description": "returs list of all users from the database",
|
"description": "returs list of all users from the database",
|
||||||
"tags": [
|
"tags": [
|
||||||
"Users"
|
"Users"
|
||||||
],
|
],
|
||||||
"summary": "return list of all",
|
"summary": "return list of all",
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "OK",
|
"description": "OK",
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "#/definitions/models.User"
|
"$ref": "#/definitions/models.User"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
},
|
"/api/user/create": {
|
||||||
"definitions": {
|
"post": {
|
||||||
"models.User": {
|
"description": "Insert Data User",
|
||||||
"type": "object",
|
"tags": [
|
||||||
"properties": {
|
"Users"
|
||||||
"agama": {
|
],
|
||||||
"type": "string"
|
"summary": "Insert Data User",
|
||||||
},
|
"responses": {
|
||||||
"alamat": {
|
"200": {
|
||||||
"type": "string"
|
"description": "OK",
|
||||||
},
|
"schema": {
|
||||||
"id": {
|
"$ref": "#/definitions/models.Response"
|
||||||
"type": "string"
|
}
|
||||||
},
|
}
|
||||||
"jenis_kelamin": {
|
}
|
||||||
"type": "string"
|
}
|
||||||
},
|
},
|
||||||
"nama": {
|
"/api/user/delete/:id": {
|
||||||
"type": "string"
|
"delete": {
|
||||||
},
|
"description": "Delete Data User",
|
||||||
"umur": {
|
"tags": [
|
||||||
"type": "integer"
|
"Users"
|
||||||
}
|
],
|
||||||
}
|
"summary": "Delete Data User",
|
||||||
}
|
"responses": {
|
||||||
}
|
"200": {
|
||||||
}`
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
// SwaggerInfo holds exported Swagger Info so clients can modify it
|
"$ref": "#/definitions/models.Response"
|
||||||
var SwaggerInfo = &swag.Spec{
|
}
|
||||||
Version: "1",
|
}
|
||||||
Host: "localhost:8080",
|
}
|
||||||
BasePath: "",
|
}
|
||||||
Schemes: []string{},
|
},
|
||||||
Title: "Crud User",
|
"/api/user/update/:id": {
|
||||||
Description: "Rest API CRUD User",
|
"put": {
|
||||||
InfoInstanceName: "swagger",
|
"description": "Update Data User",
|
||||||
SwaggerTemplate: docTemplate,
|
"tags": [
|
||||||
LeftDelim: "{{",
|
"Users"
|
||||||
RightDelim: "}}",
|
],
|
||||||
}
|
"summary": "Update Data User",
|
||||||
|
"responses": {
|
||||||
func init() {
|
"200": {
|
||||||
swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
|
"description": "OK",
|
||||||
}
|
"schema": {
|
||||||
|
"$ref": "#/definitions/models.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"definitions": {
|
||||||
|
"models.Response": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"response_code": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"response_message": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"models.User": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"agama": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"alamat": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"jenis_kelamin": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"nama": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"umur": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}`
|
||||||
|
|
||||||
|
// SwaggerInfo holds exported Swagger Info so clients can modify it
|
||||||
|
var SwaggerInfo = &swag.Spec{
|
||||||
|
Version: "1",
|
||||||
|
Host: "localhost:8080",
|
||||||
|
BasePath: "",
|
||||||
|
Schemes: []string{},
|
||||||
|
Title: "Crud User",
|
||||||
|
Description: "Rest API CRUD User",
|
||||||
|
InfoInstanceName: "swagger",
|
||||||
|
SwaggerTemplate: docTemplate,
|
||||||
|
LeftDelim: "{{",
|
||||||
|
RightDelim: "}}",
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
|
||||||
|
}
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package docs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/aes"
|
||||||
|
"crypto/cipher"
|
||||||
|
"crypto/sha256"
|
||||||
|
"encoding/base64"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
lzstring "github.com/daku10/go-lz-string"
|
||||||
|
)
|
||||||
|
|
||||||
|
func StringDecrypt(key string, encryptedString string) (string, error) {
|
||||||
|
keyHash := sha256.Sum256([]byte(key))
|
||||||
|
keyHashBytes := keyHash[:]
|
||||||
|
|
||||||
|
iv := keyHashBytes[:16]
|
||||||
|
|
||||||
|
encryptedBytes, err := base64.StdEncoding.DecodeString(encryptedString)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
block, err := aes.NewCipher(keyHashBytes)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
mode := cipher.NewCBCDecrypter(block, iv)
|
||||||
|
|
||||||
|
decrypted := make([]byte, len(encryptedBytes))
|
||||||
|
mode.CryptBlocks(decrypted, encryptedBytes)
|
||||||
|
|
||||||
|
decrypted = RemovePKCS7Padding(decrypted)
|
||||||
|
|
||||||
|
dataResp, err := lzstring.DecompressFromEncodedURIComponent(string(decrypted))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Error decompress: %v", err)
|
||||||
|
}
|
||||||
|
return dataResp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func RemovePKCS7Padding(data []byte) []byte {
|
||||||
|
paddingLength := int(data[len(data)-1])
|
||||||
|
return data[:len(data)-paddingLength]
|
||||||
|
}
|
||||||
+115
-53
@@ -1,54 +1,116 @@
|
|||||||
{
|
{
|
||||||
"swagger": "2.0",
|
"swagger": "2.0",
|
||||||
"info": {
|
"info": {
|
||||||
"description": "Rest API CRUD User",
|
"description": "Rest API CRUD User",
|
||||||
"title": "Crud User",
|
"title": "Crud User",
|
||||||
"contact": {},
|
"contact": {},
|
||||||
"version": "1"
|
"version": "1"
|
||||||
},
|
},
|
||||||
"host": "localhost:8080",
|
"host": "localhost:8080",
|
||||||
"paths": {
|
"paths": {
|
||||||
"/api/v1/user": {
|
"/api/user": {
|
||||||
"get": {
|
"get": {
|
||||||
"description": "returs list of all users from the database",
|
"description": "returs list of all users from the database",
|
||||||
"tags": [
|
"tags": [
|
||||||
"Users"
|
"Users"
|
||||||
],
|
],
|
||||||
"summary": "return list of all",
|
"summary": "return list of all",
|
||||||
"responses": {
|
"responses": {
|
||||||
"200": {
|
"200": {
|
||||||
"description": "OK",
|
"description": "OK",
|
||||||
"schema": {
|
"schema": {
|
||||||
"$ref": "#/definitions/models.User"
|
"$ref": "#/definitions/models.User"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
},
|
"/api/user/create": {
|
||||||
"definitions": {
|
"post": {
|
||||||
"models.User": {
|
"description": "Insert Data User",
|
||||||
"type": "object",
|
"tags": [
|
||||||
"properties": {
|
"Users"
|
||||||
"agama": {
|
],
|
||||||
"type": "string"
|
"summary": "Insert Data User",
|
||||||
},
|
"responses": {
|
||||||
"alamat": {
|
"200": {
|
||||||
"type": "string"
|
"description": "OK",
|
||||||
},
|
"schema": {
|
||||||
"id": {
|
"$ref": "#/definitions/models.Response"
|
||||||
"type": "string"
|
}
|
||||||
},
|
}
|
||||||
"jenis_kelamin": {
|
}
|
||||||
"type": "string"
|
}
|
||||||
},
|
},
|
||||||
"nama": {
|
"/api/user/delete/:id": {
|
||||||
"type": "string"
|
"delete": {
|
||||||
},
|
"description": "Delete Data User",
|
||||||
"umur": {
|
"tags": [
|
||||||
"type": "integer"
|
"Users"
|
||||||
}
|
],
|
||||||
}
|
"summary": "Delete Data User",
|
||||||
}
|
"responses": {
|
||||||
}
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/models.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/api/user/update/:id": {
|
||||||
|
"put": {
|
||||||
|
"description": "Update Data User",
|
||||||
|
"tags": [
|
||||||
|
"Users"
|
||||||
|
],
|
||||||
|
"summary": "Update Data User",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/models.Response"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"definitions": {
|
||||||
|
"models.Response": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"response_code": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"response_message": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"models.User": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"agama": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"alamat": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"jenis_kelamin": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"nama": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"umur": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+75
-35
@@ -1,35 +1,75 @@
|
|||||||
definitions:
|
definitions:
|
||||||
models.User:
|
models.Response:
|
||||||
properties:
|
properties:
|
||||||
agama:
|
response_code:
|
||||||
type: string
|
type: string
|
||||||
alamat:
|
response_message:
|
||||||
type: string
|
type: string
|
||||||
id:
|
type: object
|
||||||
type: string
|
models.User:
|
||||||
jenis_kelamin:
|
properties:
|
||||||
type: string
|
agama:
|
||||||
nama:
|
type: string
|
||||||
type: string
|
alamat:
|
||||||
umur:
|
type: string
|
||||||
type: integer
|
id:
|
||||||
type: object
|
type: string
|
||||||
host: localhost:8080
|
jenis_kelamin:
|
||||||
info:
|
type: string
|
||||||
contact: {}
|
nama:
|
||||||
description: Rest API CRUD User
|
type: string
|
||||||
title: Crud User
|
umur:
|
||||||
version: "1"
|
type: integer
|
||||||
paths:
|
type: object
|
||||||
/api/v1/user:
|
host: localhost:8080
|
||||||
get:
|
info:
|
||||||
description: returs list of all users from the database
|
contact: {}
|
||||||
responses:
|
description: Rest API CRUD User
|
||||||
"200":
|
title: Crud User
|
||||||
description: OK
|
version: "1"
|
||||||
schema:
|
paths:
|
||||||
$ref: '#/definitions/models.User'
|
/api/user:
|
||||||
summary: return list of all
|
get:
|
||||||
tags:
|
description: returs list of all users from the database
|
||||||
- Users
|
responses:
|
||||||
swagger: "2.0"
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.User'
|
||||||
|
summary: return list of all
|
||||||
|
tags:
|
||||||
|
- Users
|
||||||
|
/api/user/create:
|
||||||
|
post:
|
||||||
|
description: Insert Data User
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Response'
|
||||||
|
summary: Insert Data User
|
||||||
|
tags:
|
||||||
|
- Users
|
||||||
|
/api/user/delete/:id:
|
||||||
|
delete:
|
||||||
|
description: Delete Data User
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Response'
|
||||||
|
summary: Delete Data User
|
||||||
|
tags:
|
||||||
|
- Users
|
||||||
|
/api/user/update/:id:
|
||||||
|
put:
|
||||||
|
description: Update Data User
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Response'
|
||||||
|
summary: Update Data User
|
||||||
|
tags:
|
||||||
|
- Users
|
||||||
|
swagger: "2.0"
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Function to convert Kode to ID
|
||||||
|
func KodeToIDConverter(kode string, kodeDokter map[string]int) int {
|
||||||
|
log.Println("Kode :", kode)
|
||||||
|
id := kodeDokter[kode]
|
||||||
|
log.Println("ID :", id)
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert Hfis Code to ID Satu Data
|
||||||
|
func HfisCodeToIDConverter(kode int, kodeDokter map[int]string) string {
|
||||||
|
id := kodeDokter[kode]
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
|
||||||
|
func ConvertDay(day string) string {
|
||||||
|
dayTranslations := map[string]string{
|
||||||
|
"sunday": "MINGGU",
|
||||||
|
"monday": "SENIN",
|
||||||
|
"tuesday": "SELASA",
|
||||||
|
"wednesday": "RABU",
|
||||||
|
"thursday": "KAMIS",
|
||||||
|
"friday": "JUMAT",
|
||||||
|
"saturday": "SABTU",
|
||||||
|
}
|
||||||
|
|
||||||
|
dayLower := strings.ToLower(day)
|
||||||
|
if translatedDay, exists := dayTranslations[dayLower]; exists {
|
||||||
|
return translatedDay
|
||||||
|
}
|
||||||
|
return day
|
||||||
|
}
|
||||||
|
|
||||||
|
func ReplaceGelar(gelar string) string {
|
||||||
|
gelar = strings.ReplaceAll(gelar, "{", "")
|
||||||
|
gelar = strings.ReplaceAll(gelar, "}", "")
|
||||||
|
gelar = strings.ReplaceAll(gelar, ",", " ")
|
||||||
|
return gelar
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetNoUrut(noSurKon string) (string, error) {
|
||||||
|
noSurKonSlice := strings.Split(noSurKon, "/")
|
||||||
|
noUrut := noSurKonSlice[3]
|
||||||
|
noUrutInt, err := strconv.Atoi(noUrut)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
noUrutInt++
|
||||||
|
noUrutStr := fmt.Sprintf("%03d", noUrutInt)
|
||||||
|
log.Println("No Urut: ", noUrutStr)
|
||||||
|
return noUrutStr, nil
|
||||||
|
}
|
||||||
@@ -1,132 +0,0 @@
|
|||||||
package ginHandlers
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"net/http"
|
|
||||||
"tes-rssa/database"
|
|
||||||
"tes-rssa/models"
|
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
"gorm.io/gorm"
|
|
||||||
)
|
|
||||||
|
|
||||||
// GetAllUser returs list of all users from the database
|
|
||||||
// @Summary return list of all
|
|
||||||
// @Description returs list of all users from the database
|
|
||||||
// @Tags Users
|
|
||||||
// @Success 200 {object} models.User
|
|
||||||
// @Router /api/v1/user [get]
|
|
||||||
func GetAllUser(c *gin.Context) {
|
|
||||||
var users []models.User
|
|
||||||
result := database.DB.Debug().Raw(`SELECT * FROM "user"`).Find(&users)
|
|
||||||
if result.Error != nil {
|
|
||||||
if result.Error == gorm.ErrRecordNotFound {
|
|
||||||
c.JSON(http.StatusNotFound, result.Error)
|
|
||||||
} else {
|
|
||||||
c.JSON(http.StatusInternalServerError, result.Error)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c.JSON(http.StatusOK, users)
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetUserId(c *gin.Context) {
|
|
||||||
id := c.Request.URL.Query()
|
|
||||||
|
|
||||||
var user models.User
|
|
||||||
query := `select * from "user" where id = ?`
|
|
||||||
result := database.DB.Debug().Raw(query, id).Find(&user)
|
|
||||||
if result.Error != nil {
|
|
||||||
if result.Error == gorm.ErrRecordNotFound {
|
|
||||||
c.JSON(http.StatusNotFound, result.Error)
|
|
||||||
} else {
|
|
||||||
c.JSON(http.StatusInternalServerError, result.Error)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
c.JSON(http.StatusOK, user)
|
|
||||||
}
|
|
||||||
|
|
||||||
func CreateUser(c *gin.Context) {
|
|
||||||
var u models.InsertUser
|
|
||||||
err := json.NewDecoder(c.Request.Body).Decode(&u)
|
|
||||||
if err != nil {
|
|
||||||
c.JSON(http.StatusBadRequest, "Invalid request payload")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
insertData := &models.InsertUser{
|
|
||||||
Nama: u.Nama,
|
|
||||||
Umur: u.Umur,
|
|
||||||
Alamat: u.Alamat,
|
|
||||||
Agama: u.Agama,
|
|
||||||
JenisKelamin: u.JenisKelamin,
|
|
||||||
}
|
|
||||||
queryInsert := `INSERT INTO "user" (nama, umur, alamat, agama, jenis_kelamin) VALUES (?, ?, ?, ?, ?)`
|
|
||||||
result := database.DB.Debug().Exec(queryInsert, insertData.Nama, insertData.Umur, insertData.Alamat, insertData.Agama, insertData.JenisKelamin)
|
|
||||||
if result.Error != nil {
|
|
||||||
c.JSON(http.StatusInternalServerError, result.Error)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
res := &models.Response{
|
|
||||||
ResponseCode: "00",
|
|
||||||
ResponseMessage: "Berhasil Insert Data",
|
|
||||||
}
|
|
||||||
c.JSON(http.StatusOK, res)
|
|
||||||
}
|
|
||||||
|
|
||||||
func UpdateUser(c *gin.Context) {
|
|
||||||
id := c.Request.URL.Query()
|
|
||||||
|
|
||||||
var u models.UpdateUser
|
|
||||||
err := json.NewDecoder(c.Request.Body).Decode(&u)
|
|
||||||
if err != nil {
|
|
||||||
c.JSON(http.StatusBadRequest, "Invalid request payload")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
update := &models.UpdateUser{
|
|
||||||
Nama: u.Nama,
|
|
||||||
Umur: u.Umur,
|
|
||||||
Alamat: u.Alamat,
|
|
||||||
Agama: u.Agama,
|
|
||||||
JenisKelamin: u.JenisKelamin,
|
|
||||||
}
|
|
||||||
res := &models.Response{
|
|
||||||
ResponseCode: "00",
|
|
||||||
ResponseMessage: "Berhasil Update Data",
|
|
||||||
}
|
|
||||||
result := database.DB.Debug().Exec(`UPDATE "user" SET nama = ?, umur = ?, alamat = ?, agama = ?, jenis_kelamin = ? WHERE ID = ?`, update.Nama, update.Umur, update.Alamat, update.Agama, update.JenisKelamin, id)
|
|
||||||
if result.RowsAffected == 0 {
|
|
||||||
res = &models.Response{
|
|
||||||
ResponseCode: "99",
|
|
||||||
ResponseMessage: "Gagal update data",
|
|
||||||
}
|
|
||||||
} else if result.Error != nil {
|
|
||||||
c.JSON(http.StatusInternalServerError, result.Error)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
c.JSON(http.StatusOK, res)
|
|
||||||
}
|
|
||||||
func DeleteUser(c *gin.Context) {
|
|
||||||
id := c.Request.URL.Query()
|
|
||||||
res := &models.Response{
|
|
||||||
ResponseCode: "00",
|
|
||||||
ResponseMessage: "Berhasil Delete Data",
|
|
||||||
}
|
|
||||||
result := database.DB.Debug().Exec(`DELETE from "user" where id = ?`, id)
|
|
||||||
if result.RowsAffected == 0 {
|
|
||||||
res = &models.Response{
|
|
||||||
ResponseCode: "99",
|
|
||||||
ResponseMessage: "Gagal delete data",
|
|
||||||
}
|
|
||||||
} else if result.Error != nil {
|
|
||||||
c.JSON(http.StatusInternalServerError, result.Error)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
c.JSON(http.StatusOK, res)
|
|
||||||
}
|
|
||||||
@@ -1,28 +1,30 @@
|
|||||||
module tes-rssa
|
module bridging-rssa
|
||||||
|
|
||||||
go 1.22.0
|
go 1.23.0
|
||||||
|
|
||||||
toolchain go1.23.1
|
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/gorilla/mux v1.8.1
|
github.com/andrean360/bridging-bpjs-go v1.0.1
|
||||||
|
github.com/daku10/go-lz-string v0.0.6
|
||||||
|
github.com/gin-gonic/gin v1.10.0
|
||||||
github.com/joho/godotenv v1.5.1
|
github.com/joho/godotenv v1.5.1
|
||||||
gorm.io/driver/mysql v1.5.7
|
github.com/mashingan/smapping v0.1.19
|
||||||
|
github.com/rs/cors v1.11.1
|
||||||
|
github.com/swaggo/files v1.0.1
|
||||||
|
github.com/swaggo/gin-swagger v1.6.0
|
||||||
|
github.com/swaggo/swag v1.16.3
|
||||||
gorm.io/gorm v1.25.11
|
gorm.io/gorm v1.25.11
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/KyleBanks/depth v1.2.1 // indirect
|
github.com/KyleBanks/depth v1.2.1 // indirect
|
||||||
github.com/PuerkitoBio/purell v1.2.1 // indirect
|
|
||||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
|
|
||||||
github.com/bytedance/sonic v1.12.2 // indirect
|
github.com/bytedance/sonic v1.12.2 // indirect
|
||||||
github.com/bytedance/sonic/loader v0.2.0 // indirect
|
github.com/bytedance/sonic/loader v0.2.0 // indirect
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
|
|
||||||
github.com/cloudwego/base64x v0.1.4 // indirect
|
github.com/cloudwego/base64x v0.1.4 // indirect
|
||||||
github.com/cloudwego/iasm v0.2.0 // indirect
|
github.com/cloudwego/iasm v0.2.0 // indirect
|
||||||
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||||
github.com/gabriel-vasile/mimetype v1.4.5 // indirect
|
github.com/gabriel-vasile/mimetype v1.4.5 // indirect
|
||||||
|
github.com/gin-contrib/cors v1.7.2 // indirect
|
||||||
github.com/gin-contrib/sse v0.1.0 // indirect
|
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||||
github.com/gin-gonic/gin v1.10.0 // indirect
|
|
||||||
github.com/go-openapi/jsonpointer v0.21.0 // indirect
|
github.com/go-openapi/jsonpointer v0.21.0 // indirect
|
||||||
github.com/go-openapi/jsonreference v0.21.0 // indirect
|
github.com/go-openapi/jsonreference v0.21.0 // indirect
|
||||||
github.com/go-openapi/spec v0.21.0 // indirect
|
github.com/go-openapi/spec v0.21.0 // indirect
|
||||||
@@ -30,7 +32,6 @@ require (
|
|||||||
github.com/go-playground/locales v0.14.1 // indirect
|
github.com/go-playground/locales v0.14.1 // indirect
|
||||||
github.com/go-playground/universal-translator v0.18.1 // indirect
|
github.com/go-playground/universal-translator v0.18.1 // indirect
|
||||||
github.com/go-playground/validator/v10 v10.22.1 // indirect
|
github.com/go-playground/validator/v10 v10.22.1 // indirect
|
||||||
github.com/go-swagger/go-swagger v0.31.0 // indirect
|
|
||||||
github.com/goccy/go-json v0.10.3 // indirect
|
github.com/goccy/go-json v0.10.3 // indirect
|
||||||
github.com/jackc/pgpassfile v1.0.0 // indirect
|
github.com/jackc/pgpassfile v1.0.0 // indirect
|
||||||
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
|
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
|
||||||
@@ -42,13 +43,12 @@ require (
|
|||||||
github.com/leodido/go-urn v1.4.0 // indirect
|
github.com/leodido/go-urn v1.4.0 // indirect
|
||||||
github.com/mailru/easyjson v0.7.7 // indirect
|
github.com/mailru/easyjson v0.7.7 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
github.com/modern-go/reflect2 v1.0.2 // indirect
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
|
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
|
||||||
github.com/rs/cors v1.11.1 // indirect
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||||
github.com/swaggo/files v1.0.1 // indirect
|
github.com/rogpeppe/go-internal v1.12.0 // indirect
|
||||||
github.com/swaggo/gin-swagger v1.6.0 // indirect
|
|
||||||
github.com/swaggo/swag v1.16.3 // indirect
|
|
||||||
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
||||||
github.com/ugorji/go/codec v1.2.12 // indirect
|
github.com/ugorji/go/codec v1.2.12 // indirect
|
||||||
golang.org/x/arch v0.10.0 // indirect
|
golang.org/x/arch v0.10.0 // indirect
|
||||||
@@ -58,15 +58,14 @@ require (
|
|||||||
golang.org/x/sys v0.25.0 // indirect
|
golang.org/x/sys v0.25.0 // indirect
|
||||||
golang.org/x/tools v0.25.0 // indirect
|
golang.org/x/tools v0.25.0 // indirect
|
||||||
google.golang.org/protobuf v1.34.2 // indirect
|
google.golang.org/protobuf v1.34.2 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
filippo.io/edwards25519 v1.1.0 // indirect
|
github.com/google/uuid v1.6.0
|
||||||
github.com/go-sql-driver/mysql v1.8.1 // indirect
|
|
||||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
github.com/jinzhu/now v1.1.5 // indirect
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
|
github.com/robfig/cron/v3 v3.0.1
|
||||||
golang.org/x/text v0.18.0 // indirect
|
golang.org/x/text v0.18.0 // indirect
|
||||||
gorm.io/driver/postgres v1.5.9
|
gorm.io/driver/postgres v1.5.9
|
||||||
)
|
)
|
||||||
@@ -1,31 +1,28 @@
|
|||||||
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
|
|
||||||
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
|
|
||||||
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
|
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
|
||||||
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
|
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
|
||||||
github.com/PuerkitoBio/purell v1.2.1 h1:QsZ4TjvwiMpat6gBCBxEQI0rcS9ehtkKtSpiUnd9N28=
|
github.com/andrean360/bridging-bpjs-go v1.0.1 h1:06eJ23vcI2tNyPryr8p3jxJ+Vy4P4/nneNPWuUrgnLg=
|
||||||
github.com/PuerkitoBio/purell v1.2.1/go.mod h1:ZwHcC/82TOaovDi//J/804umJFFmbOHPngi8iYYv/Eo=
|
github.com/andrean360/bridging-bpjs-go v1.0.1/go.mod h1:sRBG5zI4Ky/UMCI7u/QuMTlrzREV2UQn043lhrejfFE=
|
||||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
|
||||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
|
||||||
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
|
|
||||||
github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM=
|
|
||||||
github.com/bytedance/sonic v1.12.2 h1:oaMFuRTpMHYLpCntGca65YWt5ny+wAceDERTkT2L9lg=
|
github.com/bytedance/sonic v1.12.2 h1:oaMFuRTpMHYLpCntGca65YWt5ny+wAceDERTkT2L9lg=
|
||||||
github.com/bytedance/sonic v1.12.2/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk=
|
github.com/bytedance/sonic v1.12.2/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk=
|
||||||
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
|
github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
|
||||||
github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM=
|
github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM=
|
||||||
github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
|
github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU=
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
|
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
|
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0=
|
|
||||||
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA=
|
|
||||||
github.com/chenzhuoyu/iasm v0.9.0/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog=
|
|
||||||
github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
|
github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y=
|
||||||
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
|
github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w=
|
||||||
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
|
github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg=
|
||||||
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
|
github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY=
|
||||||
|
github.com/daku10/go-lz-string v0.0.6 h1:aO8FFp4QPuNp7+WNyh1DyNjGF3UbZu95tUv9xOZNsYQ=
|
||||||
|
github.com/daku10/go-lz-string v0.0.6/go.mod h1:Vk++rSG3db8HXJaHEAbxiy/ukjTmPBw/iI+SrVZDzfs=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||||
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/gabriel-vasile/mimetype v1.4.5 h1:J7wGKdGu33ocBOhGy0z653k/lFKLFDPJMG8Gql0kxn4=
|
github.com/gabriel-vasile/mimetype v1.4.5 h1:J7wGKdGu33ocBOhGy0z653k/lFKLFDPJMG8Gql0kxn4=
|
||||||
github.com/gabriel-vasile/mimetype v1.4.5/go.mod h1:ibHel+/kbxn9x2407k1izTA1S81ku1z/DlgOW2QE0M4=
|
github.com/gabriel-vasile/mimetype v1.4.5/go.mod h1:ibHel+/kbxn9x2407k1izTA1S81ku1z/DlgOW2QE0M4=
|
||||||
|
github.com/gin-contrib/cors v1.7.2 h1:oLDHxdg8W/XDoN/8zamqk/Drgt4oVZDvaV0YmvVICQw=
|
||||||
|
github.com/gin-contrib/cors v1.7.2/go.mod h1:SUJVARKgQ40dmrzgXEVxj2m7Ig1v1qIboQkPDTQ9t2E=
|
||||||
|
github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4=
|
||||||
|
github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk=
|
||||||
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
|
||||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||||
github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
|
github.com/gin-gonic/gin v1.10.0 h1:nTuyha1TYqgedzytsKYqna+DfLos46nTv2ygFy86HFU=
|
||||||
@@ -38,23 +35,21 @@ github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9Z
|
|||||||
github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk=
|
github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk=
|
||||||
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
|
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
|
||||||
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
|
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
|
||||||
|
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
|
||||||
|
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
|
||||||
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
|
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
|
||||||
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
|
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
|
||||||
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
|
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
|
||||||
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
|
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
|
||||||
github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA=
|
github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA=
|
||||||
github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
|
github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM=
|
||||||
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
|
|
||||||
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
|
|
||||||
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
|
|
||||||
github.com/go-swagger/go-swagger v0.31.0 h1:H8eOYQnY2u7vNKWDNykv2xJP3pBhRG/R+SOCAmKrLlc=
|
|
||||||
github.com/go-swagger/go-swagger v0.31.0/go.mod h1:WSigRRWEig8zV6t6Sm8Y+EmUjlzA/HoaZJ5edupq7po=
|
|
||||||
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
|
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
|
||||||
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
||||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||||
|
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
|
||||||
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
|
||||||
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
|
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
|
||||||
@@ -77,13 +72,20 @@ github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa02
|
|||||||
github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM=
|
github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM=
|
||||||
github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
|
||||||
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
|
github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M=
|
||||||
|
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||||
|
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
|
||||||
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
|
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
|
||||||
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
|
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
|
||||||
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
||||||
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
||||||
|
github.com/mashingan/smapping v0.1.19 h1:SsEtuPn2UcM1croIupPtGLgWgpYRuS0rSQMvKD9g2BQ=
|
||||||
|
github.com/mashingan/smapping v0.1.19/go.mod h1:FjfiwFxGOuNxL/OT1WcrNAwTPx0YJeg5JiXwBB1nyig=
|
||||||
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
|
||||||
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||||
|
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||||
|
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||||
@@ -92,6 +94,12 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY
|
|||||||
github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
|
github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
|
||||||
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
|
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||||
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
||||||
|
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||||
|
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
|
||||||
|
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
|
||||||
github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA=
|
github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA=
|
||||||
github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
|
github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
@@ -102,6 +110,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
|||||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
|
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||||
|
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE=
|
github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE=
|
||||||
github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg=
|
github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg=
|
||||||
github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M=
|
github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M=
|
||||||
@@ -113,16 +123,15 @@ github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2
|
|||||||
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
|
github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE=
|
||||||
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
|
||||||
golang.org/x/arch v0.10.0 h1:S3huipmSclq3PJMNe76NGwkBR504WFkQ5dhzWzP8ZW8=
|
golang.org/x/arch v0.10.0 h1:S3huipmSclq3PJMNe76NGwkBR504WFkQ5dhzWzP8ZW8=
|
||||||
golang.org/x/arch v0.10.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
|
golang.org/x/arch v0.10.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
|
|
||||||
golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
|
|
||||||
golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A=
|
golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A=
|
||||||
golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70=
|
golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
|
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
|
||||||
|
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
@@ -131,8 +140,6 @@ golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo=
|
|||||||
golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0=
|
golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
|
|
||||||
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
|
||||||
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
|
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
|
||||||
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@@ -151,8 +158,6 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
|||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4=
|
|
||||||
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
|
|
||||||
golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224=
|
golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224=
|
||||||
golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
@@ -161,21 +166,16 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
|
|||||||
golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE=
|
golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE=
|
||||||
golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg=
|
golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
|
||||||
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
|
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
|
||||||
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
|
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
|
|
||||||
gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
|
|
||||||
gorm.io/driver/postgres v1.5.9 h1:DkegyItji119OlcaLjqN11kHoUgZ/j13E0jkJZgD6A8=
|
gorm.io/driver/postgres v1.5.9 h1:DkegyItji119OlcaLjqN11kHoUgZ/j13E0jkJZgD6A8=
|
||||||
gorm.io/driver/postgres v1.5.9/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI=
|
gorm.io/driver/postgres v1.5.9/go.mod h1:DX3GReXH+3FPWGrrgffdvCk3DQ1dwDPdmbenSkweRGI=
|
||||||
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
|
||||||
gorm.io/gorm v1.25.11 h1:/Wfyg1B/je1hnDx3sMkX+gAlxrlZpn6X0BXRlwXlvHg=
|
gorm.io/gorm v1.25.11 h1:/Wfyg1B/je1hnDx3sMkX+gAlxrlZpn6X0BXRlwXlvHg=
|
||||||
gorm.io/gorm v1.25.11/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
|
gorm.io/gorm v1.25.11/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
|
||||||
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50=
|
||||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
|
||||||
@@ -0,0 +1,264 @@
|
|||||||
|
package icare
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/database/satu_data/dokter"
|
||||||
|
log_api "bridging-rssa/database/satu_data/log_api"
|
||||||
|
"bridging-rssa/database/satu_data/pasien"
|
||||||
|
"bridging-rssa/models/config"
|
||||||
|
logapi "bridging-rssa/models/log_api"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
cfg "bridging-rssa/config"
|
||||||
|
ic "bridging-rssa/models/bpjs/i_care"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetFKRTL(c *gin.Context) {
|
||||||
|
baseUrl := os.Getenv("BASEURL_BPJS")
|
||||||
|
endpoint := os.Getenv("I_CARE_JKN")
|
||||||
|
param := os.Getenv("GET_FKRTL")
|
||||||
|
url := baseUrl + endpoint + param
|
||||||
|
|
||||||
|
log.Println("URL :", url)
|
||||||
|
var req *ic.ReqICare
|
||||||
|
|
||||||
|
err := c.Bind(&req)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
||||||
|
Code: 0,
|
||||||
|
Message: err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
reqICare := &ic.RequestICare{
|
||||||
|
Param: req.Param,
|
||||||
|
KodeDokter: req.KodeDokter,
|
||||||
|
}
|
||||||
|
|
||||||
|
reqJson, errMarshal := json.Marshal(reqICare)
|
||||||
|
if errMarshal != nil {
|
||||||
|
log.Println(err)
|
||||||
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
||||||
|
Code: 0,
|
||||||
|
Message: errMarshal.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQUEST: ", string(reqJson))
|
||||||
|
|
||||||
|
conf := config.ConfigBpjs{}
|
||||||
|
|
||||||
|
icare := true
|
||||||
|
header := cfg.SetHeader(icare, conf)
|
||||||
|
|
||||||
|
headers := map[string]string{
|
||||||
|
"X-cons-id": header.ConsID,
|
||||||
|
"X-timestamp": header.TimeStamp,
|
||||||
|
"X-signature": header.XSignature,
|
||||||
|
"user_key": header.UserKey,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
}
|
||||||
|
log.Println("Headers : ", headers)
|
||||||
|
|
||||||
|
var headerStringBuilder strings.Builder
|
||||||
|
for key, value := range headers {
|
||||||
|
headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value))
|
||||||
|
}
|
||||||
|
headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ")
|
||||||
|
|
||||||
|
dpjp := strconv.Itoa(req.KodeDokter)
|
||||||
|
|
||||||
|
dataDokter, err := dokter.GetHFISCode(dpjp)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
||||||
|
Code: 0,
|
||||||
|
Message: err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
reqICare.KodeDokter, err = strconv.Atoi(dataDokter.HfisCode)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
||||||
|
Code: 0,
|
||||||
|
Message: err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
kunjunganPasien, err := pasien.GetDataKunjunganPasien(req.IDXDaftar)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
||||||
|
Code: 0,
|
||||||
|
Message: err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
uuid := uuid.New().String()
|
||||||
|
logTimeStart := time.Now().Format("2006-01-02 15:04:05")
|
||||||
|
res, err := ResponseGetFKRTL(url, header, headers, reqICare)
|
||||||
|
if err != nil {
|
||||||
|
responJson, errMarshal2 := json.Marshal(res)
|
||||||
|
if errMarshal2 != nil {
|
||||||
|
log.Println(errMarshal2)
|
||||||
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
||||||
|
Code: 0,
|
||||||
|
Message: errMarshal2.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
|
||||||
|
reqInsertLog := &logapi.DataLogAPI{
|
||||||
|
ID: uuid,
|
||||||
|
DateCreated: logTimeEnd,
|
||||||
|
UserAgent: req.User,
|
||||||
|
IP: c.ClientIP(),
|
||||||
|
Parameter: "BPJS-ICare-FKRTL",
|
||||||
|
Header: headerString,
|
||||||
|
Method: "POST",
|
||||||
|
Url: url,
|
||||||
|
Request: reqJson,
|
||||||
|
Respon: responJson,
|
||||||
|
ResponCode: strconv.Itoa(res.MetaData.Code),
|
||||||
|
ResponTimeStart: logTimeStart,
|
||||||
|
ResponTimeEnd: logTimeEnd,
|
||||||
|
Comment: res.MetaData.Message,
|
||||||
|
}
|
||||||
|
|
||||||
|
errInsert := log_api.InsertLogAPI(reqInsertLog)
|
||||||
|
if errInsert != nil {
|
||||||
|
log.Println(errInsert)
|
||||||
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
||||||
|
Code: 0,
|
||||||
|
Message: errInsert.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Println(err)
|
||||||
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
||||||
|
Code: 0,
|
||||||
|
Message: err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
responJson, err := json.Marshal(res)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
||||||
|
Code: 0,
|
||||||
|
Message: err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
|
||||||
|
reqInsertLog := &logapi.DataLogAPI{
|
||||||
|
ID: uuid,
|
||||||
|
DateCreated: logTimeEnd,
|
||||||
|
UserAgent: req.User,
|
||||||
|
IP: c.ClientIP(),
|
||||||
|
Parameter: "BPJS-ICare-FKRTL",
|
||||||
|
Header: headerString,
|
||||||
|
Method: "POST",
|
||||||
|
Url: url,
|
||||||
|
Request: reqJson,
|
||||||
|
Respon: responJson,
|
||||||
|
ResponCode: strconv.Itoa(res.MetaData.Code),
|
||||||
|
ResponTimeStart: logTimeStart,
|
||||||
|
ResponTimeEnd: logTimeEnd,
|
||||||
|
Comment: res.MetaData.Message,
|
||||||
|
}
|
||||||
|
|
||||||
|
err = log_api.InsertLogAPI(reqInsertLog)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
||||||
|
Code: 0,
|
||||||
|
Message: err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
reqInsert := &logapi.InsertLogICare{
|
||||||
|
ID: uuid,
|
||||||
|
DateCreated: logTimeEnd,
|
||||||
|
Ruangan: kunjunganPasien.Ruangan,
|
||||||
|
Dokter: dataDokter.ID,
|
||||||
|
Kunjungan_pasien: kunjunganPasien.ID,
|
||||||
|
WaktuTransaksi: logTimeEnd,
|
||||||
|
}
|
||||||
|
|
||||||
|
errInsert := log_api.InsertLogICare(reqInsert)
|
||||||
|
if errInsert != nil {
|
||||||
|
log.Println(errInsert)
|
||||||
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
||||||
|
Code: 0,
|
||||||
|
Message: errInsert.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, res)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetFKTP(c *gin.Context) {
|
||||||
|
baseUrl := os.Getenv("BASEURL_BPJS")
|
||||||
|
endpoint := os.Getenv("I_CARE_JKN")
|
||||||
|
param := os.Getenv("GET_FKRTL")
|
||||||
|
url := baseUrl + endpoint + param
|
||||||
|
|
||||||
|
log.Println("URL :", url)
|
||||||
|
var req *ic.RequestICare
|
||||||
|
|
||||||
|
err := c.Bind(&req)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
||||||
|
Code: 0,
|
||||||
|
Message: err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQUEST: ", req)
|
||||||
|
|
||||||
|
conf := config.ConfigBpjs{}
|
||||||
|
|
||||||
|
header := cfg.SetHeaderDev(conf)
|
||||||
|
|
||||||
|
headers := map[string]string{
|
||||||
|
"X-cons-id": header.ConsID,
|
||||||
|
"X-timestamp": header.TimeStamp,
|
||||||
|
"X-signature": header.XSignature,
|
||||||
|
"user_key": header.UserKey,
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
}
|
||||||
|
log.Println("Headers : ", headers)
|
||||||
|
|
||||||
|
res, err := ResponseGetFKRTL(url, header, headers, req)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
c.JSON(http.StatusInternalServerError, &ic.Metadata{
|
||||||
|
Code: 0,
|
||||||
|
Message: err.Error(),
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(http.StatusOK, res)
|
||||||
|
}
|
||||||
@@ -0,0 +1,222 @@
|
|||||||
|
package icare
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/docs"
|
||||||
|
ic "bridging-rssa/models/bpjs/i_care"
|
||||||
|
"bridging-rssa/models/config"
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ResponseGetFKRTL(url string, header *config.Header, headers map[string]string, request *ic.RequestICare) (*ic.ResponseGet, error) {
|
||||||
|
log.Println("URL", url)
|
||||||
|
|
||||||
|
reqMarshall, err := json.Marshal(request)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error json marshal: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQUEST: ", string(reqMarshall))
|
||||||
|
|
||||||
|
req, err := http.NewRequest("POST", url, bytes.NewReader(reqMarshall))
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error creating request: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for key, value := range headers {
|
||||||
|
req.Header.Set(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQ", req.Header)
|
||||||
|
client := http.Client{
|
||||||
|
Timeout: 10 * time.Second,
|
||||||
|
}
|
||||||
|
|
||||||
|
responses := &ic.ResponseGet{}
|
||||||
|
response, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
if strings.Contains(strings.ToLower(err.Error()), "deadline exceeded") {
|
||||||
|
errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi")
|
||||||
|
log.Printf("error : %v", errMsg)
|
||||||
|
responses.MetaData.Message = errMsg.Error()
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
return responses, err
|
||||||
|
}
|
||||||
|
log.Printf("Error making external API request: %v", err)
|
||||||
|
return responses, err
|
||||||
|
}
|
||||||
|
log.Println("RESPONSE: ", response)
|
||||||
|
|
||||||
|
if response.StatusCode == http.StatusGatewayTimeout { // 504
|
||||||
|
errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi")
|
||||||
|
log.Printf("error : %v", errMsg)
|
||||||
|
responses.MetaData.Code = 504
|
||||||
|
responses.MetaData.Message = errMsg.Error()
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
return responses, err
|
||||||
|
}
|
||||||
|
|
||||||
|
key := header.ConsID + header.SecretKey + header.TimeStamp
|
||||||
|
res, err := io.ReadAll(response.Body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("Res:", string(res))
|
||||||
|
|
||||||
|
var resFkrtlRaw ic.ResponseGetRaw
|
||||||
|
err = json.Unmarshal([]byte(string(res)), &resFkrtlRaw)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Unmarshaling: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("ResponseRaw : ", resFkrtlRaw)
|
||||||
|
|
||||||
|
if resFkrtlRaw.MetaData.Code != 200 {
|
||||||
|
errMsg := errors.New(resFkrtlRaw.MetaData.Message)
|
||||||
|
if strings.Contains(strings.ToLower(resFkrtlRaw.MetaData.Message), "Gagal simpan!") {
|
||||||
|
message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal"
|
||||||
|
resFkrtlRaw.MetaData.Message = message
|
||||||
|
}
|
||||||
|
log.Printf("error : %v", errMsg)
|
||||||
|
responses.MetaData.Code = resFkrtlRaw.MetaData.Code
|
||||||
|
responses.MetaData.Message = resFkrtlRaw.MetaData.Message
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
return responses, errMsg
|
||||||
|
}
|
||||||
|
|
||||||
|
dataResp, err := docs.StringDecrypt(key, resFkrtlRaw.Response)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decrypt: %v", err)
|
||||||
|
log.Println("res: ", dataResp)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var resFkrtl ic.Response
|
||||||
|
|
||||||
|
log.Println("dataresp: ", dataResp)
|
||||||
|
|
||||||
|
err = json.Unmarshal([]byte(dataResp), &resFkrtl)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decode: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
responses = &ic.ResponseGet{
|
||||||
|
Response: resFkrtl,
|
||||||
|
MetaData: resFkrtlRaw.MetaData,
|
||||||
|
}
|
||||||
|
return responses, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ResponseGetFKTP(url string, header *config.Header, headers map[string]string, request *ic.ReqFKTP) (*ic.ResponseGet, error) {
|
||||||
|
log.Println("URL", url)
|
||||||
|
|
||||||
|
reqMarshall, err := json.Marshal(request)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error json marshal: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQUEST: ", string(reqMarshall))
|
||||||
|
|
||||||
|
req, err := http.NewRequest("POST", url, bytes.NewReader(reqMarshall))
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error creating request: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for key, value := range headers {
|
||||||
|
req.Header.Set(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQ", req.Header)
|
||||||
|
client := http.Client{
|
||||||
|
Timeout: 10 * time.Second,
|
||||||
|
}
|
||||||
|
|
||||||
|
responses := &ic.ResponseGet{}
|
||||||
|
response, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
if strings.Contains(strings.ToLower(err.Error()), "deadline exceeded") {
|
||||||
|
errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi")
|
||||||
|
log.Printf("error : %v", errMsg)
|
||||||
|
responses.MetaData.Message = errMsg.Error()
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
return responses, err
|
||||||
|
}
|
||||||
|
log.Printf("Error making external API request: %v", err)
|
||||||
|
return responses, err
|
||||||
|
}
|
||||||
|
log.Println("RESPONSE: ", response)
|
||||||
|
|
||||||
|
if response.StatusCode == http.StatusGatewayTimeout { // 504
|
||||||
|
errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi")
|
||||||
|
log.Printf("error : %v", errMsg)
|
||||||
|
responses.MetaData.Code = 504
|
||||||
|
responses.MetaData.Message = errMsg.Error()
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
return responses, err
|
||||||
|
}
|
||||||
|
|
||||||
|
key := header.ConsID + header.SecretKey + header.TimeStamp
|
||||||
|
res, err := io.ReadAll(response.Body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("Res:", string(res))
|
||||||
|
|
||||||
|
var resFkrtlRaw ic.ResponseGetRaw
|
||||||
|
err = json.Unmarshal([]byte(string(res)), &resFkrtlRaw)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Unmarshaling: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("ResponseRaw : ", resFkrtlRaw)
|
||||||
|
|
||||||
|
if resFkrtlRaw.MetaData.Code != 200 {
|
||||||
|
errMsg := errors.New(resFkrtlRaw.MetaData.Message)
|
||||||
|
if strings.Contains(strings.ToLower(resFkrtlRaw.MetaData.Message), "Gagal simpan!") {
|
||||||
|
message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal"
|
||||||
|
resFkrtlRaw.MetaData.Message = message
|
||||||
|
}
|
||||||
|
log.Printf("error : %v", errMsg)
|
||||||
|
responses.MetaData.Code = resFkrtlRaw.MetaData.Code
|
||||||
|
responses.MetaData.Message = resFkrtlRaw.MetaData.Message
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
return responses, errMsg
|
||||||
|
}
|
||||||
|
|
||||||
|
dataResp, err := docs.StringDecrypt(key, resFkrtlRaw.Response)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decrypt: %v", err)
|
||||||
|
log.Println("res: ", dataResp)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var resFkrtl ic.Response
|
||||||
|
|
||||||
|
log.Println("dataresp: ", dataResp)
|
||||||
|
|
||||||
|
err = json.Unmarshal([]byte(dataResp), &resFkrtl)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decode: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
responses = &ic.ResponseGet{
|
||||||
|
Response: resFkrtl,
|
||||||
|
MetaData: resFkrtlRaw.MetaData,
|
||||||
|
}
|
||||||
|
return responses, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,677 @@
|
|||||||
|
package jadwal_dokter
|
||||||
|
|
||||||
|
import (
|
||||||
|
cfg "bridging-rssa/config"
|
||||||
|
"bridging-rssa/database/satu_data/dokter"
|
||||||
|
"bridging-rssa/database/satu_data/jadwal"
|
||||||
|
log_api "bridging-rssa/database/satu_data/log_api"
|
||||||
|
"bridging-rssa/docs/utils"
|
||||||
|
"bridging-rssa/models/bpjs/jadwal_dokter"
|
||||||
|
"bridging-rssa/models/config"
|
||||||
|
dktr "bridging-rssa/models/dokter"
|
||||||
|
logapi "bridging-rssa/models/log_api"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetJadwalDokter(c *gin.Context) {
|
||||||
|
baseUrl := os.Getenv("BASEURL_BPJS")
|
||||||
|
endpoint := os.Getenv("ANTREAN_RS")
|
||||||
|
tanggal := c.Param("tanggal")
|
||||||
|
|
||||||
|
// Select from daftar spesialis
|
||||||
|
spesialis, err := dokter.GetSpesialis()
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var listIdSpesialis = make(map[string]int)
|
||||||
|
for _, kodeDokter := range spesialis {
|
||||||
|
listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID
|
||||||
|
}
|
||||||
|
|
||||||
|
subspesialis, err := dokter.GetSubspesialis()
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var listIdSubspesialis = make(map[string]int)
|
||||||
|
for _, kodeDokter := range subspesialis {
|
||||||
|
listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID
|
||||||
|
}
|
||||||
|
|
||||||
|
listDokter, err := dokter.GetDokter()
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var listIddokter = make(map[int]string)
|
||||||
|
for _, kodeDokter := range listDokter {
|
||||||
|
listIddokter[kodeDokter.HfisCode] = kodeDokter.ID
|
||||||
|
}
|
||||||
|
|
||||||
|
var reqInsert *jadwal_dokter.JadwalDokterSatuData
|
||||||
|
var response []*jadwal_dokter.JadwalDokterSatuData
|
||||||
|
for _, value := range spesialis {
|
||||||
|
conf := config.ConfigBpjs{}
|
||||||
|
|
||||||
|
header := cfg.SetHeader(false, conf)
|
||||||
|
|
||||||
|
headers := map[string]string{
|
||||||
|
"X-cons-id": header.ConsID,
|
||||||
|
"X-timestamp": header.TimeStamp,
|
||||||
|
"X-signature": header.XSignature,
|
||||||
|
"user_key": header.UserKey,
|
||||||
|
}
|
||||||
|
kdPoly := value.Kode
|
||||||
|
url := baseUrl + endpoint
|
||||||
|
param := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggal
|
||||||
|
linkurl := url + param
|
||||||
|
res, err := JadwalDokterGetResponse(linkurl, header, headers)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error making external API request: %v", err)
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
log.Println("Tanggal :", tanggal)
|
||||||
|
if res == nil {
|
||||||
|
log.Println("Skip Proses")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
jadwalLibur, isLibur, errLibur := jadwal.GetJadwalLibur(tanggal)
|
||||||
|
if errLibur != nil {
|
||||||
|
log.Println(errLibur)
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
if isLibur {
|
||||||
|
tanggalTemp, errParseTemp := time.Parse("2006-01-02", tanggal)
|
||||||
|
if errParseTemp != nil {
|
||||||
|
log.Println(errParseTemp)
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
isLibur = false
|
||||||
|
log.Println(jadwalLibur.NamaLiburPelayanan)
|
||||||
|
tanggalTemp = tanggalTemp.AddDate(0, 0, 7)
|
||||||
|
tanggalTempString := tanggalTemp.Format("2006-01-02")
|
||||||
|
log.Println(tanggalTempString)
|
||||||
|
paramLibur := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggalTempString
|
||||||
|
linkUrl := url + paramLibur
|
||||||
|
resNew, errRes := JadwalDokterGetResponse(linkUrl, header, headers)
|
||||||
|
if errRes != nil {
|
||||||
|
log.Println("Error making external API request: ", errRes)
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
if resNew != nil {
|
||||||
|
for _, v := range resNew.Response {
|
||||||
|
res.Response = append(res.Response, &jadwal_dokter.ListDokter{
|
||||||
|
KodeSubspesialis: v.KodeSubspesialis,
|
||||||
|
Hari: v.Hari,
|
||||||
|
KapasitasPasien: v.KapasitasPasien,
|
||||||
|
Libur: v.Libur,
|
||||||
|
NamaHari: v.NamaHari,
|
||||||
|
Jadwal: v.Jadwal,
|
||||||
|
NamaSubspesialis: v.NamaSubspesialis,
|
||||||
|
NamaDokter: v.NamaDokter,
|
||||||
|
KodePoli: v.KodePoli,
|
||||||
|
NamaPoli: v.NamaPoli,
|
||||||
|
KodeDokter: v.KodeDokter,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Println("Tidak ada data pada tanggal ", tanggalTempString)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, v := range res.Response {
|
||||||
|
idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis)
|
||||||
|
idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis)
|
||||||
|
idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter)
|
||||||
|
reqInsert = &jadwal_dokter.JadwalDokterSatuData{
|
||||||
|
Hari: v.Hari,
|
||||||
|
NamaHari: v.NamaHari,
|
||||||
|
Waktu: v.Jadwal,
|
||||||
|
Dokter: idDokter,
|
||||||
|
Spesialis: idSpesialis,
|
||||||
|
SubSpesialis: idSubspesialis,
|
||||||
|
Status: 1, // When available always set to 1
|
||||||
|
}
|
||||||
|
if reqInsert.Dokter != "" {
|
||||||
|
errInsert := dokter.InsertJadwalDokter(reqInsert)
|
||||||
|
if errInsert != nil {
|
||||||
|
log.Println(errInsert)
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
reqInsert.Dokter = strconv.Itoa(v.KodeDokter)
|
||||||
|
errInsertTemp := dokter.InsertJadwalDokterTemp(reqInsert)
|
||||||
|
if errInsertTemp != nil {
|
||||||
|
log.Println(errInsertTemp)
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
response = append(response, reqInsert)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, response)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDokterByDPJP(c *gin.Context) {
|
||||||
|
dpjp := c.Param("dpjp")
|
||||||
|
idDokter, err := dokter.GetJadwalDokterByDPJP(dpjp)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
listHari, err := dokter.GetJadwalHariDokterBySpesialis(idDokter)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var IDDokter []string
|
||||||
|
var idSubspesialis int
|
||||||
|
for _, v := range listHari {
|
||||||
|
IDDokter = append(IDDokter, v.Dokter)
|
||||||
|
idSubspesialis = v.SubSpesialis
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
namaDokter, err := dokter.GetNamaLengkapDokter(IDDokter)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
listSubspesialis, err := dokter.GetSubspesialisByID(idSubspesialis)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var res *jadwal_dokter.ResponseListHari
|
||||||
|
|
||||||
|
for _, k := range namaDokter {
|
||||||
|
var jadwalDokter []jadwal_dokter.ListJadwalDokter
|
||||||
|
for _, key := range listHari {
|
||||||
|
jadwalDokter = append(jadwalDokter, jadwal_dokter.ListJadwalDokter{
|
||||||
|
NamaHari: key.NamaHari,
|
||||||
|
KodeHari: key.Hari,
|
||||||
|
Waktu: key.Waktu,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
gelarDepan := utils.ReplaceGelar(k.GelarDepan)
|
||||||
|
gelarBelakang := utils.ReplaceGelar(k.GelarBelakang)
|
||||||
|
namaLengkap := gelarDepan + " " + k.NamaLengkap + " " + gelarBelakang
|
||||||
|
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
|
||||||
|
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
|
||||||
|
hfisCode := strings.TrimSpace(k.HFISCode)
|
||||||
|
res = &jadwal_dokter.ResponseListHari{
|
||||||
|
IDSpesialis: listSubspesialis.IDSpesialis,
|
||||||
|
Kode: listSubspesialis.Kode,
|
||||||
|
Spesialis: listSubspesialis.Spesialis,
|
||||||
|
Subspesialis: listSubspesialis.Subspesialis,
|
||||||
|
IDSubspesialis: listSubspesialis.ID,
|
||||||
|
NamaLengkap: namaLengkap,
|
||||||
|
HFISCode: hfisCode,
|
||||||
|
KodeDPJP: dpjp,
|
||||||
|
JadwalDokter: jadwalDokter,
|
||||||
|
IDDokter: k.ID,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.Println("Response :", res)
|
||||||
|
c.JSON(http.StatusOK, res)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetJadwalSubspesialisByDate(c *gin.Context) {
|
||||||
|
tanggal := c.Param("tanggal")
|
||||||
|
date, err := time.Parse("2006-01-02", tanggal)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("tanggal: ", tanggal)
|
||||||
|
hari := date.Local().Weekday().String()
|
||||||
|
hari = utils.ConvertDay(hari)
|
||||||
|
idsubspesialis, err := dokter.GetJadwalSubspesialisByDate(hari)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
listSpesialis, err := dokter.GetSubspesialisByIDBatch(idsubspesialis)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, listSpesialis)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDokterBySpesialis(c *gin.Context) {
|
||||||
|
spesialis := c.Param("spesialis")
|
||||||
|
tanggal := c.Param("tanggal")
|
||||||
|
date, err := time.Parse("2006-01-02", tanggal)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
hari := date.Local().Weekday().String()
|
||||||
|
hari = utils.ConvertDay(hari)
|
||||||
|
idDokter, err := dokter.GetJadwalDokterBySpesialis(hari, spesialis)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
namaDokter, err := dokter.GetNamaLengkapDokter(idDokter)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
var resDokter []dktr.ResponseDokter
|
||||||
|
idSpesialis, err := strconv.Atoi(spesialis)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
for _, v := range namaDokter {
|
||||||
|
gelarDepan := utils.ReplaceGelar(v.GelarDepan)
|
||||||
|
gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
|
||||||
|
namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang
|
||||||
|
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
|
||||||
|
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
|
||||||
|
resDokter = append(resDokter, dktr.ResponseDokter{
|
||||||
|
ID: v.ID,
|
||||||
|
NamaLengkap: namaLengkap,
|
||||||
|
Spesialis: idSpesialis,
|
||||||
|
HFISCode: v.HFISCode,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
log.Println("Response :", resDokter)
|
||||||
|
c.JSON(http.StatusOK, resDokter)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDokterBySubspesialis(c *gin.Context) {
|
||||||
|
subspesialis := c.Param("subspesialis")
|
||||||
|
tanggal := c.Param("tanggal")
|
||||||
|
date, err := time.Parse("2006-01-02", tanggal)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("subspesialis: ", subspesialis)
|
||||||
|
log.Println("tanggal: ", tanggal)
|
||||||
|
|
||||||
|
hari := date.Local().Weekday().String()
|
||||||
|
hari = utils.ConvertDay(hari)
|
||||||
|
idDokter, err := dokter.GetJadwalDokterBySubpesialis(hari, subspesialis)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
namaDokter, err := dokter.GetNamaLengkapDokter(idDokter)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
var resDokter []dktr.ResponseDokterNew
|
||||||
|
idSubspesialis, err := strconv.Atoi(subspesialis)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
listSubspesialis, err := dokter.GetSubspesialisByID(idSubspesialis)
|
||||||
|
if err != nil {
|
||||||
|
c.JSON(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range namaDokter {
|
||||||
|
gelarDepan := utils.ReplaceGelar(v.GelarDepan)
|
||||||
|
gelarBelakang := utils.ReplaceGelar(v.GelarBelakang)
|
||||||
|
namaLengkap := gelarDepan + " " + v.NamaLengkap + " " + gelarBelakang
|
||||||
|
namaLengkap = strings.TrimPrefix(namaLengkap, " ")
|
||||||
|
namaLengkap = strings.TrimSuffix(namaLengkap, " ")
|
||||||
|
resDokter = append(resDokter, dktr.ResponseDokterNew{
|
||||||
|
ID: v.ID,
|
||||||
|
NamaLengkap: namaLengkap,
|
||||||
|
Subspesialis: idSubspesialis,
|
||||||
|
HFISCode: v.HFISCode,
|
||||||
|
KodePoli: listSubspesialis.Kode,
|
||||||
|
DPJPCode: v.DPJPCode,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
log.Println("Response :", resDokter)
|
||||||
|
c.JSON(http.StatusOK, resDokter)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetDataJadwalDokter() bool {
|
||||||
|
baseUrl := os.Getenv("BASEURL_BPJS")
|
||||||
|
endpoint := os.Getenv("ANTREAN_RS")
|
||||||
|
|
||||||
|
conf := config.ConfigBpjs{}
|
||||||
|
|
||||||
|
spesialis, err := dokter.GetSpesialis()
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error getting spesialis", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
var listIdSpesialis = make(map[string]int)
|
||||||
|
for _, kodeDokter := range spesialis {
|
||||||
|
listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID
|
||||||
|
}
|
||||||
|
|
||||||
|
subspesialis, err := dokter.GetSubspesialis()
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error getting subspesialis", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
var listIdSubspesialis = make(map[string]int)
|
||||||
|
for _, kodeDokter := range subspesialis {
|
||||||
|
listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID
|
||||||
|
}
|
||||||
|
|
||||||
|
listDokter, err := dokter.GetDokter()
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error getting dokter", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
var listIddokter = make(map[int]string)
|
||||||
|
for _, kodeDokter := range listDokter {
|
||||||
|
listIddokter[kodeDokter.HfisCode] = kodeDokter.ID
|
||||||
|
}
|
||||||
|
db := cfg.SatuDataDB
|
||||||
|
errTx := db.Transaction(func(tx *gorm.DB) error {
|
||||||
|
errTruncate := dokter.TruncateDataJadwalDokter()
|
||||||
|
if errTruncate != nil {
|
||||||
|
log.Println(errTruncate)
|
||||||
|
return errTruncate
|
||||||
|
}
|
||||||
|
for _, value := range spesialis {
|
||||||
|
url := baseUrl + endpoint + "/jadwaldokter/kodepoli/" + value.Kode
|
||||||
|
|
||||||
|
header := cfg.SetHeader(false, conf)
|
||||||
|
|
||||||
|
headers := map[string]string{
|
||||||
|
"X-cons-id": header.ConsID,
|
||||||
|
"X-timestamp": header.TimeStamp,
|
||||||
|
"X-signature": header.XSignature,
|
||||||
|
"user_key": header.UserKey,
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("Headers : ", headers)
|
||||||
|
var headerStringBuilder strings.Builder
|
||||||
|
for key, value := range headers {
|
||||||
|
headerStringBuilder.WriteString(fmt.Sprintf("%s: %s; ", key, value))
|
||||||
|
}
|
||||||
|
headerString := strings.TrimSuffix(headerStringBuilder.String(), "; ")
|
||||||
|
|
||||||
|
startDate := time.Now()
|
||||||
|
endDate := startDate.AddDate(0, 3, 0)
|
||||||
|
logTimeStart := time.Now().Format("2006-01-02 15:04:05")
|
||||||
|
var res *jadwal_dokter.JadwalDokter
|
||||||
|
var reqLog []*jadwal_dokter.RequestJadwalDokter
|
||||||
|
var resLog []*jadwal_dokter.JadwalDokter
|
||||||
|
|
||||||
|
for current := startDate; current.Before(endDate); current = current.AddDate(0, 0, 1) {
|
||||||
|
tanggal := current.Format("2006-01-02")
|
||||||
|
log.Println("Tanggal :", tanggal)
|
||||||
|
urlReq := url + "/tanggal/" + tanggal
|
||||||
|
|
||||||
|
res, err = JadwalDokterGetResponse(urlReq, header, headers)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error making external API request: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
reqLog = append(reqLog, &jadwal_dokter.RequestJadwalDokter{
|
||||||
|
KodePoli: value.Kode,
|
||||||
|
Tanggal: tanggal,
|
||||||
|
})
|
||||||
|
|
||||||
|
resLog = append(resLog, &jadwal_dokter.JadwalDokter{
|
||||||
|
Response: res.Response,
|
||||||
|
MetaData: res.MetaData,
|
||||||
|
})
|
||||||
|
|
||||||
|
if res.MetaData.Code != 200 {
|
||||||
|
resLog = append(resLog, &jadwal_dokter.JadwalDokter{
|
||||||
|
Response: res.Response,
|
||||||
|
MetaData: res.MetaData,
|
||||||
|
})
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range res.Response {
|
||||||
|
idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis)
|
||||||
|
idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis)
|
||||||
|
idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter)
|
||||||
|
reqInsert := &jadwal_dokter.DataJadwalDokterSatuData{
|
||||||
|
ID: uuid.NewString(),
|
||||||
|
DateCreated: logTimeStart,
|
||||||
|
Hari: strconv.Itoa(v.Hari),
|
||||||
|
NamaHari: v.NamaHari,
|
||||||
|
Waktu: v.Jadwal,
|
||||||
|
Dokter: idDokter,
|
||||||
|
Spesialis: idSpesialis,
|
||||||
|
SubSpesialis: idSubspesialis,
|
||||||
|
TanggalJadwal: tanggal,
|
||||||
|
}
|
||||||
|
if reqInsert.Dokter != "" {
|
||||||
|
errInsert := dokter.InsertDataJadwalDokter(tx, reqInsert)
|
||||||
|
if errInsert != nil {
|
||||||
|
log.Println(errInsert)
|
||||||
|
return errInsert
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Println("Dokter tidak punya HFIS")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reqLogJson, errMarshal := json.Marshal(reqLog)
|
||||||
|
if errMarshal != nil {
|
||||||
|
log.Println(errMarshal)
|
||||||
|
return errMarshal
|
||||||
|
}
|
||||||
|
resLogJson, errMarshal2 := json.Marshal(resLog)
|
||||||
|
if errMarshal2 != nil {
|
||||||
|
log.Println(errMarshal2)
|
||||||
|
return errMarshal2
|
||||||
|
}
|
||||||
|
logTimeEnd := time.Now().Format("2006-01-02 15:04:05")
|
||||||
|
reqLogApi := &logapi.DataLogAPI{
|
||||||
|
ID: uuid.NewString(),
|
||||||
|
DateCreated: logTimeEnd,
|
||||||
|
Parameter: "BPJS-AntreanRS-JadwalDokter",
|
||||||
|
Header: headerString,
|
||||||
|
Method: "GET",
|
||||||
|
Url: url,
|
||||||
|
Request: reqLogJson,
|
||||||
|
Respon: resLogJson,
|
||||||
|
ResponCode: strconv.Itoa(res.MetaData.Code),
|
||||||
|
ResponTimeStart: logTimeStart,
|
||||||
|
ResponTimeEnd: logTimeEnd,
|
||||||
|
Comment: res.MetaData.Message,
|
||||||
|
}
|
||||||
|
errLog := log_api.InsertLogAPI(reqLogApi)
|
||||||
|
if errLog != nil {
|
||||||
|
log.Printf("Error making external API request: %v", err)
|
||||||
|
return errLog
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
if errTx != nil {
|
||||||
|
log.Println(errTx)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
log.Println("Berhasil ambil jadwal data dokter")
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetJadwalDokterNew() bool {
|
||||||
|
baseUrl := os.Getenv("BASEURL_BPJS")
|
||||||
|
endpoint := os.Getenv("ANTREAN_RS")
|
||||||
|
url := baseUrl + endpoint
|
||||||
|
|
||||||
|
errTruncate := dokter.DeleteJadwalDokter()
|
||||||
|
if errTruncate != nil {
|
||||||
|
log.Println(errTruncate)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
errTruncateTemp := dokter.DeleteJadwalDokterTemp()
|
||||||
|
if errTruncateTemp != nil {
|
||||||
|
log.Println(errTruncateTemp)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select from daftar spesialis
|
||||||
|
spesialis, err := dokter.GetSpesialis()
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
var listIdSpesialis = make(map[string]int)
|
||||||
|
for _, kodeDokter := range spesialis {
|
||||||
|
listIdSpesialis[kodeDokter.Kode] = kodeDokter.ID
|
||||||
|
}
|
||||||
|
|
||||||
|
subspesialis, err := dokter.GetSubspesialis()
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
var listIdSubspesialis = make(map[string]int)
|
||||||
|
for _, kodeDokter := range subspesialis {
|
||||||
|
listIdSubspesialis[kodeDokter.Kode] = kodeDokter.ID
|
||||||
|
}
|
||||||
|
|
||||||
|
listDokter, err := dokter.GetDokter()
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
var listIddokter = make(map[int]string)
|
||||||
|
for _, kodeDokter := range listDokter {
|
||||||
|
listIddokter[kodeDokter.HfisCode] = kodeDokter.ID
|
||||||
|
}
|
||||||
|
|
||||||
|
var reqInsert *jadwal_dokter.JadwalDokterSatuData
|
||||||
|
|
||||||
|
for _, value := range spesialis {
|
||||||
|
|
||||||
|
tanggal := time.Now().Format("2006-01-02")
|
||||||
|
// tanggal := "2025-04-11"
|
||||||
|
for i := 0; i < 7; i++ {
|
||||||
|
conf := config.ConfigBpjs{}
|
||||||
|
|
||||||
|
header := cfg.SetHeader(false, conf)
|
||||||
|
|
||||||
|
headers := map[string]string{
|
||||||
|
"X-cons-id": header.ConsID,
|
||||||
|
"X-timestamp": header.TimeStamp,
|
||||||
|
"X-signature": header.XSignature,
|
||||||
|
"user_key": header.UserKey,
|
||||||
|
}
|
||||||
|
kdPoly := value.Kode
|
||||||
|
param := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggal
|
||||||
|
linkurl := url + param
|
||||||
|
res, err := JadwalDokterGetResponseApi(linkurl, header, headers)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("Error making external API request: %v", err)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
date, errParse := time.Parse("2006-01-02", tanggal)
|
||||||
|
if errParse != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
tanggal = date.AddDate(0, 0, 1).Format("2006-01-02")
|
||||||
|
log.Println("Tanggal :", tanggal)
|
||||||
|
if res == nil {
|
||||||
|
log.Println("Skip Proses")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
jadwalLibur, isLibur, errLibur := jadwal.GetJadwalLibur(tanggal)
|
||||||
|
if errLibur != nil {
|
||||||
|
log.Println(errLibur)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if isLibur {
|
||||||
|
tanggalTemp, errParseTemp := time.Parse("2006-01-02", tanggal)
|
||||||
|
if errParseTemp != nil {
|
||||||
|
log.Println(errParseTemp)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
isLibur = false
|
||||||
|
for i := 0; i < 7; i++ {
|
||||||
|
log.Println(jadwalLibur.NamaLiburPelayanan)
|
||||||
|
tanggalTemp = tanggalTemp.AddDate(0, 0, 7)
|
||||||
|
tanggalTempString := tanggalTemp.Format("2006-01-02")
|
||||||
|
log.Println(tanggalTempString)
|
||||||
|
paramLibur := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggalTempString
|
||||||
|
linkUrl := url + paramLibur
|
||||||
|
resNew, errRes := JadwalDokterGetResponseApi(linkUrl, header, headers)
|
||||||
|
if errRes != nil {
|
||||||
|
log.Println("Error making external API request: ", errRes)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
if resNew != nil {
|
||||||
|
for _, v := range resNew {
|
||||||
|
res = append(res, &jadwal_dokter.ListDokter{
|
||||||
|
KodeSubspesialis: v.KodeSubspesialis,
|
||||||
|
Hari: v.Hari,
|
||||||
|
KapasitasPasien: v.KapasitasPasien,
|
||||||
|
Libur: v.Libur,
|
||||||
|
NamaHari: v.NamaHari,
|
||||||
|
Jadwal: v.Jadwal,
|
||||||
|
NamaSubspesialis: v.NamaSubspesialis,
|
||||||
|
NamaDokter: v.NamaDokter,
|
||||||
|
KodePoli: v.KodePoli,
|
||||||
|
NamaPoli: v.NamaPoli,
|
||||||
|
KodeDokter: v.KodeDokter,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
log.Println("Ada data pada tanggal ", tanggalTempString)
|
||||||
|
break
|
||||||
|
} else {
|
||||||
|
log.Println("Tidak ada data pada tanggal ", tanggalTempString)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, v := range res {
|
||||||
|
idSpesialis := utils.KodeToIDConverter(v.KodePoli, listIdSpesialis)
|
||||||
|
idSubspesialis := utils.KodeToIDConverter(v.KodeSubspesialis, listIdSubspesialis)
|
||||||
|
idDokter := utils.HfisCodeToIDConverter(v.KodeDokter, listIddokter)
|
||||||
|
reqInsert = &jadwal_dokter.JadwalDokterSatuData{
|
||||||
|
Hari: v.Hari,
|
||||||
|
NamaHari: v.NamaHari,
|
||||||
|
Waktu: v.Jadwal,
|
||||||
|
Dokter: idDokter,
|
||||||
|
Spesialis: idSpesialis,
|
||||||
|
SubSpesialis: idSubspesialis,
|
||||||
|
Status: 1, // When available always set to 1
|
||||||
|
}
|
||||||
|
if reqInsert.Dokter != "" {
|
||||||
|
errInsert := dokter.InsertJadwalDokter(reqInsert)
|
||||||
|
if errInsert != nil {
|
||||||
|
log.Println(errInsert)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
reqInsert.Dokter = strconv.Itoa(v.KodeDokter)
|
||||||
|
errInsertTemp := dokter.InsertJadwalDokterTemp(reqInsert)
|
||||||
|
if errInsertTemp != nil {
|
||||||
|
log.Println(errInsertTemp)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
package jadwal_dokter
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/docs"
|
||||||
|
"bridging-rssa/models/bpjs/jadwal_dokter"
|
||||||
|
"bridging-rssa/models/config"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func JadwalDokterGetResponse(url string, header *config.Header, headers map[string]string) (*jadwal_dokter.JadwalDokter, error) {
|
||||||
|
log.Println("URL", url)
|
||||||
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error creating request: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, value := range headers {
|
||||||
|
req.Header.Set(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQ", req.Header)
|
||||||
|
client := http.Client{}
|
||||||
|
response, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error making external API request: %v", err)
|
||||||
|
}
|
||||||
|
log.Println("RESPONSE: ", response)
|
||||||
|
|
||||||
|
key := header.ConsID + header.SecretKey + header.TimeStamp
|
||||||
|
res, err := io.ReadAll(response.Body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var jadwalDokterRaw jadwal_dokter.JadwalDokterRaw
|
||||||
|
err = json.Unmarshal([]byte(res), &jadwalDokterRaw)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Unmarshaling: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
responses := &jadwal_dokter.JadwalDokter{}
|
||||||
|
if jadwalDokterRaw.MetaData.Code != 200 {
|
||||||
|
responses.MetaData.Code = jadwalDokterRaw.MetaData.Code
|
||||||
|
responses.MetaData.Message = jadwalDokterRaw.MetaData.Message
|
||||||
|
log.Println("No Data Found")
|
||||||
|
return responses, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
dataResp, err := docs.StringDecrypt(key, jadwalDokterRaw.Response)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decrypt: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var listDokter []*jadwal_dokter.ListDokter
|
||||||
|
|
||||||
|
log.Println("dataresp: ", dataResp)
|
||||||
|
|
||||||
|
err = json.Unmarshal([]byte(dataResp), &listDokter)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decode: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("res: ", &listDokter)
|
||||||
|
responses = &jadwal_dokter.JadwalDokter{
|
||||||
|
Response: listDokter,
|
||||||
|
MetaData: jadwalDokterRaw.MetaData,
|
||||||
|
}
|
||||||
|
|
||||||
|
return responses, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func JadwalDokterGetResponseApi(url string, header *config.Header, headers map[string]string) ([]*jadwal_dokter.ListDokter, error) {
|
||||||
|
log.Println("URL", url)
|
||||||
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error creating request: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, value := range headers {
|
||||||
|
req.Header.Set(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQ", req.Header)
|
||||||
|
client := http.Client{}
|
||||||
|
response, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error making external API request: %v", err)
|
||||||
|
}
|
||||||
|
log.Println("RESPONSE: ", response)
|
||||||
|
|
||||||
|
key := header.ConsID + header.SecretKey + header.TimeStamp
|
||||||
|
res, err := io.ReadAll(response.Body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var jadwalDokterRaw jadwal_dokter.JadwalDokterRaw
|
||||||
|
err = json.Unmarshal([]byte(res), &jadwalDokterRaw)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Unmarshaling: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if jadwalDokterRaw.MetaData.Code == 201 {
|
||||||
|
log.Println("No Data Found")
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
dataResp, err := docs.StringDecrypt(key, jadwalDokterRaw.Response)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decrypt: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var listDokter []*jadwal_dokter.ListDokter
|
||||||
|
|
||||||
|
log.Println("dataresp: ", dataResp)
|
||||||
|
|
||||||
|
err = json.Unmarshal([]byte(dataResp), &listDokter)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decode: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("res: ", &listDokter)
|
||||||
|
|
||||||
|
return listDokter, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package bpjs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/config"
|
||||||
|
"bridging-rssa/models/dokter"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetAllSubspesialis(c *gin.Context) {
|
||||||
|
var subspesialis []dokter.DaftarSubspesialis
|
||||||
|
result := config.SatuDataDB.Debug().Raw(`SELECT * FROM "daftar_subspesialis"`).Find(&subspesialis)
|
||||||
|
if result.Error != nil {
|
||||||
|
if result.Error == gorm.ErrRecordNotFound {
|
||||||
|
c.JSON(http.StatusNotFound, result.Error)
|
||||||
|
} else {
|
||||||
|
c.JSON(http.StatusInternalServerError, result.Error)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.JSON(http.StatusOK, subspesialis)
|
||||||
|
}
|
||||||
@@ -0,0 +1,415 @@
|
|||||||
|
package suratkontrol
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bridging-rssa/docs"
|
||||||
|
suratkontrol "bridging-rssa/models/bpjs/surat_kontrol"
|
||||||
|
"bridging-rssa/models/config"
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func PostData(url string, header *config.Header, headers map[string]string, request *suratkontrol.RequestHeaderRencanaKontrol) (*suratkontrol.Response, error) {
|
||||||
|
log.Println("URL", url)
|
||||||
|
|
||||||
|
reqMarshall, err := json.Marshal(request)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error json marshal: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQUEST: ", string(reqMarshall))
|
||||||
|
|
||||||
|
req, err := http.NewRequest("POST", url, bytes.NewReader(reqMarshall))
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error creating request: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, value := range headers {
|
||||||
|
req.Header.Set(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQ", req.Header)
|
||||||
|
client := http.Client{}
|
||||||
|
|
||||||
|
responses := &suratkontrol.Response{}
|
||||||
|
response, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
responses.MetaData.Code = "203"
|
||||||
|
responses.MetaData.Message = err.Error()
|
||||||
|
log.Printf("Error making external API request: %v", err)
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
return responses, err
|
||||||
|
}
|
||||||
|
log.Println("RESPONSE: ", response)
|
||||||
|
|
||||||
|
if response.StatusCode == http.StatusGatewayTimeout { // 504
|
||||||
|
errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi")
|
||||||
|
log.Printf("error : %v", errMsg)
|
||||||
|
responses.MetaData.Code = "504"
|
||||||
|
responses.MetaData.Message = errMsg.Error()
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
return responses, errMsg
|
||||||
|
}
|
||||||
|
|
||||||
|
key := header.ConsID + header.SecretKey + header.TimeStamp
|
||||||
|
res, err := io.ReadAll(response.Body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("Res:", string(res))
|
||||||
|
|
||||||
|
var resSuratKontrolRaw suratkontrol.ResponseRaw
|
||||||
|
err = json.Unmarshal([]byte(string(res)), &resSuratKontrolRaw)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Unmarshaling: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("ResponseRaw : ", resSuratKontrolRaw)
|
||||||
|
|
||||||
|
if resSuratKontrolRaw.MetaData.Code != "200" {
|
||||||
|
if resSuratKontrolRaw.MetaData.Message == "Gagal simpan! Nomor SEP Sudah pernah digunakan!." {
|
||||||
|
message := "Gagal simpan! Nomor SEP pernah diterbitkan Surat Kontrol!."
|
||||||
|
resSuratKontrolRaw.MetaData.Message = message
|
||||||
|
log.Println("masuk sini kan")
|
||||||
|
} else if resSuratKontrolRaw.MetaData.Message == "Gagal simpan! Poli Tujuan Kontrol tidak sama dengan Poli Asal Rujukan Awal." {
|
||||||
|
message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal"
|
||||||
|
resSuratKontrolRaw.MetaData.Message = message
|
||||||
|
}
|
||||||
|
log.Printf("error : %v", resSuratKontrolRaw.MetaData.Message)
|
||||||
|
responses.MetaData.Code = resSuratKontrolRaw.MetaData.Code
|
||||||
|
responses.MetaData.Message = resSuratKontrolRaw.MetaData.Message
|
||||||
|
errMsg := errors.New(resSuratKontrolRaw.MetaData.Message)
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
return responses, errMsg
|
||||||
|
}
|
||||||
|
|
||||||
|
dataResp, err := docs.StringDecrypt(key, resSuratKontrolRaw.Response)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decrypt: %v", err)
|
||||||
|
log.Println("res: ", dataResp)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var resSuratKontrol suratkontrol.ResponseSuratKontrol
|
||||||
|
|
||||||
|
log.Println("dataresp: ", dataResp)
|
||||||
|
|
||||||
|
err = json.Unmarshal([]byte(dataResp), &resSuratKontrol)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decode: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
responses = &suratkontrol.Response{
|
||||||
|
MetaData: resSuratKontrolRaw.MetaData,
|
||||||
|
Response: resSuratKontrol,
|
||||||
|
}
|
||||||
|
|
||||||
|
return responses, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ResponseUpdateSuratKontrol(url string, header *config.Header, headers map[string]string, request *suratkontrol.RequestHeaderRencanaKontrol) (*suratkontrol.Response, error) {
|
||||||
|
log.Println("URL", url)
|
||||||
|
|
||||||
|
reqMarshall, err := json.Marshal(request)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error json marshal: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQUEST: ", string(reqMarshall))
|
||||||
|
|
||||||
|
req, err := http.NewRequest("PUT", url, bytes.NewReader(reqMarshall))
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error creating request: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, value := range headers {
|
||||||
|
req.Header.Set(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQ", req.Header)
|
||||||
|
client := http.Client{}
|
||||||
|
responses := &suratkontrol.Response{}
|
||||||
|
response, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
responses.MetaData.Code = "504"
|
||||||
|
responses.MetaData.Message = err.Error()
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
log.Printf("Error making external API request: %v", err)
|
||||||
|
return responses, err
|
||||||
|
}
|
||||||
|
log.Println("RESPONSE: ", response)
|
||||||
|
|
||||||
|
if response.StatusCode == http.StatusGatewayTimeout { // 504
|
||||||
|
errMsg := errors.New("Koneksi BPJS Terputus, Silahkan Coba Lagi")
|
||||||
|
log.Printf("error : %v", errMsg)
|
||||||
|
responses.MetaData.Code = "504"
|
||||||
|
responses.MetaData.Message = errMsg.Error()
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
return responses, err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("RESPONSE: ", response)
|
||||||
|
|
||||||
|
key := header.ConsID + header.SecretKey + header.TimeStamp
|
||||||
|
res, err := io.ReadAll(response.Body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var resSuratKontrolRaw suratkontrol.ResponseRawUpper
|
||||||
|
err = json.Unmarshal([]byte(res), &resSuratKontrolRaw)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Unmarshaling: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if resSuratKontrolRaw.MetaData.Code != "200" {
|
||||||
|
if resSuratKontrolRaw.MetaData.Message == "Gagal simpan! Nomor SEP Sudah pernah digunakan!." {
|
||||||
|
message := "Gagal simpan! Nomor SEP pernah diterbitkan Surat Kontrol!."
|
||||||
|
resSuratKontrolRaw.MetaData.Message = message
|
||||||
|
log.Println("masuk sini kan")
|
||||||
|
} else if strings.Contains(strings.ToLower(resSuratKontrolRaw.MetaData.Message), "gagal simpan") {
|
||||||
|
message := "Surat kontrol gagal diterbitkan, pastikan klinik tujuan sama dengan klinik asal pada rujukan awal"
|
||||||
|
resSuratKontrolRaw.MetaData.Message = message
|
||||||
|
}
|
||||||
|
log.Printf("error : %v", resSuratKontrolRaw.MetaData.Message)
|
||||||
|
responses.MetaData.Code = resSuratKontrolRaw.MetaData.Code
|
||||||
|
responses.MetaData.Message = resSuratKontrolRaw.MetaData.Message
|
||||||
|
errMsg := errors.New(resSuratKontrolRaw.MetaData.Message)
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
return responses, errMsg
|
||||||
|
}
|
||||||
|
|
||||||
|
dataResp, err := docs.StringDecrypt(key, resSuratKontrolRaw.Response)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decrypt: %v", err)
|
||||||
|
log.Println("res: ", dataResp)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var resSuratKontrol *suratkontrol.ResponseSuratKontrol
|
||||||
|
|
||||||
|
log.Println("dataresp: ", dataResp)
|
||||||
|
|
||||||
|
err = json.Unmarshal([]byte(dataResp), &resSuratKontrol)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decode: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
responses = &suratkontrol.Response{
|
||||||
|
MetaData: resSuratKontrolRaw.MetaData,
|
||||||
|
Response: *resSuratKontrol,
|
||||||
|
}
|
||||||
|
|
||||||
|
return responses, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ResponseDeleteSuratKontrol(url string, header *config.Header, headers map[string]string, request *suratkontrol.RequestHeaderRencanaKontrol) (*suratkontrol.Response, error) {
|
||||||
|
log.Println("URL", url)
|
||||||
|
|
||||||
|
reqMarshall, err := json.Marshal(request)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error json marshal: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQUEST: ", string(reqMarshall))
|
||||||
|
|
||||||
|
req, err := http.NewRequest("DELETE", url, bytes.NewReader(reqMarshall))
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error creating request: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, value := range headers {
|
||||||
|
req.Header.Set(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQ", req.Header)
|
||||||
|
client := http.Client{}
|
||||||
|
response, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error making external API request: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
log.Println("RESPONSE: ", response)
|
||||||
|
|
||||||
|
res, err := io.ReadAll(response.Body)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var resSuratKontrolRaw suratkontrol.ResponseRawUpper
|
||||||
|
err = json.Unmarshal([]byte(res), &resSuratKontrolRaw)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Unmarshaling: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
responses := &suratkontrol.Response{}
|
||||||
|
if resSuratKontrolRaw.MetaData.Code != "200" {
|
||||||
|
errMsg := errors.New(resSuratKontrolRaw.MetaData.Message)
|
||||||
|
log.Printf("error : %v", errMsg)
|
||||||
|
responses.MetaData.Code = resSuratKontrolRaw.MetaData.Code
|
||||||
|
responses.MetaData.Message = resSuratKontrolRaw.MetaData.Message
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
return responses, errMsg
|
||||||
|
}
|
||||||
|
|
||||||
|
responses = &suratkontrol.Response{
|
||||||
|
MetaData: resSuratKontrolRaw.MetaData,
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("res: ", responses)
|
||||||
|
|
||||||
|
return responses, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ResponseGetNomorSuratKontrol(url string, header *config.Header, headers map[string]string) (*suratkontrol.ResponseGetSuratKontrol, error) {
|
||||||
|
log.Println("URL", url)
|
||||||
|
|
||||||
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error creating request: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, value := range headers {
|
||||||
|
req.Header.Set(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQ", req.Header)
|
||||||
|
client := http.Client{}
|
||||||
|
response, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error making external API request: %v", err)
|
||||||
|
}
|
||||||
|
log.Println("RESPONSE: ", response)
|
||||||
|
|
||||||
|
key := header.ConsID + header.SecretKey + header.TimeStamp
|
||||||
|
res, err := io.ReadAll(response.Body)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
log.Println("res: ", string(res))
|
||||||
|
|
||||||
|
var resNoSuratKontrolRaw suratkontrol.ResponseRawUpper
|
||||||
|
err = json.Unmarshal([]byte(string(res)), &resNoSuratKontrolRaw)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Unmarshaling: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
responses := &suratkontrol.ResponseGetSuratKontrol{}
|
||||||
|
if resNoSuratKontrolRaw.MetaData.Code != "200" {
|
||||||
|
errMsg := errors.New(resNoSuratKontrolRaw.MetaData.Message)
|
||||||
|
log.Printf("error : %v", errMsg)
|
||||||
|
responses.MetaData.Code = resNoSuratKontrolRaw.MetaData.Code
|
||||||
|
responses.MetaData.Message = resNoSuratKontrolRaw.MetaData.Message
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
return responses, errMsg
|
||||||
|
}
|
||||||
|
|
||||||
|
dataResp, err := docs.StringDecrypt(key, resNoSuratKontrolRaw.Response)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decrypt: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("dataresp: ", dataResp)
|
||||||
|
|
||||||
|
var responseNoSuratKontrol suratkontrol.ResponseNomorSuratKontrol
|
||||||
|
err = json.Unmarshal([]byte(dataResp), &responseNoSuratKontrol)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decode: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
responses = &suratkontrol.ResponseGetSuratKontrol{
|
||||||
|
MetaData: resNoSuratKontrolRaw.MetaData,
|
||||||
|
Response: responseNoSuratKontrol,
|
||||||
|
}
|
||||||
|
log.Println("res: ", responses)
|
||||||
|
|
||||||
|
return responses, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ResponseGetSuratKontrolBySEP(url string, header *config.Header, headers map[string]string) (*suratkontrol.ResponseGetSuratKontrolBySEP, error) {
|
||||||
|
log.Println("URL", url)
|
||||||
|
|
||||||
|
req, err := http.NewRequest("GET", url, nil)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error creating request: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
for key, value := range headers {
|
||||||
|
req.Header.Set(key, value)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("REQ", req.Header)
|
||||||
|
client := http.Client{}
|
||||||
|
response, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error making external API request: %v", err)
|
||||||
|
}
|
||||||
|
log.Println("RESPONSE: ", response)
|
||||||
|
|
||||||
|
key := header.ConsID + header.SecretKey + header.TimeStamp
|
||||||
|
res, err := io.ReadAll(response.Body)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var resSurKonSEP suratkontrol.ResponseRawUpper
|
||||||
|
err = json.Unmarshal([]byte(string(res)), &resSurKonSEP)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Unmarshaling: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
responses := &suratkontrol.ResponseGetSuratKontrolBySEP{}
|
||||||
|
if resSurKonSEP.MetaData.Code != "200" {
|
||||||
|
errMsg := errors.New(resSurKonSEP.MetaData.Message)
|
||||||
|
log.Printf("error : %v", errMsg)
|
||||||
|
responses.MetaData.Code = resSurKonSEP.MetaData.Code
|
||||||
|
responses.MetaData.Message = resSurKonSEP.MetaData.Message
|
||||||
|
log.Println("responses: ", responses)
|
||||||
|
return responses, errMsg
|
||||||
|
}
|
||||||
|
|
||||||
|
dataResp, err := docs.StringDecrypt(key, resSurKonSEP.Response)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decrypt: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var responseNoSuratKontrol suratkontrol.ResponseSuratKontrolBySEP
|
||||||
|
log.Println("dataresp: ", dataResp)
|
||||||
|
|
||||||
|
err = json.Unmarshal([]byte(dataResp), &responseNoSuratKontrol)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error Decode: %v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("res: ", resSurKonSEP)
|
||||||
|
|
||||||
|
responses = &suratkontrol.ResponseGetSuratKontrolBySEP{
|
||||||
|
MetaData: resSurKonSEP.MetaData,
|
||||||
|
Response: responseNoSuratKontrol,
|
||||||
|
}
|
||||||
|
|
||||||
|
return responses, nil
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,39 @@
|
|||||||
|
package Vclaim
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/hmac"
|
||||||
|
"crypto/sha256"
|
||||||
|
"encoding/base64"
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ConfigBpjs struct {
|
||||||
|
Cons_id string
|
||||||
|
Secret_key string
|
||||||
|
User_key string
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetHeader(cfg ConfigBpjs) (string, string, string, string, string) {
|
||||||
|
|
||||||
|
timenow := time.Now().UTC()
|
||||||
|
t, err := time.Parse(time.RFC3339, "1970-01-01T00:00:00Z")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
tstamp := timenow.Unix() - t.Unix()
|
||||||
|
secret := []byte(cfg.Secret_key)
|
||||||
|
message := []byte(cfg.Cons_id + "&" + fmt.Sprint(tstamp))
|
||||||
|
hash := hmac.New(sha256.New, secret)
|
||||||
|
hash.Write(message)
|
||||||
|
// to lowercase hexits
|
||||||
|
hex.EncodeToString(hash.Sum(nil))
|
||||||
|
// to base64
|
||||||
|
X_signature := base64.StdEncoding.EncodeToString(hash.Sum(nil))
|
||||||
|
|
||||||
|
return cfg.Cons_id, cfg.Secret_key, cfg.User_key, fmt.Sprint(tstamp), X_signature
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package Vclaim
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/aes"
|
||||||
|
"crypto/cipher"
|
||||||
|
"crypto/sha256"
|
||||||
|
"encoding/base64"
|
||||||
|
"errors"
|
||||||
|
"bridging-rssa/docs"
|
||||||
|
|
||||||
|
lzstring "github.com/daku10/go-lz-string"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ResponseVclaim(encrypted string, key string) (string, error) {
|
||||||
|
|
||||||
|
cipherText, err := base64.StdEncoding.DecodeString(encrypted)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
hash := sha256.Sum256([]byte(key))
|
||||||
|
|
||||||
|
block, err := aes.NewCipher(hash[:])
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(cipherText) < aes.BlockSize {
|
||||||
|
return "", errors.New("cipherText too short")
|
||||||
|
}
|
||||||
|
|
||||||
|
iv := hash[:aes.BlockSize]
|
||||||
|
|
||||||
|
if len(cipherText)%aes.BlockSize != 0 {
|
||||||
|
return "", errors.New("cipherText is not a multiple of the block size")
|
||||||
|
}
|
||||||
|
|
||||||
|
mode := cipher.NewCBCDecrypter(block, iv)
|
||||||
|
mode.CryptBlocks(cipherText, cipherText)
|
||||||
|
|
||||||
|
// cipherText, _ = pkcs7.Unpad(cipherText, aes.BlockSize)
|
||||||
|
cipherText = docs.RemovePKCS7Padding(cipherText)
|
||||||
|
data, err := lzstring.DecompressFromEncodedURIComponent(string(cipherText))
|
||||||
|
// data, err := helper.DecompressFromEncodedUriComponent(string(cipherText))
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return data, nil
|
||||||
|
}
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
package Vclaim
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/mashingan/smapping"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Respon_MentahDTO struct {
|
||||||
|
MetaData struct {
|
||||||
|
Code string `json:"code"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
} `json:"metaData"`
|
||||||
|
Response string `json:"response"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Respon_DTO struct {
|
||||||
|
MetaData struct {
|
||||||
|
Code string `json:"code"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
} `json:"metaData"`
|
||||||
|
Response interface{} `json:"response"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetRequest(endpoint string, cfg interface{}) interface{} {
|
||||||
|
|
||||||
|
conf := ConfigBpjs{}
|
||||||
|
|
||||||
|
err := smapping.FillStruct(&conf, smapping.MapFields(&cfg))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed map %v: ", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
cons_id, Secret_key, User_key, tstamp, X_signature := SetHeader(conf)
|
||||||
|
|
||||||
|
req, _ := http.NewRequest("GET", endpoint, nil)
|
||||||
|
|
||||||
|
req.Header.Add("Content-Type", "Application/x-www-form-urlencoded")
|
||||||
|
req.Header.Add("X-cons-id", cons_id)
|
||||||
|
req.Header.Add("X-timestamp", tstamp)
|
||||||
|
req.Header.Add("X-signature", X_signature)
|
||||||
|
req.Header.Add("user_key", User_key)
|
||||||
|
|
||||||
|
res, err := http.DefaultClient.Do(req)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
body, err := io.ReadAll(res.Body)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var resp_mentah Respon_MentahDTO
|
||||||
|
var resp Respon_DTO
|
||||||
|
json.Unmarshal([]byte(body), &resp_mentah)
|
||||||
|
|
||||||
|
resp_decrypt, _ := ResponseVclaim(string(resp_mentah.Response), string(cons_id+Secret_key+tstamp))
|
||||||
|
resp.MetaData = resp_mentah.MetaData
|
||||||
|
json.Unmarshal([]byte(resp_decrypt), &resp.Response)
|
||||||
|
|
||||||
|
return &resp
|
||||||
|
}
|
||||||
|
|
||||||
|
func PostRequest(endpoint string, cfg interface{}, data interface{}) interface{} {
|
||||||
|
|
||||||
|
conf := ConfigBpjs{}
|
||||||
|
|
||||||
|
err := smapping.FillStruct(&conf, smapping.MapFields(&cfg))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed map %v: ", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
cons_id, Secret_key, User_key, tstamp, X_signature := SetHeader(conf)
|
||||||
|
|
||||||
|
var buf bytes.Buffer
|
||||||
|
|
||||||
|
err = json.NewEncoder(&buf).Encode(data)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
req, _ := http.NewRequest("POST", endpoint, &buf)
|
||||||
|
|
||||||
|
req.Header.Add("Content-Type", "Application/x-www-form-urlencoded")
|
||||||
|
req.Header.Add("X-cons-id", cons_id)
|
||||||
|
req.Header.Add("X-timestamp", tstamp)
|
||||||
|
req.Header.Add("X-signature", X_signature)
|
||||||
|
req.Header.Add("user_key", User_key)
|
||||||
|
|
||||||
|
res, err := http.DefaultClient.Do(req)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
body, err := ioutil.ReadAll(res.Body)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
fmt.Println(string(body))
|
||||||
|
var resp_mentah Respon_MentahDTO
|
||||||
|
var resp Respon_DTO
|
||||||
|
json.Unmarshal([]byte(body), &resp_mentah)
|
||||||
|
|
||||||
|
resp_decrypt, _ := ResponseVclaim(string(resp_mentah.Response), string(cons_id+Secret_key+tstamp))
|
||||||
|
resp.MetaData = resp_mentah.MetaData
|
||||||
|
json.Unmarshal([]byte(resp_decrypt), &resp.Response)
|
||||||
|
|
||||||
|
return &resp
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,154 +0,0 @@
|
|||||||
package handlers
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"net/http"
|
|
||||||
"tes-rssa/database"
|
|
||||||
"tes-rssa/models"
|
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
|
||||||
"gorm.io/gorm"
|
|
||||||
)
|
|
||||||
|
|
||||||
func GetUser(w http.ResponseWriter, r *http.Request) {
|
|
||||||
vars := mux.Vars(r)
|
|
||||||
fmt.Println(vars)
|
|
||||||
column := vars["req"]
|
|
||||||
value := r.URL.Query().Get("value")
|
|
||||||
var user []models.User
|
|
||||||
|
|
||||||
query := fmt.Sprintf(`select * from "user" where %s like ?`, column)
|
|
||||||
result := database.DB.Debug().Raw(query, "%"+value+"%").Find(&user)
|
|
||||||
if result.Error != nil {
|
|
||||||
if result.Error == gorm.ErrRecordNotFound {
|
|
||||||
http.Error(w, "User not found", http.StatusNotFound)
|
|
||||||
} else {
|
|
||||||
http.Error(w, result.Error.Error(), http.StatusInternalServerError)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
|
||||||
json.NewEncoder(w).Encode(user)
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetUserId(w http.ResponseWriter, r *http.Request) {
|
|
||||||
params := mux.Vars(r)
|
|
||||||
id := params["id"]
|
|
||||||
|
|
||||||
var user models.User
|
|
||||||
query := `select * from "user" where id = ?`
|
|
||||||
result := database.DB.Debug().Raw(query, id).Find(&user)
|
|
||||||
if result.Error != nil {
|
|
||||||
if result.Error == gorm.ErrRecordNotFound {
|
|
||||||
http.Error(w, "User not found", http.StatusNotFound)
|
|
||||||
} else {
|
|
||||||
http.Error(w, result.Error.Error(), http.StatusInternalServerError)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
|
||||||
json.NewEncoder(w).Encode(user)
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetAllUser(w http.ResponseWriter, r *http.Request) {
|
|
||||||
var users []models.User
|
|
||||||
result := database.DB.Debug().Raw(`SELECT * FROM "user"`).Find(&users)
|
|
||||||
if result.Error != nil {
|
|
||||||
if result.Error == gorm.ErrRecordNotFound {
|
|
||||||
http.Error(w, "Users not found", http.StatusNotFound)
|
|
||||||
} else {
|
|
||||||
http.Error(w, result.Error.Error(), http.StatusInternalServerError)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
|
||||||
json.NewEncoder(w).Encode(users)
|
|
||||||
}
|
|
||||||
|
|
||||||
func CreateUser(w http.ResponseWriter, r *http.Request) {
|
|
||||||
var u models.InsertUser
|
|
||||||
err := json.NewDecoder(r.Body).Decode(&u)
|
|
||||||
if err != nil {
|
|
||||||
http.Error(w, "Invalid request payload", http.StatusBadRequest)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
insertData := &models.InsertUser{
|
|
||||||
Nama: u.Nama,
|
|
||||||
Umur: u.Umur,
|
|
||||||
Alamat: u.Alamat,
|
|
||||||
Agama: u.Agama,
|
|
||||||
JenisKelamin: u.JenisKelamin,
|
|
||||||
}
|
|
||||||
queryInsert := `INSERT INTO "user" (nama, umur, alamat, agama, jenis_kelamin) VALUES (?, ?, ?, ?, ?)`
|
|
||||||
result := database.DB.Debug().Exec(queryInsert, insertData.Nama, insertData.Umur, insertData.Alamat, insertData.Agama, insertData.JenisKelamin)
|
|
||||||
if result.Error != nil {
|
|
||||||
http.Error(w, result.Error.Error(), http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
res := &models.Response{
|
|
||||||
ResponseCode: "00",
|
|
||||||
ResponseMessage: "Berhasil Insert Data",
|
|
||||||
}
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
|
||||||
json.NewEncoder(w).Encode(res)
|
|
||||||
}
|
|
||||||
|
|
||||||
func UpdateUser(w http.ResponseWriter, r *http.Request) {
|
|
||||||
params := mux.Vars(r)
|
|
||||||
id := params["id"]
|
|
||||||
|
|
||||||
var u models.UpdateUser
|
|
||||||
err := json.NewDecoder(r.Body).Decode(&u)
|
|
||||||
if err != nil {
|
|
||||||
http.Error(w, "Invalid request payload", http.StatusBadRequest)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
update := &models.UpdateUser{
|
|
||||||
Nama: u.Nama,
|
|
||||||
Umur: u.Umur,
|
|
||||||
Alamat: u.Alamat,
|
|
||||||
Agama: u.Agama,
|
|
||||||
JenisKelamin: u.JenisKelamin,
|
|
||||||
}
|
|
||||||
res := &models.Response{
|
|
||||||
ResponseCode: "00",
|
|
||||||
ResponseMessage: "Berhasil Update Data",
|
|
||||||
}
|
|
||||||
result := database.DB.Debug().Exec(`UPDATE "user" SET nama = ?, umur = ?, alamat = ?, agama = ?, jenis_kelamin = ? WHERE ID = ?`, update.Nama, update.Umur, update.Alamat, update.Agama, update.JenisKelamin, id)
|
|
||||||
if result.RowsAffected == 0 {
|
|
||||||
res = &models.Response{
|
|
||||||
ResponseCode: "99",
|
|
||||||
ResponseMessage: "Gagal update data",
|
|
||||||
}
|
|
||||||
} else if result.Error != nil {
|
|
||||||
http.Error(w, result.Error.Error(), http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
|
||||||
json.NewEncoder(w).Encode(res)
|
|
||||||
}
|
|
||||||
|
|
||||||
func DeleteUser(w http.ResponseWriter, r *http.Request) {
|
|
||||||
params := mux.Vars(r)
|
|
||||||
id := params["id"]
|
|
||||||
|
|
||||||
result := database.DB.Debug().Exec(`DELETE from "user" where id = ?`, id)
|
|
||||||
if result.Error != nil {
|
|
||||||
http.Error(w, result.Error.Error(), http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
res := &models.Response{
|
|
||||||
ResponseCode: "00",
|
|
||||||
ResponseMessage: "Berhasil Delete Data",
|
|
||||||
}
|
|
||||||
w.Header().Set("Content-Type", "application/json")
|
|
||||||
json.NewEncoder(w).Encode(res)
|
|
||||||
}
|
|
||||||
@@ -1,16 +1,19 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bridging-rssa/config"
|
||||||
|
"bridging-rssa/handlers/bpjs"
|
||||||
|
icare "bridging-rssa/handlers/bpjs/i_care"
|
||||||
|
"bridging-rssa/handlers/bpjs/jadwal_dokter"
|
||||||
|
suratkontrol "bridging-rssa/handlers/bpjs/surat_kontrol"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
|
||||||
"tes-rssa/database"
|
|
||||||
"tes-rssa/ginHandlers"
|
|
||||||
|
|
||||||
_ "tes-rssa/docs"
|
_ "bridging-rssa/docs"
|
||||||
|
|
||||||
|
"github.com/gin-contrib/cors"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/joho/godotenv"
|
"github.com/joho/godotenv"
|
||||||
"github.com/rs/cors"
|
cron "github.com/robfig/cron/v3"
|
||||||
swaggerFiles "github.com/swaggo/files"
|
swaggerFiles "github.com/swaggo/files"
|
||||||
ginSwagger "github.com/swaggo/gin-swagger"
|
ginSwagger "github.com/swaggo/gin-swagger"
|
||||||
)
|
)
|
||||||
@@ -27,34 +30,91 @@ func main() {
|
|||||||
log.Fatal("Error loading .env file")
|
log.Fatal("Error loading .env file")
|
||||||
}
|
}
|
||||||
|
|
||||||
database.ConnectDB()
|
config.ConnectDB()
|
||||||
|
|
||||||
r := gin.Default()
|
r := gin.Default()
|
||||||
|
|
||||||
|
scheduler := cron.New()
|
||||||
|
|
||||||
|
defer scheduler.Stop()
|
||||||
|
|
||||||
|
// SCHEDULE HARIAN
|
||||||
|
scheduler.AddFunc("15 2 * * *", func() {
|
||||||
|
log.Println("=== RUNNING SCHEDULE GET JADWAL DOKTER ===")
|
||||||
|
for {
|
||||||
|
success := jadwal_dokter.GetJadwalDokterNew()
|
||||||
|
if success {
|
||||||
|
log.Println("=== SCHEDULE GET JADWAL DOKTER DONE ===")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
//SCHEDULE TIAP 3 BULAN
|
||||||
|
scheduler.AddFunc("20 2 * * 5", func() {
|
||||||
|
log.Println("=== RUNNING SCHEDULE GET JADWAL DOKTER MONTHLY===")
|
||||||
|
for {
|
||||||
|
success := jadwal_dokter.GetDataJadwalDokter()
|
||||||
|
if success {
|
||||||
|
log.Println("=== SCHEDULE GET JADWAL DOKTER MONTHLY DONE ===")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
go scheduler.Start()
|
||||||
|
|
||||||
v1 := r.Group("/api")
|
v1 := r.Group("/api")
|
||||||
|
|
||||||
user := v1.Group("/user")
|
subspesialis := v1.Group("/subspesialis")
|
||||||
{
|
{
|
||||||
user.GET("/", ginHandlers.GetAllUser)
|
subspesialis.GET("/", bpjs.GetAllSubspesialis)
|
||||||
user.GET("/{id}", ginHandlers.GetUserId)
|
}
|
||||||
user.POST("/create")
|
|
||||||
user.PUT("/update/{id}")
|
//API UNTUK JADWAL DOKTER
|
||||||
user.DELETE("/delete/{id}")
|
jadwalDokter := v1.Group("/jadwaldokter")
|
||||||
|
{
|
||||||
|
jadwalDokter.GET("/date/:tanggal", jadwal_dokter.GetJadwalDokter)
|
||||||
|
jadwalDokter.GET("/dpjp/:dpjp", jadwal_dokter.GetDokterByDPJP)
|
||||||
|
jadwalDokter.GET("/tanggal/:tanggal", jadwal_dokter.GetJadwalSubspesialisByDate)
|
||||||
|
jadwalDokter.GET("/tanggal/:tanggal/spesialis/:spesialis", jadwal_dokter.GetDokterBySpesialis)
|
||||||
|
jadwalDokter.GET("/tanggal/:tanggal/subspesialis/:subspesialis", jadwal_dokter.GetDokterBySubspesialis)
|
||||||
|
}
|
||||||
|
|
||||||
|
// API UNTUK SURAT KONTROL
|
||||||
|
suratKontrol := v1.Group("/suratkontrol")
|
||||||
|
{
|
||||||
|
suratKontrol.GET("/offset/:offset/limit/:limit", suratkontrol.GetDataSurKon)
|
||||||
|
suratKontrol.GET("/idxdaftar/:idxdaftar/tiperawat/:tiperawat", suratkontrol.GetDataSurKonByID)
|
||||||
|
suratKontrol.GET("/noSuratKontrol/:noSuratKontrol", suratkontrol.GetNomorSuratKontrol)
|
||||||
|
suratKontrol.GET("/noSEP/:noSEP", suratkontrol.GetSuratKontrolBySEP)
|
||||||
|
suratKontrol.GET("/printSurKon/:idxdaftar/tiperawat/:tiperawat", suratkontrol.PrintSurKon)
|
||||||
|
suratKontrol.POST("/cari", suratkontrol.CariPasienTPP)
|
||||||
|
suratKontrol.POST("/insert", suratkontrol.InsertSuratKontrol)
|
||||||
|
suratKontrol.PUT("/update", suratkontrol.UpdateSuratKontrol)
|
||||||
|
suratKontrol.POST("/delete", suratkontrol.DeleteSuratKontrol)
|
||||||
|
suratKontrol.GET("/norm/:norm/limit/:limit/offset/:offset", suratkontrol.GethistoribyNorm)
|
||||||
|
}
|
||||||
|
|
||||||
|
iCare := v1.Group("/icare")
|
||||||
|
{
|
||||||
|
iCare.POST("/rs/validate", icare.GetFKRTL)
|
||||||
|
iCare.POST("/pcare/validate", icare.GetFKTP)
|
||||||
}
|
}
|
||||||
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
||||||
err = r.Run()
|
r.POST("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
||||||
|
r.PUT("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
||||||
|
r.DELETE("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
||||||
|
r.Use(cors.New(cors.Config{
|
||||||
|
AllowOrigins: []string{"*"}, // or specific domains like "http://example.com"
|
||||||
|
AllowMethods: []string{"GET", "POST", "PUT", "DELETE"},
|
||||||
|
AllowHeaders: []string{"Origin", "Content-Type"},
|
||||||
|
AllowCredentials: true,
|
||||||
|
}))
|
||||||
|
|
||||||
|
log.Println("JALAN DI PORT : 8080")
|
||||||
|
err = r.Run(":8080")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
c := cors.New(cors.Options{
|
|
||||||
AllowedOrigins: []string{"*"}, // Or specify the domain(s) allowed
|
|
||||||
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE"},
|
|
||||||
AllowedHeaders: []string{"Content-Type"},
|
|
||||||
AllowCredentials: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
handler := c.Handler(r)
|
|
||||||
log.Println("Server berjalan di port 8002")
|
|
||||||
log.Fatal(http.ListenAndServe(":8002", handler))
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package icare
|
||||||
|
|
||||||
|
type ReqICare struct {
|
||||||
|
IDXDaftar string `json:"idxdaftar"`
|
||||||
|
Param string `json:"param"`
|
||||||
|
KodeDokter int `json:"kodedokter"`
|
||||||
|
User string `json:"user"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RequestICare struct {
|
||||||
|
Param string `json:"param"`
|
||||||
|
KodeDokter int `json:"kodedokter"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ReqFKTP struct {
|
||||||
|
Param string `json:"param"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Metadata struct {
|
||||||
|
Code int `json:"code"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Response struct {
|
||||||
|
Url string `json:"url"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseGet struct {
|
||||||
|
Response Response `json:"response"`
|
||||||
|
MetaData Metadata `json:"metaData"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseGetRaw struct {
|
||||||
|
Response string `json:"response"`
|
||||||
|
MetaData Metadata `json:"metaData"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
package jadwal_dokter
|
||||||
|
|
||||||
|
type JadwalDokterRaw struct {
|
||||||
|
Response string `json:"response"`
|
||||||
|
MetaData Metadata `json:"metadata"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type JadwalDokter struct {
|
||||||
|
Response []*ListDokter `json:"response"`
|
||||||
|
MetaData Metadata `json:"metadata"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Metadata struct {
|
||||||
|
Code int `json:"code"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ListDokter struct {
|
||||||
|
KodeSubspesialis string `json:"kodesubspesialis"`
|
||||||
|
Hari int `json:"hari"`
|
||||||
|
KapasitasPasien int `json:"kapasitaspasien"`
|
||||||
|
Libur int `json:"libur"`
|
||||||
|
NamaHari string `json:"namahari"`
|
||||||
|
Jadwal string `json:"jadwal"`
|
||||||
|
NamaSubspesialis string `json:"namasubspesialis"`
|
||||||
|
NamaDokter string `json:"namadokter"`
|
||||||
|
KodePoli string `json:"kodepoli"`
|
||||||
|
NamaPoli string `json:"namapoli"`
|
||||||
|
KodeDokter int `json:"kodedokter"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type DaftarSpesialis struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
Kode string `json:"Kode"`
|
||||||
|
Spesialis string `json:"Spesialis"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type JadwalDokterSatuData struct {
|
||||||
|
ID int `gorm:"column:id" json:"id"`
|
||||||
|
Hari int `gorm:"column:Hari" json:"Hari"`
|
||||||
|
NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"`
|
||||||
|
Waktu string `gorm:"column:Waktu" json:"Waktu"`
|
||||||
|
Dokter string `gorm:"column:Dokter" json:"Dokter"`
|
||||||
|
Spesialis int `gorm:"column:Spesialis" json:"Spesialis"`
|
||||||
|
SubSpesialis int `gorm:"column:Sub_spesialis" json:"Sub_spesialis"`
|
||||||
|
Status int `gorm:"column:Status" json:"Status"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type DataJadwalDokterSatuData struct {
|
||||||
|
ID string `gorm:"column:id" json:"id"`
|
||||||
|
DateCreated string `gorm:"column:date_created" json:"Date_created"`
|
||||||
|
Hari string `gorm:"column:Hari" json:"Hari"`
|
||||||
|
NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"`
|
||||||
|
Waktu string `gorm:"column:Waktu" json:"Waktu"`
|
||||||
|
Dokter string `gorm:"column:Dokter" json:"Dokter"`
|
||||||
|
Spesialis int `gorm:"column:Spesialis" json:"Spesialis"`
|
||||||
|
SubSpesialis int `gorm:"column:Sub_spesialis" json:"Sub_spesialis"`
|
||||||
|
TanggalJadwal string `gorm:"column:Tanggal_jadwal" json:"Tanggal_jadwal"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type JadwalDokterTempSatuData struct {
|
||||||
|
ID int `gorm:"column:id" json:"id"`
|
||||||
|
Hari int `gorm:"column:Hari" json:"Hari"`
|
||||||
|
NamaHari string `gorm:"column:Nama_hari" json:"Nama_hari"`
|
||||||
|
Waktu string `gorm:"column:Waktu" json:"Waktu"`
|
||||||
|
Dokter string `gorm:"column:Dokter" json:"Dokter"`
|
||||||
|
Spesialis string `gorm:"column:Spesialis" json:"Spesialis"`
|
||||||
|
SubSpesialis string `gorm:"column:Sub_spesialis" json:"Sub_spesialis"`
|
||||||
|
Status int `gorm:"column:Status" json:"Status"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseListHari struct {
|
||||||
|
IDSpesialis int `json:"id_spesialis"`
|
||||||
|
Kode string `json:"Kode"`
|
||||||
|
Spesialis string `json:"Spesialis"`
|
||||||
|
Subspesialis string `json:"Subspesialis"`
|
||||||
|
IDSubspesialis int `json:"id_subspesialis"`
|
||||||
|
NamaLengkap string `json:"nama_lengkap"`
|
||||||
|
HFISCode string `json:"HFIS_code"`
|
||||||
|
KodeDPJP string `json:"DPJP_code"`
|
||||||
|
IDDokter string `json:"id_dokter"`
|
||||||
|
JadwalDokter []ListJadwalDokter `json:"Jadwal_dokter"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ListJadwalDokter struct {
|
||||||
|
NamaHari string `json:"Nama_hari"`
|
||||||
|
KodeHari int `json:"Kode_hari"`
|
||||||
|
Waktu string `json:"Waktu"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RequestJadwalDokter struct {
|
||||||
|
KodePoli string `json:"kodepoli"`
|
||||||
|
Tanggal string `json:"tanggal"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package suratkontrol
|
||||||
|
|
||||||
|
type KunjunganPasien struct {
|
||||||
|
ID string `gorm:"column:id" json:"id"`
|
||||||
|
IDXDaftar int `gorm:"column:idxdaftar" json:"idxdaftar"`
|
||||||
|
NomorSEP string `gorm:"column:nomorsep" json:"nomorsep"`
|
||||||
|
NamaKlinik string `gorm:"column:namaklinik" json:"namaklinik"`
|
||||||
|
IDKlinikSimgos string `gorm:"column:idkliniksimgos" json:"idkliniksimgos"`
|
||||||
|
KodeHfisKlinik string `gorm:"column:kodehfisklinik" json:"kodehfisklinik"`
|
||||||
|
NamaDokter string `gorm:"column:namadokter" json:"namadokter"`
|
||||||
|
KodeDokter string `gorm:"column:kodedokter" json:"kodedokter"`
|
||||||
|
KodeHfisDokter string `gorm:"column:kodehfisdokter" json:"kodehfisdokter"`
|
||||||
|
KodeSubspesialis string `gorm:"column:kodesubspesialis" json:"kodesubspesialis"`
|
||||||
|
Subspesialis string `gorm:"column:subspesialis" json:"subspesialis"`
|
||||||
|
Spesialis string `gorm:"column:spesialis" json:"spesialis"`
|
||||||
|
GelarDepan string `gorm:"column:gelardepan" json:"gelardepan"`
|
||||||
|
GelarBelakang string `gorm:"column:gelarbelakang" json:"gelarbelakang"`
|
||||||
|
Ruangan int `gorm:"column:ruangan" json:"ruangan"`
|
||||||
|
DPJP string `gorm:"column:id_dokter" json:"id_dokter"`
|
||||||
|
DiagnosisAkhirKeluar string `gorm:"column:Diagnosis_akhir_keluar" json:"Diagnosis_akhir_keluar"`
|
||||||
|
DisplayDiagnosisAkhirKeluar string `gorm:"column:Display_diagnosis_akhir_keluar" json:"Display_diagnosis_akhir_keluar"`
|
||||||
|
DiagnosisPrimerUtama string `gorm:"column:Diagnosis_primer_utama" json:"Diagnosis_primer_utama"`
|
||||||
|
DisplayDiagnosisPrimerUtama string `gorm:"column:Display_diagnosis_primer_utama" json:"Display_diagnosis_primer_utama"`
|
||||||
|
NomorRM string `gorm:"column:No_rm" json:"No_rm"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,332 @@
|
|||||||
|
package suratkontrol
|
||||||
|
|
||||||
|
type RequestHeaderRencanaKontrol struct {
|
||||||
|
Request interface{} `json:"request"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ReqInsertRencanaKontrol struct {
|
||||||
|
NoSEP string `json:"noSEP"`
|
||||||
|
KodeDokter string `json:"kodeDokter"`
|
||||||
|
PoliKontrol string `json:"poliKontrol"`
|
||||||
|
TglRencanaKontrol string `json:"tglRencanaKontrol"`
|
||||||
|
User string `json:"user"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ReqUpdateRencanaKontrol struct {
|
||||||
|
NoSuratKontrol string `json:"noSuratKontrol"`
|
||||||
|
NoSEP string `json:"noSEP"`
|
||||||
|
KodeDokter string `json:"kodeDokter"`
|
||||||
|
PoliKontrol string `json:"poliKontrol"`
|
||||||
|
TglRencanaKontrol string `json:"tglRencanaKontrol"`
|
||||||
|
User string `json:"user"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RequestInsertRencanaKontrol struct {
|
||||||
|
IDXDaftar string `json:"idxdaftar"`
|
||||||
|
NoSEP string `json:"noSEP"`
|
||||||
|
KodeHFIS string `json:"kodeHFIS"`
|
||||||
|
KodePoli string `json:"kodePoli"`
|
||||||
|
Subspesialis string `json:"subspesialis"`
|
||||||
|
TglRencanaKontrol string `json:"tglRencanaKontrol"`
|
||||||
|
User string `json:"user"`
|
||||||
|
IDDokter string `json:"id_dokter"`
|
||||||
|
KodeDiagnosa string `json:"Kode_diagnosa"`
|
||||||
|
NamaDiagnosa string `json:"Nama_diagnosa"`
|
||||||
|
TipeSurKon string `json:"tipe_surkon"`
|
||||||
|
TipeRawat string `json:"tipe_rawat"`
|
||||||
|
Ruangan string `json:"ruangan"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ReqDeleteRencanaKontrol struct {
|
||||||
|
IDDataSurKon string `json:"id_surat_kontrol"`
|
||||||
|
NomorSurKon string `json:"Nomor_surat_kontrol"`
|
||||||
|
User string `json:"user"`
|
||||||
|
TipeSurKon string `json:"tipe_surkon"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RequestUpdateRencanaKontrol struct {
|
||||||
|
IDXDaftar string `json:"idxdaftar"`
|
||||||
|
IDSurKon string `json:"idSurKon"`
|
||||||
|
IDDokter string `json:"id_dokter"`
|
||||||
|
NoSuratKontrol string `json:"noSuratKontrol"`
|
||||||
|
NoSEP string `json:"noSEP"`
|
||||||
|
KodeHFIS string `json:"kodeHFIS"`
|
||||||
|
KodePoli string `json:"kodePoli"`
|
||||||
|
TglRencanaKontrol string `json:"tglRencanaKontrol"`
|
||||||
|
User string `json:"user"`
|
||||||
|
KodeDiagnosa string `json:"Kode_diagnosa"`
|
||||||
|
NamaDiagnosa string `json:"Nama_diagnosa"`
|
||||||
|
TipeSurKon string `json:"tipe_surkon"`
|
||||||
|
TipeRawat string `json:"tipe_rawat"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type TSuratKontrol struct {
|
||||||
|
RequestDelete RequestDeleteRencanaKontrol `json:"t_suratkontrol"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RequestDeleteRencanaKontrol struct {
|
||||||
|
NoSuratKontrol string `json:"noSuratKontrol"`
|
||||||
|
User string `json:"user"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseRaw struct {
|
||||||
|
Response string `json:"response"`
|
||||||
|
MetaData MetadataString `json:"metadata"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseRawUpper struct {
|
||||||
|
Response string `json:"response"`
|
||||||
|
MetaData MetadataString `json:"metaData"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Metadata struct {
|
||||||
|
Code int `json:"code"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseInsertRaw struct {
|
||||||
|
Response string `json:"response"`
|
||||||
|
MetaData MetadataString `json:"metaData"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MetadataString struct {
|
||||||
|
Code string `json:"code"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseGetSuratKontrol struct {
|
||||||
|
MetaData MetadataString `json:"metaData"`
|
||||||
|
Response ResponseNomorSuratKontrol `json:"response"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseGetSuratKontrolBySEP struct {
|
||||||
|
MetaData MetadataString `json:"metaData"`
|
||||||
|
Response ResponseSuratKontrolBySEP `json:"response"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Response struct {
|
||||||
|
MetaData MetadataString `json:"metadata"`
|
||||||
|
Response ResponseSuratKontrol `json:"response"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseUpper struct {
|
||||||
|
MetaData MetadataString `json:"metaData"`
|
||||||
|
Response ResponseSuratKontrol `json:"response"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseInsertSuratKontrol struct {
|
||||||
|
MetaData MetadataString `json:"metaData"`
|
||||||
|
Response ResponseData `json:"response"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseData struct {
|
||||||
|
NoSuratKontrol string `json:"noSuratKontrol"`
|
||||||
|
TglRencanaKontrol string `json:"tglRencanaKontrol"`
|
||||||
|
NamaDokter string `json:"namaDokter"`
|
||||||
|
NoKartu string `json:"noKartu"`
|
||||||
|
Nama string `json:"nama"`
|
||||||
|
Kelamin string `json:"kelamin"`
|
||||||
|
TglLahir string `json:"tglLahir"`
|
||||||
|
NamaDiagnosa string `json:"namaDiagnosa"`
|
||||||
|
SubSpesialis string `json:"subspesialis"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseSuratKontrol struct {
|
||||||
|
NoSuratKontrol string `json:"noSuratKontrol"`
|
||||||
|
TglRencanaKontrol string `json:"tglRencanaKontrol"`
|
||||||
|
NamaDokter string `json:"namaDokter"`
|
||||||
|
NoKartu string `json:"noKartu"`
|
||||||
|
Nama string `json:"nama"`
|
||||||
|
Kelamin string `json:"kelamin"`
|
||||||
|
TglLahir string `json:"tglLahir"`
|
||||||
|
NamaDiagnosa string `json:"namaDiagnosa"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RequestRencanaKontrol struct {
|
||||||
|
IDXDaftar string `json:"idxdaftar"`
|
||||||
|
NoSEP string `json:"noSEP"`
|
||||||
|
KodeHFIS string `json:"kodeHFIS"`
|
||||||
|
KodePoli string `json:"kodePoli"`
|
||||||
|
TglRencanaKontrol string `json:"tglRencanaKontrol"`
|
||||||
|
User string `json:"user"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseNomorSuratKontrol struct {
|
||||||
|
NoSuratKontrol string `json:"noSuratKontrol"`
|
||||||
|
TglRencanaKontrol string `json:"tglRencanaKontrol"`
|
||||||
|
TglTerbit string `json:"tglTerbit"`
|
||||||
|
JnsKontrol string `json:"jnsKontrol"`
|
||||||
|
PoliTujuan string `json:"poliTujuan"`
|
||||||
|
NamaPoliTujuan string `json:"namaPoliTujuan"`
|
||||||
|
KodeDokter string `json:"kodeDokter"`
|
||||||
|
NamaDokter string `json:"namaDokter"`
|
||||||
|
FlagKontrol string `json:"flagKontrol"`
|
||||||
|
KodeDokterPembuat string `json:"kodeDokterPembuat"`
|
||||||
|
NamaDokterPembuat string `json:"namaDokterPembuat"`
|
||||||
|
NamaJnsKontrol string `json:"namaJnsKontrol"`
|
||||||
|
Sep Sep `json:"sep"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Sep struct {
|
||||||
|
NoSep string `json:"noSep"`
|
||||||
|
TglSep string `json:"tglSep"`
|
||||||
|
JnsPelayanan string `json:"jnsPelayanan"`
|
||||||
|
Poli string `json:"poli"`
|
||||||
|
Diagnosa string `json:"diagnosa"`
|
||||||
|
Peserta Peserta `json:"peserta"`
|
||||||
|
ProvUmum ProvUmum `json:"provUmum"`
|
||||||
|
ProvPerujuk ProvPerujuk `json:"provPerujuk"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Peserta struct {
|
||||||
|
NoKartu string `json:"noKartu"`
|
||||||
|
Nama string `json:"nama"`
|
||||||
|
TglLahir string `json:"tglLahir"`
|
||||||
|
Kelamin string `json:"kelamin"`
|
||||||
|
HakKelas string `json:"hakKelas"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ProvUmum struct {
|
||||||
|
KodeProvider string `json:"kdProvider"`
|
||||||
|
NamaProvider string `json:"nmProvider"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ProvPerujuk struct {
|
||||||
|
KodeProviderPerujuk string `json:"kdProviderPerujuk"`
|
||||||
|
NamaProviderPerujuk string `json:"nmProviderPerujuk"`
|
||||||
|
AsalRujukan string `json:"asalRujukan"`
|
||||||
|
NoRujukan string `json:"noRujukan"`
|
||||||
|
TglRujukan string `json:"tglRujukan"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type DataSuratKontrol struct {
|
||||||
|
ID string `gorm:"column:id" json:"id"`
|
||||||
|
Status string `gorm:"column:status" json:"status"`
|
||||||
|
Sort int `gorm:"column:sort" json:"sort"`
|
||||||
|
UserCreated string `gorm:"column:user_created" json:"user_created"`
|
||||||
|
DateCreated string `gorm:"column:date_created" json:"date_created"`
|
||||||
|
UserUpdated string `gorm:"column:user_updated" json:"user_updated"`
|
||||||
|
DateUpdated string `gorm:"column:date_updated" json:"date_updated"`
|
||||||
|
TglCetakSurKon string `gorm:"column:Tanggal_cetak_surat_kontrol" json:"Tanggal_cetak_surat_kontrol"`
|
||||||
|
TglRencanaKontrol string `gorm:"column:Tanggal_rencana_kontrol" json:"Tanggal_rencana_kontrol"`
|
||||||
|
NomorSurKon string `gorm:"column:Nomor_surat_kontrol" json:"Nomor_surat_kontrol"`
|
||||||
|
KunjunganPasien string `gorm:"column:Kunjungan_pasien" json:"Kunjungan_pasien"`
|
||||||
|
RuanganSurKon int `gorm:"column:Ruangan_surat_kontrol" json:"Ruangan_surat_kontrol"`
|
||||||
|
DPJPSurKon string `gorm:"column:DPJP_surat_kontrol" json:"DPJP_surat_kontrol"`
|
||||||
|
StatusSurKon int `gorm:"column:Status_surat_kontrol" json:"Status_surat_kontrol"`
|
||||||
|
UserCreatedSurKon string `gorm:"column:User_created_surat_kontrol" json:"User_created_surat_kontrol"`
|
||||||
|
TipeSurKon string `gorm:"column:Tipe_surat_kontrol" json:"Tipe_surat_kontrol"`
|
||||||
|
UserUpdatedSurKon string `gorm:"column:User_updated_surat_kontrol" json:"User_updated_surat_kontrol"`
|
||||||
|
TipeRawat string `gorm:"column:Tipe_rawat" json:"Tipe_rawat"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseSuratKontrolBySEP struct {
|
||||||
|
NoSEP string `json:"noSep"`
|
||||||
|
TglSEP string `json:"tglSep"`
|
||||||
|
JenisPelayanan string `json:"jnsPelayanan"`
|
||||||
|
Poli string `json:"poli"`
|
||||||
|
Diagnosa string `json:"diagnosa"`
|
||||||
|
Peserta Peserta `json:"peserta"`
|
||||||
|
ProvUmum ProvUmum `json:"provUmum"`
|
||||||
|
ProvPerujuk ProvPerujuk `json:"provPerujuk"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetDataSuratKontrol struct {
|
||||||
|
IDDataSurKon string `gorm:"column:id" json:"id"`
|
||||||
|
IDXDaftar string `gorm:"column:IDXDAFTAR" json:"IDXDAFTAR"`
|
||||||
|
TglCetakSurKon string `gorm:"column:Tanggal_cetak_surat_kontrol" json:"Tanggal_cetak_surat_kontrol"`
|
||||||
|
TglRencanaKontrol string `gorm:"column:Tanggal_rencana_kontrol" json:"Tanggal_rencana_kontrol"`
|
||||||
|
NomorSurKon string `gorm:"column:Nomor_surat_kontrol" json:"Nomor_surat_kontrol"`
|
||||||
|
PoliAsal string `gorm:"column:Poli_asal" json:"Poli_asal"`
|
||||||
|
PoliTujuan string `gorm:"column:Poli_tuju" json:"Poli_tuju"`
|
||||||
|
NomorSEP string `gorm:"column:Nomor_sep" json:"Nomor_sep"`
|
||||||
|
NamaPasien string `gorm:"column:Nama_lengkap" json:"Nama_lengkap"`
|
||||||
|
GelarDepan string `gorm:"column:gelardepan" json:"gelardepan"`
|
||||||
|
NamaLengkapDokter string `gorm:"column:Nama_lengkap_dokter" json:"Nama_lengkap_dokter"`
|
||||||
|
GelarBelakang string `gorm:"column:gelarbelakang" json:"gelarbelakang"`
|
||||||
|
Subspesialis string `gorm:"column:Subspesialis" json:"Subspesialis"`
|
||||||
|
KodePoli string `gorm:"column:Kode_poli" json:"Kode_poli"`
|
||||||
|
KodeDokter string `gorm:"column:Kode_dokter" json:"Kode_dokter"`
|
||||||
|
NomorKartu string `gorm:"column:No_kartu" json:"No_kartu"`
|
||||||
|
IDPoli string `gorm:"column:ID_poli" json:"id_poli"`
|
||||||
|
IDDokter string `gorm:"column:id_dokter" json:"id_dokter"`
|
||||||
|
KodeDPJP string `gorm:"column:Kode_dpjp" json:"Kode_dpjp"`
|
||||||
|
NoRM string `gorm:"column:No_rm" json:"No_rm"`
|
||||||
|
KodeDiagnosa string `gorm:"column:Kode_diagnosa" json:"Kode_diagnosa"`
|
||||||
|
NamaDiagnosa string `gorm:"column:Nama_diagnosa" json:"Nama_diagnosa"`
|
||||||
|
TipeSurKon string `gorm:"column:Tipe_SurKon" json:"Tipe_SurKon"`
|
||||||
|
User string `gorm:"column:User" json:"User"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseGetDataSuratKontrol struct {
|
||||||
|
IDDataSurKon string `json:"id"`
|
||||||
|
IDXDaftar string `json:"Idx_daftar"`
|
||||||
|
TglCetakSurKon string `json:"Tanggal_cetak_surat_kontrol"`
|
||||||
|
TglRencanaKontrol string `json:"Tanggal_rencana_kontrol"`
|
||||||
|
NomorSurKon string `json:"Nomor_surat_kontrol"`
|
||||||
|
PoliAsal string `json:"Poli_asal"`
|
||||||
|
PoliTujuan string `json:"Poli_tuju"`
|
||||||
|
NomorSEP string `json:"Nomor_sep"`
|
||||||
|
NamaPasien string `json:"Nama_pasien"`
|
||||||
|
NamaDokter string `json:"NamaDokter"`
|
||||||
|
NomorKartu string `json:"Nomor_kartu"`
|
||||||
|
Subspesialis string `json:"Subspesialis"`
|
||||||
|
KodePoli string `json:"Kode_poli"`
|
||||||
|
KodeDokter string `json:"Kode_dokter"`
|
||||||
|
KodeDPJP string `json:"Kode_dpjp"`
|
||||||
|
IDPoli string `json:"id_poli"`
|
||||||
|
IDDokter string `json:"id_dokter"`
|
||||||
|
NoRM string `json:"No_rm"`
|
||||||
|
KodeDiagnosa string `json:"Kode_diagnosa"`
|
||||||
|
NamaDiagnosa string `json:"Nama_diagnosa"`
|
||||||
|
TipeSurKon string `json:"Tipe_SurKon"`
|
||||||
|
User string `json:"User"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseCariDataSuratKontrol struct {
|
||||||
|
JumlahData int `json:"jumlah_data"`
|
||||||
|
ListDataSuratKontrol []*ResponseGetDataSuratKontrol `json:"list_data"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RequestCariPasien struct {
|
||||||
|
NoRM string `json:"no_rm"`
|
||||||
|
NoSEP string `json:"no_sep"`
|
||||||
|
PoliKlinik string `json:"poliklinik"`
|
||||||
|
TanggalAwal string `json:"tanggal_awal"`
|
||||||
|
TanggalAkhir string `json:"tanggal_akhir"`
|
||||||
|
TipeSurKon string `json:"tipe_surkon"`
|
||||||
|
Offset string `json:"offset"`
|
||||||
|
Limit string `json:"limit"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type HistoriSurkon struct {
|
||||||
|
NamaPasien string `gorm:"column:Nama_lengkap" json:"Nama_pasien"`
|
||||||
|
NoSEP string `gorm:"column:Nomor_sep" json:"No_SEP"`
|
||||||
|
NomorSuratkontrol string `gorm:"column:Nomor_surat_kontrol" json:"Nomor_surat_kontrol"`
|
||||||
|
TanggalRencana string `gorm:"column:Tanggal_rencana_kontrol" json:"Tanggal_rencana_kontrol"`
|
||||||
|
TanggalCetak string `gorm:"column:Tanggal_cetak_surat_kontrol" json:"Tanggal_cetak_surat_kontrol"`
|
||||||
|
Spesialis string `gorm:"column:Spesialis" json:"Spesialis"`
|
||||||
|
Subspesialis string `gorm:"column:Subspesialis" json:"Subspesialis"`
|
||||||
|
GelarDepan string `gorm:"column:gelardepan" json:"Gelar_depan"`
|
||||||
|
NamaDokter string `gorm:"column:Nama_lengkap_dokter" json:"Nama_dokter"`
|
||||||
|
GelarBelakang string `gorm:"column:gelarbelakang" json:"Gelar_belakang"`
|
||||||
|
Tiperawat string `gorm:"column:Tipe_rawat" json:"Tipe_rawat"`
|
||||||
|
UserCreate string `gorm:"column:User_created_surat_kontrol" json:"User_create"`
|
||||||
|
UserUpdate string `gorm:"column:User_updated_surat_kontrol" json:"User_update"`
|
||||||
|
Status string `gorm:"column:Status_surat_kontrol" json:"Status_surat_kontrol"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Dataresponse struct {
|
||||||
|
NamaPasien string `json:"Nama_pasien"`
|
||||||
|
NoSEP string `json:"No_SEP"`
|
||||||
|
NomorSuratkontrol string `json:"Nomor_surat_kontrol"`
|
||||||
|
TanggalRencana string `json:"Tanggal_rencana_kontrol"`
|
||||||
|
TanggalCetak string `json:"Tanggal_cetak_surat_kontrol"`
|
||||||
|
Spesialis string `json:"Spesialis"`
|
||||||
|
Subspesialis string `json:"Subspesialis"`
|
||||||
|
NamaLengkap string `json:"Dpjp"`
|
||||||
|
Tiperawat string `json:"Tipe_rawat"`
|
||||||
|
UserCreate string `json:"User_create"`
|
||||||
|
UserUpdate string `json:"User_update"`
|
||||||
|
Status string `json:"Status_surat_kontrol"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
type ConfigBpjs struct {
|
||||||
|
Cons_id string
|
||||||
|
Secret_key string
|
||||||
|
User_key string
|
||||||
|
Cons_id_dev string
|
||||||
|
Secret_key_dev string
|
||||||
|
User_key_dev string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Header struct {
|
||||||
|
ConsID string
|
||||||
|
SecretKey string
|
||||||
|
UserKey string
|
||||||
|
TimeStamp string
|
||||||
|
XSignature string
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package dokter
|
||||||
|
|
||||||
|
type DaftarDokter struct {
|
||||||
|
ID string `gorm:"column:id" json:"id"`
|
||||||
|
HfisCode string `gorm:"column:HFIS_code" json:"HFIS_code"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type DaftarDokterRes struct {
|
||||||
|
ID string `gorm:"column:id" json:"id"`
|
||||||
|
HfisCode int `gorm:"column:HFIS_code" json:"HFIS_code"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type NamaLengkap struct {
|
||||||
|
ID string `gorm:"column:id" json:"id"`
|
||||||
|
GelarDepan string `gorm:"column:gelardepan" json:"gelardepan"`
|
||||||
|
NamaLengkap string `gorm:"column:Nama_lengkap" json:"Nama_lengkap"`
|
||||||
|
GelarBelakang string `gorm:"column:gelarbelakang" json:"gelarbelakang"`
|
||||||
|
HFISCode string `gorm:"column:HFIS_code" json:"HFIS_code"`
|
||||||
|
DPJPCode string `gorm:"column:DPJP_code" json:"DPJP_code"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseDokter struct {
|
||||||
|
ID string `json:"id_dokter"`
|
||||||
|
NamaLengkap string `json:"nama_lengkap"`
|
||||||
|
Spesialis int `json:"spesialis"`
|
||||||
|
HFISCode string `json:"HFIS_code"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResponseDokterNew struct {
|
||||||
|
ID string `json:"id_dokter"`
|
||||||
|
NamaLengkap string `json:"nama_lengkap"`
|
||||||
|
Subspesialis int `json:"subspesialis"`
|
||||||
|
HFISCode string `json:"HFIS_code"`
|
||||||
|
KodePoli string `json:"kode_poli"`
|
||||||
|
DPJPCode string `json:"DPJP_code"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package dokter
|
||||||
|
|
||||||
|
type DaftarSpesialis struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
Kode string `json:"Kode"`
|
||||||
|
Spesialis string `json:"Spesialis"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package dokter
|
||||||
|
|
||||||
|
type DaftarSubspesialis struct {
|
||||||
|
ID int `json:"id"`
|
||||||
|
Kode string `json:"Kode"`
|
||||||
|
Subspesialis string `json:"Subspesialis"`
|
||||||
|
IDSpesialis int `json:"FK_daftar_spesialis_ID" gorm:"column:FK_daftar_spesialis_ID"`
|
||||||
|
Spesialis string `gorm:"column:Spesialis" json:"Spesialis"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package jadwal
|
||||||
|
|
||||||
|
type DaftarJadwalLiburPelayanan struct {
|
||||||
|
NamaLiburPelayanan string `gorm:"column:Nama_libur_pelayanan" json:"Nama_libur_pelayanan"`
|
||||||
|
KeteranganLiburPelayanan string `gorm:"column:Keterangan_libur_pelayanan" json:"Keterangan_libur_pelayanan"`
|
||||||
|
TanggalLiburPelayanan string `gorm:"column:Tanggal_libur_pelayanan" json:"Tanggal_libur_pelayanan"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package logapi
|
||||||
|
|
||||||
|
import "encoding/json"
|
||||||
|
|
||||||
|
type DataLogAPI struct {
|
||||||
|
ID string `gorm:"column:id" json:"ID"`
|
||||||
|
DateCreated string `gorm:"column:date_created" json:"date_created"`
|
||||||
|
UserAgent string `gorm:"column:User_agent" json:"User_agent"`
|
||||||
|
IP string `gorm:"column:IP" json:"IP"`
|
||||||
|
Parameter string `gorm:"column:Parameter" json:"Parameter"`
|
||||||
|
Header string `gorm:"column:Header" json:"Header"`
|
||||||
|
Method string `gorm:"column:Method" json:"Method"`
|
||||||
|
Url string `gorm:"column:URL" json:"URL"`
|
||||||
|
Request json.RawMessage `gorm:"column:Request" json:"Request"`
|
||||||
|
Respon json.RawMessage `gorm:"column:Respon" json:"Respon"`
|
||||||
|
ResponCode string `gorm:"column:Respon_code" json:"Respon_code"`
|
||||||
|
ResponTimeStart string `gorm:"column:Respontime_start" json:"Respontime_start"`
|
||||||
|
ResponTimeEnd string `gorm:"column:Respontime_end" json:"Respontime_end"`
|
||||||
|
Comment string `gorm:"column:Comment" json:"Comment"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package logapi
|
||||||
|
|
||||||
|
type InsertLogICare struct {
|
||||||
|
ID string `gorm:"column:id" json:"id"`
|
||||||
|
DateCreated string `gorm:"column:date_created" json:"date_created"`
|
||||||
|
Ruangan int `gorm:"column:Ruangan" json:"Ruangan"`
|
||||||
|
Dokter string `gorm:"column:Dokter" json:"Dokter"`
|
||||||
|
Kunjungan_pasien string `gorm:"column:Kunjungan_pasien" json:"Kunjungan_pasien"`
|
||||||
|
WaktuTransaksi string `gorm:"column:Waktu_transaksi" json:"Waktu_transaksi"`
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package pasien
|
||||||
|
|
||||||
|
type KunjunganPasien struct {
|
||||||
|
ID string `gorm:"column:id" json:"id"`
|
||||||
|
Ruangan int `gorm:"column:Ruangan" json:"Ruangan"`
|
||||||
|
}
|
||||||
+32
-32
@@ -1,32 +1,32 @@
|
|||||||
package models
|
package models
|
||||||
|
|
||||||
type User struct {
|
type User struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
Nama string `json:"nama"`
|
Nama string `json:"nama"`
|
||||||
Umur int `json:"umur"`
|
Umur int `json:"umur"`
|
||||||
Alamat string `json:"alamat"`
|
Alamat string `json:"alamat"`
|
||||||
Agama string `json:"agama"`
|
Agama string `json:"agama"`
|
||||||
JenisKelamin string `json:"jenis_kelamin"`
|
JenisKelamin string `json:"jenis_kelamin"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateUser struct {
|
type UpdateUser struct {
|
||||||
ID string `json:"id"`
|
ID string `json:"id"`
|
||||||
Nama string `json:"nama"`
|
Nama string `json:"nama"`
|
||||||
Umur int `json:"umur"`
|
Umur int `json:"umur"`
|
||||||
Alamat string `json:"alamat"`
|
Alamat string `json:"alamat"`
|
||||||
Agama string `json:"agama"`
|
Agama string `json:"agama"`
|
||||||
JenisKelamin string `json:"jenis_kelamin"`
|
JenisKelamin string `json:"jenis_kelamin"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type InsertUser struct {
|
type InsertUser struct {
|
||||||
Nama string `json:"nama"`
|
Nama string `json:"nama"`
|
||||||
Umur int `json:"umur"`
|
Umur int `json:"umur"`
|
||||||
Alamat string `json:"alamat"`
|
Alamat string `json:"alamat"`
|
||||||
Agama string `json:"agama"`
|
Agama string `json:"agama"`
|
||||||
JenisKelamin string `json:"jenis_kelamin"`
|
JenisKelamin string `json:"jenis_kelamin"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Response struct {
|
type Response struct {
|
||||||
ResponseCode string `json:"response_code"`
|
ResponseCode string `json:"response_code"`
|
||||||
ResponseMessage string `json:"response_message"`
|
ResponseMessage string `json:"response_message"`
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user