You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
1.8 KiB

package internal
import (
"encoding/json"
"net/http"
"strconv"
"github.com/go-chi/chi"
)
func (a *adminHandler) createRule(r *http.Request) (*RestResponse, error) {
var rr RuleRow
if err := json.NewDecoder(r.Body).Decode(&rr); err != nil {
return ErrorResponse(http.StatusUnprocessableEntity, err), nil
}
if err := a.Storage.AddRule(rr); err != nil {
return nil, err
}
return BasicResponse(true, nil), nil
}
func (a *adminHandler) getRule(r *http.Request) (*RestResponse, error) {
ruleIdParam := chi.URLParam(r, "id")
ruleId, err := strconv.Atoi(ruleIdParam)
if err != nil {
return BasicResponse(false, "`id` must be a valid integer."), nil
}
results, err := a.Storage.GetRule(ruleId)
if err != nil {
return nil, err
}
return BasicResponse(true, results), nil
}
func (a *adminHandler) getRules(r *http.Request) (*RestResponse, error) {
results, err := a.Storage.GetRules()
if err != nil {
return nil, err
}
if len(results) <= 0 {
results = []RuleRow{}
}
return BasicResponse(true, results), nil
}
func (a *adminHandler) deleteRule(r *http.Request) (*RestResponse, error) {
ruleIdParam := chi.URLParam(r, "id")
ruleId, err := strconv.Atoi(ruleIdParam)
if err != nil {
return BasicResponse(false, "`id` must be a valid integer"), nil
}
if err := a.Storage.DeleteRule(ruleId); err != nil {
return nil, err
}
rule, err := a.Storage.GetRule(ruleId)
if err != nil {
return nil, err
}
return BasicResponse(true, rule), nil
}
func (a *adminHandler) updateRule(r *http.Request) (*RestResponse, error) {
var rr RuleRow
if err := json.NewDecoder(r.Body).Decode(&rr); err != nil {
return ErrorResponse(http.StatusUnprocessableEntity, err), nil
}
if err := a.UpdateRule(rr.ID, rr); err != nil {
return nil, err
}
rule, err := a.GetRule(rr.ID)
if err != nil {
return nil, err
}
return BasicResponse(true, rule), nil
}