almost done, not tested yet
This commit is contained in:
@@ -63,4 +63,7 @@ bpjsCfg:
|
||||
corsCfg:
|
||||
allowedOrigins:
|
||||
- http://example.com
|
||||
allowedMethod:
|
||||
allowedMethod:
|
||||
|
||||
bpjsCfg:
|
||||
baseUrl:
|
||||
@@ -5,9 +5,9 @@ import (
|
||||
)
|
||||
|
||||
type CreateDto struct {
|
||||
RequestPayload *string `json:"requestPayload"`
|
||||
ResponseBody *string `json:"responseBody"`
|
||||
Message *string `json:"message"`
|
||||
RequestPayload string `json:"requestPayload"`
|
||||
ResponseBody string `json:"responseBody"`
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
type ReadListDto struct {
|
||||
|
||||
@@ -25,7 +25,8 @@ type FilterDto struct {
|
||||
}
|
||||
|
||||
type ReadDetailDto struct {
|
||||
Id uint `json:"id"`
|
||||
Id uint `json:"id"`
|
||||
Number *string `json:"number"`
|
||||
}
|
||||
|
||||
type UpdateDto struct {
|
||||
@@ -34,7 +35,8 @@ type UpdateDto struct {
|
||||
}
|
||||
|
||||
type DeleteDto struct {
|
||||
Id uint `json:"id"`
|
||||
Id uint `json:"id"`
|
||||
Number *string `json:"number"`
|
||||
}
|
||||
|
||||
type MetaDto struct {
|
||||
@@ -65,3 +67,7 @@ func ToResponseList(data []VclaimSep) []ResponseDto {
|
||||
}
|
||||
return resp
|
||||
}
|
||||
|
||||
func (c CreateDto) IsMessageSuccess() bool {
|
||||
return c.VclaimSepHist.Message == "Sukses"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package bpjs
|
||||
|
||||
import (
|
||||
a "github.com/karincake/apem"
|
||||
)
|
||||
|
||||
func SetConfig() {
|
||||
a.ParseSingleCfg(&O)
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package bpjs
|
||||
|
||||
var O BpjsCfg = BpjsCfg{}
|
||||
|
||||
type BpjsCfg struct {
|
||||
BaseUrl string `yaml:"baseUrl"`
|
||||
}
|
||||
@@ -4,22 +4,24 @@ import (
|
||||
"net/http"
|
||||
|
||||
/******************** main / transaction ********************/
|
||||
vclaimsep "simrs-vx/internal/interface/bpjs-handler/vclaim-sep"
|
||||
vclaimsephist "simrs-vx/internal/interface/bpjs-handler/vclaim-sep-hist"
|
||||
vclaimsepprint "simrs-vx/internal/interface/bpjs-handler/vclaim-sep-print"
|
||||
|
||||
/******************** actor ********************/
|
||||
|
||||
/******************** external ********************/
|
||||
a "github.com/karincake/apem"
|
||||
hk "github.com/karincake/hongkue"
|
||||
|
||||
/******************** infra ********************/
|
||||
ibpjs "simrs-vx/internal/infra/bpjs"
|
||||
gs "simrs-vx/internal/infra/gorm-setting"
|
||||
minio "simrs-vx/internal/infra/minio"
|
||||
ssdb "simrs-vx/internal/infra/ss-db"
|
||||
|
||||
/******************** pkg ********************/
|
||||
cmw "simrs-vx/pkg/cors-manager-mw"
|
||||
lh "simrs-vx/pkg/lang-helper"
|
||||
handlerlogger "simrs-vx/pkg/middleware/handler-logger"
|
||||
mh "simrs-vx/pkg/minio-helper"
|
||||
zlc "simrs-vx/pkg/zerolog-ctx"
|
||||
|
||||
/******************** sources ********************/
|
||||
@@ -33,10 +35,8 @@ func SetRoutes() http.Handler {
|
||||
/////
|
||||
a.RegisterExtCall(gs.Adjust)
|
||||
a.RegisterExtCall(zlc.Adjust)
|
||||
a.RegisterExtCall(ssdb.SetInstance)
|
||||
a.RegisterExtCall(lh.Populate)
|
||||
a.RegisterExtCall(minio.Connect)
|
||||
a.RegisterExtCall(mh.I.SetClient)
|
||||
a.RegisterExtCall(ibpjs.SetConfig)
|
||||
a.RegisterExtCall(validation.RegisterValidation)
|
||||
|
||||
r := http.NewServeMux()
|
||||
@@ -44,6 +44,20 @@ func SetRoutes() http.Handler {
|
||||
/******************** Main ********************/
|
||||
r.HandleFunc("/", home.Home)
|
||||
|
||||
hk.GroupRoutes("/v1/vclaim-sep", r, hk.MapHandlerFunc{
|
||||
"POST /": vclaimsep.O.Create,
|
||||
"PATCH /{id}": vclaimsep.O.Update,
|
||||
"DELETE /{id}": vclaimsep.O.Delete,
|
||||
})
|
||||
|
||||
hk.GroupRoutes("/v1/vclaim-sep-hist", r, hk.MapHandlerFunc{
|
||||
"GET /": vclaimsephist.O.GetList,
|
||||
})
|
||||
|
||||
hk.GroupRoutes("/v1/vclaim-sep-print", r, hk.MapHandlerFunc{
|
||||
"POST /": vclaimsepprint.O.Create,
|
||||
})
|
||||
|
||||
/******************** actor ********************/
|
||||
|
||||
/******************** sources ********************/
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package vclaimsephist
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
e "simrs-vx/internal/domain/bpjs-entities/vclaim-sep-hist"
|
||||
u "simrs-vx/internal/use-case/bpjs-use-case/vclaim-sep-hist"
|
||||
|
||||
rw "github.com/karincake/risoles"
|
||||
sf "github.com/karincake/semprit"
|
||||
)
|
||||
|
||||
type myBase struct{}
|
||||
|
||||
var O myBase
|
||||
|
||||
func (obj myBase) GetList(w http.ResponseWriter, r *http.Request) {
|
||||
dto := e.ReadListDto{}
|
||||
sf.UrlQueryParam(&dto, *r.URL)
|
||||
res, err := u.ReadList(dto)
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package vclaimsepprint
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
e "simrs-vx/internal/domain/bpjs-entities/vclaim-sep-print"
|
||||
u "simrs-vx/internal/use-case/bpjs-use-case/vclaim-sep-print"
|
||||
|
||||
rw "github.com/karincake/risoles"
|
||||
)
|
||||
|
||||
type myBase struct{}
|
||||
|
||||
var O myBase
|
||||
|
||||
func (obj myBase) Create(w http.ResponseWriter, r *http.Request) {
|
||||
dto := e.CreateDto{}
|
||||
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
|
||||
return
|
||||
}
|
||||
res, err := u.Create(dto)
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
@@ -5,7 +5,6 @@ import (
|
||||
"net/http"
|
||||
|
||||
rw "github.com/karincake/risoles"
|
||||
sf "github.com/karincake/semprit"
|
||||
|
||||
e "simrs-vx/internal/domain/bpjs-entities/vclaim-sep"
|
||||
u "simrs-vx/internal/use-case/bpjs-use-case/vclaim-sep"
|
||||
@@ -29,27 +28,27 @@ func (obj myBase) Create(w http.ResponseWriter, r *http.Request) {
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
|
||||
func (obj myBase) GetList(w http.ResponseWriter, r *http.Request) {
|
||||
dto := e.ReadListDto{}
|
||||
sf.UrlQueryParam(&dto, *r.URL)
|
||||
res, err := u.ReadList(dto)
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
// func (obj myBase) GetList(w http.ResponseWriter, r *http.Request) {
|
||||
// dto := e.ReadListDto{}
|
||||
// sf.UrlQueryParam(&dto, *r.URL)
|
||||
// res, err := u.ReadList(dto)
|
||||
// rw.DataResponse(w, res, err)
|
||||
// }
|
||||
|
||||
func (obj myBase) GetDetail(w http.ResponseWriter, r *http.Request) {
|
||||
id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
||||
if id <= 0 {
|
||||
return
|
||||
}
|
||||
dto := e.ReadDetailDto{}
|
||||
dto.Id = uint(id)
|
||||
res, err := u.ReadDetail(dto)
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
// func (obj myBase) GetDetail(w http.ResponseWriter, r *http.Request) {
|
||||
// id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
||||
// if id <= 0 {
|
||||
// return
|
||||
// }
|
||||
// dto := e.ReadDetailDto{}
|
||||
// dto.Id = uint(id)
|
||||
// res, err := u.ReadDetail(dto)
|
||||
// rw.DataResponse(w, res, err)
|
||||
// }
|
||||
|
||||
func (obj myBase) Update(w http.ResponseWriter, r *http.Request) {
|
||||
id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
||||
if id <= 0 {
|
||||
number := rw.ValidateString(w, "number", r.PathValue("number"))
|
||||
if number <= "" {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -57,19 +56,18 @@ func (obj myBase) Update(w http.ResponseWriter, r *http.Request) {
|
||||
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
|
||||
return
|
||||
}
|
||||
dto.Id = uint(id)
|
||||
dto.Number = &number
|
||||
res, err := u.Update(dto)
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
|
||||
func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
|
||||
id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
||||
if id <= 0 {
|
||||
number := rw.ValidateString(w, "number", r.PathValue("number"))
|
||||
if number <= "" {
|
||||
return
|
||||
}
|
||||
|
||||
dto := e.DeleteDto{}
|
||||
dto.Id = uint(id)
|
||||
dto.Number = &number
|
||||
res, err := u.Delete(dto)
|
||||
rw.DataResponse(w, res, err)
|
||||
}
|
||||
|
||||
@@ -1 +1,58 @@
|
||||
package vclaimsep
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
e "simrs-vx/internal/domain/bpjs-entities/vclaim-sep"
|
||||
|
||||
ibpjs "simrs-vx/internal/infra/bpjs"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func CreateSep(input *e.CreateDto, data *e.VclaimSep, tx *gorm.DB) error {
|
||||
req, err := http.NewRequest("POST", ibpjs.O.BaseUrl+"/sep", bytes.NewReader(input.RequestPayload))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
|
||||
resp, err := http.DefaultClient.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var vresp vclaimResponse
|
||||
if err := json.Unmarshal(body, &vresp); err != nil {
|
||||
return fmt.Errorf("failed to parse response JSON: %w", err)
|
||||
}
|
||||
|
||||
msg := vresp.MetaData.Message
|
||||
|
||||
if err := json.Unmarshal(body, data); err != nil {
|
||||
return fmt.Errorf("failed to unmarshal into VclaimSep: %w", err)
|
||||
}
|
||||
|
||||
// Save request/response details in DTO for further use
|
||||
input.VclaimSepHist.RequestPayload = string(input.RequestPayload)
|
||||
input.VclaimSepHist.ResponseBody = string(body)
|
||||
input.VclaimSepHist.Message = msg
|
||||
input.Number = func() *string {
|
||||
number := ""
|
||||
if vresp.Response != nil && vresp.Response.Sep != nil {
|
||||
number = vresp.Response.Sep.NoSep
|
||||
}
|
||||
return &number
|
||||
}()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package vclaimsep
|
||||
|
||||
type vclaimResponse struct {
|
||||
MetaData struct {
|
||||
Message string `json:"message"`
|
||||
} `json:"metaData"`
|
||||
Response *struct {
|
||||
Sep *struct {
|
||||
NoSep string `json:"noSep"`
|
||||
} `json:"sep"`
|
||||
} `json:"response"`
|
||||
}
|
||||
@@ -17,7 +17,7 @@ func setData[T *e.CreateDto | *e.UpdateDto](input T, data *e.VclaimSepHist) {
|
||||
inputSrc = &inputTemp.CreateDto
|
||||
}
|
||||
|
||||
data.RequestPayload = inputSrc.RequestPayload
|
||||
data.ResponseBody = inputSrc.ResponseBody
|
||||
data.Message = inputSrc.Message
|
||||
data.RequestPayload = &inputSrc.RequestPayload
|
||||
data.ResponseBody = &inputSrc.ResponseBody
|
||||
data.Message = &inputSrc.Message
|
||||
}
|
||||
|
||||
@@ -4,6 +4,9 @@ import (
|
||||
"strconv"
|
||||
|
||||
e "simrs-vx/internal/domain/bpjs-entities/vclaim-sep"
|
||||
// evsh "simrs-vx/internal/domain/bpjs-entities/vclaim-sep-hist"
|
||||
|
||||
uvsh "simrs-vx/internal/use-case/bpjs-use-case/vclaim-sep-hist"
|
||||
|
||||
dg "github.com/karincake/apem/db-gorm-pg"
|
||||
d "github.com/karincake/dodol"
|
||||
@@ -35,6 +38,14 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := uvsh.CreateData(input.VclaimSepHist, &event, tx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !input.IsMessageSuccess() {
|
||||
return nil
|
||||
}
|
||||
|
||||
if resData, err := CreateData(input, &event, tx); err != nil {
|
||||
return err
|
||||
} else {
|
||||
@@ -167,7 +178,7 @@ func ReadDetail(input e.ReadDetailDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
rdDto := e.ReadDetailDto{Id: input.Id}
|
||||
rdDto := e.ReadDetailDto{Number: input.Number}
|
||||
var data *e.VclaimSep
|
||||
var err error
|
||||
|
||||
@@ -223,7 +234,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
||||
}
|
||||
|
||||
func Delete(input e.DeleteDto) (*d.Data, error) {
|
||||
rdDto := e.ReadDetailDto{Id: input.Id}
|
||||
rdDto := e.ReadDetailDto{Number: input.Number}
|
||||
var data *e.VclaimSep
|
||||
var err error
|
||||
|
||||
|
||||
@@ -81,7 +81,14 @@ func ReadDetailData(input e.ReadDetailDto, event *pl.Event, dbx ...*gorm.DB) (*e
|
||||
tx = dg.I
|
||||
}
|
||||
|
||||
if err := tx.First(&data, input.Id).Error; err != nil {
|
||||
if input.Number != nil {
|
||||
tx = tx.Where("\"Number\" = ?", *input.Number)
|
||||
}
|
||||
if input.Id != 0 {
|
||||
tx = tx.Where("\"Id\" = ?", input.Id)
|
||||
}
|
||||
|
||||
if err := tx.First(&data).Error; err != nil {
|
||||
if processedErr := pu.HandleReadError(err, event, source, input.Id, data); processedErr != nil {
|
||||
return nil, processedErr
|
||||
}
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
package vclaimsep
|
||||
|
||||
import (
|
||||
pvs "simrs-vx/internal/use-case/bpjs-plugin/vclaim-sep"
|
||||
)
|
||||
|
||||
// example of middleware
|
||||
// func init() {
|
||||
// createPreMw = append(createPreMw,
|
||||
// CreateMw{Name: "modif-input", Func: pm.ModifInput},
|
||||
// CreateMw{Name: "check-data", Func: pm.CheckData},
|
||||
// )
|
||||
// }
|
||||
func init() {
|
||||
createPreMw = append(createPreMw,
|
||||
createMw{Name: "create-sep", Func: pvs.CreateSep},
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user