# Molva Backend

Backend сервис для платформы Molva, написанный на Go.

## Требования

- Go 1.24+ 
- Docker (опционально)
- Git

## Установка и настройка

### 1. Клонирование репозитория

```bash
git clone <repository-url>
cd molva-backend
```

### 2. Установка зависимостей

```bash
go mod download
```

### 3. Установка инструментов разработки

```bash
make install-tools
```

## Запуск проекта

### Локальная разработка

Для запуска в режиме разработки:

```bash
make run
```

По умолчанию проект запускается с конфигурацией:
- **Конфигурация**: `.build/config/`
- **Окружение**: `local`

### Изменение параметров запуска

Вы можете изменить параметры запуска:

```bash
# Изменение пути к конфигурации
make run CONFIG_PATH=...

# Изменение окружения
make run ENV=...

# Изменение обоих параметров
make run CONFIG_PATH=... ENV=...
```

### Сборка проекта

#### Сборка для всех платформ

```bash
make build
```

Эта команда создаст исполняемые файлы для:
- Linux (amd64, arm64)
- macOS (amd64, arm64) 
- Windows (amd64, arm64)

Файлы будут сохранены в директории `bin/` с именами:
- `molva-app-backend_linux_amd64`
- `molva-app-backend_linux_arm64`
- `molva-app-backend_darwin_amd64`
- `molva-app-backend_darwin_arm64`
- `molva-app-backend_windows_amd64.exe`
- `molva-app-backend_windows_arm64.exe`

#### Сборка для конкретной платформы

```bash
# Только для Linux
make build-linux

# Только для macOS
make build-darwin

# Только для Windows
make build-windows
```

### Docker

Для сборки Docker образа:

```bash
make docker-build
```

Образ будет создан с тегом `molva-app-backend:$(VERSION)`, где `VERSION` - это git tag или "v0.0.0" по умолчанию.

## Разработка

### Проверка кода

Перед коммитом рекомендуется запустить линтер:

```bash
make lint
```

### Очистка

Для удаления скомпилированных файлов:

```bash
make clean
```

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

```
molva-backend/
├── bin/                    # Скомпилированные файлы
├── cmd/
│   └── main.go           # Точка входа приложения
├── internal/              # Внутренние пакеты
│   ├── auth/             # Аутентификация
│   ├── broker/           # Message broker
│   ├── cache/            # Кэширование
│   ├── config/           # Конфигурация
│   ├── database/         # Работа с БД
│   ├── feed/             # Лента
│   ├── file_manager/     # Управление файлами
│   ├── form_generator/   # Генератор форм
│   ├── http/             # HTTP handlers
│   ├── integration/      # Интеграции
│   ├── logger/           # Логирование
│   ├── notifications/    # Уведомления
│   ├── object_storage/   # Объектное хранилище
│   ├── request_model/    # Модели запросов
│   ├── services/         # Сервисы
│   ├── types/            # Типы данных
│   └── url_shortener/    # Сокращение URL
├── Dockerfile
├── go.mod
├── Makefile
└── README.md
```

## Конфигурация

Проект использует конфигурационные файлы в формате YAML. По умолчанию они находятся в директории `.build/config/`.

Структура конфигурации:
- `local.yaml` - для локальной разработки
- `staging.yaml` - для dev окружения
- `production.yaml` - для production окружения

## Переменные сборки

Приложение включает следующие переменные сборки:
- `version` - версия приложения (git tag)
- `commit` - хеш коммита
- `date` - дата сборки

