|
1 | 1 | package main
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "io" |
4 | 5 | "net/http"
|
5 |
| - "reflect" |
6 |
| - "fmt" |
7 | 6 |
|
8 | 7 | spin_http "github.com/fermyon/spin/sdk/go/http"
|
9 | 8 | "github.com/fermyon/spin/sdk/go/key_value"
|
10 | 9 | )
|
11 | 10 |
|
12 | 11 | func init() {
|
13 |
| - |
14 | 12 | // handler for the http trigger
|
15 | 13 | spin_http.Handle(func(w http.ResponseWriter, r *http.Request) {
|
16 |
| - store, err := key_value.Open("default"); |
| 14 | + store, err := key_value.Open("default") |
17 | 15 | if err != nil {
|
18 | 16 | http.Error(w, err.Error(), http.StatusInternalServerError)
|
19 | 17 | return
|
20 | 18 | }
|
21 |
| - |
22 | 19 | defer key_value.Close(store)
|
23 | 20 |
|
24 |
| - if err := key_value.Set(store, "foo", []byte("bar")); err != nil { |
| 21 | + body, err := io.ReadAll(r.Body) |
| 22 | + if err != nil { |
25 | 23 | http.Error(w, err.Error(), http.StatusInternalServerError)
|
26 | 24 | return
|
27 | 25 | }
|
28 | 26 |
|
29 |
| - { |
30 |
| - expected := []byte("bar") |
31 |
| - if value, err := key_value.Get(store, "foo"); err != nil { |
| 27 | + switch r.Method { |
| 28 | + case http.MethodPost: |
| 29 | + err := key_value.Set(store, r.URL.Path, body) |
| 30 | + if err != nil { |
32 | 31 | http.Error(w, err.Error(), http.StatusInternalServerError)
|
33 | 32 | return
|
34 |
| - } else if !reflect.DeepEqual(value, expected) { |
35 |
| - http.Error( |
36 |
| - w, |
37 |
| - fmt.Sprintf("expected %v, got %v", expected, value), |
38 |
| - http.StatusInternalServerError, |
39 |
| - ) |
| 33 | + } |
| 34 | + |
| 35 | + w.WriteHeader(http.StatusOK) |
| 36 | + case http.MethodGet: |
| 37 | + value, err := key_value.Get(store, r.URL.Path) |
| 38 | + if err != nil { |
| 39 | + http.Error(w, err.Error(), http.StatusInternalServerError) |
40 | 40 | return
|
41 | 41 | }
|
42 |
| - } |
43 | 42 |
|
44 |
| - { |
45 |
| - expected := []string{"foo"} |
46 |
| - if value, err := key_value.GetKeys(store); err != nil { |
| 43 | + w.WriteHeader(http.StatusOK) |
| 44 | + w.Write(value) |
| 45 | + case http.MethodDelete: |
| 46 | + err := key_value.Delete(store, r.URL.Path) |
| 47 | + if err != nil { |
47 | 48 | http.Error(w, err.Error(), http.StatusInternalServerError)
|
48 | 49 | return
|
49 |
| - } else if !reflect.DeepEqual(value, expected) { |
50 |
| - http.Error( |
51 |
| - w, |
52 |
| - fmt.Sprintf("expected %v, got %v", expected, value), |
53 |
| - http.StatusInternalServerError, |
54 |
| - ) |
| 50 | + } |
| 51 | + |
| 52 | + w.WriteHeader(http.StatusOK) |
| 53 | + case http.MethodHead: |
| 54 | + exists, err := key_value.Exists(store, r.URL.Path) |
| 55 | + if err != nil { |
| 56 | + http.Error(w, err.Error(), http.StatusInternalServerError) |
55 | 57 | return
|
56 | 58 | }
|
57 |
| - } |
58 | 59 |
|
59 |
| - if err := key_value.Delete(store, "foo"); err != nil { |
60 |
| - http.Error(w, err.Error(), http.StatusInternalServerError) |
61 |
| - return |
62 |
| - } |
| 60 | + if exists { |
| 61 | + w.WriteHeader(http.StatusOK) |
| 62 | + return |
| 63 | + } |
63 | 64 |
|
64 |
| - if exists, err := key_value.Exists(store, "foo"); err != nil { |
65 |
| - http.Error(w, err.Error(), http.StatusInternalServerError) |
66 |
| - return |
67 |
| - } else if exists { |
68 |
| - http.Error(w, "key was not deleted as expected", http.StatusInternalServerError) |
69 |
| - return |
| 65 | + w.WriteHeader(http.StatusNotFound) |
| 66 | + default: |
| 67 | + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) |
70 | 68 | }
|
71 | 69 | })
|
72 | 70 | }
|
|
0 commit comments