almost done, not tested yet
This commit is contained in:
No files matched your search
@@ -63,4 +63,7 @@ bpjsCfg:
|
|||||||
corsCfg:
|
corsCfg:
|
||||||
allowedOrigins:
|
allowedOrigins:
|
||||||
- http://example.com
|
- http://example.com
|
||||||
allowedMethod:
|
allowedMethod:
|
||||||
|
|
||||||
|
bpjsCfg:
|
||||||
|
baseUrl:
|
||||||
@@ -5,9 +5,9 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type CreateDto struct {
|
type CreateDto struct {
|
||||||
RequestPayload *string `json:"requestPayload"`
|
RequestPayload string `json:"requestPayload"`
|
||||||
ResponseBody *string `json:"responseBody"`
|
ResponseBody string `json:"responseBody"`
|
||||||
Message *string `json:"message"`
|
Message string `json:"message"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ReadListDto struct {
|
type ReadListDto struct {
|
||||||
|
|||||||
@@ -25,7 +25,8 @@ type FilterDto struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ReadDetailDto struct {
|
type ReadDetailDto struct {
|
||||||
Id uint `json:"id"`
|
Id uint `json:"id"`
|
||||||
|
Number *string `json:"number"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateDto struct {
|
type UpdateDto struct {
|
||||||
@@ -34,7 +35,8 @@ type UpdateDto struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type DeleteDto struct {
|
type DeleteDto struct {
|
||||||
Id uint `json:"id"`
|
Id uint `json:"id"`
|
||||||
|
Number *string `json:"number"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type MetaDto struct {
|
type MetaDto struct {
|
||||||
@@ -65,3 +67,7 @@ func ToResponseList(data []VclaimSep) []ResponseDto {
|
|||||||
}
|
}
|
||||||
return resp
|
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"
|
"net/http"
|
||||||
|
|
||||||
/******************** main / transaction ********************/
|
/******************** 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 ********************/
|
/******************** actor ********************/
|
||||||
|
|
||||||
/******************** external ********************/
|
/******************** external ********************/
|
||||||
a "github.com/karincake/apem"
|
a "github.com/karincake/apem"
|
||||||
|
hk "github.com/karincake/hongkue"
|
||||||
|
|
||||||
/******************** infra ********************/
|
/******************** infra ********************/
|
||||||
|
ibpjs "simrs-vx/internal/infra/bpjs"
|
||||||
gs "simrs-vx/internal/infra/gorm-setting"
|
gs "simrs-vx/internal/infra/gorm-setting"
|
||||||
minio "simrs-vx/internal/infra/minio"
|
|
||||||
ssdb "simrs-vx/internal/infra/ss-db"
|
|
||||||
|
|
||||||
/******************** pkg ********************/
|
/******************** pkg ********************/
|
||||||
cmw "simrs-vx/pkg/cors-manager-mw"
|
cmw "simrs-vx/pkg/cors-manager-mw"
|
||||||
lh "simrs-vx/pkg/lang-helper"
|
lh "simrs-vx/pkg/lang-helper"
|
||||||
handlerlogger "simrs-vx/pkg/middleware/handler-logger"
|
handlerlogger "simrs-vx/pkg/middleware/handler-logger"
|
||||||
mh "simrs-vx/pkg/minio-helper"
|
|
||||||
zlc "simrs-vx/pkg/zerolog-ctx"
|
zlc "simrs-vx/pkg/zerolog-ctx"
|
||||||
|
|
||||||
/******************** sources ********************/
|
/******************** sources ********************/
|
||||||
@@ -33,10 +35,8 @@ func SetRoutes() http.Handler {
|
|||||||
/////
|
/////
|
||||||
a.RegisterExtCall(gs.Adjust)
|
a.RegisterExtCall(gs.Adjust)
|
||||||
a.RegisterExtCall(zlc.Adjust)
|
a.RegisterExtCall(zlc.Adjust)
|
||||||
a.RegisterExtCall(ssdb.SetInstance)
|
|
||||||
a.RegisterExtCall(lh.Populate)
|
a.RegisterExtCall(lh.Populate)
|
||||||
a.RegisterExtCall(minio.Connect)
|
a.RegisterExtCall(ibpjs.SetConfig)
|
||||||
a.RegisterExtCall(mh.I.SetClient)
|
|
||||||
a.RegisterExtCall(validation.RegisterValidation)
|
a.RegisterExtCall(validation.RegisterValidation)
|
||||||
|
|
||||||
r := http.NewServeMux()
|
r := http.NewServeMux()
|
||||||
@@ -44,6 +44,20 @@ func SetRoutes() http.Handler {
|
|||||||
/******************** Main ********************/
|
/******************** Main ********************/
|
||||||
r.HandleFunc("/", home.Home)
|
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 ********************/
|
/******************** actor ********************/
|
||||||
|
|
||||||
/******************** sources ********************/
|
/******************** 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"
|
"net/http"
|
||||||
|
|
||||||
rw "github.com/karincake/risoles"
|
rw "github.com/karincake/risoles"
|
||||||
sf "github.com/karincake/semprit"
|
|
||||||
|
|
||||||
e "simrs-vx/internal/domain/bpjs-entities/vclaim-sep"
|
e "simrs-vx/internal/domain/bpjs-entities/vclaim-sep"
|
||||||
u "simrs-vx/internal/use-case/bpjs-use-case/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)
|
rw.DataResponse(w, res, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (obj myBase) GetList(w http.ResponseWriter, r *http.Request) {
|
// func (obj myBase) GetList(w http.ResponseWriter, r *http.Request) {
|
||||||
dto := e.ReadListDto{}
|
// dto := e.ReadListDto{}
|
||||||
sf.UrlQueryParam(&dto, *r.URL)
|
// sf.UrlQueryParam(&dto, *r.URL)
|
||||||
res, err := u.ReadList(dto)
|
// res, err := u.ReadList(dto)
|
||||||
rw.DataResponse(w, res, err)
|
// rw.DataResponse(w, res, err)
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (obj myBase) GetDetail(w http.ResponseWriter, r *http.Request) {
|
// func (obj myBase) GetDetail(w http.ResponseWriter, r *http.Request) {
|
||||||
id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
// id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
||||||
if id <= 0 {
|
// if id <= 0 {
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
dto := e.ReadDetailDto{}
|
// dto := e.ReadDetailDto{}
|
||||||
dto.Id = uint(id)
|
// dto.Id = uint(id)
|
||||||
res, err := u.ReadDetail(dto)
|
// res, err := u.ReadDetail(dto)
|
||||||
rw.DataResponse(w, res, err)
|
// rw.DataResponse(w, res, err)
|
||||||
}
|
// }
|
||||||
|
|
||||||
func (obj myBase) Update(w http.ResponseWriter, r *http.Request) {
|
func (obj myBase) Update(w http.ResponseWriter, r *http.Request) {
|
||||||
id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
number := rw.ValidateString(w, "number", r.PathValue("number"))
|
||||||
if id <= 0 {
|
if number <= "" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,19 +56,18 @@ func (obj myBase) Update(w http.ResponseWriter, r *http.Request) {
|
|||||||
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
|
if res := rw.ValidateStructByIOR(w, r.Body, &dto); !res {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
dto.Id = uint(id)
|
dto.Number = &number
|
||||||
res, err := u.Update(dto)
|
res, err := u.Update(dto)
|
||||||
rw.DataResponse(w, res, err)
|
rw.DataResponse(w, res, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
|
func (obj myBase) Delete(w http.ResponseWriter, r *http.Request) {
|
||||||
id := rw.ValidateInt(w, "id", r.PathValue("id"))
|
number := rw.ValidateString(w, "number", r.PathValue("number"))
|
||||||
if id <= 0 {
|
if number <= "" {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
dto := e.DeleteDto{}
|
dto := e.DeleteDto{}
|
||||||
dto.Id = uint(id)
|
dto.Number = &number
|
||||||
res, err := u.Delete(dto)
|
res, err := u.Delete(dto)
|
||||||
rw.DataResponse(w, res, err)
|
rw.DataResponse(w, res, err)
|
||||||
}
|
}
|
||||||
@@ -1 +1,58 @@
|
|||||||
package vclaimsep
|
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
|
inputSrc = &inputTemp.CreateDto
|
||||||
}
|
}
|
||||||
|
|
||||||
data.RequestPayload = inputSrc.RequestPayload
|
data.RequestPayload = &inputSrc.RequestPayload
|
||||||
data.ResponseBody = inputSrc.ResponseBody
|
data.ResponseBody = &inputSrc.ResponseBody
|
||||||
data.Message = inputSrc.Message
|
data.Message = &inputSrc.Message
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,9 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
e "simrs-vx/internal/domain/bpjs-entities/vclaim-sep"
|
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"
|
dg "github.com/karincake/apem/db-gorm-pg"
|
||||||
d "github.com/karincake/dodol"
|
d "github.com/karincake/dodol"
|
||||||
@@ -35,6 +38,14 @@ func Create(input e.CreateDto) (*d.Data, error) {
|
|||||||
return err
|
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 {
|
if resData, err := CreateData(input, &event, tx); err != nil {
|
||||||
return err
|
return err
|
||||||
} else {
|
} else {
|
||||||
@@ -167,7 +178,7 @@ func ReadDetail(input e.ReadDetailDto) (*d.Data, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Update(input e.UpdateDto) (*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 data *e.VclaimSep
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
@@ -223,7 +234,7 @@ func Update(input e.UpdateDto) (*d.Data, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Delete(input e.DeleteDto) (*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 data *e.VclaimSep
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,14 @@ func ReadDetailData(input e.ReadDetailDto, event *pl.Event, dbx ...*gorm.DB) (*e
|
|||||||
tx = dg.I
|
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 {
|
if processedErr := pu.HandleReadError(err, event, source, input.Id, data); processedErr != nil {
|
||||||
return nil, processedErr
|
return nil, processedErr
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
package vclaimsep
|
package vclaimsep
|
||||||
|
|
||||||
|
import (
|
||||||
|
pvs "simrs-vx/internal/use-case/bpjs-plugin/vclaim-sep"
|
||||||
|
)
|
||||||
|
|
||||||
// example of middleware
|
// example of middleware
|
||||||
// func init() {
|
func init() {
|
||||||
// createPreMw = append(createPreMw,
|
createPreMw = append(createPreMw,
|
||||||
// CreateMw{Name: "modif-input", Func: pm.ModifInput},
|
createMw{Name: "create-sep", Func: pvs.CreateSep},
|
||||||
// CreateMw{Name: "check-data", Func: pm.CheckData},
|
)
|
||||||
// )
|
|
||||||
// }
|
}
|
||||||
Reference in New Issue
Block a user