diff --git a/api/api.go b/api/api.go index 9b4ce6b..c20041e 100644 --- a/api/api.go +++ b/api/api.go @@ -129,6 +129,10 @@ func HandleAPI(w http.ResponseWriter, r *http.Request) { return } - _ = user - jsonRPCErr(w, -32601, "Method not found", req.ID) + switch req.Method { + case "report_activity": + ReportActivity(w, conn, req, user) + default: + jsonRPCErr(w, -32601, "Method not found", req.ID) + } } diff --git a/api/report_activity.go b/api/report_activity.go new file mode 100644 index 0000000..e55e3a5 --- /dev/null +++ b/api/report_activity.go @@ -0,0 +1,62 @@ +package api + +import ( + "database/sql" + "encoding/json" + "net/http" + + "faculty_media_report/dbi" +) + +type Reports struct { + Activities []dbi.Activity `json:"activities"` + Appearances []dbi.Appearance `json:"appearances"` + Scholarship []dbi.Scholarship `json:"scholarship"` +} + +func ReportActivity(w http.ResponseWriter, conn *sql.Conn, req jsonRPCRequest, user dbi.User) { + var reports Reports + if err := json.Unmarshal(req.Params, &reports); err != nil { + jsonRPCErr(w, -32602, "Invalid params", req.ID) + return + } + + for i := range reports.Activities { + reports.Activities[i].Username = user.Username + if reports.Activities[i].Status == "" { + reports.Activities[i].Status = "reported" + } + if err := dbi.CreateActivity(conn, &reports.Activities[i]); err != nil { + jsonRPCErr(w, -32603, "Internal error", req.ID) + return + } + } + + for i := range reports.Appearances { + reports.Appearances[i].Username = user.Username + if reports.Appearances[i].Status == "" { + reports.Appearances[i].Status = "reported" + } + if err := dbi.CreateAppearance(conn, &reports.Appearances[i]); err != nil { + jsonRPCErr(w, -32603, "Internal error", req.ID) + return + } + } + + for i := range reports.Scholarship { + reports.Scholarship[i].Username = user.Username + if reports.Scholarship[i].Status == "" { + reports.Scholarship[i].Status = "reported" + } + if err := dbi.CreateScholarship(conn, &reports.Scholarship[i]); err != nil { + jsonRPCErr(w, -32603, "Internal error", req.ID) + return + } + } + + writeJSONRPC(w, jsonRPCResponse{ + Jsonrpc: "2.0", + Result: true, + ID: req.ID, + }) +}