11package entities
22
33import (
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+
2259func (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