Initial commit: NANAHUI CRM - Flutter Firebase CRM assistant
This commit is contained in:
+284
@@ -0,0 +1,284 @@
|
||||
# 🏗 Архитектура NANAHUI CRM
|
||||
|
||||
## Общая схема
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ Flutter Application │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ Presentation Layer (UI) │
|
||||
│ ┌─────────────┬─────────────┬─────────────┬─────────────┐ │
|
||||
│ │ Screens │ Widgets │ Themes │ Navigation │ │
|
||||
│ │ │ │ │ (GoRouter) │ │
|
||||
│ └─────────────┴─────────────┴─────────────┴─────────────┘ │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ State Management Layer (Riverpod) │
|
||||
│ ┌─────────────┬─────────────┬─────────────┬─────────────┐ │
|
||||
│ │ Providers │ Notifiers │ Streams │ State │ │
|
||||
│ └─────────────┴─────────────┴─────────────┴─────────────┘ │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ Domain Layer (Business Logic) │
|
||||
│ ┌─────────────┬─────────────┬─────────────┬─────────────┐ │
|
||||
│ │ Models │ Repositories │ Services │ Use Cases │ │
|
||||
│ └─────────────┴─────────────┴─────────────┴─────────────┘ │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ Data Layer │
|
||||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||||
│ │ Local Storage (Hive) │ │
|
||||
│ │ ┌──────────┬──────────┬──────────┬──────────┐ │ │
|
||||
│ │ │ Tasks │ Alarms │ MindMaps │ Events │ │ │
|
||||
│ │ └──────────┴──────────┴──────────┴──────────┘ │ │
|
||||
│ └─────────────────────────────────────────────────────────┘ │
|
||||
│ ┌─────────────────────────────────────────────────────────┐ │
|
||||
│ │ Remote Storage (Firebase Firestore) │ │
|
||||
│ └─────────────────────────────────────────────────────────┘ │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
│
|
||||
┌────────────────────┼────────────────────┐
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||||
│ Firebase Auth │ │ AI Services │ │ Google Calendar │
|
||||
│ (Google Sign- │ │ (OpenAI, │ │ API │
|
||||
│ In, Email) │ │ Anthropic) │ │ │
|
||||
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
||||
```
|
||||
|
||||
## Поток данных
|
||||
|
||||
### 1. Аутентификация
|
||||
```
|
||||
User → AuthScreen → AuthNotifier (Riverpod) → Firebase Auth
|
||||
↓
|
||||
UserModel → Firestore
|
||||
↓
|
||||
HomeScreen
|
||||
```
|
||||
|
||||
### 2. Управление задачами
|
||||
```
|
||||
User → TasksScreen → TaskNotifier → FirestoreService → Firestore
|
||||
↓
|
||||
LocalStorageService (Hive)
|
||||
↓
|
||||
Offline Cache
|
||||
```
|
||||
|
||||
### 3. AI генерация
|
||||
```
|
||||
User → TaskScreen → AIService → OpenAI API
|
||||
↓
|
||||
Generate Subtasks
|
||||
↓
|
||||
TaskModel → Firestore
|
||||
```
|
||||
|
||||
### 4. Mind-карта
|
||||
```
|
||||
User → MindMapScreen → MindMapNotifier → FirestoreService
|
||||
↓
|
||||
MindMap Nodes (Tree)
|
||||
↓
|
||||
GraphView Widget (Render)
|
||||
```
|
||||
|
||||
### 5. Синхронизация
|
||||
```
|
||||
┌──────────────┐ Compare ┌──────────────┐
|
||||
│ Local Hive │ ←───────────→ │ Firestore │
|
||||
│ (Offline) │ │ (Remote) │
|
||||
└──────────────┘ └──────────────┘
|
||||
↓ ↓
|
||||
Merge Conflicts Real-time Sync
|
||||
↓ ↓
|
||||
Local Priority Remote Priority
|
||||
└──────────────┬──────────────┘
|
||||
↓
|
||||
Merged Data → UI
|
||||
```
|
||||
|
||||
## Модульная структура
|
||||
|
||||
### Core Module
|
||||
```
|
||||
core/
|
||||
├── firebase_config.dart # Инициализация Firebase
|
||||
├── firestore_service.dart # CRUD операции Firestore
|
||||
├── local_storage_service.dart # Hive кэш
|
||||
├── ai_service.dart # AI интеграции
|
||||
├── router.dart # GoRouter маршруты
|
||||
└── theme.dart # Material темы
|
||||
```
|
||||
|
||||
### Features Modules
|
||||
```
|
||||
features/
|
||||
├── auth/
|
||||
│ ├── auth_screen.dart
|
||||
│ ├── auth_provider.dart
|
||||
│ └── auth_service.dart
|
||||
├── tasks/
|
||||
│ ├── task_list_screen.dart
|
||||
│ ├── task_detail_screen.dart
|
||||
│ ├── task_provider.dart
|
||||
│ └── task_service.dart
|
||||
├── mindmap/
|
||||
│ ├── mindmap_screen.dart
|
||||
│ ├── mindmap_widget.dart
|
||||
│ ├── mindmap_provider.dart
|
||||
│ └── mindmap_service.dart
|
||||
├── calendar/
|
||||
│ ├── calendar_screen.dart
|
||||
│ ├── event_provider.dart
|
||||
│ └── google_calendar_service.dart
|
||||
└── alarms/
|
||||
├── alarms_screen.dart
|
||||
├── alarm_provider.dart
|
||||
└── notification_service.dart
|
||||
```
|
||||
|
||||
## Ролевая модель
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────┐
|
||||
│ User Roles │
|
||||
├──────────────┬──────────────┬──────────────┤
|
||||
│ Admin │ Member │ Viewer │
|
||||
├──────────────┼──────────────┼──────────────┤
|
||||
│ ✓ Все права │ ✓ Создание │ ✓ Просмотр │
|
||||
│ ✓ Редактиро- │ задач │ задач │
|
||||
│ вание mind-│ ✓ Редактиро- │ ✓ Просмотр │
|
||||
│ карт │ вание │ mind-карт │
|
||||
│ ✓ Управление │ своих задач│ ✗ Редактиро- │
|
||||
│ командой │ ✓ Просмотр │ вание │
|
||||
│ ✓ Удаление │ общих задач│ ✗ Удаление │
|
||||
│ любых задач│ ✗ Редактиро- │ │
|
||||
│ │ вание mind-│ │
|
||||
│ │ карт │ │
|
||||
└──────────────┴──────────────┴──────────────┘
|
||||
```
|
||||
|
||||
## Модель данных
|
||||
|
||||
### Task Model
|
||||
```dart
|
||||
TaskModel {
|
||||
String id;
|
||||
String title;
|
||||
String? description;
|
||||
String projectId;
|
||||
String? parentTaskId; // Для иерархии
|
||||
TaskStatus status; // todo, inProgress, review, done
|
||||
TaskPriority priority; // low, medium, high, urgent
|
||||
String? assigneeId;
|
||||
String? creatorId;
|
||||
List<String> tags;
|
||||
DateTime? dueDate;
|
||||
int estimatedHours;
|
||||
Map<String, dynamic> aiMetadata; // AI данные
|
||||
DateTime createdAt;
|
||||
DateTime updatedAt;
|
||||
}
|
||||
```
|
||||
|
||||
### MindMapNode Model
|
||||
```dart
|
||||
MindMapNode {
|
||||
String id;
|
||||
String projectId;
|
||||
String? parentId; // Для дерева
|
||||
int level; // Уровень вложенности
|
||||
String title;
|
||||
String? taskId; // Связь с задачей
|
||||
String color;
|
||||
double x, y; // Координаты
|
||||
DateTime createdAt;
|
||||
DateTime updatedAt;
|
||||
}
|
||||
```
|
||||
|
||||
## Синхронизация
|
||||
|
||||
### Стратегия
|
||||
1. **Offline-first**: Все данные сначала сохраняются локально
|
||||
2. **Background sync**: Периодическая синхронизация с Firestore
|
||||
3. **Conflict resolution**:
|
||||
- Last write wins для простых полей
|
||||
- Merge для коллекций
|
||||
- User prompt для критических конфликтов
|
||||
|
||||
### Flow
|
||||
```
|
||||
┌─────────┐ ┌─────────────┐ ┌──────────┐
|
||||
│ UI │────→│ Repository │────→│ Firestore│
|
||||
└─────────┘ └─────────────┘ └──────────┘
|
||||
↓ ↓
|
||||
┌─────────┐ ┌─────────────┐
|
||||
│ Cache │←────│ Hive │
|
||||
└─────────┘ └─────────────┘
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
### Firebase Security Rules
|
||||
```javascript
|
||||
// Проверка прав доступа
|
||||
function hasRole(allowedRoles) {
|
||||
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role in allowedRoles;
|
||||
}
|
||||
|
||||
// Проверка владения
|
||||
function isOwner(resource) {
|
||||
return resource.ownerId == request.auth.uid;
|
||||
}
|
||||
|
||||
// Проверка членства в команде
|
||||
function isTeamMember(teamId) {
|
||||
let team = get(/databases/$(database)/documents/teams/$(teamId)).data;
|
||||
return team.memberIds.hasAny([request.auth.uid]);
|
||||
}
|
||||
```
|
||||
|
||||
## Производительность
|
||||
|
||||
### Оптимизация
|
||||
1. **Pagination**: Загрузка задач порциями по 50
|
||||
2. **Lazy loading**: Mind-карта загружается по частям
|
||||
3. **Caching**: Hive для офлайн-доступа
|
||||
4. **Indexes**: Firestore индексы для частых запросов
|
||||
5. **Batching**: Пакетная запись в Firestore
|
||||
|
||||
### Firestore Indexes
|
||||
```
|
||||
tasks: [projectId, createdAt] [assigneeId, status] [dueDate]
|
||||
events: [startTime, endTime] [attendeeIds]
|
||||
mindmaps: [projectId, level]
|
||||
```
|
||||
|
||||
## Масштабирование
|
||||
|
||||
### Этапы роста
|
||||
|
||||
**Phase 1: MVP (сейчас)**
|
||||
- Базовые CRUD операции
|
||||
- Простая аутентификация
|
||||
- Локальный кэш
|
||||
|
||||
**Phase 2: Team Features**
|
||||
- Командная работа
|
||||
- Роли и разрешения
|
||||
- Real-time collaboration
|
||||
|
||||
**Phase 3: AI Integration**
|
||||
- Умное планирование
|
||||
- Авто-приоритизация
|
||||
- Генерация отчётов
|
||||
|
||||
**Phase 4: Enterprise**
|
||||
- SSO интеграция
|
||||
- Audit logs
|
||||
- Advanced analytics
|
||||
|
||||
---
|
||||
|
||||
**Документ создан для команды NANAHUI** 🚀
|
||||
Reference in New Issue
Block a user