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
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
|
|
}
|