testt run code
This commit is contained in:
263
pkg/routes/actions/actions.go
Normal file
263
pkg/routes/actions/actions.go
Normal file
@ -0,0 +1,263 @@
|
||||
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"))
|
||||
}
|
||||
}
|
80
pkg/routes/logger/logger.go
Normal file
80
pkg/routes/logger/logger.go
Normal file
@ -0,0 +1,80 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
|
||||
"github.com/FrankenBotDev/FrankenAPI/ent"
|
||||
"github.com/FrankenBotDev/FrankenAPI/ent/logging"
|
||||
"github.com/FrankenBotDev/FrankenAPI/pkg/sys"
|
||||
"github.com/go-chi/chi/v5"
|
||||
)
|
||||
|
||||
func LogRouter() http.Handler {
|
||||
r := chi.NewRouter()
|
||||
|
||||
r.Get("/", getapilog)
|
||||
r.Post("/", apilogger)
|
||||
return r
|
||||
}
|
||||
|
||||
func apilogger(w http.ResponseWriter, r *http.Request) {
|
||||
logJson := make(map[string]string)
|
||||
logData, err := ioutil.ReadAll(r.Body)
|
||||
if err != nil {
|
||||
http.Error(w, `{"type":"error", "code":"request_data_could_not_be_proccessed"}`, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
err = json.Unmarshal(logData, &logJson)
|
||||
if err != nil {
|
||||
http.Error(w, `{"type":"error", "code":"request_data_could_not_be_proccessed"}`, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
err = Logtodb([]string{logJson["commiterid"], logJson["description"], logJson["actiontype"], logJson["serverid"]}, r.Context().Value(sys.EntClientKey).(*ent.Client), r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
http.Error(w, `{"type":"error", "code":"could_not_create_log_in_database"}`, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
w.Write([]byte(`{"type":"success", "code":"log_added_to_database"}`))
|
||||
}
|
||||
|
||||
func getapilog(w http.ResponseWriter, r *http.Request) {
|
||||
loggerRequest := r.URL.Query()
|
||||
|
||||
log, err := r.Context().Value(sys.EntClientKey).(*ent.Client).Logging.Query().
|
||||
Where(logging.Serverid(loggerRequest.Get("serverid"))).
|
||||
Order(ent.Desc(logging.FieldID)).
|
||||
All(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "request_data_could_not_found_or_fetched", err)
|
||||
return
|
||||
}
|
||||
|
||||
sys.SuccessJsonResponse(w, log)
|
||||
}
|
||||
|
||||
// logs a given message array to the database
|
||||
// message args
|
||||
// 0 -> commiters id
|
||||
// 1 -> description
|
||||
// 2 -> action type
|
||||
// 3 -> the server logged on
|
||||
func Logtodb(message []string, client *ent.Client, context context.Context) error {
|
||||
err := client.Logging.Create().
|
||||
SetCommiter(message[0]).
|
||||
SetDescription(message[1]).
|
||||
SetType(message[2]).
|
||||
SetServerid(message[3]).
|
||||
Exec(context)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
134
pkg/routes/punishments/punishments.go
Normal file
134
pkg/routes/punishments/punishments.go
Normal file
@ -0,0 +1,134 @@
|
||||
package punishments
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
|
||||
"github.com/FrankenBotDev/FrankenAPI/ent"
|
||||
"github.com/FrankenBotDev/FrankenAPI/ent/punishments"
|
||||
"github.com/FrankenBotDev/FrankenAPI/pkg/routes/logger"
|
||||
"github.com/FrankenBotDev/FrankenAPI/pkg/sys"
|
||||
"github.com/go-chi/chi/v5"
|
||||
)
|
||||
|
||||
func PunRouter() http.Handler {
|
||||
r := chi.NewRouter()
|
||||
|
||||
r.Get("/", getPun)
|
||||
r.Post("/", createPun)
|
||||
r.Delete("/", deletePun)
|
||||
return r
|
||||
}
|
||||
|
||||
// WEB-SYS ONLY WHOLE ROUTE
|
||||
func createPun(w http.ResponseWriter, r *http.Request) {
|
||||
punData := sys.ProccessRequest(w, r.Body)
|
||||
if punData == nil {
|
||||
return
|
||||
}
|
||||
punJson := make(map[string]any)
|
||||
|
||||
if punJson["commiterid"] != "" {
|
||||
if punJson["serverid"].(string) != "" {
|
||||
if punJson["warnamount"].(string) != "" {
|
||||
if punJson["actiontype"].(string) != "" {
|
||||
if punJson["duration"].(string) != "" {
|
||||
if punJson["reason"].(string) != "" {
|
||||
|
||||
json.Unmarshal(punData, &punJson)
|
||||
err := r.Context().Value(sys.EntClientKey).(*ent.Client).Punishments.Create().
|
||||
SetServerid(punJson["serverid"].(string)).
|
||||
SetWarnamount(punJson["warnamount"].(string)).
|
||||
SetActiontype(punJson["actiontype"].(string)).
|
||||
SetDuration(punJson["duration"].(string)).
|
||||
SetReason(punJson["reason"].(string)).
|
||||
Exec(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "pun_could_not_be_created", err)
|
||||
}
|
||||
|
||||
logger.Logtodb([]string{punJson["commiterid"].(string), "type: " + punJson["actiontype"].(string) + ", duration: " + punJson["duration"].(string) + ", reason: " + punJson["reason"].(string) + ", warnamount: " + punJson["warnamount"].(string), "puncreate", punJson["serverid"].(string)}, r.Context().Value(sys.EntClientKey).(*ent.Client), r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
w.Write([]byte(`{"type":"success", "code":"pun_was_created"}`))
|
||||
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("reason needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("duration needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("actiontype needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("warnamount needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiter needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
func getPun(w http.ResponseWriter, r *http.Request) {
|
||||
userdata := r.URL.Query()
|
||||
|
||||
if userdata.Get("commiterid") != "" {
|
||||
if userdata.Get("serverid") != "" {
|
||||
if userdata.Get("warnamount") != "" {
|
||||
|
||||
pun, err := r.Context().Value(sys.EntClientKey).(*ent.Client).Punishments.Query().
|
||||
Where(punishments.Serverid(userdata.Get("serverid")), punishments.Warnamount(userdata.Get("warnamount"))).
|
||||
All(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_get_pun", err)
|
||||
return
|
||||
}
|
||||
|
||||
sys.SuccessJsonResponse(w, pun)
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("warnamount needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_paramert", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
func deletePun(w http.ResponseWriter, r *http.Request) {
|
||||
punData := sys.ProccessRequest(w, r.Body)
|
||||
if punData != nil {
|
||||
return
|
||||
}
|
||||
|
||||
punJson := make(map[string]any)
|
||||
|
||||
if punJson["commiterid"].(string) != "" {
|
||||
if punJson["serverid"].(string) != "" {
|
||||
if punJson["warnamount"].(string) != "" {
|
||||
|
||||
json.Unmarshal(punData, &punJson)
|
||||
_, err := r.Context().Value(sys.EntClientKey).(*ent.Client).Punishments.Delete().
|
||||
Where(punishments.Serverid(punJson["serverid"].(string)), punishments.Warnamount(punJson["warnamount"].(string))).
|
||||
Exec(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "pun_could_not_be_created", err)
|
||||
}
|
||||
|
||||
logger.Logtodb([]string{punJson["commiterid"].(string), "warnamount: " + punJson["warnamount"].(string), "punremove", punJson["serverid"].(string)}, r.Context().Value(sys.EntClientKey).(*ent.Client), r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
w.Write([]byte(`{"type":"success", "code":"pun_was_removed"}`))
|
||||
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("warnamount needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_paramert", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
}
|
433
pkg/routes/settings/settings.go
Normal file
433
pkg/routes/settings/settings.go
Normal file
@ -0,0 +1,433 @@
|
||||
package settings
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
|
||||
"github.com/FrankenBotDev/FrankenAPI/ent"
|
||||
"github.com/FrankenBotDev/FrankenAPI/ent/settings"
|
||||
"github.com/FrankenBotDev/FrankenAPI/ent/socialmedia"
|
||||
"github.com/FrankenBotDev/FrankenAPI/pkg/routes/logger"
|
||||
"github.com/FrankenBotDev/FrankenAPI/pkg/sys"
|
||||
"github.com/go-chi/chi/v5"
|
||||
)
|
||||
|
||||
func SettingsRouter() http.Handler {
|
||||
r := chi.NewRouter()
|
||||
|
||||
r.Get("/", getServerSettings)
|
||||
r.Post("/", createServerSettings)
|
||||
r.Put("/", updateServerSettings)
|
||||
r.Post("/socialmedia", createSocial)
|
||||
r.Put("/socialmedia", updateSocial)
|
||||
r.Delete("/socialmedia", deleteSocial)
|
||||
r.Get("/socialmedia", getSocial)
|
||||
return r
|
||||
}
|
||||
|
||||
/* ==========================================================
|
||||
ROUTE DEFINITIONS
|
||||
=========================================================== */
|
||||
func createServerSettings(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// fetch data
|
||||
settingsJson := make(map[string]any)
|
||||
settingsData := sys.ProccessRequest(w, r.Body)
|
||||
if settingsData == nil {
|
||||
return
|
||||
}
|
||||
|
||||
// process data
|
||||
err := json.Unmarshal(settingsData, &settingsJson)
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_proccess_data", errors.New("request data could not be proccessed"))
|
||||
}
|
||||
|
||||
if settingsJson["commiterid"] != "" {
|
||||
if settingsJson["serverid"].(string) != "" {
|
||||
if settingsJson["servername"].(string) != "" {
|
||||
if settingsJson["ownerid"].(string) != "" {
|
||||
// error handling and user communication
|
||||
_, err = r.Context().Value(sys.EntClientKey).(*ent.Client).Settings.Create().SetWordfilter(false).
|
||||
SetTwitterannounce(false).
|
||||
SetTwitchannounce(false).
|
||||
SetStatsprivate(true).
|
||||
SetStatspagemode("default").
|
||||
SetStatspage(false).
|
||||
SetSpamprotection(false).
|
||||
SetSpamchannel("general").
|
||||
SetServername(settingsJson["servername"].(string)).
|
||||
SetServerid(settingsJson["serverid"].(string)).
|
||||
SetPermtoken("test").
|
||||
SetOwnerid(settingsJson["ownerid"].(string)).
|
||||
SetMusic(false).
|
||||
SetModeration(false).
|
||||
SetLoggerchannel("general").
|
||||
SetLogger(false).
|
||||
SetLinkprotection(false).
|
||||
SetGreetings(false).
|
||||
SetGreetermode("image").
|
||||
SetGreeterchannel("general").
|
||||
SetAutomatedmoderation(false).
|
||||
SetApitoken("n/a").
|
||||
SetApitoggle(false).
|
||||
Save(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "data_could_not_be_added_to_database", errors.New("inserting settings into database failed"))
|
||||
}
|
||||
|
||||
// Send message to the user if transaction could be made
|
||||
// in this case only usefull for the bot but may be implemented to the webpage once stable implementation exists
|
||||
logger.Logtodb([]string{"system", "settings for server" + settingsJson["serverid"].(string) + " was have been created", "settingscreate", settingsJson["serverid"].(string)}, r.Context().Value(sys.EntClientKey).(*ent.Client), r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
w.Write([]byte(`{"type":"success", "code":"data_was_put_into_the_database"}`))
|
||||
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("ownerid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("servername needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "mssing_parameter", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
func updateServerSettings(w http.ResponseWriter, r *http.Request) {
|
||||
// fetch data
|
||||
settingsJson := make(map[string]any)
|
||||
settingsData, err := ioutil.ReadAll(r.Body)
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_find_data_in_request", errors.New("request body seems to be empty"))
|
||||
}
|
||||
|
||||
// process data
|
||||
err = json.Unmarshal(settingsData, &settingsJson)
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_proccess_data", errors.New("request data could not be proccessed"))
|
||||
}
|
||||
|
||||
fmt.Println(settingsJson)
|
||||
|
||||
if commiteridStr, ok := settingsJson["commiterid"].(string); ok {
|
||||
fmt.Println(0)
|
||||
if serveridStr, ok := settingsJson["serverid"].(string); ok {
|
||||
fmt.Println(1)
|
||||
if blacklistBool, ok := settingsJson["blacklist"].(bool); ok {
|
||||
fmt.Println(2)
|
||||
if twitchannounceBool, ok := settingsJson["twitchannounce"].(bool); ok {
|
||||
fmt.Println(3)
|
||||
if twitterannounceBool, ok := settingsJson["twitteranounce"].(bool); ok {
|
||||
fmt.Println(4)
|
||||
if statsprivateBool, ok := settingsJson["statsprivate"].(bool); ok {
|
||||
fmt.Println(5)
|
||||
if statspagemodeStr, ok := settingsJson["statspagemode"].(string); ok {
|
||||
fmt.Println(6)
|
||||
if statspageBool, ok := settingsJson["statspage"].(bool); ok {
|
||||
fmt.Println(7)
|
||||
if spamprotectBool, ok := settingsJson["spamprotect"].(bool); ok {
|
||||
fmt.Println(8)
|
||||
if spamchannelStr, ok := settingsJson["spamchannel"].(string); ok {
|
||||
fmt.Println(9)
|
||||
if servernameStr, ok := settingsJson["servername"].(string); ok {
|
||||
fmt.Println(10)
|
||||
if musicBool, ok := settingsJson["music"].(bool); ok {
|
||||
fmt.Println(11)
|
||||
if moderationBool, ok := settingsJson["moderation"].(bool); ok {
|
||||
fmt.Println(12)
|
||||
if loggerchannelStr, ok := settingsJson["loggerchannel"].(string); ok {
|
||||
fmt.Println(13)
|
||||
if loggerBool, ok := settingsJson["logger"].(bool); ok {
|
||||
fmt.Println(14)
|
||||
if linkprotectBool, ok := settingsJson["linkprotect"].(bool); ok {
|
||||
fmt.Println(15)
|
||||
if helloBool, ok := settingsJson["greetings"].(bool); ok {
|
||||
fmt.Println(16)
|
||||
if greetingstypeStr, ok := settingsJson["greetingtype"].(string); ok {
|
||||
fmt.Println(17)
|
||||
if greetingschannelStr, ok := settingsJson["greetingchannel"].(string); ok {
|
||||
fmt.Println(18)
|
||||
if automodBool, ok := settingsJson["automod"].(bool); ok {
|
||||
fmt.Println(19)
|
||||
if apiBool, ok := settingsJson["apitoggle"].(bool); ok {
|
||||
fmt.Println(20)
|
||||
if statsBool, ok := settingsJson["stats"].(bool); ok {
|
||||
fmt.Println(21)
|
||||
if anounceChannelStr, ok := settingsJson["announcechannel"].(string); ok {
|
||||
fmt.Println(21)
|
||||
|
||||
fmt.Println(spamprotectBool)
|
||||
fmt.Println(linkprotectBool)
|
||||
fmt.Println(blacklistBool)
|
||||
fmt.Println(apiBool)
|
||||
|
||||
_, err := r.Context().Value(sys.EntClientKey).(*ent.Client).Settings.Update().
|
||||
Where(settings.Serverid(serveridStr)).
|
||||
SetWordfilter(blacklistBool).
|
||||
SetTwitterannounce(twitterannounceBool).
|
||||
SetTwitchannounce(twitchannounceBool).
|
||||
SetStatsprivate(statsprivateBool).
|
||||
SetStatspagemode(statspagemodeStr).
|
||||
SetStatspage(statspageBool).
|
||||
SetSpamprotection(spamprotectBool).
|
||||
SetSpamchannel(spamchannelStr).
|
||||
SetServername(servernameStr).
|
||||
SetMusic(musicBool).
|
||||
SetModeration(moderationBool).
|
||||
SetLoggerchannel(loggerchannelStr).
|
||||
SetLogger(loggerBool).
|
||||
SetLinkprotection(linkprotectBool).
|
||||
SetGreetings(helloBool).
|
||||
SetGreetermode(greetingstypeStr).
|
||||
SetGreeterchannel(greetingschannelStr).
|
||||
SetAutomatedmoderation(automodBool).
|
||||
SetApitoggle(apiBool).
|
||||
SetStats(statsBool).
|
||||
SetAnnouncechannel(anounceChannelStr).
|
||||
Save(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
http.Error(w, `{"type":"error", "code":"could_update_database"}`, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
logger.Logtodb([]string{commiteridStr, "settings for server: " + serveridStr + " was changed by: " + commiteridStr, "settingschange", serveridStr}, r.Context().Value(sys.EntClientKey).(*ent.Client), r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
w.Write([]byte(`{"type":"success", "code":"data_was_updated_in_the_database"}`))
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("announcechannel needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("stats needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("apitoggle needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("automod needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("greetingchannel needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("greetingtype needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("greetings needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("linkprotect needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("logger needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("loggerchannel needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("moderation needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("music needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("servername needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("spamchannel needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("spamprotect needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("statspage needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("statspagemode needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("statsprivate needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("twitchannounce needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("twitteranounce needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("blacklist needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
func getServerSettings(w http.ResponseWriter, r *http.Request) {
|
||||
settingsQuery := r.URL.Query()
|
||||
|
||||
if settingsQuery.Get("commiterid") != "" {
|
||||
if settingsQuery.Get("serverid") != "" {
|
||||
// replace with actual api data
|
||||
user, err := r.Context().Value(sys.EntClientKey).(*ent.Client).Settings.Query().Where(settings.Serverid(settingsQuery.Get("serverid"))).All(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_get_user", errors.New("the requested user was not found"))
|
||||
}
|
||||
|
||||
sys.SuccessJsonResponse(w, user)
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
func createSocial(w http.ResponseWriter, r *http.Request) {
|
||||
// fetch data
|
||||
settingsJson := make(map[string]any)
|
||||
settingsData, err := ioutil.ReadAll(r.Body)
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_find_data_in_request", errors.New("could not find data in that request"))
|
||||
}
|
||||
|
||||
// process data
|
||||
err = json.Unmarshal(settingsData, &settingsJson)
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_proccess_data", errors.New("request data could not be proccessed"))
|
||||
}
|
||||
if settingsJson["commiterid"].(string) != "" {
|
||||
if settingsJson["serverid"].(string) != "" {
|
||||
if settingsJson["identifier"].(string) != "" {
|
||||
if settingsJson["type"].(string) != "" {
|
||||
|
||||
r.Context().Value(sys.EntClientKey).(*ent.Client).Socialmedia.Create().
|
||||
SetServerid(settingsJson["serverid"].(string)).
|
||||
SetIdentificator(settingsJson["identifier"].(string)).
|
||||
SetType(settingsJson["type"].(string)).
|
||||
Save(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
|
||||
logger.Logtodb([]string{settingsJson["commiterid"].(string), "socialmedia entry for server" + settingsJson["serverid"].(string) + " was added by" + settingsJson["commiterid"].(string), "socialcreate", settingsJson["serverid"].(string)}, r.Context().Value(sys.EntClientKey).(*ent.Client), r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
w.Write([]byte(`{"type":"success", "code":"data_was_put_into_the_database"}`))
|
||||
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("type needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("identifier needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
/* ========================================================
|
||||
todo: update all below todo comments asap
|
||||
======================================================== */
|
||||
|
||||
// @TODO: actually updating the database
|
||||
func updateSocial(w http.ResponseWriter, r *http.Request) {
|
||||
// fetch data
|
||||
settingsJson := make(map[string]any)
|
||||
settingsData, err := ioutil.ReadAll(r.Body)
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_find_data_in_request", errors.New("could not find data in that request"))
|
||||
}
|
||||
|
||||
// process data
|
||||
err = json.Unmarshal(settingsData, &settingsJson)
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_proccess_data", errors.New("request data could not be proccessed"))
|
||||
}
|
||||
|
||||
if settingsJson["commiterid"].(string) != "" {
|
||||
if settingsJson["serverid"].(string) != "" {
|
||||
if settingsJson["identifier"].(string) != "" {
|
||||
if settingsJson["type"].(string) != "" {
|
||||
|
||||
_, err = r.Context().Value(sys.EntClientKey).(*ent.Client).Socialmedia.Update().
|
||||
SetServerid(settingsJson["serverid"].(string)).
|
||||
SetIdentificator(settingsJson["identifier"].(string)).
|
||||
SetType(settingsJson["type"].(string)).
|
||||
Save(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "database_error", errors.New("could not update the database"))
|
||||
}
|
||||
|
||||
logger.Logtodb([]string{settingsJson["commiterid"].(string), "socialmedia entry for server" + settingsJson["serverid"].(string) + " was updated by" + settingsJson["commiterid"].(string), "socialupdate", settingsJson["serverid"].(string)}, r.Context().Value(sys.EntClientKey).(*ent.Client), r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
w.Write([]byte(`{"type":"success", "code":"data_was_put_into_the_database"}`))
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
// @TODO fetch parameters from request query
|
||||
func deleteSocial(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
if r.URL.Query().Get("commiterid") != "" {
|
||||
if r.URL.Query().Get("serverid") != "" {
|
||||
if r.URL.Query().Get("identifier") != "" {
|
||||
|
||||
_, err := r.Context().Value(sys.EntClientKey).(*ent.Client).Socialmedia.Delete().
|
||||
Where(socialmedia.Serverid(r.URL.Query().Get("serverid")), socialmedia.Identificator(r.URL.Query().Get("identifier"))).
|
||||
Exec(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "data_could_not_be_deleted", errors.New("the data requested could not be removed"))
|
||||
}
|
||||
|
||||
w.Write([]byte(`{"type":"success", "code":"data_was_removed_successfully"}`))
|
||||
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("identifier needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
// @TODO user userdata to manipulate the db query
|
||||
func getSocial(w http.ResponseWriter, r *http.Request) {
|
||||
userData := r.URL.Query()
|
||||
fmt.Println(userData)
|
||||
|
||||
if userData.Get("commiterid") != "" {
|
||||
if userData.Get("serverid") != "" {
|
||||
if userData.Get("identifer") != "" {
|
||||
|
||||
// replace with actual api data
|
||||
social, err := r.Context().Value(sys.EntClientKey).(*ent.Client).Socialmedia.Query().
|
||||
Where(socialmedia.Serverid(userData.Get("serverid")), socialmedia.Identificator(userData.Get("identifer"))).All(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_get_user", errors.New("could not get the requested user object"))
|
||||
}
|
||||
sys.SuccessJsonResponse(w, social)
|
||||
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("identifier needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
}
|
194
pkg/routes/stats/stats.go
Normal file
194
pkg/routes/stats/stats.go
Normal file
@ -0,0 +1,194 @@
|
||||
package stats
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/FrankenBotDev/FrankenAPI/ent"
|
||||
"github.com/FrankenBotDev/FrankenAPI/ent/user"
|
||||
"github.com/FrankenBotDev/FrankenAPI/pkg/routes/logger"
|
||||
"github.com/FrankenBotDev/FrankenAPI/pkg/sys"
|
||||
"github.com/go-chi/chi/v5"
|
||||
)
|
||||
|
||||
// TODO: error handle route properly
|
||||
func StatsRouter() http.Handler {
|
||||
r := chi.NewRouter()
|
||||
|
||||
r.Post("/user", createUser)
|
||||
r.Get("/user", getUser)
|
||||
r.Get("/server", getServer)
|
||||
r.Put("/user", updateUser)
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
/* ==========================================================
|
||||
ROUTE DEFINITIONS
|
||||
=========================================================== */
|
||||
func createUser(w http.ResponseWriter, r *http.Request) {
|
||||
// fetch data
|
||||
userJson := make(map[string]any)
|
||||
userData, err := ioutil.ReadAll(r.Body)
|
||||
if err != nil {
|
||||
http.Error(w, `"type":"error", "code":"could_not_find_data_in_request"`, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// process data
|
||||
err = json.Unmarshal(userData, &userJson)
|
||||
if err != nil {
|
||||
http.Error(w, `{"type":"error", "code":"could_not_proccess_data"}`, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
if userJson["commiterid"].(string) != "" {
|
||||
if userJson["serverid"].(string) != "" {
|
||||
if userJson["userid"].(string) != "" {
|
||||
if userJson["username"].(string) != "" {
|
||||
|
||||
// push data to database
|
||||
_, err = r.Context().Value(sys.EntClientKey).(*ent.Client).User.Create().
|
||||
SetServerid(userJson["serverid"].(string)).
|
||||
SetUserid(userJson["userid"].(string)).
|
||||
SetLevel(1).
|
||||
SetUsername(userJson["username"].(string)).
|
||||
SetXp(0).
|
||||
SetMsgs(0).
|
||||
SetCreated(time.Now()).
|
||||
Save(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_add_data_to_database", errors.New("data could not be added to the database"))
|
||||
}
|
||||
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("username needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("userid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
func updateUser(w http.ResponseWriter, r *http.Request) {
|
||||
// daten fetchen
|
||||
userData, 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
|
||||
userJson := make(map[string]any)
|
||||
err = json.Unmarshal(userData, &userJson)
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_proccess_data", errors.New("request data could not be proccessed"))
|
||||
}
|
||||
|
||||
if userJson["committerid"].(string) != "" {
|
||||
if userJson["serverid"].(string) != "" {
|
||||
if userJson["userid"].(string) != "" {
|
||||
if levelNum, ok := userJson["level"].(float64); ok {
|
||||
if xpNum, ok := userJson["xp"].(float64); ok {
|
||||
if msgsNum, ok := userJson["msgs"].(float64); ok {
|
||||
|
||||
_, err := r.Context().Value(sys.EntClientKey).(*ent.Client).User.Update().
|
||||
Where(user.Serverid(userJson["serverid"].(string)), user.Userid(userJson["userid"].(string))).
|
||||
SetLevel(int(levelNum)).
|
||||
SetXp(int(xpNum)).
|
||||
SetMsgs(int(msgsNum)).
|
||||
Save(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
||||
logger.Logtodb([]string{
|
||||
userJson["committerid"].(string),
|
||||
"Updated User with UserID: " + userJson["userid"].(string),
|
||||
"User Update",
|
||||
userJson["serverid"].(string),
|
||||
}, r.Context().Value(sys.EntClientKey).(*ent.Client),
|
||||
r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("msgs needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("xp needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("level needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("userid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
func getUser(w http.ResponseWriter, r *http.Request) {
|
||||
userData := r.URL.Query()
|
||||
fmt.Println(userData)
|
||||
|
||||
if userData.Get("commiterid") != "" {
|
||||
if userData.Get("serverid") != "" {
|
||||
if userData.Get("userid") != "" {
|
||||
|
||||
// replace with actual api data
|
||||
user, err := r.Context().Value(sys.EntClientKey).(*ent.Client).User.Query().
|
||||
Where(user.Serverid(userData.Get("serverid")), user.Userid(userData.Get("userid"))).
|
||||
All(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_get_user", errors.New("requested user could not be fetched from the database"))
|
||||
}
|
||||
sys.SuccessJsonResponse(w, user)
|
||||
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("userid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
func getServer(w http.ResponseWriter, r *http.Request) {
|
||||
serverData := r.URL.Query()
|
||||
|
||||
if serverData.Get("commiterid") != "" {
|
||||
if serverData.Get("serverid") != "" {
|
||||
|
||||
// replace with actual api data
|
||||
user, err := r.Context().Value(sys.EntClientKey).(*ent.Client).User.Query().
|
||||
Where(user.Serverid(serverData.Get("serverid"))).
|
||||
All(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_get_user", errors.New("requested user could not be fetched from the database"))
|
||||
}
|
||||
|
||||
sys.SuccessJsonResponse(w, user)
|
||||
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("serverid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_parameter", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
}
|
332
pkg/routes/support/support.go
Normal file
332
pkg/routes/support/support.go
Normal file
@ -0,0 +1,332 @@
|
||||
package support
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/FrankenBotDev/FrankenAPI/ent"
|
||||
"github.com/FrankenBotDev/FrankenAPI/ent/support"
|
||||
"github.com/FrankenBotDev/FrankenAPI/ent/supportresponse"
|
||||
"github.com/FrankenBotDev/FrankenAPI/pkg/routes/logger"
|
||||
"github.com/FrankenBotDev/FrankenAPI/pkg/sys"
|
||||
"github.com/go-chi/chi/v5"
|
||||
)
|
||||
|
||||
// TODO: error handle route properly
|
||||
func SupportRouter() http.Handler {
|
||||
r := chi.NewRouter()
|
||||
|
||||
r.Get("/", getTicket)
|
||||
r.Get("/search", getTicketByID)
|
||||
r.Post("/", openTicket)
|
||||
r.Put("/", updateTicket)
|
||||
r.Delete("/", deleteTicket)
|
||||
r.Post("/message", writetMessage)
|
||||
r.Get("/message", getMessages)
|
||||
r.Get("/message/unread", getUnreadMessages)
|
||||
return r
|
||||
}
|
||||
|
||||
func getTicket(w http.ResponseWriter, r *http.Request) {
|
||||
ticketQuery := r.URL.Query()
|
||||
|
||||
if ticketQuery.Get("serverid") != "" {
|
||||
ticket, err := r.Context().Value(sys.EntClientKey).(*ent.Client).Support.Query().
|
||||
Where(support.Serverid(ticketQuery.Get("serverid")), support.Not(support.Status("closed"))).
|
||||
All(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_get_user", errors.New("requested user could not be fetched from the database"))
|
||||
}
|
||||
|
||||
sys.SuccessJsonResponse(w, ticket)
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_param", errors.New("serverid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
func getTicketByID(w http.ResponseWriter, r *http.Request) {
|
||||
ticketQuery := r.URL.Query()
|
||||
|
||||
if ticketQuery.Get("serverid") != "" {
|
||||
if ticketQuery.Get("refid") != "" {
|
||||
|
||||
// replace with actual api data
|
||||
ticket, err := r.Context().Value(sys.EntClientKey).(*ent.Client).Support.Query().
|
||||
Where(support.Serverid(ticketQuery.Get("serverid")), support.Refid(ticketQuery.Get("refid"))).
|
||||
All(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_get_user", errors.New("requested user could not be fetched from the database"))
|
||||
}
|
||||
|
||||
sys.SuccessJsonResponse(w, ticket)
|
||||
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_param", errors.New("refid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_param", errors.New("serverid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
func openTicket(w http.ResponseWriter, r *http.Request) {
|
||||
// daten fetchen
|
||||
ticketData, 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
|
||||
ticketJson := make(map[string]any)
|
||||
err = json.Unmarshal(ticketData, &ticketJson)
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_proccess_data", errors.New("request data could not be proccessed"))
|
||||
}
|
||||
|
||||
devRefid := sys.RandStringRunes(16)
|
||||
|
||||
if serveridStr, ok := ticketJson["serverid"].(string); ok {
|
||||
if devRefid != "" {
|
||||
if titleStr, ok := ticketJson["title"].(string); ok {
|
||||
if descStr, ok := ticketJson["description"].(string); ok {
|
||||
if creatorStr, ok := ticketJson["creator"].(string); ok {
|
||||
// replace with actual api data
|
||||
err := r.Context().Value(sys.EntClientKey).(*ent.Client).Support.Create().
|
||||
SetServerid(serveridStr).
|
||||
SetRefid(devRefid).
|
||||
SetStatus("open").
|
||||
SetTitle(titleStr).
|
||||
SetDescription(descStr).
|
||||
SetCreator(creatorStr).
|
||||
Exec(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_get_user", errors.New("requested user could not be fetched from the database"))
|
||||
}
|
||||
|
||||
logger.Logtodb([]string{
|
||||
creatorStr,
|
||||
"Opened Support Ticket with RefiD: " + devRefid,
|
||||
"Support Ticket Open",
|
||||
serveridStr,
|
||||
}, r.Context().Value(sys.EntClientKey).(*ent.Client), r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
|
||||
sys.SuccessJsonResponse(w, "ticket_created")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func updateTicket(w http.ResponseWriter, r *http.Request) {
|
||||
// daten fetchen
|
||||
ticketData, 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
|
||||
ticketJson := make(map[string]any)
|
||||
err = json.Unmarshal(ticketData, &ticketJson)
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_proccess_data", errors.New("request data could not be proccessed"))
|
||||
}
|
||||
|
||||
fmt.Println(ticketJson)
|
||||
|
||||
if commiteridStr, ok := ticketJson["commiterid"].(string); ok {
|
||||
fmt.Println(0)
|
||||
if serveridStr, ok := ticketJson["serverid"].(string); ok {
|
||||
fmt.Println(1)
|
||||
if refidStr, ok := ticketJson["refid"].(string); ok {
|
||||
fmt.Println(2)
|
||||
if statusStr, ok := ticketJson["status"].(string); ok {
|
||||
fmt.Println(3)
|
||||
if titleStr, ok := ticketJson["title"].(string); ok {
|
||||
fmt.Println(4)
|
||||
if descStr, ok := ticketJson["description"].(string); ok {
|
||||
fmt.Println(5)
|
||||
if creatorStr, ok := ticketJson["creator"].(string); ok {
|
||||
fmt.Println(6)
|
||||
// replace with actual api data
|
||||
err := r.Context().Value(sys.EntClientKey).(*ent.Client).Support.Update().
|
||||
Where(support.Refid(refidStr), support.Serverid(serveridStr)).
|
||||
SetServerid(serveridStr).
|
||||
SetRefid(refidStr).
|
||||
SetStatus(statusStr).
|
||||
SetTitle(titleStr).
|
||||
SetDescription(descStr).
|
||||
SetCreator(creatorStr).
|
||||
Exec(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_get_user", errors.New("requested user could not be fetched from the database"))
|
||||
}
|
||||
|
||||
logger.Logtodb([]string{
|
||||
commiteridStr,
|
||||
"Updated Support Ticket with RefiD: " + refidStr,
|
||||
"Support Ticket Update",
|
||||
serveridStr,
|
||||
}, r.Context().Value(sys.EntClientKey).(*ent.Client), r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
sys.SuccessJsonResponse(w, "ticket_created")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func deleteTicket(w http.ResponseWriter, r *http.Request) {
|
||||
// daten fetchen
|
||||
ticketData, 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
|
||||
ticketJson := make(map[string]any)
|
||||
err = json.Unmarshal(ticketData, &ticketJson)
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_proccess_data", errors.New("request data could not be proccessed"))
|
||||
}
|
||||
|
||||
if commiteridStr, ok := ticketJson["commiterid"].(string); ok {
|
||||
if serveridStr, ok := ticketJson["serverid"].(string); ok {
|
||||
if refidStr, ok := ticketJson["refid"].(string); ok {
|
||||
// replace with actual api data
|
||||
_, err := r.Context().Value(sys.EntClientKey).(*ent.Client).Support.Delete().
|
||||
Where(support.Serverid(serveridStr), support.Refid(refidStr)).
|
||||
Exec(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "could_not_get_user", errors.New("requested user could not be fetched from the database"))
|
||||
}
|
||||
|
||||
logger.Logtodb([]string{
|
||||
commiteridStr,
|
||||
"Removed Support Ticket with RefiD: " + refidStr,
|
||||
"Support Ticket Remove",
|
||||
serveridStr,
|
||||
}, r.Context().Value(sys.EntClientKey).(*ent.Client), r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
sys.SuccessJsonResponse(w, "ticket_created")
|
||||
|
||||
sys.SuccessJsonResponse(w, "ticket_created")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getMessages(w http.ResponseWriter, r *http.Request) {
|
||||
tickerResponseQuery := r.URL.Query()
|
||||
|
||||
if tickerResponseQuery.Get("refid") != "" {
|
||||
if tickerResponseQuery.Get("commiterid") != "" {
|
||||
replies, err := r.Context().Value(sys.EntClientKey).(*ent.Client).SupportResponse.Query().
|
||||
Where(supportresponse.Refid(tickerResponseQuery.Get("refid"))).
|
||||
All(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "database_error", errors.New("could not get responses from database"))
|
||||
}
|
||||
|
||||
sys.SuccessJsonResponse(w, replies)
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_params", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_params", errors.New("refid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
func getUnreadMessages(w http.ResponseWriter, r *http.Request) {
|
||||
tickerResponseQuery := r.URL.Query()
|
||||
|
||||
if tickerResponseQuery.Get("refid") != "" {
|
||||
if tickerResponseQuery.Get("commiterid") != "" {
|
||||
replies, err := r.Context().Value(sys.EntClientKey).(*ent.Client).SupportResponse.Query().
|
||||
Where(supportresponse.Refid(tickerResponseQuery.Get("refid")), supportresponse.Not(supportresponse.Isread(false))).
|
||||
All(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
|
||||
if err != nil {
|
||||
sys.ErrorJsonResponse(w, "database_error", errors.New("could not get responses from database"))
|
||||
}
|
||||
|
||||
sys.SuccessJsonResponse(w, replies)
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_params", errors.New("commiterid needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_params", errors.New("refid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
func writetMessage(w http.ResponseWriter, r *http.Request) {
|
||||
// fetch data
|
||||
ticketResponseJson := make(map[string]any)
|
||||
ticketResponseData, err := ioutil.ReadAll(r.Body)
|
||||
if err != nil {
|
||||
http.Error(w, `"type":"error", "code":"could_not_find_data_in_request"`, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// process data
|
||||
err = json.Unmarshal(ticketResponseData, &ticketResponseJson)
|
||||
if err != nil {
|
||||
http.Error(w, `{"type":"error", "code":"could_not_proccess_data"}`, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
if refidStr, ok := ticketResponseJson["refid"].(string); ok {
|
||||
fmt.Println(0)
|
||||
if messageStr, ok := ticketResponseJson["message"].(string); ok {
|
||||
fmt.Println(1)
|
||||
if rtcChannelStr, ok := ticketResponseJson["rtcchannel"].(string); ok {
|
||||
fmt.Println(2)
|
||||
if writerStr, ok := ticketResponseJson["writer"].(string); ok {
|
||||
fmt.Println(3)
|
||||
if isReadBool, ok := ticketResponseJson["isread"].(bool); ok {
|
||||
fmt.Println(4)
|
||||
if typeStr, ok := ticketResponseJson["type"].(string); ok {
|
||||
fmt.Println(5)
|
||||
err := r.Context().Value(sys.EntClientKey).(*ent.Client).SupportResponse.Create().
|
||||
SetRefid(refidStr).
|
||||
SetMessage(messageStr).
|
||||
SetRtcchannel(rtcChannelStr).
|
||||
SetWriter(writerStr).
|
||||
SetIsread(isReadBool).
|
||||
SetType(typeStr).
|
||||
SetCreated(time.Now()).
|
||||
Exec(r.Context().Value(sys.ContextClientKey).(context.Context))
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
sys.ErrorJsonResponse(w, "database_error", errors.New("could not post to database"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_param", errors.New("type needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_param", errors.New("isread needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_param", errors.New("writer need sto e set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_param", errors.New("rtcchannel needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_param", errors.New("message needs to be set"))
|
||||
}
|
||||
} else {
|
||||
sys.ErrorJsonResponse(w, "missing_param", errors.New("refid needs to be set"))
|
||||
}
|
||||
}
|
||||
|
||||
/* =====================================================
|
||||
Websocket Code
|
||||
===================================================== */
|
||||
// TODO: move code to this route
|
Reference in New Issue
Block a user