Files
satusehat-service/internal/bpjs/vclaim/sep/repository.go
T
2026-04-14 01:23:34 +00:00

68 lines
2.1 KiB
Go

package sep
import (
"context"
"encoding/json"
"fmt"
"service/internal/interfaces/bpjs"
)
type Repository interface {
CreateSEP(ctx context.Context, req CreateSEPRequest) (*CreateSEPResponse, error)
UpdateSEP(ctx context.Context, req UpdateSEPRequest) (string, error)
DeleteSEP(ctx context.Context, req DeleteSEPRequest) (string, error)
GetSEP(ctx context.Context, noSEP string) (*SEPDetailResponse, error)
}
type repository struct {
client bpjs.BpjsClient
}
func NewRepository(client bpjs.BpjsClient) Repository {
return &repository{client: client}
}
func (r *repository) CreateSEP(ctx context.Context, req CreateSEPRequest) (*CreateSEPResponse, error) {
endpoint := "SEP/2.0/insert"
decryptedBytes, err := r.client.DoRequest(ctx, "POST", endpoint, req)
if err != nil {
return nil, err
}
var result CreateSEPResponse
return &result, json.Unmarshal(decryptedBytes, &result)
}
func (r *repository) UpdateSEP(ctx context.Context, req UpdateSEPRequest) (string, error) {
endpoint := "SEP/2.0/update"
decryptedBytes, err := r.client.DoRequest(ctx, "PUT", endpoint, req)
if err != nil {
return "", err
}
// Response dari update SEP biasanya hanya string nomor SEP itu sendiri
return string(decryptedBytes), nil
}
func (r *repository) DeleteSEP(ctx context.Context, req DeleteSEPRequest) (string, error) {
endpoint := "SEP/2.0/delete"
// BPJS API untuk delete menggunakan POST method dengan payload spesifik
decryptedBytes, err := r.client.DoRequest(ctx, "POST", endpoint, req)
if err != nil {
return "", err
}
// Response dari delete SEP biasanya hanya string "OK" atau pesan konfirmasi
return string(decryptedBytes), nil
}
func (r *repository) GetSEP(ctx context.Context, noSEP string) (*SEPDetailResponse, error) {
endpoint := fmt.Sprintf("SEP/%s", noSEP)
decryptedBytes, err := r.client.DoRequest(ctx, "GET", endpoint, nil)
if err != nil {
return nil, err
}
var result SEPDetailResponse
if err := json.Unmarshal(decryptedBytes, &result); err != nil {
return nil, fmt.Errorf("failed to unmarshal SEP detail response: %w", err)
}
return &result, nil
}