diff --git a/main.go b/main.go index 26cf968..4094e29 100644 --- a/main.go +++ b/main.go @@ -4,9 +4,14 @@ import ( _ "github.com/mdg-iitr/Codephile/conf" "github.com/astaxie/beego" _ "github.com/mdg-iitr/Codephile/routers" + "github.com/mdg-iitr/Codephile/services/scheduler" ) func main() { + + //goroutine for the scheduler + go scheduler.StartScheduling() + if beego.BConfig.RunMode == "dev" { beego.BConfig.WebConfig.DirectoryIndex = true beego.BConfig.WebConfig.StaticDir["/docs"] = "swagger" diff --git a/models/user.go b/models/user.go index 99154f2..8ed8aa6 100644 --- a/models/user.go +++ b/models/user.go @@ -85,6 +85,9 @@ func AddUser(u User) (string, error) { log.Println(err) return "", errors.New("Could not create user: Username already exists") } + err = RefreshSubmissions() + //handle error + return u.ID.Hex(), nil } @@ -471,3 +474,26 @@ func CompareUser(uid1 bson.ObjectId, uid2 string) (Follow.AllWorldRanks, error) return worldRanksComparison, errors.New("UID Invalid") } } + +func RefreshSubmissions() error { + users := GetAllUsers() + websites := [4]string{"codechef","codeforces","spoj","hackerrank"} + var ErrorSubmissions error + + //establishing a goroutine for this "for" loop + for _ , user := range users { + // executing every iteration in a separate goroutine (to be implemented later) + // go func(user User) { + for _ , website := range websites { + err := AddSubmissions(&user, website) + if err != nil { + //Submissions for this particular user is not updated + ErrorSubmissions = errors.New("Submission fetching altered") + } else { + continue + } + } + // }(user) + } + return ErrorSubmissions +} diff --git a/services/scheduler/scheduler.go b/services/scheduler/scheduler.go new file mode 100644 index 0000000..e255afc --- /dev/null +++ b/services/scheduler/scheduler.go @@ -0,0 +1,25 @@ +package scheduler + +import ( + "github.com/jasonlvhit/gocron" + "github.com/mdg-iitr/Codephile/models" + // "github.com/mdg-iitr/Codephile/models" + +) + +func task() { + //Updates profiles and submissions + _ = models.RefreshSubmissions() + //handle error +} + +func taskWithParams(a int, b string) { + // +} + +func StartScheduling() { + // task() + // gocron.Every(10).Seconds().Do(task) + gocron.Every(1).Day().Do(task) //task to be done everyday + <- gocron.Start() +} \ No newline at end of file