-
Notifications
You must be signed in to change notification settings - Fork 4
/
helpers.go
81 lines (68 loc) · 1.79 KB
/
helpers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package dimension
import (
"context"
"encoding/json"
"io"
"io/ioutil"
"net/http"
"github.com/ONSdigital/dp-dataset-api/apierrors"
errs "github.com/ONSdigital/dp-dataset-api/apierrors"
"github.com/ONSdigital/dp-dataset-api/models"
dprequest "github.com/ONSdigital/dp-net/request"
"github.com/ONSdigital/log.go/v2/log"
)
const (
reqUser = "req_user"
reqCaller = "req_caller"
)
func unmarshalDimensionCache(reader io.Reader) (*models.CachedDimensionOption, error) {
b, err := ioutil.ReadAll(reader)
if err != nil {
return nil, errs.ErrUnableToReadMessage
}
var option models.CachedDimensionOption
err = json.Unmarshal(b, &option)
if err != nil {
return nil, errs.ErrUnableToParseJSON
}
if option.Name == "" || (option.Option == "" && option.CodeList == "") {
return nil, errs.ErrMissingParameters
}
return &option, nil
}
func handleDimensionErr(ctx context.Context, w http.ResponseWriter, err error, data log.Data) {
if data == nil {
data = log.Data{}
}
var status int
// Switch by error type
switch err.(type) {
case apierrors.ErrInvalidPatch:
status = http.StatusBadRequest
default:
// Switch by error message
switch {
case errs.NotFoundMap[err]:
status = http.StatusNotFound
case errs.BadRequestMap[err]:
status = http.StatusBadRequest
case errs.ConflictRequestMap[err]:
status = http.StatusConflict
default:
status = http.StatusInternalServerError
err = errs.ErrInternalServer
}
}
data["response_status"] = status
logError(ctx, err, data)
http.Error(w, err.Error(), status)
}
func logError(ctx context.Context, err error, data log.Data) {
if user := dprequest.User(ctx); user != "" {
data[reqUser] = user
}
if caller := dprequest.Caller(ctx); caller != "" {
data[reqCaller] = caller
}
log.Error(ctx, "unsuccessful request", err, data)
}