Compare commits

...

2 Commits

Author SHA1 Message Date
2739dafe3d Add list to server 2022-04-20 22:53:41 +02:00
a0c06e5615 Add list to store 2022-04-20 22:51:06 +02:00
4 changed files with 32 additions and 0 deletions

View File

@ -10,3 +10,7 @@ type ResponseIndex struct {
type ResponseAPIPost struct { type ResponseAPIPost struct {
ID string `json:"id"` ID string `json:"id"`
} }
type ResponseAPIList struct {
IDs []string `json:"ids"`
}

View File

@ -34,6 +34,7 @@ func NewServer(s store.Store) *Server {
r.Get("/", srv.HandlerIndexGet) r.Get("/", srv.HandlerIndexGet)
r.Route("/api", func(r chi.Router) { r.Route("/api", func(r chi.Router) {
r.Get("/{id}", srv.HandlerAPIGet) r.Get("/{id}", srv.HandlerAPIGet)
r.Get("/", srv.HandlerAPIList)
r.Post("/", srv.HandlerAPIPost) r.Post("/", srv.HandlerAPIPost)
}) })
@ -101,6 +102,7 @@ func (s *Server) HandlerAPIPost(w http.ResponseWriter, r *http.Request) {
} }
} else { } else {
// Is not multipart // Is not multipart
// TODO: Not working
if mediaType == "application/x-www-form-urlencoded" { if mediaType == "application/x-www-form-urlencoded" {
if err := r.ParseForm(); err != nil { if err := r.ParseForm(); err != nil {
log.Printf("Error parsing form: %s", err) log.Printf("Error parsing form: %s", err)
@ -145,3 +147,17 @@ func (s *Server) HandlerAPIGet(w http.ResponseWriter, r *http.Request) {
log.Panicf("Error writing to client: %s", err) log.Panicf("Error writing to client: %s", err)
} }
} }
func (s *Server) HandlerAPIList(w http.ResponseWriter, r *http.Request) {
ids, err := s.store.List()
if err != nil {
log.Panicf("Error listing store contents: %s", err)
}
resp := &ResponseAPIList{IDs: ids}
encoder := json.NewEncoder(w)
if err := encoder.Encode(resp); err != nil {
log.Panicf("Error encoding response to client: %s", err)
}
}

View File

@ -8,6 +8,8 @@ import (
"github.com/google/uuid" "github.com/google/uuid"
) )
var _ Store = &MemoryStore{}
type MemoryStore struct { type MemoryStore struct {
data map[string][]byte data map[string][]byte
} }
@ -44,3 +46,12 @@ func (s *MemoryStore) Get(id string) (io.ReadCloser, error) {
return r, nil return r, nil
} }
func (s *MemoryStore) List() ([]string, error) {
var ids []string
for id := range s.data {
ids = append(ids, id)
}
return ids, nil
}

View File

@ -11,4 +11,5 @@ type Store interface {
Add(r io.Reader) (string, error) Add(r io.Reader) (string, error)
Delete(id string) error Delete(id string) error
Get(id string) (io.ReadCloser, error) Get(id string) (io.ReadCloser, error)
List() ([]string, error)
} }