WhyToMe - это веб-приложение, которое помогает пользователям найти убедительные аргументы для обоснования своей позиции по любому вопросу.
- Пользователь заходит на главную страницу и видит поле для ввода (аналогично поиску Google)
- Вводит свой вопрос или просьбу о том, как обосновать что-либо
- Нажимает Enter или кнопку отправки
- Сервер обрабатывает запрос и возвращает варианты аргументов
- Пользователь видит карточки с готовыми обоснованиями
- "Как мне обосновать, что я не хочу идти гулять?"
- "Как защитить идею сделать татуировку?"
- "Почему стоит взять отпуск сейчас?"
Приложение состоит из двух частей:
- Backend API (данный репозиторий) - Go-сервер с REST API
- Frontend - одностраничное веб-приложение (отдельный репозиторий)
- Go 1.25.1
- Gin
- OpenAI API - интеграция с DeepSeek для генерации аргументов
- Logrus
- Cleanenv
- Docker
backend_public/
├── cmd/
│ └── api.go # Точка входа приложения
├── internal/
│ ├── app/
│ │ └── app.go # Основная логика приложения
│ ├── config/
│ │ └── config.go # Конфигурация
│ ├── constant/
│ │ └── constants.go # Константы (промпты для AI)
│ ├── controller/
│ │ └── http/v1/
│ │ ├── suggestions.go # HTTP контроллер
│ │ ├── responses.go # Форматы ответов
│ │ └── request/
│ │ └── suggestions/
│ │ └── register.go # Структуры запросов
│ └── usecase/
│ └── suggestions.go # Бизнес-логика
├── pkg/
│ └── logging/
│ └── logging.go # Утилиты логирования
├── docker-compose.yml # Docker Compose конфигурация
├── Dockerfile # Docker образ
├── Makefile # Команды сборки
├── go.mod # Go модули
└── go.sum # Хеши зависимостей
- Go 1.25.1 или выше
- Docker и Docker Compose (для контейнеризации)
- API ключ для DeepSeek/OpenAI
git clone https://github.com/makssof/whyto.meСоздайте файл .env в корне проекта:
# Основные настройки
APP_ENV=development
APP_DEBUG=true
SERVER_SCHEME=http
SERVER_HOST=localhost
SERVER_PORT=5711
# OpenAI/DeepSeek API
GPT_API_KEY=your_api_key_here
GPT_API_URL=https://api.deepseek.com/v1
# Логирование
LOG_LEVEL=trace
# Docker (опционально)
WHYTOME_API_CONTAINER_NAME=whytome-api
WHYTOME_API_PORT_HTTP=5711go mod download# Сборка и запуск
make win64 # для Windows
make linux64 # для Linux
# Или напрямую через go
go run cmd/api.go# Сборка и запуск контейнера
make ra
# Или через docker-compose
docker-compose up -d --buildПосле запуска сервер будет доступен по адресу: http://localhost:5711
# Пример запроса
curl "http://localhost:5711/v1/suggestions?q=как%20обосновать%20что%20я%20не%20хочу%20идти%20гулять"Получение аргументов для обоснования позиции.
Параметры:
q(string, обязательный) - запрос пользователя
Пример ответа:
{
"success": true,
"data": {
"reformulated_question": "Как обосновать отказ от прогулки?",
"arguments": [
"У меня есть важные дела, которые требуют немедленного внимания...",
"Мое самочувствие сегодня не позволяет мне активно проводить время...",
"Я планировал провести время с семьей или друзьями в другом формате...",
"У меня есть личные причины, которые делают прогулку сейчас нежелательной..."
]
}
}docker build -t whytome-api .docker run -d \
--name whytome-api \
-p 5711:5711 \
--env-file .env \
whytome-apimake win64- сборка для Windows 64-bitmake linux64- сборка для Linux 64-bitmake both- сборка для обеих платформmake ra- пересборка и перезапуск Docker контейнера
- Clean Architecture - разделение на слои (controller, usecase, repository)
- Dependency Injection - внедрение зависимостей через конструкторы
- pprof - профилирование производительности (доступно по
/debug/pprof/)
- Установите
APP_ENV=production - Отключите
APP_DEBUG=false - Настройте
LOG_LEVEL=info - Используйте HTTPS (
SERVER_SCHEME=https) - Настройте reverse proxy (nginx/Apache)
APP_ENV=production
APP_DEBUG=false
SERVER_SCHEME=https
SERVER_HOST=your-domain.com
LOG_LEVEL=info