package immunization import ( "context" "net/url" "service/internal/interfaces/satusehat" "service/pkg/errors" ) type Service interface { Create(ctx context.Context, req ImmunizationRequest) (*satusehat.FHIRResponse, error) Update(ctx context.Context, id string, req ImmunizationRequest) (*satusehat.FHIRResponse, error) Patch(ctx context.Context, id string, req ImmunizationPatchRequest) (*satusehat.FHIRResponse, error) GetByID(ctx context.Context, id string) (*satusehat.FHIRResponse, error) Search(ctx context.Context, queryParams url.Values) (*satusehat.FHIRResponse, error) } type service struct{ repo Repository } func NewService(repo Repository) Service { return &service{repo: repo} } func (s *service) Create(ctx context.Context, req ImmunizationRequest) (*satusehat.FHIRResponse, error) { return s.repo.Create(ctx, MapRequestToFHIR(req)) } func (s *service) Update(ctx context.Context, id string, req ImmunizationRequest) (*satusehat.FHIRResponse, error) { if id == "" { return nil, errors.NewValidationError().Message("ID is required").Build() } return s.repo.Update(ctx, id, MapRequestToFHIR(req).Set("id", id)) } func (s *service) Patch(ctx context.Context, id string, req ImmunizationPatchRequest) (*satusehat.FHIRResponse, error) { return s.repo.Patch(ctx, id, req) } func (s *service) GetByID(ctx context.Context, id string) (*satusehat.FHIRResponse, error) { return s.repo.GetByID(ctx, id) } func (s *service) Search(ctx context.Context, queryParams url.Values) (*satusehat.FHIRResponse, error) { return s.repo.Search(ctx, queryParams) }