Browse Source

#2908

1. add medal category api
2. add medal api(list,operate)
tags/v1.22.11.1^2
chenyifan01 3 years ago
parent
commit
e6efde0bcb
10 changed files with 465 additions and 1 deletions
  1. +103
    -0
      models/medal.go
  2. +79
    -0
      models/medal_category.go
  3. +2
    -0
      models/models.go
  4. +10
    -0
      models/user_medal.go
  5. +46
    -0
      routers/medal/category.go
  6. +46
    -0
      routers/medal/medal.go
  7. +13
    -1
      routers/routes/routes.go
  8. +38
    -0
      services/admin/operate_log/operate_log.go
  9. +64
    -0
      services/medal/category.go
  10. +64
    -0
      services/medal/medal.go

+ 103
- 0
models/medal.go View File

@@ -0,0 +1,103 @@
package models

import (
"code.gitea.io/gitea/modules/timeutil"
"xorm.io/builder"
)

type Medal struct {
ID int64 `xorm:"pk autoincr"`
Name string
LightedIcon string `xorm:"varchar(2048)"`
GreyedIcon string `xorm:"varchar(2048)"`
Url string `xorm:"varchar(2048)"`
CategoryId int64
CreatedUnix timeutil.TimeStamp `xorm:"created"`
UpdatedUnix timeutil.TimeStamp `xorm:"updated"`
DeletedAt timeutil.TimeStamp `xorm:"deleted"`
}

type GetMedalOpts struct {
MedalType MedalType
}

type MedalAndCategory struct {
Medal Medal `xorm:"extends"`
Category MedalCategory `xorm:"extends"`
}

func (*MedalAndCategory) TableName() string {
return "medal"
}

func (m *MedalAndCategory) ToShow() *Medal4Show {
return &Medal4Show{
ID: m.Medal.ID,
Name: m.Medal.Name,
LightedIcon: m.Medal.LightedIcon,
GreyedIcon: m.Medal.GreyedIcon,
Url: m.Medal.Url,
CategoryName: m.Category.Name,
CategoryId: m.Category.ID,
CreatedUnix: m.Medal.CreatedUnix,
UpdatedUnix: m.Medal.UpdatedUnix,
}
}

type Medal4Show struct {
ID int64
Name string
LightedIcon string
GreyedIcon string
Url string
CategoryName string
CategoryId int64
CreatedUnix timeutil.TimeStamp
UpdatedUnix timeutil.TimeStamp
}

func (m Medal4Show) ToDTO() Medal {
return Medal{
Name: m.Name,
LightedIcon: m.LightedIcon,
GreyedIcon: m.GreyedIcon,
Url: m.Url,
CategoryId: m.CategoryId,
}
}

func GetMedalList(opts GetMedalOpts) ([]*MedalAndCategory, error) {
var cond = builder.NewCond()
if opts.MedalType > 0 {
cond = cond.And(builder.Eq{"medal_category.type": opts.MedalType})
}

r := make([]*MedalAndCategory, 0)
if err := x.Join("INNER", "medal_category", "medal_category.ID = medal.category_id").Where(cond).OrderBy("medal.created_unix desc").Find(&r); err != nil {
return nil, err
}
return r, nil
}

func AddMedal(m Medal) (int64, error) {
return x.Insert(&m)
}

func UpdateMedalById(id int64, param Medal) (int64, error) {
return x.ID(id).Update(&param)
}

func DelMedal(id int64) (int64, error) {
return x.ID(id).Delete(&Medal{})
}

func GetMedalById(id int64) (*Medal, error) {
m := &Medal{}
has, err := x.ID(id).Get(m)
if err != nil {
return nil, err
} else if !has {
return nil, &ErrRecordNotExist{}
}
return m, nil
}

+ 79
- 0
models/medal_category.go View File

@@ -0,0 +1,79 @@
package models

import "code.gitea.io/gitea/modules/timeutil"

type MedalType int

const (
CustomizeMedal = iota + 1
SystemMedal
)

type MedalCategory struct {
ID int64 `xorm:"pk autoincr"`
Name string
Position int64
Type MedalType
CreatedUnix timeutil.TimeStamp `xorm:"created"`
UpdatedUnix timeutil.TimeStamp `xorm:"updated"`
DeletedAt timeutil.TimeStamp `xorm:"deleted"`
}

func (m *MedalCategory) ToShow() *MedalCategory4Show {
return &MedalCategory4Show{
ID: m.ID,
Name: m.Name,
Position: m.Position,
Type: m.Type,
CreatedUnix: m.CreatedUnix,
}
}

type MedalCategory4Show struct {
ID int64 `xorm:"pk autoincr"`
Name string
Position int64
Type MedalType
CreatedUnix timeutil.TimeStamp `xorm:"created"`
}

func (m MedalCategory4Show) ToDTO() MedalCategory {
return MedalCategory{
ID: m.ID,
Name: m.Name,
Position: m.Position,
Type: m.Type,
CreatedUnix: m.CreatedUnix,
}
}

func GetMedalCategoryList() ([]*MedalCategory, error) {
r := make([]*MedalCategory, 0)
if err := x.OrderBy("position asc,created_unix desc").Find(&r); err != nil {
return nil, err
}
return r, nil
}

func AddMedalCategory(m MedalCategory) (int64, error) {
return x.Insert(&m)
}

func UpdateMedalCategoryById(id int64, param MedalCategory) (int64, error) {
return x.ID(id).Update(&param)
}

func DelMedalCategory(id int64) (int64, error) {
return x.ID(id).Delete(&MedalCategory{})
}

func GetMedalCategoryById(id int64) (*MedalCategory, error) {
m := &MedalCategory{}
has, err := x.ID(id).Get(m)
if err != nil {
return nil, err
} else if !has {
return nil, &ErrRecordNotExist{}
}
return m, nil
}

+ 2
- 0
models/models.go View File

@@ -161,6 +161,8 @@ func init() {
new(CloudbrainSpec),
new(CloudbrainTemp),
new(DatasetReference),
new(MedalCategory),
new(Medal),
)

tablesStatistic = append(tablesStatistic,


+ 10
- 0
models/user_medal.go View File

@@ -0,0 +1,10 @@
package models

import "code.gitea.io/gitea/modules/timeutil"

type UserMedal struct {
ID int64 `xorm:"pk autoincr"`
UserId int64 `xorm:"index"`
MedalId int64 `xorm:"index"`
CreatedUnix timeutil.TimeStamp `xorm:"created"`
}

+ 46
- 0
routers/medal/category.go View File

@@ -0,0 +1,46 @@
package medal

import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/routers/response"
"code.gitea.io/gitea/services/medal"
"errors"
"net/http"
)

func GetCategoryList(ctx *context.Context) {
r, err := medal.GetMedalCategoryList()
if err != nil {
log.Error("GetCategoryList error.%v", err)
ctx.JSON(http.StatusOK, response.ServerError(err.Error()))
return
}
m := make(map[string]interface{})
m["List"] = r
ctx.JSON(http.StatusOK, response.SuccessWithData(m))
}

func OperateMedalCategory(ctx *context.Context, category models.MedalCategory4Show) {
action := ctx.Params(":action")

var err error
switch action {
case "edit":
err = medal.EditMedalCategory(category, ctx.User)
case "new":
err = medal.AddMedalCategory(category, ctx.User)
case "del":
err = medal.DelMedalCategory(category.ID, ctx.User)
default:
err = errors.New("action type error")
}

if err != nil {
log.Error("OperateMedalCategory error ,%v", err)
ctx.JSON(http.StatusOK, response.ServerError(err.Error()))
return
}
ctx.JSON(http.StatusOK, response.Success())
}

+ 46
- 0
routers/medal/medal.go View File

@@ -0,0 +1,46 @@
package medal

import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/routers/response"
"code.gitea.io/gitea/services/medal"
"errors"
"net/http"
)

func GetCustomizeMedalList(ctx *context.Context) {
r, err := medal.GetMedalList(models.GetMedalOpts{MedalType: models.CustomizeMedal})
if err != nil {
log.Error("GetCategoryList error.%v", err)
ctx.JSON(http.StatusOK, response.ServerError(err.Error()))
return
}
m := make(map[string]interface{})
m["List"] = r
ctx.JSON(http.StatusOK, response.SuccessWithData(m))
}

func OperateMedal(ctx *context.Context, category models.Medal4Show) {
action := ctx.Params(":action")

var err error
switch action {
case "edit":
err = medal.EditMedal(category, ctx.User)
case "new":
err = medal.AddMedal(category, ctx.User)
case "del":
err = medal.DelMedal(category.ID, ctx.User)
default:
err = errors.New("action type error")
}

if err != nil {
log.Error("OperateCustomizeMedal error ,%v", err)
ctx.JSON(http.StatusOK, response.ServerError(err.Error()))
return
}
ctx.JSON(http.StatusOK, response.Success())
}

+ 13
- 1
routers/routes/routes.go View File

@@ -6,6 +6,7 @@ package routes

import (
"bytes"
"code.gitea.io/gitea/routers/medal"
"code.gitea.io/gitea/routers/reward/point"
"code.gitea.io/gitea/routers/task"
"code.gitea.io/gitea/services/reward"
@@ -659,9 +660,20 @@ func RegisterRoutes(m *macaron.Macaron) {

m.Group("/task/config", func() {
m.Get("/list", task.GetTaskConfigList)
m.Post("/add/batch", bindIgnErr(models.BatchLimitConfigVO{}), task.BatchAddTaskConfig)
m.Post("/^:action(new|edit|del)$", bindIgnErr(models.TaskConfigWithLimit{}), task.OperateTaskConfig)
})

m.Group("/medal", func() {
m.Group("/category", func() {
m.Get("/list", medal.GetCategoryList)
m.Post("/^:action(new|edit|del)$", bindIgnErr(models.MedalCategory4Show{}), medal.OperateMedalCategory)
})
m.Group("/customize", func() {
m.Get("/list", medal.GetCustomizeMedalList)
})
m.Post("/^:action(new|edit|del)$", bindIgnErr(models.Medal4Show{}), medal.OperateMedal)
})

}, operationReq)
// ***** END: Operation *****



+ 38
- 0
services/admin/operate_log/operate_log.go View File

@@ -4,6 +4,13 @@ import (
"code.gitea.io/gitea/models"
)

type LogBizType string

const (
MedalCategoryOperate LogBizType = "MedalCategoryOperate"
MedalOperate LogBizType = "MedalOperate"
)

func Log(log models.AdminOperateLog) error {
_, err := models.InsertAdminOperateLog(log)
return err
@@ -12,3 +19,34 @@ func Log(log models.AdminOperateLog) error {
func NewLogValues() *models.LogValues {
return &models.LogValues{Params: make([]models.LogValue, 0)}
}

func Log4Add(bizType LogBizType, newValue interface{}, doerId int64, comment string) {
Log(models.AdminOperateLog{
BizType: string(bizType),
OperateType: "add",
NewValue: NewLogValues().Add("new", newValue).JsonString(),
CreatedBy: doerId,
Comment: comment,
})
}

func Log4Edit(bizType LogBizType, oldValue interface{}, newValue interface{}, doerId int64, comment string) {
Log(models.AdminOperateLog{
BizType: string(bizType),
OperateType: "edit",
NewValue: NewLogValues().Add("new", newValue).JsonString(),
OldValue: NewLogValues().Add("old", oldValue).JsonString(),
CreatedBy: doerId,
Comment: comment,
})
}

func Log4Del(bizType LogBizType, oldValue interface{}, doerId int64, comment string) {
Log(models.AdminOperateLog{
BizType: string(bizType),
OperateType: "del",
OldValue: NewLogValues().Add("old", oldValue).JsonString(),
CreatedBy: doerId,
Comment: comment,
})
}

+ 64
- 0
services/medal/category.go View File

@@ -0,0 +1,64 @@
package medal

import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/services/admin/operate_log"
"errors"
)

func GetMedalCategoryList() ([]*models.MedalCategory4Show, error) {
list, err := models.GetMedalCategoryList()
if err != nil {
return nil, err
}
if len(list) == 0 {
return nil, nil
}
r := make([]*models.MedalCategory4Show, len(list))
for i := 0; i < len(list); i++ {
r[i] = list[i].ToShow()
}

return r, nil
}

func AddMedalCategory(m models.MedalCategory4Show, doer *models.User) error {
_, err := models.AddMedalCategory(m.ToDTO())
if err != nil {
return err
}
operate_log.Log4Add(operate_log.MedalCategoryOperate, m, doer.ID, "新增了勋章分类")
return nil
}

func EditMedalCategory(m models.MedalCategory4Show, doer *models.User) error {
if m.ID == 0 {
log.Error(" EditMedalCategory param error")
return errors.New("param error")
}
old, err := models.GetMedalCategoryById(m.ID)
if err != nil {
return err
}
_, err = models.UpdateMedalCategoryById(m.ID, m.ToDTO())
if err != nil {
return err
}
operate_log.Log4Edit(operate_log.MedalCategoryOperate, old, m.ToDTO(), doer.ID, "修改了勋章分类")
return err
}

func DelMedalCategory(id int64, doer *models.User) error {
if id == 0 {
log.Error(" DelMedalCategory param error")
return errors.New("param error")
}
old, err := models.GetMedalCategoryById(id)
if err != nil {
return err
}
_, err = models.DelMedalCategory(id)
operate_log.Log4Del(operate_log.MedalCategoryOperate, old, doer.ID, "删除了勋章分类")
return err
}

+ 64
- 0
services/medal/medal.go View File

@@ -0,0 +1,64 @@
package medal

import (
"code.gitea.io/gitea/models"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/services/admin/operate_log"
"errors"
)

func GetMedalList(opts models.GetMedalOpts) ([]*models.Medal4Show, error) {
list, err := models.GetMedalList(opts)
if err != nil {
return nil, err
}
if len(list) == 0 {
return nil, nil
}
r := make([]*models.Medal4Show, len(list))
for i := 0; i < len(list); i++ {
r[i] = list[i].ToShow()
}

return r, nil
}

func AddMedal(m models.Medal4Show, doer *models.User) error {
_, err := models.AddMedal(m.ToDTO())
if err != nil {
return err
}
operate_log.Log4Add(operate_log.MedalOperate, m, doer.ID, "新增了勋章")
return nil
}

func EditMedal(m models.Medal4Show, doer *models.User) error {
if m.ID == 0 {
log.Error(" EditMedal param error")
return errors.New("param error")
}
old, err := models.GetMedalById(m.ID)
if err != nil {
return err
}
_, err = models.UpdateMedalById(m.ID, m.ToDTO())
if err != nil {
return err
}
operate_log.Log4Edit(operate_log.MedalOperate, old, m.ToDTO(), doer.ID, "修改了勋章")
return err
}

func DelMedal(id int64, doer *models.User) error {
if id == 0 {
log.Error(" DelMedal param error")
return errors.New("param error")
}
old, err := models.GetMedalById(id)
if err != nil {
return err
}
_, err = models.DelMedal(id)
operate_log.Log4Del(operate_log.MedalOperate, old, doer.ID, "删除了勋章")
return err
}

Loading…
Cancel
Save