diff options
| author | Paul Buetow <paul@buetow.org> | 2024-05-06 20:32:35 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-05-06 20:32:35 +0300 |
| commit | 8c2e75df51d1a74d8bca1d3d1a423f777159ba82 (patch) | |
| tree | b340984869230f92d0aea54d104efc5618c54954 /internal/server/handle/handle.go | |
| parent | d06809e50aa20b7f2e12ed43374aebb39e77a220 (diff) | |
refactor project file structure
Diffstat (limited to 'internal/server/handle/handle.go')
| -rw-r--r-- | internal/server/handle/handle.go | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/internal/server/handle/handle.go b/internal/server/handle/handle.go new file mode 100644 index 0000000..d1f7748 --- /dev/null +++ b/internal/server/handle/handle.go @@ -0,0 +1,80 @@ +package handle + +import ( + "encoding/json" + "fmt" + "io" + "net/http" + "os" + "regexp" + "time" + + "codeberg.org/snonux/gos/internal" + "codeberg.org/snonux/gos/internal/server/repository" + "codeberg.org/snonux/gos/internal/types" +) + +var getIDRe = regexp.MustCompile(`^/[0-9]{4}/[a-z0-9]{64}\.json$`) + +func Submit(w http.ResponseWriter, r *http.Request, dataDir string) error { + if r.Method != "POST" { + return fmt.Errorf("expexted POST request") + } + + bytes, err := io.ReadAll(r.Body) + if err != nil { + return err + } + + entry, err := types.NewEntry(bytes) + if err != nil { + return err + } + filePath := fmt.Sprintf("%s/%s/%s.json", dataDir, time.Now().Format("2006"), entry.ID) + + jsonStr, err := entry.Serialize() + if err != nil { + return err + } + + if err := internal.SaveFile(filePath, jsonStr); err != nil { + return err + } + + return nil +} + +func List(w http.ResponseWriter, r *http.Request, dataDir string) error { + if r.Method != "GET" { + return fmt.Errorf("expexted GET request") + } + + repository := repository.New(dataDir) + ids, err := repository.List() + if err != nil { + return err + } + + jsonData, err := json.Marshal(ids) + if err != nil { + return err + } + + fmt.Fprint(w, string(jsonData)) + return nil +} + +func Get(w http.ResponseWriter, r *http.Request, dataDir string) error { + path := r.URL.Query().Get("path") + if !getIDRe.MatchString(path) { + return fmt.Errorf("invalid path %s", path) + } + + data, err := os.ReadFile(fmt.Sprintf("%s/%s", dataDir, path)) + if err != err { + return err + } + + fmt.Fprint(w, string(data)) + return nil +} |
