2024-12-12 15:01:18 +08:00

170 lines
3.4 KiB
Go

package mission
import (
"f5"
"main/common"
"main/constant"
"main/model"
"main/mt"
"main/service"
"main/vo"
"q5"
"github.com/gin-gonic/gin"
)
type MissionApi struct {
}
func (this *MissionApi) List(c *gin.Context) {
s := c.MustGet(constant.SESSION_KEY).(common.Session)
if s == nil {
return
}
rspObj := struct {
vo.BaseVo
Data []*vo.Mission `json:"data"`
}{}
rspObj.ErrCode, rspObj.ErrMsg = service.Task.List(s.GetAccountId(), &rspObj.Data)
c.JSON(200, rspObj)
}
func (this *MissionApi) UpdateTask(c *gin.Context) {
s := c.MustGet(constant.SESSION_KEY).(common.Session)
if s == nil {
return
}
reqJson := struct {
MissionId int32 `json:"mission_id"`
}{}
if err := c.ShouldBindJSON(&reqJson); err != nil {
f5.RspErr(c, 401, "params parse error")
return
}
rspObj := struct {
vo.BaseVo
Data []*vo.Mission `json:"data"`
}{}
task := new(model.Task)
err, found := task.Find(s.GetAccountId())
if err != nil || !found {
f5.RspErr(c, 500, "server internal error")
return
}
tasks := task.GetTaskItems()
if tasks == nil {
f5.RspErr(c, 401, "bad request")
return
}
taskitem, ok := tasks[reqJson.MissionId]
if !ok {
f5.RspErr(c, 401, "bad request")
return
}
taskMeta := mt.Table.Task.GetById(int64(taskitem.MissionId))
if taskMeta == nil {
f5.RspErr(c, 500, "server internal error")
return
}
if taskMeta.GetCondition() != constant.TASK_COND_FRONT ||
taskitem.Target <= taskitem.Current {
f5.RspErr(c, 401, "bad request")
return
}
taskitem.Target++
task.UpdateTasks(tasks)
for _, taskitem := range tasks {
missionVo := new(vo.Mission)
missionVo.FromModel(taskitem)
q5.AppendSlice(&rspObj.Data, missionVo)
}
c.JSON(200, rspObj)
}
func (this *MissionApi) ClaimTaskAward(c *gin.Context) {
s := c.MustGet(constant.SESSION_KEY).(common.Session)
if s == nil {
return
}
reqJson := struct {
MissionId int32 `json:"mission_id"`
}{}
if err := c.ShouldBindJSON(&reqJson); err != nil {
f5.RspErr(c, 401, "params parse error")
return
}
rspObj := struct {
vo.BaseVo
Data []*vo.Mission `json:"data"`
}{}
task := new(model.Task)
err, found := task.Find(s.GetAccountId())
if err != nil || !found {
f5.RspErr(c, 500, "server internal error")
return
}
tasks := task.GetTaskItems()
if tasks == nil {
f5.RspErr(c, 401, "bad request")
return
}
taskitem, ok := tasks[reqJson.MissionId]
if !ok || taskitem.Current != taskitem.Target {
f5.RspErr(c, 401, "bad request")
return
}
taskMeta := mt.Table.Task.GetById(int64(taskitem.MissionId))
if taskMeta == nil {
f5.RspErr(c, 500, "server internal error")
return
}
user := new(model.User)
nowTime := f5.GetApp().GetRealSeconds()
if err, found := user.Find(s.GetAccountId(), nowTime); err != nil {
f5.RspErr(c, 500, "server internal error1")
return
} else if !found {
f5.RspErr(c, 500, "server internal error2")
return
}
if taskMeta.GetRewardType() == constant.TASK_AWARD_SCORE {
user.AddScore(taskMeta.GetReward())
if service.Task.UpdateTaskProgress(s.GetAccountId(), constant.ITEM_TYPE_SCORE, taskMeta.GetReward(), &tasks) {
q5.AppendSlice(&rspObj.BaseVo.GetOrCreateSideEffect().Effects, "task")
}
rspObj.GetOrCreateAward().AddItem(constant.VIRTUAL_ITEM_SCORE, taskMeta.GetReward())
}
taskitem.Award = 1
task.UpdateTasks(tasks)
for _, taskitem := range tasks {
missionVo := new(vo.Mission)
missionVo.FromModel(taskitem)
q5.AppendSlice(&rspObj.Data, missionVo)
}
user.UpdateUserFields()
c.JSON(200, rspObj)
}