mirror of
https://github.com/Dvorinka/excalidraw-full.git
synced 2026-06-03 22:02:57 +00:00
Intercept calls to firebase API
Instead of calling any third-party or home, we provide the stub for firebase API calls.
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
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
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user