From 2adf083e9f821403fcfbbedd3b23b74db6b588484e7acaab391377c0c93a0772 Mon Sep 17 00:00:00 2001 From: mirza Date: Wed, 23 Oct 2024 12:03:30 +0700 Subject: [PATCH] add log api and offset limit --- database/satu_data/log_api/log_api.go | 34 +++ .../satu_data/surat_kontrol/surat_kontrol.go | 12 +- handlers/bpjs/surat_kontrol/surat_kontrol.go | 283 ++++++++++++++++-- main.go | 2 +- models/bpjs/surat_kontrol/surat_kontrol.go | 4 +- models/log_api/log_api.go | 20 ++ 6 files changed, 324 insertions(+), 31 deletions(-) create mode 100644 database/satu_data/log_api/log_api.go create mode 100644 models/log_api/log_api.go diff --git a/database/satu_data/log_api/log_api.go b/database/satu_data/log_api/log_api.go new file mode 100644 index 0000000..69156a7 --- /dev/null +++ b/database/satu_data/log_api/log_api.go @@ -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.Debug().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 +} diff --git a/database/satu_data/surat_kontrol/surat_kontrol.go b/database/satu_data/surat_kontrol/surat_kontrol.go index b8595ac..859bebb 100644 --- a/database/satu_data/surat_kontrol/surat_kontrol.go +++ b/database/satu_data/surat_kontrol/surat_kontrol.go @@ -78,7 +78,7 @@ func InsertDataSuratKontrol(reqInsert *suratkontrol.DataSuratKontrol) error { return nil } -func GetDataSuratKontrol() ([]*suratkontrol.GetDataSuratKontrol, error) { +func GetDataSuratKontrol(offset, limit string) ([]*suratkontrol.GetDataSuratKontrol, error) { var dataSurKon []*suratkontrol.GetDataSuratKontrol err := config.SatuDataDB.Debug().Raw(`select dsk."id", dsk."Tanggal_cetak_surat_kontrol", dsk."Tanggal_rencana_kontrol", dsk."Nomor_surat_kontrol", @@ -113,17 +113,14 @@ func GetDataSuratKontrol() ([]*suratkontrol.GetDataSuratKontrol, error) { 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'`).Scan(&dataSurKon).Error + 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 } - log.Println(err) - return nil, err } - log.Println("Data Surat Kontrol : ", dataSurKon) return dataSurKon, nil } @@ -169,10 +166,7 @@ func GetDataSuratKontrolByID(idxdaftar string) (*suratkontrol.GetDataSuratKontro log.Println(errMsg) return nil, errMsg } - log.Println(err) - return nil, err } - log.Println("Data Surat Kontrol : ", dataSurKon) return dataSurKon, nil } @@ -184,6 +178,7 @@ func UpdateDataSuratKontrol(reqUpdate *suratkontrol.DataSuratKontrol) error { } return nil } + func GetIDXDaftarBySurKon(idSurKon string) (string, error) { var idxDaftar string err := config.SatuDataDB.Debug().Raw(`select dkp."IDXDAFTAR" @@ -250,6 +245,5 @@ func SearchDataSurKon(req suratkontrol.RequestCariPasien, query string, args []i log.Println(err) return nil, err } - log.Println("Data Surat Kontrol : ", dataSurKon) return dataSurKon, nil } diff --git a/handlers/bpjs/surat_kontrol/surat_kontrol.go b/handlers/bpjs/surat_kontrol/surat_kontrol.go index 2ed6f9f..3a6f0ee 100644 --- a/handlers/bpjs/surat_kontrol/surat_kontrol.go +++ b/handlers/bpjs/surat_kontrol/surat_kontrol.go @@ -2,10 +2,14 @@ package suratkontrol import ( cfg "bridging-rssa/config" + log_api "bridging-rssa/database/satu_data/log_api" suratkontrol "bridging-rssa/database/satu_data/surat_kontrol" "bridging-rssa/docs/utils" sk "bridging-rssa/models/bpjs/surat_kontrol" "bridging-rssa/models/config" + logapi "bridging-rssa/models/log_api" + "encoding/json" + "fmt" "log" "net/http" "os" @@ -29,11 +33,24 @@ func InsertSuratKontrol(c *gin.Context) { err := c.Bind(&req) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } - log.Println("Request: ", req) + reqJson, err := json.Marshal(req) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } + + log.Println("Request: ", reqJson) conf := config.ConfigBpjs{} @@ -48,6 +65,11 @@ func InsertSuratKontrol(c *gin.Context) { } 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(), "; ") tipeSurKon := "1" kunjunganPasien, err := suratkontrol.GetDataKunjunganPasien(req.IDXDaftar) @@ -79,7 +101,10 @@ func InsertSuratKontrol(c *gin.Context) { err = suratkontrol.InsertDataSuratKontrol(reqInsert) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } c.JSON(http.StatusOK, nil) @@ -95,13 +120,60 @@ func InsertSuratKontrol(c *gin.Context) { User: req.User, }, } + logTimeStart := time.Now().Format("2006-01-02 15:04:05") res, err := PostData(url, header, headers, reqSuratKontrol) if err != nil { + responJson, err := json.Marshal(res) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + 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: "", + Header: headerString, + Method: "POST", + Url: url, + Request: reqJson, + Respon: responJson, + ResponCode: 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, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } log.Println(err) c.JSON(http.StatusInternalServerError, res.MetaData) return } + responJson, err := json.Marshal(res) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } + logTimeEnd := time.Now().Format("2006-01-02 15:04:05") reqInsert := &sk.DataSuratKontrol{ ID: uuid, DateCreated: timeNow, @@ -119,7 +191,10 @@ func InsertSuratKontrol(c *gin.Context) { err = suratkontrol.InsertDataSuratKontrol(reqInsert) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } @@ -132,7 +207,37 @@ func InsertSuratKontrol(c *gin.Context) { err = suratkontrol.UpdateKunjunganPasien(req) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } + + reqInsertLog := &logapi.DataLogAPI{ + ID: uuid, + DateCreated: logTimeEnd, + UserAgent: req.User, + IP: c.ClientIP(), + Parameter: "", + Header: headerString, + Method: "POST", + Url: url, + Request: reqJson, + Respon: responJson, + ResponCode: 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, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } @@ -167,7 +272,10 @@ func UpdateSuratKontrol(c *gin.Context) { err := c.Bind(&req) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } @@ -211,18 +319,37 @@ func UpdateSuratKontrol(c *gin.Context) { err = suratkontrol.UpdateDataSuratKontrol(reqUpdate) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } err = suratkontrol.InsertDataSuratKontrol(reqInsert) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } c.JSON(http.StatusOK, nil) return } + + reqJson, err := json.Marshal(req) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } + + log.Println("Request: ", reqJson) + conf := config.ConfigBpjs{} header := cfg.SetHeader(conf) @@ -236,6 +363,12 @@ func UpdateSuratKontrol(c *gin.Context) { } 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(), "; ") + reqSuratKontrol := &sk.RequestHeaderRencanaKontrol{ Request: &sk.ReqUpdateRencanaKontrol{ NoSuratKontrol: req.NoSuratKontrol, @@ -246,17 +379,66 @@ func UpdateSuratKontrol(c *gin.Context) { User: req.User, }, } + + logTimeStart := time.Now().Format("2006-01-02 15:04:05") res, err := ResponseUpdateSuratKontrol(url, header, headers, reqSuratKontrol) if err != nil { + responJson, err := json.Marshal(res) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } + logTimeEnd := time.Now().Format("2006-01-02 15:04:05") if res.MetaData.Code == "504" { log.Println(err) c.JSON(http.StatusGatewayTimeout, res.MetaData) return } + reqInsertLog := &logapi.DataLogAPI{ + ID: uuid, + DateCreated: logTimeEnd, + UserAgent: req.User, + IP: c.ClientIP(), + Parameter: "", + Header: headerString, + Method: "PUT", + Url: url, + Request: reqJson, + Respon: responJson, + ResponCode: 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, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } log.Println(err) c.JSON(http.StatusInternalServerError, res.MetaData) return } + responJson, err := json.Marshal(res) + if err != nil { + log.Println(err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } + logTimeEnd := time.Now().Format("2006-01-02 15:04:05") + reqUpdate := &sk.DataSuratKontrol{ DateUpdated: timeNow, ID: req.IDSurKon, @@ -266,7 +448,10 @@ func UpdateSuratKontrol(c *gin.Context) { err = suratkontrol.UpdateDataSuratKontrol(reqUpdate) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } @@ -291,7 +476,36 @@ func UpdateSuratKontrol(c *gin.Context) { err = suratkontrol.InsertDataSuratKontrol(reqInsert) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) + return + } + reqInsertLog := &logapi.DataLogAPI{ + ID: uuid, + DateCreated: logTimeEnd, + UserAgent: req.User, + IP: c.ClientIP(), + Parameter: "", + Header: headerString, + Method: "PUT", + Url: url, + Request: reqJson, + Respon: responJson, + ResponCode: 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, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } @@ -309,7 +523,10 @@ func DeleteSuratKontrol(c *gin.Context) { err := c.Bind(&req) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } @@ -328,7 +545,10 @@ func DeleteSuratKontrol(c *gin.Context) { err = suratkontrol.UpdateDataSuratKontrol(reqUpdate) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } res := &sk.MetadataString{ @@ -377,7 +597,10 @@ func DeleteSuratKontrol(c *gin.Context) { err = suratkontrol.UpdateDataSuratKontrol(reqUpdate) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } c.JSON(http.StatusOK, res) @@ -444,7 +667,9 @@ func GetSuratKontrolBySEP(c *gin.Context) { } func GetDataSurKon(c *gin.Context) { - data, err := suratkontrol.GetDataSuratKontrol() + offset := c.Param("offset") + limit := c.Param("limit") + data, err := suratkontrol.GetDataSuratKontrol(offset, limit) if err != nil { log.Println(err) c.JSON(http.StatusInternalServerError, &sk.MetadataString{ @@ -493,7 +718,10 @@ func GetDataSurKonByID(c *gin.Context) { data, err := suratkontrol.GetDataSuratKontrolByID(id) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } @@ -576,7 +804,10 @@ func CariPasienTPP(c *gin.Context) { err := c.ShouldBindJSON(&req) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } @@ -591,7 +822,10 @@ func CariPasienTPP(c *gin.Context) { data, err = suratkontrol.SearchDataSurKon(req, query, args) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } } else if req.NoSEP != "" { @@ -600,7 +834,10 @@ func CariPasienTPP(c *gin.Context) { data, err = suratkontrol.SearchDataSurKon(req, query, args) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } } else if req.PoliKlinik != "" { @@ -609,7 +846,10 @@ func CariPasienTPP(c *gin.Context) { data, err = suratkontrol.SearchDataSurKon(req, query, args) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } } else { @@ -617,7 +857,10 @@ func CariPasienTPP(c *gin.Context) { data, err = suratkontrol.SearchDataSurKon(req, query, args) if err != nil { log.Println(err) - c.JSON(http.StatusInternalServerError, err) + c.JSON(http.StatusInternalServerError, &sk.MetadataString{ + Code: "", + Message: err.Error(), + }) return } } diff --git a/main.go b/main.go index e3c5aec..0ccda7a 100644 --- a/main.go +++ b/main.go @@ -51,7 +51,7 @@ func main() { suratKontrol := v1.Group("/suratkontrol") { - suratKontrol.GET("/", suratkontrol.GetDataSurKon) + suratKontrol.GET("/offset/:offset/limit/:limit", suratkontrol.GetDataSurKon) suratKontrol.GET("/idxdaftar/:idxdaftar", suratkontrol.GetDataSurKonByID) suratKontrol.GET("/noSuratKontrol/:noSuratKontrol", suratkontrol.GetNomorSuratKontrol) suratKontrol.GET("/noSEP/:noSEP", suratkontrol.GetSuratKontrolBySEP) diff --git a/models/bpjs/surat_kontrol/surat_kontrol.go b/models/bpjs/surat_kontrol/surat_kontrol.go index 3dba70e..4e1271b 100644 --- a/models/bpjs/surat_kontrol/surat_kontrol.go +++ b/models/bpjs/surat_kontrol/surat_kontrol.go @@ -278,4 +278,6 @@ type RequestCariPasien struct { PoliKlinik string `json:"poliklinik"` TanggalAwal string `json:"tanggal_awal"` TanggalAkhir string `json:"tanggal_akhir"` -} + Offset string `json:"offset"` + Limit string `json:"limit"` +} \ No newline at end of file diff --git a/models/log_api/log_api.go b/models/log_api/log_api.go new file mode 100644 index 0000000..896a892 --- /dev/null +++ b/models/log_api/log_api.go @@ -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"` +}