Skip to content

Commit 82574f7

Browse files
committed
feat: added prelim logging routes
1 parent e026a34 commit 82574f7

File tree

5 files changed

+87
-1
lines changed

5 files changed

+87
-1
lines changed

internal/api/logs.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package api
2+
3+
import (
4+
"net/http"
5+
6+
"github.com/go-chi/chi/v5"
7+
"github.com/syntaxsdev/mercury/internal/handlers"
8+
"github.com/syntaxsdev/mercury/internal/services"
9+
)
10+
11+
func LogRoutes(r chi.Router, factory *services.Factory) {
12+
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
13+
handlers.GetAllLogs(w, r, factory)
14+
})
15+
16+
r.Post("/", func(w http.ResponseWriter, r *http.Request) {
17+
handlers.NewLog(w, r, factory)
18+
})
19+
}

internal/api/routes.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,9 @@ func InitRoutes(factory *services.Factory) http.Handler {
1313
r.Route("/strategy", func(r chi.Router) {
1414
StrategyRoutes(r, factory)
1515
})
16+
17+
r.Route("/logs", func(r chi.Router) {
18+
LogRoutes(r, factory)
19+
})
1620
return r
1721
}

internal/handlers/logging.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package handlers
2+
3+
import (
4+
"encoding/json"
5+
"net/http"
6+
7+
"github.com/syntaxsdev/mercury/internal/services"
8+
"github.com/syntaxsdev/mercury/models"
9+
"go.mongodb.org/mongo-driver/bson"
10+
)
11+
12+
// Create a new log
13+
func GetAllLogs(w http.ResponseWriter, r *http.Request, f *services.Factory) {
14+
var logs []*interface{}
15+
err := f.MongoService.All("logs", bson.M{}, &logs)
16+
if err != nil {
17+
WriteHttp(w, http.StatusInternalServerError, "Failed to retrieve logs.", err)
18+
return
19+
}
20+
WriteHttp(w, http.StatusOK, "Successfully fetched all logs", logs)
21+
}
22+
23+
// Get log of a specific strategy
24+
// func GetLog(w http.ResponseWriter, r *http.Request, f *services.Factory) {
25+
// var logs []*interface{}
26+
// var filterPayload map[string]interface{}
27+
28+
// var payload map[string]interface{}
29+
// if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
30+
// payload = nil
31+
// }
32+
33+
// err := f.MongoService.All("logs", bson.M(filterPayload), &logs)
34+
// if err != nil {
35+
// WriteHttp(w, http.StatusInternalServerError, "Failed to retrieve logs.", err)
36+
// return
37+
// }
38+
// WriteHttp(w, http.StatusOK, "Successfully fetched all logs", logs)
39+
// }
40+
41+
// Create a new log
42+
func NewLog(w http.ResponseWriter, r *http.Request, f *services.Factory) {
43+
var newLog models.Log
44+
if err := json.NewDecoder(r.Body).Decode(&newLog); err != nil {
45+
WriteHttp(w, http.StatusBadRequest, "Invalid Log object in payload!", err)
46+
return
47+
}
48+
if _, err := f.MongoService.Insert("logs", newLog); err != nil {
49+
WriteHttp(w, http.StatusInternalServerError, "Could not add log to database.", err)
50+
return
51+
}
52+
WriteHttp(w, http.StatusCreated, "Success", nil)
53+
}

internal/handlers/strategy.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111

1212
// Get All Strategies
1313
func GetAllStrategies(w http.ResponseWriter, r *http.Request, f *services.Factory) {
14-
var results []interface{}
14+
var results []*interface{}
1515
var payload map[string]interface{}
1616
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
1717
payload = nil

models/logs.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package models
2+
3+
import "time"
4+
5+
type Log struct {
6+
Strategy string `json:"strategy" bson:"strategy"`
7+
Timestamp time.Time `json:"timestamp" bson:"timestamp"`
8+
Message string `json:"message" bson:"message"`
9+
Meta map[string]interface{} `json:"meta" bson:"meta"`
10+
}

0 commit comments

Comments
 (0)