Files
Avtex/QUICKSTART.md
T

11 KiB
Raw Blame History

🚀 Быстрый старт - NANAHUI CRM

✅ Что уже создано

Структура проекта

lib/
├── core/                      # Ядро приложения
│   ├── ai_service.dart        # AI сервис (OpenAI, Anthropic)
│   ├── firebase_config.dart   # Firebase конфигурация
│   ├── firestore_service.dart # Firestore сервис (CRUD операции)
│   ├── local_storage_service.dart # Локальное хранилище (Hive)
│   ├── router.dart            # Маршрутизация (GoRouter)
│   └── theme.dart             # Темы оформления
├── features/                  # Функциональные модули (будущие)
├── models/                    # Модели данных
│   ├── user_model.dart        # Пользователь
│   ├── task_model.dart        # Задача
│   ├── project_model.dart     # Проект
│   ├── mind_map_model.dart    # Mind-карта
│   ├── calendar_event_model.dart # Событие календаря
│   └── alarm_model.dart       # Будильник
├── providers/                 # State management (Riverpod)
│   └── auth_provider.dart     # Аутентификация
├── screens/                   # Экраны
│   ├── auth_screen.dart       # Вход
│   ├── home_screen.dart       # Главная навигация
│   ├── dashboard_screen.dart  # Дашборд
│   ├── tasks_screen.dart      # Задачи
│   ├── mind_map_screen.dart   # Mind-карта
│   ├── calendar_screen.dart   # Календарь
│   └── alarms_screen.dart     # Будильники
└── widgets/                   # Виджеты (будущие)

🔧 Настройка Firebase

1. Создайте проект в Firebase Console

  1. Перейдите на https://console.firebase.google.com
  2. Нажмите "Add project"
  3. Введите имя: "NANAHUI CRM"
  4. Отключите Google Analytics (не нужно для начала)
  5. Создайте проект

2. Включите Authentication

  1. В меню слева: Build → Authentication
  2. Нажмите Get started
  3. Включите Google провайдер:
    • Click Google → Enable
    • Enter support email: ваш email
    • Save

3. Создайте Firestore базу

  1. В меню: Build → Firestore Database
  2. Нажмите Create database
  3. Выберите Start in test mode (потом настроим правила)
  4. Выберите локацию (например, us-central)
  5. Enable

4. Добавьте Android приложение

  1. В Firebase Console: Project Settings (шестерёнка)
  2. Your apps → Add app → Android
  3. Введите package name: com.nanahui.nanahui_crm
  4. Скачайте google-services.json
  5. Положите файл в: android/app/google-services.json

5. Добавьте iOS приложение (если нужно)

  1. Add app → iOS
  2. Bundle ID: com.nanahui.nanahuiCrm
  3. Скачайте GoogleService-Info.plist
  4. Положите в: ios/Runner/GoogleService-Info.plist

6. Настройте android/app/build.gradle

В файле android/app/build.gradle добавьте:

dependencies {
  // ... другие зависимости
  
  // Firebase
  implementation platform('com.google.firebase:firebase-bom:32.7.0')
  implementation 'com.google.firebase:firebase-analytics'
  implementation 'com.google.firebase:firebase-auth'
  implementation 'com.google.firebase:firebase-firestore'
  implementation 'com.google.firebase:firebase-messaging'
}

// В конце файла:
apply plugin: 'com.google.gms.google-services'

🔑 Настройка API ключей

OpenAI API (для AI функций)

  1. Перейдите на https://platform.openai.com/api-keys
  2. Создайте новый API ключ
  3. Скопируйте ключ

Google Calendar API

  1. Перейдите на https://console.cloud.google.com
  2. Создайте новый проект или выберите существующий
  3. Включите Google Calendar API
  4. Создайте OAuth 2.0 credentials
  5. Получите Client ID и Client Secret

📝 Настройка окружения

  1. Скопируйте .env.example в .env:
cp .env.example .env
  1. Заполните .env своими ключами:
OPENAI_API_KEY=sk-your-actual-openai-key
FIREBASE_API_KEY=your-firebase-key
# и т.д.

🏃 Запуск приложения

1. Установите зависимости

flutter pub get

2. Запуск на эмуляторе/устройстве

flutter run

3. Сборка APK (Android)

flutter build apk --release

4. Сборка для iOS

flutter build ios --release

📱 Тестирование

Проверка аутентификации

  1. Запустите приложение
  2. Нажмите "Войти через Google"
  3. Выберите аккаунт
  4. Должна произойти авторизация и переход на главный экран

Проверка навигации

  1. После входа используйте нижнюю навигационную панель
  2. Переключайтесь между: Главная, Задачи, Mind-карта, Календарь, Будильники

🔥 Firestore правила безопасности

Создайте в Firebase Console → Firestore Database → Rules:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // Helper function
    function isAuthenticated() {
      return request.auth != null;
    }
    
    function isOwner(userId) {
      return request.auth.uid == userId;
    }
    
    // Users
    match /users/{userId} {
      allow read: if isAuthenticated();
      allow write: if isOwner(userId);
    }
    
    // Projects
    match /projects/{projectId} {
      allow read: if isAuthenticated();
      allow create: if isAuthenticated();
      allow update, delete: if isAuthenticated();
    }
    
    // Tasks
    match /tasks/{taskId} {
      allow read: if isAuthenticated();
      allow create, update, delete: if isAuthenticated();
    }
    
    // Events
    match /events/{eventId} {
      allow read: if isAuthenticated();
      allow create, update, delete: if isAuthenticated();
    }
    
    // Alarms
    match /alarms/{alarmId} {
      allow read: if isAuthenticated();
      allow create, update, delete: if isAuthenticated();
    }
    
    // Mind maps
    match /mindmaps/{projectId}/nodes/{nodeId} {
      allow read: if isAuthenticated();
      allow write: if isAuthenticated();
    }
  }
}

📊 Структура Firestore

users/
  └─ {userId}/
      ├─ email: string
      ├─ displayName: string
      ├─ photoUrl: string
      ├─ role: "admin" | "member" | "viewer"
      ├─ teamIds: string[]
      └─ settings: map

projects/
  └─ {projectId}/
      ├─ name: string
      ├─ description: string
      ├─ teamId: string
      ├─ ownerId: string
      ├─ memberIds: string[]
      ├─ status: string
      ├─ startDate: timestamp
      ├─ endDate: timestamp
      └─ color: string

tasks/
  └─ {taskId}/
      ├─ title: string
      ├─ description: string
      ├─ projectId: string
      ├─ parentTaskId: string?
      ├─ status: "todo" | "inProgress" | "review" | "done"
      ├─ priority: "low" | "medium" | "high" | "urgent"
      ├─ assigneeId: string?
      ├─ creatorId: string
      ├─ dueDate: timestamp?
      └─ aiMetadata: map

mindmaps/
  └─ {projectId}/
      └─ nodes/
          └─ {nodeId}/
              ├─ parentId: string?
              ├─ level: number
              ├─ title: string
              ├─ taskId: string?
              ├─ x: number
              ├─ y: number
              └─ color: string

events/
  └─ {eventId}/
      ├─ title: string
      ├─ startTime: timestamp
      ├─ endTime: timestamp
      ├─ googleEventId: string?
      └─ attendeeIds: string[]

alarms/
  └─ {alarmId}/
      ├─ title: string
      ├─ dateTime: timestamp
      ├─ isRepeating: boolean
      └─ taskId: string?

🛠 Следующие шаги

Первоочередные задачи:

  1. ✅ Создать базовую структуру
  2. ✅ Настроить модели данных
  3. ✅ Создать экраны навигации
  4. 🔲 Настроить Firebase проект
  5. 🔲 Реализовать реальную аутентификацию
  6. 🔲 Добавить CRUD операции с Firestore
  7. 🔲 Реализовать синхронизацию офлайн-данных
  8. 🔲 Добавить AI функции (OpenAI API)
  9. 🔲 Интеграция с Google Calendar
  10. 🔲 Создать mind-map виджет с drag-drop

Для тестирования AI:

  1. Добавьте OpenAI API ключ в lib/core/ai_service.dart:
final aiService = AIService(
  openaiApiKey: 'sk-your-api-key-here',
);
  1. Протестируйте генерацию подзадач:
final subtasks = await aiService.generateSubtasks(
  title: 'Создать CRM систему',
  description: 'Разработка CRM для управления задачами команды',
);
print(subtasks);

🆘 Troubleshooting

Ошибка: "No Firebase App"

  • Убедитесь, что google-services.json лежит в android/app/
  • Проверьте, что добавлен apply plugin: 'com.google.gms.google-services'

Ошибка: "Sign-in failed"

  • Проверьте SHA-1 fingerprint для Android
  • Убедитесь, что Google Sign-In включён в Firebase Console

Ошибка: "Permission denied"

  • Проверьте правила безопасности Firestore
  • Убедитесь, что пользователь аутентифицирован

📚 Ресурсы


Создано для команды NANAHUI 🚀