68 lines
2.1 KiB
Go
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
|
|
}
|