Проект представляет собой RESTful API для обмена сообщениями (мессенджер), реализованный на Go с использованием современного стека технологий.
- Язык: Go 1.21+
- Фреймворк: Gorilla Mux для маршрутизации
- База данных: PostgreSQL
- ORM: GORM v2
- Миграции: Goose
- Логгирование: Zap от Uber
- Тестирование: Testify
- Контейнеризация: Docker + Docker Compose
Проект построен по принципу трехуровневой архитектуры (3-tier):
- Transport Layer (
transport/) - обработка HTTP запросов/ответов - Service Layer (
service/) - бизнес-логика приложения - Repository Layer (
repository/) - работа с базой данных
- Docker и Docker Compose
- Go 1.21+ (для локальной разработки)
git clone <repository-url>
cd messengerСоздайте файл .env на основе примера:
cp .env.example .envОтредактируйте .env файл:
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_USER=ваш юзер
POSTGRES_PASSWORD=ваш пароль
POSTGRES_DB=messenger
SSLMode=disable
APP_PORT=8080docker-compose up --buildЭндпойнты:
- В теле передаем title. Метод POST
Пример тела
{
"title": "chat1"
}Пример ответа
{
"id": 6,
"title": "chat1",
"created_at": "2026-01-31T23:27:14Z"
}- В теле передаем text. Метод POST
Пример тела
{
"text": "hello"
}Пример ответа
{"id":5,"chat_id":1,"text":"hello","created_at":"2026-01-31T23:30:51Z"}- В query параметрах передаем limit, по умолчанию он равен 20. Метод Get
Пример ответа
{"1":[{"text":"hello","time":"2026-01-31T23:30:51Z"}]}- Метод Delete
go test ./internal/transport -vВывод:
=== RUN TestHandler_HendleCreateChat_Success
--- PASS: TestHandler_HendleCreateChat_Success (0.00s)
=== RUN TestHandler_HendleCreateMessage_InvalidChatID
--- PASS: TestHandler_HendleCreateMessage_InvalidChatID (0.00s)
=== RUN TestHandler_HendleGetMessages_WithLimit
--- PASS: TestHandler_HendleGetMessages_WithLimit (0.00s)
PASS
ok messenger/internal/transport (cached)Первые 2 пункта прийдется пройти в любом случае. Но потом можно будет восполььзоваться Makefile