Skip to content

Commit 3f15c3e

Browse files
committed
Settings fetcher endpoint
1 parent c3bfa1c commit 3f15c3e

File tree

4 files changed

+81
-1
lines changed

4 files changed

+81
-1
lines changed

pkg/api/settingfetcher/endpoint.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package settingfetcher
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"strconv"
7+
8+
"github.com/gemsorg/assignment/pkg/apierror"
9+
"github.com/gemsorg/assignment/pkg/authentication"
10+
ds "github.com/gemsorg/assignment/pkg/datastore"
11+
"github.com/gemsorg/assignment/pkg/service"
12+
"github.com/go-kit/kit/endpoint"
13+
)
14+
15+
func makeSettingFetcherEndpoint(svc service.AssignmentService) endpoint.Endpoint {
16+
return func(ctx context.Context, request interface{}) (interface{}, error) {
17+
data, _ := authentication.ParseAuthData(ctx)
18+
svc.SetAuthData(data)
19+
req := request.(SettingRequest)
20+
21+
jobID, err := strconv.ParseUint(req.JobID, 10, 64)
22+
if err != nil {
23+
return nil, errorResponse(err)
24+
}
25+
26+
s, err := svc.GetSettings(jobID)
27+
if _, ok := err.(ds.NoRowErr); ok {
28+
return json.RawMessage("{}"), nil
29+
}
30+
if err != nil {
31+
return nil, errorResponse(err)
32+
}
33+
return s, nil
34+
}
35+
}
36+
37+
func errorResponse(err error) *apierror.APIError {
38+
return apierror.New(500, err.Error(), err)
39+
}
40+
41+
type SettingRequest struct {
42+
JobID string
43+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package settingfetcher
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"fmt"
7+
"net/http"
8+
9+
"github.com/gemsorg/assignment/pkg/service"
10+
kithttp "github.com/go-kit/kit/transport/http"
11+
"github.com/gorilla/mux"
12+
)
13+
14+
func MakeHandler(s service.AssignmentService) http.Handler {
15+
return kithttp.NewServer(
16+
makeSettingFetcherEndpoint(s),
17+
decodeSettingFetcherRequest,
18+
encodeResponse,
19+
)
20+
}
21+
22+
func encodeResponse(ctx context.Context, w http.ResponseWriter, response interface{}) error {
23+
w.Header().Set("Content-Type", "application/json; charset=utf-8")
24+
return json.NewEncoder(w).Encode(response)
25+
}
26+
27+
func decodeSettingFetcherRequest(_ context.Context, r *http.Request) (interface{}, error) {
28+
vars := mux.Vars(r)
29+
var ok bool
30+
jobID, ok := vars["job_id"]
31+
if !ok {
32+
return nil, fmt.Errorf("missing job_id parameter")
33+
}
34+
return SettingRequest{JobID: jobID}, nil
35+
}

pkg/datastore/errors.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@ func (err AssignmentNotFound) Error() string {
2020
type NoRowErr struct{}
2121

2222
func (err NoRowErr) Error() string {
23-
return "Query returned no rows"
23+
return "No Records"
2424
}

pkg/server/server.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"github.com/gemsorg/assignment/pkg/api/assignmentdestroyer"
88
"github.com/gemsorg/assignment/pkg/api/assignmentfetcher"
99
"github.com/gemsorg/assignment/pkg/api/assignmentupdater"
10+
"github.com/gemsorg/assignment/pkg/api/settingfetcher"
1011

1112
"github.com/gemsorg/assignment/pkg/authentication"
1213

@@ -29,6 +30,7 @@ func New(
2930
r.Handle("/assignments", assignmentcreator.MakeHandler(s)).Methods("POST")
3031
r.Handle("/assignments", assignmentdestroyer.MakeHandler(s)).Methods("DELETE")
3132
r.Handle("/assignments", assignmentupdater.MakeHandler(s)).Methods("PATCH")
33+
r.Handle("/settings/{job_id}", settingfetcher.MakeHandler(s)).Methods("GET")
3234
r.Use(authentication.AuthMiddleware)
3335
return withHandlers(r)
3436
}

0 commit comments

Comments
 (0)