264 lines
8.9 KiB
Go
264 lines
8.9 KiB
Go
package actions
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"errors"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/FrankenBotDev/FrankenAPI/ent"
|
|
"github.com/FrankenBotDev/FrankenAPI/ent/actions"
|
|
"github.com/FrankenBotDev/FrankenAPI/pkg/routes/logger"
|
|
"github.com/FrankenBotDev/FrankenAPI/pkg/sys"
|
|
"github.com/go-chi/chi/v5"
|
|
)
|
|
|
|
func ActionRouter() http.Handler {
|
|
r := chi.NewRouter()
|
|
|
|
r.Get("/", getActions)
|
|
r.Get("/search", getActionsbyID)
|
|
r.Post("/", addAction)
|
|
r.Put("/", updateAction)
|
|
r.Delete("/", deleteAction)
|
|
|
|
return r
|
|
}
|
|
|
|
func getActions(w http.ResponseWriter, r *http.Request) {
|
|
actionRequest := r.URL.Query()
|
|
|
|
if actionRequest.Get("serverid") != "" {
|
|
if actionRequest.Get("commiterid") != "" {
|
|
actions, err := r.Context().Value(sys.EntClientKey).(*ent.Client).Actions.Query().
|
|
Where(actions.Serverid(actionRequest.Get("serverid"))).
|
|
Order(ent.Desc(actions.FieldID)).
|
|
All(r.Context().Value(sys.ContextClientKey).(context.Context))
|
|
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "could_not_fetch_from_database", err)
|
|
}
|
|
|
|
sys.SuccessJsonResponse(w, actions)
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("commiterid needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("serverid needs to be set"))
|
|
}
|
|
}
|
|
|
|
func getActionsbyID(w http.ResponseWriter, r *http.Request) {
|
|
actionRequest := r.URL.Query()
|
|
|
|
if actionRequest.Get("serverid") != "" {
|
|
if actionRequest.Get("commiterid") != "" {
|
|
if actionRequest.Get("refid") != "" {
|
|
actions, err := r.Context().Value(sys.EntClientKey).(*ent.Client).Actions.Query().
|
|
Where(actions.Serverid(actionRequest.Get("serverid")), actions.Refid(actionRequest.Get("refid"))).
|
|
All(r.Context().Value(sys.ContextClientKey).(context.Context))
|
|
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "could_not_fetch_from_database", err)
|
|
}
|
|
|
|
sys.SuccessJsonResponse(w, actions)
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("refid needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("commiterid needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("serverid needs to be set"))
|
|
}
|
|
}
|
|
|
|
func addAction(w http.ResponseWriter, r *http.Request) {
|
|
|
|
actionData, err := ioutil.ReadAll(r.Body)
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "could_not_find_data_in_request", errors.New("the request appears to be empty"))
|
|
}
|
|
|
|
// proccess data
|
|
actionJson := make(map[string]any)
|
|
err = json.Unmarshal(actionData, &actionJson)
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "could_not_proccess_data", errors.New("request data could not be proccessed"))
|
|
}
|
|
|
|
devRefid := sys.RandStringRunes(16)
|
|
|
|
if actionJson["serverid"].(string) != "" {
|
|
if actionJson["comiterid"].(string) != "" {
|
|
if devRefid != "" {
|
|
if actionJson["target"].(string) != "" {
|
|
if actionJson["type"].(string) != "" {
|
|
if actionJson["duration"].(string) != "" {
|
|
if actionJson["reason"].(string) != "" {
|
|
if strconv.FormatBool(actionJson["temp"].(bool)) != "" {
|
|
_, err := r.Context().Value(sys.EntClientKey).(*ent.Client).Actions.Create().
|
|
SetRefid(devRefid).
|
|
SetServerid(actionJson["serverid"].(string)).
|
|
SetTarget(actionJson["target"].(string)).
|
|
SetType(actionJson["type"].(string)).
|
|
SetDuration(actionJson["duration"].(string)).
|
|
SetCommiter(actionJson["comiterid"].(string)).
|
|
SetReason(actionJson["reason"].(string)).
|
|
SetTemp(actionJson["temp"].(bool)).
|
|
Save(r.Context().Value(sys.ContextClientKey).(context.Context))
|
|
|
|
logger.Logtodb([]string{
|
|
actionJson["comiterid"].(string),
|
|
"Created action with RefID: " + devRefid,
|
|
"Action Create",
|
|
actionJson["serverid"].(string),
|
|
},
|
|
r.Context().Value(sys.EntClientKey).(*ent.Client),
|
|
r.Context().Value(sys.ContextClientKey).(context.Context))
|
|
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "data_could_not_be_updated", err)
|
|
}
|
|
|
|
sys.SuccessJsonResponse(w, "data_updated")
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("temp needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("reason needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("duration needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("type needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("target need to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("refid needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("commiterid needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("serverid needs to be set"))
|
|
}
|
|
|
|
}
|
|
|
|
func deleteAction(w http.ResponseWriter, r *http.Request) {
|
|
actionData, err := ioutil.ReadAll(r.Body)
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "could_not_find_data_in_request", errors.New("the request appears to be empty"))
|
|
}
|
|
|
|
// proccess data
|
|
actionJson := make(map[string]any)
|
|
err = json.Unmarshal(actionData, &actionJson)
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "could_not_proccess_data", errors.New("request data could not be proccessed"))
|
|
}
|
|
|
|
if actionJson["comiterid"].(string) != "" {
|
|
if actionJson["serverid"].(string) != "" {
|
|
if actionJson["refid"].(string) != "" {
|
|
|
|
_, err = r.Context().Value(sys.EntClientKey).(*ent.Client).Actions.Delete().
|
|
Where(actions.Serverid(actionJson["serverid"].(string)), actions.Refid(actionJson["refid"].(string))).
|
|
Exec(r.Context().Value(sys.ContextClientKey).(context.Context))
|
|
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "data_could_not_be_removed", err)
|
|
}
|
|
|
|
logger.Logtodb([]string{
|
|
actionJson["comiterid"].(string),
|
|
"Deleted action with RefID: " + actionJson["refid"].(string),
|
|
"Action Delete",
|
|
actionJson["serverid"].(string),
|
|
}, r.Context().Value(sys.EntClientKey).(*ent.Client),
|
|
r.Context().Value(sys.ContextClientKey).(context.Context))
|
|
|
|
sys.SuccessJsonResponse(w, "data_updated")
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func updateAction(w http.ResponseWriter, r *http.Request) {
|
|
actionData, err := ioutil.ReadAll(r.Body)
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "could_not_find_data_in_request", errors.New("the request appears to be empty"))
|
|
}
|
|
|
|
// proccess data
|
|
actionJson := make(map[string]any)
|
|
err = json.Unmarshal(actionData, &actionJson)
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "could_not_proccess_data", errors.New("request data could not be proccessed"))
|
|
}
|
|
|
|
if actionJson["serverid"].(string) != "" {
|
|
if actionJson["commiter"].(string) != "" {
|
|
if actionJson["refid"].(string) != "" {
|
|
if actionJson["target"].(string) != "" {
|
|
if actionJson["type"].(string) != "" {
|
|
if actionJson["duration"].(string) != "" {
|
|
if actionJson["reason"].(string) != "" {
|
|
if strconv.FormatBool(actionJson["temp"].(bool)) != "" {
|
|
_, err := r.Context().Value(sys.EntClientKey).(*ent.Client).Actions.Update().
|
|
Where(actions.Serverid(actionJson["serverid"].(string)), actions.Refid(actionJson["refid"].(string))).
|
|
SetRefid(actionJson["refid"].(string)).
|
|
SetTarget(actionJson["target"].(string)).
|
|
SetType(actionJson["type"].(string)).
|
|
SetDuration(actionJson["duration"].(string)).
|
|
SetCommiter(actionJson["commiter"].(string)).
|
|
SetReason(actionJson["reason"].(string)).
|
|
SetTemp(actionJson["temp"].(bool)).
|
|
Save(r.Context().Value(sys.ContextClientKey).(context.Context))
|
|
if err != nil {
|
|
sys.ErrorJsonResponse(w, "data_could_not_be_updated", err)
|
|
}
|
|
|
|
logger.Logtodb([]string{
|
|
actionJson["commiter"].(string),
|
|
"Updated Action with RefID: " + actionJson["refid"].(string),
|
|
"Action Update",
|
|
actionJson["serverid"].(string),
|
|
}, r.Context().Value(sys.EntClientKey).(*ent.Client),
|
|
r.Context().Value(sys.ContextClientKey).(context.Context))
|
|
|
|
sys.SuccessJsonResponse(w, "data_updated")
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("temp needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("reason needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("duration needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("type needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("target need to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("refid needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("commiterid needs to be set"))
|
|
}
|
|
} else {
|
|
sys.ErrorJsonResponse(w, "missing_param", errors.New("serverid needs to be set"))
|
|
}
|
|
}
|