| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- package firebase
- import (
- "fmt"
- "net/http"
- "time"
- "github.com/go-chi/chi/v5"
- "github.com/go-chi/render"
- )
- type (
- BatchGetRequest struct {
- Documents []string `json:"documents"`
- }
- BatchGetEmptyResponse struct {
- Missing string `json:"missing"`
- ReadTime string `json:"readTime"`
- }
- FoundInfoResponse struct {
- Name string `json:"name"`
- Fields interface{} `json:"fields"`
- CreateTime string `json:"createTime"`
- UpdateTime string `json:"updateTime"`
- }
- BatchGetExistsResponse struct {
- Found FoundInfoResponse `json:"found"`
- ReadTime string `json:"readTime"`
- }
- UpdateRequest struct {
- Name string `json:"name"`
- Fields interface{} `json:"fields"`
- }
- WriteRequest struct {
- Update UpdateRequest `json:"update"`
- }
- BatchCommitRequest struct {
- Writes []WriteRequest `json:"writes"`
- }
- WriteResult struct {
- UpdateTime string `json:"updateTime"`
- }
- BatchCommitResponse struct {
- WriteResults []WriteResult `json:"writeResults"`
- CommitTime string `json:"commitTime"`
- }
- )
- var savedItems = make(map[string]interface{})
- func (body *BatchGetRequest) Bind(r *http.Request) (err error) {
- return nil
- }
- func (body *BatchCommitRequest) Bind(r *http.Request) (err error) {
- return nil
- }
- func HandleBatchCommit() http.HandlerFunc {
- return func(w http.ResponseWriter, r *http.Request) {
- projectId := chi.URLParam(r, "project_id")
- databaseId := chi.URLParam(r, "database_id")
- _ = projectId
- _ = databaseId
- data := &BatchCommitRequest{}
- // Seems like requests is text/plain but content is json ...
- if err := render.DecodeJSON(r.Body, data); err != nil {
- fmt.Println(err)
- render.Status(r, http.StatusBadRequest)
- return
- }
- savedItems[data.Writes[0].Update.Name] = data.Writes[0].Update.Fields
- render.JSON(w, r, BatchCommitResponse{
- CommitTime: time.Now().Format(time.RFC3339),
- WriteResults: []WriteResult{
- WriteResult{UpdateTime: time.Now().Format(time.RFC3339)},
- },
- })
- render.Status(r, http.StatusOK)
- return
- }
- }
- func HandleBatchGet() http.HandlerFunc {
- return func(w http.ResponseWriter, r *http.Request) {
- projectId := chi.URLParam(r, "project_id")
- databaseId := chi.URLParam(r, "database_id")
- fmt.Printf("Got %v and %v\n", projectId, databaseId)
- data := &BatchGetRequest{}
- // Seems like requests is text/plain but content is json ...
- if err := render.DecodeJSON(r.Body, data); err != nil {
- fmt.Println(err)
- render.Status(r, http.StatusBadRequest)
- return
- }
- key := data.Documents[0]
- fmt.Printf("Got key %v \n", key)
- fields, ok := savedItems[key]
- if !ok {
- fmt.Println("missing key")
- render.JSON(w, r, []BatchGetEmptyResponse{BatchGetEmptyResponse{
- Missing: key,
- ReadTime: time.Now().Format(time.RFC3339),
- }})
- render.Status(r, http.StatusOK)
- return
- }
- fmt.Println("existing key")
- render.JSON(w, r, []BatchGetExistsResponse{BatchGetExistsResponse{
- Found: FoundInfoResponse{
- Name: key,
- Fields: fields,
- CreateTime: time.Now().Format(time.RFC3339),
- UpdateTime: time.Now().Format(time.RFC3339),
- },
- ReadTime: time.Now().Format(time.RFC3339),
- }})
- render.Status(r, http.StatusOK)
- return
- }
- }
|