Use pointer instead of struct
This commit is contained in:
parent
853477e54a
commit
6d8f38d749
18 changed files with 187 additions and 142 deletions
|
@ -18,19 +18,19 @@ func init() {
|
|||
if stds, err := adlin.GetStudents(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
ret := map[string]map[string]adlin.UnlockedChallenge{}
|
||||
ret := map[string]map[string]*adlin.UnlockedChallenge{}
|
||||
for _, std := range stds {
|
||||
if sts, err := std.GetStates(); err == nil {
|
||||
ret[std.Login] = map[string]adlin.UnlockedChallenge{}
|
||||
ret[std.Login] = map[string]*adlin.UnlockedChallenge{}
|
||||
|
||||
for _, s := range sts {
|
||||
ret[std.Login][fmt.Sprintf("%d", s.Challenge)] = s
|
||||
}
|
||||
|
||||
if pongs, err := std.LastPongs(); err == nil && len(pongs) > 0 {
|
||||
ret[std.Login]["ping"] = adlin.UnlockedChallenge{
|
||||
ret[std.Login]["ping"] = &adlin.UnlockedChallenge{
|
||||
IdStudent: std.Id,
|
||||
Time: pongs[0].Date,
|
||||
Time: &pongs[0].Date,
|
||||
Value: pongs[0].State,
|
||||
}
|
||||
} else if err != nil {
|
||||
|
@ -47,17 +47,17 @@ func init() {
|
|||
}))
|
||||
router.POST("/api/students/", remoteValidatorHandler(apiHandler(createStudent)))
|
||||
router.GET("/api/students/:sid/", apiHandler(studentHandler(
|
||||
func(std adlin.Student, _ []byte) (interface{}, error) {
|
||||
func(std *adlin.Student, _ []byte) (interface{}, error) {
|
||||
return std, nil
|
||||
})))
|
||||
router.PUT("/api/students/:sid/", remoteValidatorHandler(apiHandler(studentHandler(updateStudent))))
|
||||
router.DELETE("/api/students/:sid/", remoteValidatorHandler(apiHandler(studentHandler(
|
||||
func(std adlin.Student, _ []byte) (interface{}, error) {
|
||||
func(std *adlin.Student, _ []byte) (interface{}, error) {
|
||||
return std.Delete()
|
||||
}))))
|
||||
router.GET("/api/students/:sid/progress", apiHandler(studentHandler(
|
||||
func(std adlin.Student, _ []byte) (interface{}, error) {
|
||||
ret := map[string]adlin.UnlockedChallenge{}
|
||||
func(std *adlin.Student, _ []byte) (interface{}, error) {
|
||||
ret := map[string]*adlin.UnlockedChallenge{}
|
||||
|
||||
if sts, err := std.GetStates(); err == nil {
|
||||
for _, s := range sts {
|
||||
|
@ -65,6 +65,20 @@ func init() {
|
|||
}
|
||||
}
|
||||
|
||||
if cerrors, err := std.GetChallengeErrors(); err == nil {
|
||||
for _, cerr := range cerrors {
|
||||
if _, ok := ret[fmt.Sprintf("%d", cerr.Challenge)]; ok {
|
||||
ret[fmt.Sprintf("%d", cerr.Challenge)].Error = cerr.Error
|
||||
ret[fmt.Sprintf("%d", cerr.Challenge)].LastCheck = &cerr.Time
|
||||
} else {
|
||||
ret[fmt.Sprintf("%d", cerr.Challenge)] = &adlin.UnlockedChallenge{
|
||||
LastCheck: &cerr.Time,
|
||||
Error: cerr.Error,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret, nil
|
||||
})))
|
||||
}
|
||||
|
@ -82,7 +96,7 @@ func createStudent(_ httprouter.Params, body []byte) (interface{}, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
var exist adlin.Student
|
||||
var exist *adlin.Student
|
||||
if exist, err = adlin.GetStudentByLogin(strings.TrimSpace(std.Login)); err != nil {
|
||||
if exist, err = adlin.NewStudent(strings.TrimSpace(std.Login)); err != nil {
|
||||
return nil, err
|
||||
|
@ -96,8 +110,8 @@ func createStudent(_ httprouter.Params, body []byte) (interface{}, error) {
|
|||
return exist, nil
|
||||
}
|
||||
|
||||
func updateStudent(current adlin.Student, body []byte) (interface{}, error) {
|
||||
var new adlin.Student
|
||||
func updateStudent(current *adlin.Student, body []byte) (interface{}, error) {
|
||||
new := &adlin.Student{}
|
||||
if err := json.Unmarshal(body, &new); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
Reference in a new issue