Skip to content

Commit 98dfdc0

Browse files
chore: validate user_id/quest_id/quest action for quests api
1 parent 1e4089f commit 98dfdc0

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

pkg/entities/quest.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package entities
22

33
import (
4+
"errors"
5+
"fmt"
46
"math"
57
"math/rand"
68
"sort"
@@ -19,6 +21,41 @@ import (
1921
"gorm.io/gorm"
2022
)
2123

24+
func (e *Entity) validateUser(userID string) error {
25+
_, err := e.repo.Users.GetOne(userID)
26+
if err != nil {
27+
e.log.Fields(logger.Fields{"user_id": userID}).Error(err, "[entity.validateUser] repo.Users.GetOne() failed")
28+
return fmt.Errorf("user not found")
29+
}
30+
return nil
31+
}
32+
33+
// validate action in quest table
34+
func (e *Entity) validateQuestAction(action string) error {
35+
listQ := quest.ListQuery{
36+
Action: action,
37+
}
38+
list, err := e.repo.Quest.List(listQ)
39+
if len(list) == 0 {
40+
e.log.Fields(logger.Fields{"listQ": listQ}).Error(err, "[entity.validateQuestAction] repo.Quest.List() failed")
41+
return fmt.Errorf("action not found")
42+
}
43+
return nil
44+
}
45+
46+
// validate quest_id in quest table
47+
func (e *Entity) validateQuestID(questID *uuid.UUID) error {
48+
listQ := quest.ListQuery{
49+
ID: questID,
50+
}
51+
list, err := e.repo.Quest.List(listQ)
52+
if len(list) == 0 {
53+
e.log.Fields(logger.Fields{"listQ": listQ}).Error(err, "[entity.validateQuestID] repo.Quest.List() failed")
54+
return fmt.Errorf("quest_id not found")
55+
}
56+
return nil
57+
}
58+
2259
func (e *Entity) GetUserQuestList(req request.GetUserQuestListRequest) ([]model.QuestUserList, error) {
2360
now := time.Now().UTC()
2461
startTime := util.StartOfDay(now)
@@ -27,6 +64,11 @@ func (e *Entity) GetUserQuestList(req request.GetUserQuestListRequest) ([]model.
2764
StartTime: &startTime,
2865
Routine: &req.Routine,
2966
}
67+
err := e.validateUser(req.UserID)
68+
if err != nil {
69+
return nil, err
70+
}
71+
3072
list, err := e.repo.QuestUserList.List(listQ)
3173
if err != nil {
3274
e.log.Fields(logger.Fields{"listQ": listQ}).Error(err, "[entity.GetUserQuestList] repo.QuestUserList.List() failed")
@@ -166,6 +208,22 @@ func (e *Entity) UpdateUserQuestProgress(log *model.QuestUserLog) error {
166208
if log.Action == model.BONUS || log.UserID == "" {
167209
return nil
168210
}
211+
212+
//validate quest action
213+
err_action := e.validateQuestAction(string(log.Action))
214+
// validate user
215+
err_user := e.validateUser(log.UserID)
216+
217+
if err_action != nil && err_user == nil {
218+
return err_action
219+
}
220+
if err_action == nil && err_user != nil {
221+
return err_user
222+
}
223+
if err_action != nil && err_user != nil {
224+
return errors.New(err_action.Error() + ", " + err_user.Error())
225+
}
226+
169227
startTime := util.StartOfDay(time.Now().UTC())
170228
routines, err := e.repo.Quest.GetAvailableRoutines()
171229
if err != nil {
@@ -294,6 +352,22 @@ func (e *Entity) ClaimQuestsRewards(req request.ClaimQuestsRewardsRequest) (*res
294352
IsClaimed: &claimed,
295353
QuestID: req.QuestID,
296354
}
355+
356+
//validate quest id
357+
err_id := e.validateQuestID(listQ.QuestID)
358+
// validate user
359+
err_user := e.validateUser(*listQ.UserID)
360+
361+
if err_id != nil && err_user == nil {
362+
return nil, err_id
363+
}
364+
if err_id == nil && err_user != nil {
365+
return nil, err_user
366+
}
367+
if err_id != nil && err_user != nil {
368+
return nil, errors.New(err_id.Error() + ", " + err_user.Error())
369+
}
370+
297371
list, err := e.repo.QuestUserList.List(listQ)
298372
if err != nil {
299373
e.log.Fields(logger.Fields{"listQ": listQ}).Error(err, "[entity.ClaimQuestsRewards] repo.QuestUserList.List() failed")

0 commit comments

Comments
 (0)