implement POST /event on cache-service

master
Bel LaPointe 2023-10-11 15:49:02 -06:00
parent 27ea083084
commit 3f85a61e5e
2 changed files with 69 additions and 0 deletions

View File

@ -0,0 +1,22 @@
package main
import (
"flag"
"fmt"
"log"
"net/http"
)
func main() {
port := flag.Int("p", 8080, "port to listen on")
flag.Parse()
server := NewServer()
addr := fmt.Sprintf(":%d", *port) // check port >0 // accept IP for mvp security
// add signal catching for clean shutdown via context and httpServer or the like
log.Printf("listening on %s", addr)
if err := http.ListenAndServe(addr, server); err != nil {
panic(err)
}
}

View File

@ -0,0 +1,47 @@
package main
import (
"encoding/json"
"log"
"net/http"
"render231011/internal/thestore"
"strings"
)
type Server struct {
store *thestore.Store
}
func NewServer() Server {
return Server{
store: thestore.NewStore(),
}
}
func (server Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// todo middleware: rate limit
// todo middleware: timeout requests
// todo: replace with an actual router
if strings.HasPrefix(r.URL.Path, "/event") && r.Method == http.MethodPost {
server.servePostEvent(w, r)
} else if r.URL.Path == "/events" && r.Method == http.MethodGet {
server.serveGetEvents(w, r)
}
}
func (server Server) servePostEvent(w http.ResponseWriter, r *http.Request) {
var newEvent thestore.Event
if err := json.NewDecoder(r.Body).Decode(&newEvent); err != nil {
w.WriteHeader(http.StatusBadRequest)
// todo error msg pls
return
}
// todo check if action==updated service-id already exists
server.store.Push(newEvent)
log.Printf("ingested event %+v", newEvent)
}
func (server Server) serveGetEvents(w http.ResponseWriter, r *http.Request) {
// todo my circular queue magic
}