package api import ( "encoding/json" "memos/api/e" "memos/store" "net/http" "github.com/gorilla/mux" ) func handleGetMyQueries(w http.ResponseWriter, r *http.Request) { userId, _ := GetUserIdInSession(r) queries, err := store.GetQueriesByUserId(userId) if err != nil { e.ErrorHandler(w, "DATABASE_ERROR", err.Error()) return } json.NewEncoder(w).Encode(Response{ Succeed: true, Message: "", Data: queries, }) } func handleCreateQuery(w http.ResponseWriter, r *http.Request) { userId, _ := GetUserIdInSession(r) type CreateQueryDataBody struct { Title string `json:"title"` Querystring string `json:"querystring"` } queryData := CreateQueryDataBody{} err := json.NewDecoder(r.Body).Decode(&queryData) if err != nil { e.ErrorHandler(w, "REQUEST_BODY_ERROR", "Bad request") return } query, err := store.CreateNewQuery(queryData.Title, queryData.Querystring, userId) if err != nil { e.ErrorHandler(w, "DATABASE_ERROR", err.Error()) return } json.NewEncoder(w).Encode(Response{ Succeed: true, Message: "", Data: query, }) } func handleUpdateQuery(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) queryId := vars["id"] queryPatch := store.QueryPatch{} err := json.NewDecoder(r.Body).Decode(&queryPatch) if err != nil { e.ErrorHandler(w, "REQUEST_BODY_ERROR", "Bad request") return } query, err := store.UpdateQuery(queryId, &queryPatch) if err != nil { e.ErrorHandler(w, "DATABASE_ERROR", err.Error()) return } json.NewEncoder(w).Encode(Response{ Succeed: true, Message: "", Data: query, }) } func handleDeleteQuery(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) queryId := vars["id"] err := store.DeleteQuery(queryId) if err != nil { e.ErrorHandler(w, "DATABASE_ERROR", err.Error()) return } json.NewEncoder(w).Encode(Response{ Succeed: true, Message: "", Data: nil, }) } func RegisterQueryRoutes(r *mux.Router) { queryRouter := r.PathPrefix("/api/query").Subrouter() queryRouter.Use(JSONResponseMiddleWare) queryRouter.Use(AuthCheckerMiddleWare) queryRouter.HandleFunc("/all", handleGetMyQueries).Methods("GET") queryRouter.HandleFunc("/", handleCreateQuery).Methods("PUT") queryRouter.HandleFunc("/{id}", handleUpdateQuery).Methods("PATCH") queryRouter.HandleFunc("/{id}", handleDeleteQuery).Methods("DELETE") }