diff --git a/play-life-backend/main.go b/play-life-backend/main.go index 49c5ab9..51346cd 100644 --- a/play-life-backend/main.go +++ b/play-life-backend/main.go @@ -5888,21 +5888,34 @@ func getTodoistUserInfo(accessToken string) (struct { log.Printf("Todoist API: parsed response keys: %v", getMapKeys(result)) + // Функция для извлечения ID из разных типов + extractID := func(idValue interface{}) int64 { + switch v := idValue.(type) { + case float64: + return int64(v) + case int64: + return v + case int: + return int64(v) + case string: + if id, err := strconv.ParseInt(v, 10, 64); err == nil { + return id + } + } + return 0 + } + // Проверяем разные варианты структуры ответа if userObj, ok := result["user"].(map[string]interface{}); ok { // Один объект user - if id, ok := userObj["id"].(float64); ok { - userInfo.ID = int64(id) - } + userInfo.ID = extractID(userObj["id"]) if email, ok := userObj["email"].(string); ok { userInfo.Email = email } } else if usersArr, ok := result["user"].([]interface{}); ok && len(usersArr) > 0 { // Массив users, берем первый if userObj, ok := usersArr[0].(map[string]interface{}); ok { - if id, ok := userObj["id"].(float64); ok { - userInfo.ID = int64(id) - } + userInfo.ID = extractID(userObj["id"]) if email, ok := userObj["email"].(string); ok { userInfo.Email = email }