Skip to content

WhyTo.Me API Golang Backend

makssof/whyto.me

Repository files navigation

WhyToMe - Обоснуй мне

📝 Суть приложения

WhyToMe - это веб-приложение, которое помогает пользователям найти убедительные аргументы для обоснования своей позиции по любому вопросу.

Как это работает:

  1. Пользователь заходит на главную страницу и видит поле для ввода (аналогично поиску Google)
  2. Вводит свой вопрос или просьбу о том, как обосновать что-либо
  3. Нажимает Enter или кнопку отправки
  4. Сервер обрабатывает запрос и возвращает варианты аргументов
  5. Пользователь видит карточки с готовыми обоснованиями

Примеры запросов:

  • "Как мне обосновать, что я не хочу идти гулять?"
  • "Как защитить идею сделать татуировку?"
  • "Почему стоит взять отпуск сейчас?"

🏗️ Архитектура

Приложение состоит из двух частей:

  • Backend API (данный репозиторий) - Go-сервер с REST API
  • Frontend - одностраничное веб-приложение (отдельный репозиторий)

🛠️ Технологический стек

Backend:

  • 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

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

git clone https://github.com/makssof/whyto.me

2. Настройка переменных окружения

Создайте файл .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=5711

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

go mod download

4. Запуск приложения

Локальный запуск:

# Сборка и запуск
make win64  # для Windows
make linux64  # для Linux

# Или напрямую через go
go run cmd/api.go

Запуск через Docker:

# Сборка и запуск контейнера
make ra

# Или через docker-compose
docker-compose up -d --build

5. Проверка работы

После запуска сервер будет доступен по адресу: http://localhost:5711

Тестирование API:

# Пример запроса
curl "http://localhost:5711/v1/suggestions?q=как%20обосновать%20что%20я%20не%20хочу%20идти%20гулять"

🔌 API Endpoints

GET /v1/suggestions

Получение аргументов для обоснования позиции.

Параметры:

  • q (string, обязательный) - запрос пользователя

Пример ответа:

{
  "success": true,
  "data": {
    "reformulated_question": "Как обосновать отказ от прогулки?",
    "arguments": [
      "У меня есть важные дела, которые требуют немедленного внимания...",
      "Мое самочувствие сегодня не позволяет мне активно проводить время...",
      "Я планировал провести время с семьей или друзьями в другом формате...",
      "У меня есть личные причины, которые делают прогулку сейчас нежелательной..."
    ]
  }
}

🐳 Docker

Сборка образа:

docker build -t whytome-api .

Запуск контейнера:

docker run -d \
  --name whytome-api \
  -p 5711:5711 \
  --env-file .env \
  whytome-api

🔧 Разработка

Доступные команды Makefile:

  • make win64 - сборка для Windows 64-bit
  • make linux64 - сборка для Linux 64-bit
  • make both - сборка для обеих платформ
  • make ra - пересборка и перезапуск Docker контейнера

Структура кода:

  • Clean Architecture - разделение на слои (controller, usecase, repository)
  • Dependency Injection - внедрение зависимостей через конструкторы

📊 Мониторинг

  • pprof - профилирование производительности (доступно по /debug/pprof/)

🚀 Развертывание

Production настройки:

  1. Установите APP_ENV=production
  2. Отключите APP_DEBUG=false
  3. Настройте LOG_LEVEL=info
  4. Используйте HTTPS (SERVER_SCHEME=https)
  5. Настройте reverse proxy (nginx/Apache)

Переменные окружения для production:

APP_ENV=production
APP_DEBUG=false
SERVER_SCHEME=https
SERVER_HOST=your-domain.com
LOG_LEVEL=info

About

WhyTo.Me API Golang Backend

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published