package controller import ( "ktogame/models" ) func (uc *UserController) Reinput(user string) { var ui models.UserInfo ok, err := uc.engine.Id(user).Get(&ui) if err != nil { ErrResponse(uc.Controller, err) return } if !ok { ErrResponse(uc.Controller, "db get failed!") return } if ui.AvailableReinput < ModBase*Decimals { ErrResponse(uc.Controller, "no available reinput balance") return } ///update availableReinput by left in db ///update totalReinput left := uint64(ui.AvailableReinput) % (ModBase * Decimals) reinputValue := ui.AvailableReinput - float64(left) ui.AvailableReinput = float64(left) ui.TotalReinputed += reinputValue if ui.TotalReinputed >= CommunityLimit*Decimals { ui.State = CommunityUsers } _, err = uc.engine.ID(user).Cols("available_reinput").Update(&ui) if err != nil { ErrResponse(uc.Controller, err) return } _, err = uc.engine.ID(user).Cols("total_reinput").Update(&ui) if err != nil { ErrResponse(uc.Controller, err) return } ///update Recommendation Rewards rewards := reinputValue * 10 / 100 a_rewards := rewards * 60 / 100 a_reinput := rewards * 40 / 100 ///update direct recommend rewards if ui.Direct != -1 { var dui models.UserInfo ok, err := uc.engine.Id(ui.Direct).Get(&dui) if err != nil { ErrResponse(uc.Controller, err) return } if !ok { ErrResponse(uc.Controller, "db get failed!") return } dui.AvailableClaim = a_rewards dui.AvailableReinput = a_reinput _, err = uc.engine.ID(dui.Addr).Cols("available_claim").Update(&dui) if err != nil { ErrResponse(uc.Controller, err) return } _, err = uc.engine.ID(dui.Addr).Cols("available_reinput").Update(&dui) if err != nil { ErrResponse(uc.Controller, err) return } } ///update indirect recommend rewards if ui.Indirect != -1 { var idui models.UserInfo ok, err := uc.engine.Id(ui.Indirect).Get(&idui) if err != nil { ErrResponse(uc.Controller, err) return } if !ok { ErrResponse(uc.Controller, "db get failed!") return } idui.AvailableClaim = a_rewards idui.AvailableReinput = a_reinput _, err = uc.engine.ID(idui.Addr).Cols("available_claim").Update(&idui) if err != nil { ErrResponse(uc.Controller, err) return } _, err = uc.engine.ID(idui.Addr).Cols("available_reinput").Update(&idui) if err != nil { ErrResponse(uc.Controller, err) return } } TxObjectResponse(uc.Controller, "success") }