package service import ( "context" "errors" "fmt" "git.itzana.me/strafesnet/go-grpc/maps" "git.itzana.me/strafesnet/maps-service/pkg/api" "git.itzana.me/strafesnet/maps-service/pkg/datastore" "github.com/nats-io/nats.go" ) var ( // ErrPermissionDenied caller does not have the required role ErrPermissionDenied = errors.New("Permission denied") // ErrUserInfo user info is missing for some reason ErrUserInfo = errors.New("Missing user info") ErrDelayReset = errors.New("Please give the validator at least 10 seconds to operate before attempting to reset the status") ErrPermissionDeniedNotSubmitter = fmt.Errorf("%w: You must be the submitter to perform this action", ErrPermissionDenied) ErrPermissionDeniedNeedRoleSubmissionRelease = fmt.Errorf("%w: Need Role SubmissionRelease", ErrPermissionDenied) ErrPermissionDeniedNeedRoleMapUpload = fmt.Errorf("%w: Need Role MapUpload", ErrPermissionDenied) ErrPermissionDeniedNeedRoleMapReview = fmt.Errorf("%w: Need Role MapReview", ErrPermissionDenied) ErrPermissionDeniedNeedRoleMapDownload = fmt.Errorf("%w: Need Role MapDownload", ErrPermissionDenied) ErrPermissionDeniedNeedRoleScriptWrite = fmt.Errorf("%w: Need Role ScriptWrite", ErrPermissionDenied) ErrPermissionDeniedNeedRoleMaptest = fmt.Errorf("%w: Need Role Maptest", ErrPermissionDenied) ) type Service struct { DB datastore.Datastore Nats nats.JetStreamContext Client maps.MapsServiceClient } // NewError creates *ErrorStatusCode from error returned by handler. // // Used for common default response. func (svc *Service) NewError(ctx context.Context, err error) *api.ErrorStatusCode { status := 500 if errors.Is(err, datastore.ErrNotExist) { status = 404 } if errors.Is(err, ErrPermissionDenied) { status = 403 } if errors.Is(err, ErrUserInfo) { status = 401 } return &api.ErrorStatusCode{ StatusCode: status, Response: api.Error{ Code: int64(status), Message: err.Error(), }, } }