ente/server/pkg/api/remotestore.go
2024-03-01 13:37:01 +05:30

52 lines
1.4 KiB
Go

package api
import (
"fmt"
"net/http"
"github.com/ente-io/museum/ente"
"github.com/ente-io/museum/pkg/controller/remotestore"
"github.com/ente-io/museum/pkg/utils/handler"
"github.com/ente-io/stacktrace"
"github.com/gin-gonic/gin"
)
// RemoteStoreHandler expose request handlers to all remote store
type RemoteStoreHandler struct {
Controller *remotestore.Controller
}
// InsertOrUpdate handler for inserting or updating key
func (h *RemoteStoreHandler) InsertOrUpdate(c *gin.Context) {
var request ente.UpdateKeyValueRequest
if err := c.ShouldBindJSON(&request); err != nil {
handler.Error(c,
stacktrace.Propagate(ente.ErrBadRequest, fmt.Sprintf("Request binding failed %s", err)))
return
}
err := h.Controller.InsertOrUpdate(c, request)
if err != nil {
handler.Error(c, stacktrace.Propagate(err, "failed to update key's value"))
return
}
c.Status(http.StatusOK)
}
// GetKey handler for fetching a value for particular key
func (h *RemoteStoreHandler) GetKey(c *gin.Context) {
var request ente.GetValueRequest
if err := c.ShouldBindQuery(&request); err != nil {
handler.Error(c,
stacktrace.Propagate(ente.ErrBadRequest, fmt.Sprintf("Request binding failed %s", err)))
return
}
resp, err := h.Controller.Get(c, request)
if err != nil {
handler.Error(c, stacktrace.Propagate(err, "failed to get key value"))
return
}
c.JSON(http.StatusOK, resp)
}