# Madagascar Tours - Полная архитектура решения

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

```
madagascar-tours/
├── frontend/                  # Публичный веб-сайт (HTML/JS/CSS)
│   ├── index.html
│   ├── tours.html
│   ├── about.html
│   ├── contact.html
│   ├── news.html
│   ├── js/
│   │   ├── main.js
│   │   ├── booking-modal.js
│   │   └── back-to-top.js
│   ├── css/
│   │   └── style.css
│   ├── locales/              # i18n поддержка (en, fr, ru)
│   │   ├── en.json
│   │   ├── fr.json
│   │   └── ru.json
│   ├── img/
│   ├── package.json
│   └── README.md
│
├── backend/                   # PHP REST API + CMS + CRM
│   ├── src/
│   │   ├── api/              # REST API контроллеры
│   │   │   ├── ToursAPI.php
│   │   │   ├── NewsAPI.php
│   │   │   ├── PagesAPI.php
│   │   │   └── ...
│   │   ├── admin/            # Админ-панель контроллеры
│   │   ├── models/           # ORM модели
│   │   ├── controllers/      # Бизнес-логика
│   │   ├── middleware/       # Auth, CORS, Validation
│   │   ├── config/
│   │   │   ├── Config.php
│   │   │   └── Database.php
│   │   ├── database/
│   │   │   └── migrations/
│   │   │       └── 001_init_schema.sql
│   │   └── utils/
│   │       ├── Response.php
│   │       └── Validator.php
│   ├── public/
│   │   ├── index.php         # API entry point
│   │   └── .htaccess         # URL rewriting
│   ├── storage/
│   │   ├── uploads/
│   │   └── temp/
│   ├── composer.json
│   ├── openapi.yaml          # Swagger/OpenAPI документация
│   └── README.md
│
├── docs/                      # Документация проекта
│   ├── ARCHITECTURE.md        # Архитектура (этот файл)
│   ├── API.md                 # API документация
│   └── SETUP.md               # Инструкции по установке
│
├── .git/                      # Git репозиторий
├── .gitignore
└── README.md                  # Главный README
```

## 🏗️ Архитектурные компоненты

### 1. Frontend (Публичный сайт)

**Технологии:**
- HTML5, CSS3 (Bootstrap 5.3.0)
- Vanilla JavaScript
- JSON-based многоязычность (i18n)
- Без фреймворков

**Особенности:**
- Полностью статический контент (может быть на CDN)
- Все данные получаются через REST API
- Поддержка 3 языков (English, French, Russian)
- Адаптивный дизайн (mobile-first)
- Модальное окно бронирования
- Интеграция с BackToTop функцией

**API интеграция:**
```javascript
// Получить туры
fetch('http://api.example.com/api/v1/tours')
  .then(r => r.json())
  .then(data => renderTours(data.data))

// Отправить бронирование
fetch('http://api.example.com/api/v1/bookings', {
  method: 'POST',
  body: JSON.stringify(formData)
})
```

### 2. Backend (REST API + CMS + CRM)

**Технологии:**
- PHP 7.4+ / 8.0+
- MySQL 5.7+
- RESTful API архитектура
- Service-oriented design

**Компоненты:**

#### 2.1 REST API
- Публичные эндпоинты (GET):
  - `/api/v1/tours` - список туров
  - `/api/v1/news` - новости
  - `/api/v1/pages/{slug}` - страницы
  - `/api/v1/menu` - навигация
  - `/api/v1/settings` - настройки
  - `/api/v1/bookings` - создание бронирования (POST)

- Защищённые эндпоинты (JWT):
  - Создание, обновление, удаление туров/новостей
  - Управление меню и слайдерами
  - Загрузка файлов
  - Управление бронированиями

#### 2.2 CMS (Content Management System)
Управление:
- **Туры** (с расписанием и доступными местами)
- **Новости** (с категориями)
- **Статьи** (внутренний контент)
- **Страницы** (About, Contact и т.д.)
- **Меню** (с поддержкой иерархии)
- **Слайдеры** (для каждой страницы)
- **Файлы** (загрузка и управление)
- **SEO** (meta теги для туров, новостей, страниц)

#### 2.3 CRM (Customer Relationship Management)
- **Бронирования** (сохранение данных от клиентов)
- **Контакты** (сообщения с формы Contact)
- **Подписки** (newsletter)
- **История действий** (audit logs)

#### 2.4 Админ-панель
- Отдельный URL: `/admin`
- Прямой доступ к MySQL
- Интерфейс для управления всем контентом
- Система ролей (admin, editor)
- Файловый менеджер

### 3. База данных (MySQL)

**Основные таблицы:**

1. **users** - Администраторы и редакторы
2. **tours** - Туры с полным описанием
3. **tour_schedules** - Расписание с доступными местами
4. **news** - Новости
5. **articles** - Статьи (не отображаются публично)
6. **pages** - Статические страницы
7. **categories** - Категории для туров/новостей
8. **menu** - Навигационное меню
9. **sliders** - Слайдеры
10. **settings** - Глобальные настройки
11. **files** - Загруженные файлы
12. **bookings** - Бронирования от клиентов
13. **audit_logs** - История всех действий

## 📡 Поток данных

```
┌─────────────────────────────────────────────────────────────┐
│                     ПУБЛИЧНЫЙ САЙТ                          │
│              (Frontend - HTML/JS/CSS)                       │
│          http://localhost:5500 (или production URL)         │
└────────────────────────┬────────────────────────────────────┘
                         │
                         │ HTTP/HTTPS
                         │ REST API Calls
                         │
         ┌───────────────▼───────────────┐
         │    BACKEND API (PHP)          │
         │ http://localhost:8001/api/v1  │
         │                               │
         │  ┌─────────────────────────┐  │
         │  │  Route Handler         │   │
         │  │  (public/index.php)    │   │
         │  └──────────┬──────────────┘  │
         │             │                 │
         │  ┌──────────▼──────────────┐  │
         │  │  API Controller        │   │
         │  │  (src/api/...)         │   │
         │  └──────────┬──────────────┘  │
         │             │                 │
         │  ┌──────────▼──────────────┐  │
         │  │  Business Logic        │   │
         │  │  (src/controllers/)    │   │
         │  └──────────┬──────────────┘  │
         │             │                 │
         │  ┌──────────▼──────────────┐  │
         │  │  Data Models           │   │
         │  │  (src/models/)         │   │
         │  └──────────┬──────────────┘  │
         │             │                 │
         └─────────────┼─────────────────┘
                       │
                       │ MySQLi/PDO
                       │
       ┌───────────────▼───────────────┐
       │    MYSQL DATABASE             │
       │    (madagascar_tours)         │
       │                               │
       │  - tours                      │
       │  - news                       │
       │  - pages                      │
       │  - users                      │
       │  - bookings                   │
       │  - settings                   │
       │  - ... еще 7 таблиц           │
       └───────────────────────────────┘


┌────────────────────────────────────────────────────────────┐
│              АДМИН-ПАНЕЛЬ (Coming Soon)                    │
│         http://localhost:8001/admin (отдельное приложение) │
│                                                            │
│  ├─ Прямой доступ к MySQL (через PHP)                    │
│  ├─ Interface для управления контентом                   │
│  ├─ Файловый менеджер                                    │
│  └─ Система пользователей и ролей                        │
└────────────────────────────────────────────────────────────┘
```

## 🔐 Безопасность

### CORS (Cross-Origin Resource Sharing)
- Frontend может обращаться к API
- Остальные источники блокируются

### JWT Authentication
- Защита админ-эндпоинтов
- Токены с истечением (expiry)

### Input Validation
- Проверка типов данных
- Санитизация HTML
- SQL Injection prevention (PDO prepared statements)

### HTTPS (Production)
- Все API запросы должны быть через HTTPS
- Secure cookies (secure flag)

## 📈 Масштабируемость

### Уровень 1: Локальная разработка
- Frontend: `http://localhost:5500`
- Backend: `http://localhost:8001`
- MySQL: локальная БД

### Уровень 2: Staging
- Frontend: `https://staging.madagascar-tours.com`
- Backend: `https://api-staging.madagascar-tours.com`
- MySQL: staging сервер

### Уровень 3: Production
- Frontend: `https://madagascar-tours.com`
- Backend: `https://api.madagascar-tours.com`
- MySQL: dedicated сервер с бекапами

### Оптимизация
- Кэширование API ответов
- CDN для статических файлов (img, css, js)
- Database indexing
- Query optimization
- API rate limiting

## 🛠️ Рекомендуемые дополнения

### Краткосрочные
- [ ] Полная реализация CRUD для всех эндпоинтов
- [ ] Валидация входных данных
- [ ] Система логирования
- [ ] Тестирование (unit, integration)

### Среднесрочные
- [ ] Админ-панель на Vue.js/React
- [ ] Система имейл отправки
- [ ] Интеграция с платежными системами
- [ ] Система уведомлений

### Долгосрочные
- [ ] Микросервисы архитектура
- [ ] GraphQL API
- [ ] Расширенная аналитика
- [ ] Machine Learning recommendations

## 📚 Документация

- **Frontend README**: `frontend/README.md`
- **Backend README**: `backend/README.md`
- **API Docs**: `backend/openapi.yaml` (Swagger)
- **Setup Guide**: `docs/SETUP.md`

## 🚀 Быстрый старт

```bash
# 1. Frontend
cd frontend
npm install
npm start
# http://localhost:5500

# 2. Backend (в отдельном терминале)
cd backend
composer install
composer serve
# http://localhost:8001/api/v1
```

## 📞 Контакты

- **Email**: info@ineditustour.com
- **Phone**: +261 32 71 020 12
- **WhatsApp**: +261 32 71 020 12

---

**Версия документации**: 1.0.0  
**Последнее обновление**: 10 февраля 2026
