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.

85 lines
2.1 KiB

4 years ago
package admin
import (
4 years ago
"database/sql"
"fmt"
4 years ago
"net/http"
4 years ago
"sort"
4 years ago
"time"
"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
"github.com/imdotdev/im.dev/server/pkg/db"
"github.com/imdotdev/im.dev/server/pkg/e"
"github.com/imdotdev/im.dev/server/pkg/models"
)
const (
StatusUndealed = 1
StatusDealed = 2
)
func AddReport(targetID string, content string, reporter string) *e.Error {
_, err := db.Conn.Exec("INSERT INTO report (target_id,type,content,reporter,status,created) VALUES (?,?,?,?,?,?)",
targetID, models.GetIDType(targetID), content, reporter, StatusUndealed, time.Now())
4 years ago
if err != nil {
4 years ago
if e.IsErrUniqueConstraint(err) {
return e.New(http.StatusConflict, "已提交过report请勿重复提交")
}
4 years ago
logger.Warn("add report error", "error", err)
return e.New(http.StatusInternalServerError, e.Internal)
}
return nil
}
4 years ago
func GetReports(page int) ([]*models.Report, *e.Error) {
reports := make(models.Reports, 0)
rows, err := db.Conn.Query("SELECT id,type,content,target_id,reporter,status,created FROM report")
4 years ago
if err != nil && err != sql.ErrNoRows {
logger.Warn("get reports error", "error", err)
return nil, e.New(http.StatusInternalServerError, e.Internal)
}
if err == sql.ErrNoRows {
return reports, nil
}
for rows.Next() {
r := &models.Report{
Reporter: &models.UserSimple{},
}
var uid string
err := rows.Scan(&r.ID, &r.Type, &r.Content, &r.TargetID, &uid, &r.Status, &r.Created)
4 years ago
if err != nil {
logger.Warn("scan report error", "error", err)
continue
}
r.Reporter.ID = uid
r.Reporter.Query()
switch r.Type {
case models.IDTypePost:
r.URL = fmt.Sprintf("/%s/%s", r.Reporter.Username, r.TargetID)
case models.IDTypeComment:
r.URL = fmt.Sprintf("/r/comment/%s", r.TargetID)
}
4 years ago
reports = append(reports, r)
}
sort.Sort(reports)
return reports, nil
}
func DeleteReport(id string) *e.Error {
_, err := db.Conn.Exec("DELETE FROM report WHERE id=?", id)
if err != nil {
logger.Warn("delete report error", "error", err)
return e.New(http.StatusInternalServerError, e.Internal)
}
return nil
}