feat (vclaim-sep-control-letter): add delete and detail by control letter number

This commit is contained in:
dpurbosakti
2025-12-15 13:14:59 +07:00
parent 44b37e2d49
commit a87eed7eaa
8 changed files with 260 additions and 174 deletions
@@ -35,7 +35,7 @@ func CreateSepControlLetter(input *e.CreateDto, data *e.VclaimSepControlLetter,
return err
}
var vresp Response
var vresp e.VclaimResponse
if err := json.Unmarshal(body, &vresp); err != nil {
return fmt.Errorf("failed to parse response JSON: %w", err)
}
@@ -55,71 +55,68 @@ func CreateSepControlLetter(input *e.CreateDto, data *e.VclaimSepControlLetter,
return nil
}
// func ReadDetailSep(input *e.ReadDetailDto, data *e.VclaimSep, tx *gorm.DB) error {
// endpoint := fmt.Sprintf("sep/%s", input.Number)
// req, err := http.NewRequest("GET", ibpjs.O.BaseUrl+endpoint, nil)
// if err != nil {
// return err
// }
// req.Header.Set("Content-Type", "application/json")
func DeleteSepControlLetter(input *e.DeleteDto, data *e.VclaimSepControlLetter, tx *gorm.DB) error {
payload, err := input.RequestPayloadIntoJson()
if err != nil {
return err
}
req, err := http.NewRequest("DELETE", ibpjs.O.BaseUrl+"RencanaKontrol/Delete", bytes.NewBuffer(payload))
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()
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
// }
body, err := io.ReadAll(resp.Body)
if err != nil {
return err
}
// var detail e.SepResponse
// if err := json.Unmarshal(body, &detail); err != nil {
// return fmt.Errorf("failed to parse response JSON: %w", err)
// }
var vresp e.VclaimResponse
if err := json.Unmarshal(body, &vresp); err != nil {
return fmt.Errorf("failed to parse response JSON: %w", err)
}
// data.Detail = detail.Response
if vresp.MetaData.Code != "200" {
return fmt.Errorf("failed to delete sep control letter: %s", vresp.MetaData.Message)
}
// return nil
// }
return nil
}
// func DeleteSep(input *e.DeleteDto, data *e.VclaimSep, tx *gorm.DB) error {
// payload := e.SepDeleteRequest{}
// payload.Request.TSep.NoSep = *input.Number
// payload.Request.TSep.User = "Coba Ws"
func GetDetailSepControlLetterByNumber(input *e.ReadDetailDto, data *e.VclaimSepControlLetter, tx *gorm.DB) error {
req, err := http.NewRequest("GET", ibpjs.O.BaseUrl+"RencanaKontrol/noSuratKontrol/"+*input.Number, nil)
if err != nil {
return err
}
req.Header.Set("Content-Type", "application/json")
// jsonPayload, err := json.Marshal(payload)
// if err != nil {
// return err
// }
resp, err := http.DefaultClient.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
// req, err := http.NewRequest("DELETE", ibpjs.O.BaseUrl+"sep", bytes.NewBuffer(jsonPayload))
// if err != nil {
// return err
// }
body, err := io.ReadAll(resp.Body)
if err != nil {
return err
}
// req.Header.Set("Content-Type", "application/json")
var vresp e.DetailVclaimResponse
if err := json.Unmarshal(body, &vresp); err != nil {
return fmt.Errorf("failed to parse response JSON: %w", err)
}
// resp, err := http.DefaultClient.Do(req)
// if err != nil {
// return err
// }
// defer resp.Body.Close()
if vresp.MetaData.Code != "200" {
return fmt.Errorf("failed to get detail sep control letter by number: %s", vresp.MetaData.Message)
}
// body, err := io.ReadAll(resp.Body)
// if err != nil {
// return err
// }
data.Detail = vresp.Response
// var detail e.SepResponse
// if err := json.Unmarshal(body, &detail); err != nil {
// return fmt.Errorf("failed to parse response JSON: %w", err)
// }
// if detail.MetaData.Message == SepNotFound {
// return fmt.Errorf("sep with number %s not found", *data.Number)
// }
// return nil
// }
return nil
}
@@ -1,87 +0,0 @@
package vclaimsepcontrolletter
import (
"encoding/json"
e "simrs-vx/internal/domain/bpjs-entities/vclaim-sep-control-letter"
)
type SuratKontrol 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 {
KdProvider string `json:"kdProvider"`
NmProvider string `json:"nmProvider"`
}
type ProvPerujuk struct {
KdProviderPerujuk string `json:"kdProviderPerujuk"`
NmProviderPerujuk string `json:"nmProviderPerujuk"`
AsalRujukan string `json:"asalRujukan"`
NoRujukan string `json:"noRujukan"`
TglRujukan string `json:"tglRujukan"`
}
type Response struct {
MetaData MetaData `json:"metaData"`
Response *SuratKontrol `json:"response"` // nullable
}
type MetaData struct {
Code string `json:"code"`
Message string `json:"message"`
}
func (r Response) ToPDFNeeds() ([]byte, error) {
response := e.ResponseForPDF{
Number: r.Response.Sep.NoSep,
PlannedControlDate: r.Response.TglRencanaKontrol,
IssuedDate: r.Response.TglTerbit,
Doctor_Name: r.Response.NamaDokter,
DstUnit_Name: r.Response.NamaPoliTujuan,
ResponsibleDoctor_Name: *r.Response.NamaDokterPembuat,
VclaimSep: e.VclaimSep{
VclaimMember: e.VclaimMember{
CardNumber: r.Response.Sep.Peserta.NoKartu,
Name: r.Response.Sep.Peserta.Nama,
BirthDate: r.Response.Sep.Peserta.TglLahir,
Gender: r.Response.Sep.Peserta.Kelamin,
},
Diagnose: r.Response.Sep.Diagnosa,
Number: r.Response.Sep.NoSep,
},
}
return json.Marshal(response)
}
@@ -9,4 +9,10 @@ func init() {
createPreMw = append(createPreMw,
createMw{Name: "create-sep-control-letter", Func: pvscl.CreateSepControlLetter},
)
readDetailPreMw = append(readDetailPreMw,
readDetailMw{Name: "get-detail-sep-control-letter-by-number", Func: pvscl.GetDetailSepControlLetterByNumber},
)
deletePreMw = append(deletePreMw,
DeleteMw{Name: "delete-sep-control-letter", Func: pvscl.DeleteSepControlLetter},
)
}
@@ -30,7 +30,10 @@ type readDetailMw struct {
}
type UpdateMw = readDetailMw
type DeleteMw = readDetailMw
type DeleteMw struct {
Name string
Func func(input *e.DeleteDto, data *e.VclaimSepControlLetter, tx *gorm.DB) error
}
var createPreMw []createMw // preprocess middleware
var createPostMw []createMw // postprocess middleware
@@ -40,5 +43,5 @@ var readDetailPreMw []readDetailMw
var readDetailPostMw []readDetailMw
var updatePreMw []readDetailMw
var updatePostMw []readDetailMw
var deletePreMw []readDetailMw
var deletePostMw []readDetailMw
var deletePreMw []DeleteMw
var deletePostMw []DeleteMw