2024-11-26 23:30:58 +00:00
|
|
|
package service
|
2024-11-26 23:28:48 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
2024-12-05 23:50:02 +00:00
|
|
|
"errors"
|
2024-11-26 23:28:48 +00:00
|
|
|
"git.itzana.me/strafesnet/maps-service/pkg/api"
|
|
|
|
"git.itzana.me/strafesnet/maps-service/pkg/datastore"
|
2024-11-29 23:49:25 +00:00
|
|
|
"github.com/nats-io/nats.go"
|
2024-11-26 23:28:48 +00:00
|
|
|
)
|
|
|
|
|
2024-12-05 23:50:02 +00:00
|
|
|
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")
|
|
|
|
)
|
|
|
|
|
2024-11-26 23:30:58 +00:00
|
|
|
type Service struct {
|
2024-12-12 22:29:20 +00:00
|
|
|
DB datastore.Datastore
|
2024-12-11 03:30:14 +00:00
|
|
|
Nats nats.JetStreamContext
|
2024-11-26 23:28:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// NewError creates *ErrorStatusCode from error returned by handler.
|
|
|
|
//
|
|
|
|
// Used for common default response.
|
2024-11-26 23:30:58 +00:00
|
|
|
func (svc *Service) NewError(ctx context.Context, err error) *api.ErrorStatusCode {
|
2024-12-11 05:49:03 +00:00
|
|
|
status := 500
|
2024-12-17 22:36:44 +00:00
|
|
|
if errors.Is(err, datastore.ErrNotExist) {
|
|
|
|
status = 404
|
|
|
|
}
|
2024-12-12 22:29:20 +00:00
|
|
|
if errors.Is(err, ErrPermissionDenied) {
|
2024-12-11 05:49:03 +00:00
|
|
|
status = 403
|
|
|
|
}
|
2024-12-12 22:29:20 +00:00
|
|
|
if errors.Is(err, ErrUserInfo) {
|
2024-12-11 05:49:03 +00:00
|
|
|
status = 401
|
|
|
|
}
|
2024-11-26 23:28:48 +00:00
|
|
|
return &api.ErrorStatusCode{
|
2024-12-11 05:49:03 +00:00
|
|
|
StatusCode: status,
|
2024-12-12 22:29:20 +00:00
|
|
|
Response: api.Error{
|
|
|
|
Code: int64(status),
|
2024-12-11 05:49:03 +00:00
|
|
|
Message: err.Error(),
|
|
|
|
},
|
2024-11-26 23:28:48 +00:00
|
|
|
}
|
|
|
|
}
|