package firstrechargereward import ( "strconv" "strings" ) const defaultFirstRechargeRewardMinAppVersion = "1.5.0" func isFirstRechargeRewardAppVersionSupported(appVersion string, minAppVersion string) bool { appVersion = strings.TrimSpace(appVersion) minAppVersion = strings.TrimSpace(minAppVersion) if minAppVersion == "" { minAppVersion = defaultFirstRechargeRewardMinAppVersion } if appVersion == "" { return false } return compareAppVersion(appVersion, minAppVersion) >= 0 } func compareAppVersion(left, right string) int { leftParts := parseAppVersion(left) rightParts := parseAppVersion(right) maxLen := len(leftParts) if len(rightParts) > maxLen { maxLen = len(rightParts) } for i := 0; i < maxLen; i++ { var lv, rv int if i < len(leftParts) { lv = leftParts[i] } if i < len(rightParts) { rv = rightParts[i] } if lv > rv { return 1 } if lv < rv { return -1 } } return 0 } func parseAppVersion(version string) []int { version = strings.TrimSpace(version) if version == "" { return []int{0} } parts := strings.Split(version, ".") result := make([]int, 0, len(parts)) for _, part := range parts { part = strings.TrimSpace(part) if part == "" { result = append(result, 0) continue } digits := strings.Builder{} for _, r := range part { if r < '0' || r > '9' { break } digits.WriteRune(r) } if digits.Len() == 0 { result = append(result, 0) continue } value, err := strconv.Atoi(digits.String()) if err != nil { result = append(result, 0) continue } result = append(result, value) } return result }