11 KiB
11 KiB
🚀 Быстрый старт - NANAXE 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
- Перейдите на https://console.firebase.google.com
- Нажмите "Add project"
- Введите имя: "NANAXE CRM"
- Отключите Google Analytics (не нужно для начала)
- Создайте проект
2. Включите Authentication
- В меню слева: Build → Authentication
- Нажмите Get started
- Включите Google провайдер:
- Click Google → Enable
- Enter support email: ваш email
- Save
3. Создайте Firestore базу
- В меню: Build → Firestore Database
- Нажмите Create database
- Выберите Start in test mode (потом настроим правила)
- Выберите локацию (например, us-central)
- Enable
4. Добавьте Android приложение
- В Firebase Console: Project Settings (шестерёнка)
- Your apps → Add app → Android
- Введите package name:
com.nanahui.nanahui_crm - Скачайте
google-services.json - Положите файл в:
android/app/google-services.json
5. Добавьте iOS приложение (если нужно)
- Add app → iOS
- Bundle ID:
com.nanahui.nanahuiCrm - Скачайте
GoogleService-Info.plist - Положите в:
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 функций)
- Перейдите на https://platform.openai.com/api-keys
- Создайте новый API ключ
- Скопируйте ключ
Google Calendar API
- Перейдите на https://console.cloud.google.com
- Создайте новый проект или выберите существующий
- Включите Google Calendar API
- Создайте OAuth 2.0 credentials
- Получите Client ID и Client Secret
📝 Настройка окружения
- Скопируйте
.env.exampleв.env:
cp .env.example .env
- Заполните
.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
📱 Тестирование
Проверка аутентификации
- Запустите приложение
- Нажмите "Войти через Google"
- Выберите аккаунт
- Должна произойти авторизация и переход на главный экран
Проверка навигации
- После входа используйте нижнюю навигационную панель
- Переключайтесь между: Главная, Задачи, 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?
🛠 Следующие шаги
Первоочередные задачи:
- ✅
Создать базовую структуру - ✅
Настроить модели данных - ✅
Создать экраны навигации - 🔲 Настроить Firebase проект
- 🔲 Реализовать реальную аутентификацию
- 🔲 Добавить CRUD операции с Firestore
- 🔲 Реализовать синхронизацию офлайн-данных
- 🔲 Добавить AI функции (OpenAI API)
- 🔲 Интеграция с Google Calendar
- 🔲 Создать mind-map виджет с drag-drop
Для тестирования AI:
- Добавьте OpenAI API ключ в
lib/core/ai_service.dart:
final aiService = AIService(
openaiApiKey: 'sk-your-api-key-here',
);
- Протестируйте генерацию подзадач:
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
- Убедитесь, что пользователь аутентифицирован
📚 Ресурсы
Создано для команды NANAXE 🚀