mirror of
https://github.com/Dvorinka/excalidraw-full.git
synced 2026-06-04 06:12:56 +00:00
eea09906f4
Instead of calling any third-party or home, we provide the stub for firebase API calls.
132 lines
3.1 KiB
Go
132 lines
3.1 KiB
Go
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
|
|
|
|
}
|
|
}
|