Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
c61d320
refactor: improvement app structure and fix Swagger basePath issue
RD2W Nov 19, 2025
79fe772
refactor: improvement app architecture and package structure
RD2W Nov 19, 2025
ec857c2
feat: implement Redis storage for revoked tokens
RD2W Nov 19, 2025
55955a2
feat: implement PostgreSQL storage for Entity
RD2W Nov 20, 2025
4ba97de
refactor: move Redis client to database package and update imports
RD2W Nov 20, 2025
5a1c99a
test: add integration tests for Redis and PostgreSQL repos
RD2W Nov 20, 2025
756a312
fix: ensure proper closing of Redis connections
RD2W Nov 21, 2025
7e3fe6e
feat: add gRPC interceptor for token validation and improve client tests
RD2W Nov 21, 2025
95aeb09
fix: add security annotations to protected API routes in Swagger doc
RD2W Nov 21, 2025
d9c76b5
test: add comprehensive web server integration tests
RD2W Nov 21, 2025
584cb28
test: refactor auth middleware tests with comprehensive coverage
RD2W Nov 21, 2025
ccbf9e1
test: enhance gRPC client with improved error handling and comprehens…
RD2W Nov 21, 2025
0893d30
test: add tests for config package and fix loadFromEnv method
RD2W Nov 21, 2025
1b52999
test: add lifecycle tests for startup and shutdown functions
RD2W Nov 21, 2025
50457cc
test: add comprehensive tests for domain models
RD2W Nov 21, 2025
b2ba0aa
test: add comprehensive tests for auth service
RD2W Nov 21, 2025
402779b
test: add comprehensive tests for user service
RD2W Nov 21, 2025
9e021fe
test: add comprehensive tests for note service
RD2W Nov 21, 2025
c031b8a
test: add comprehensive tests for user handler
RD2W Nov 21, 2025
2be5fd2
test: add comprehensive tests for note handler
RD2W Nov 21, 2025
3359932
test: add comprehensive tests for auth handler
RD2W Nov 21, 2025
3d14e93
test: add comprehensive tests for grpc delivery
RD2W Nov 21, 2025
62a32c1
test: add performance benchmarks and load tests
RD2W Nov 21, 2025
5478a07
feat: enhance migration script and add Docker DB setup targets to Mak…
RD2W Nov 21, 2025
2979f49
docs: update README.md
RD2W Nov 21, 2025
8c1308b
test: fix unchecked error returns in test files
RD2W Nov 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 33 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,41 @@ test:
build: proto swag
@go build ./...

.PHONY: docker-down-v
docker-down-v:
@echo "🐳 Stopping and removing containers with volume cleanup..."
@docker compose down -v

.PHONY: docker-up
docker-up:
@echo "🐳 Starting services with Docker Compose..."
@docker compose up -d

.PHONY: migrate
migrate:
@echo "🗄️ Running database migrations..."
@chmod +x scripts/migrate.sh
@./scripts/migrate.sh

.PHONY: setup-db
setup-db: docker-down-v docker-up
@echo "⏳ Waiting for services to be ready..."
@sleep 10
@migrate

.PHONY: help
help:
@echo "Available targets:"
@echo " proto - Generate protobuf code"
@echo " proto-deps - Install Go protobuf dependencies (requires protoc)"
@echo " swag - Generate Swagger documentation"
@echo " swag-deps - Install Swaggo dependencies"
@echo " all - Install proto-deps and generate proto"
@echo " test - Run tests"
@echo " clean-proto - Remove generated protobuf code"
@echo " proto - Generate protobuf code"
@echo " proto-deps - Install Go protobuf dependencies (requires protoc)"
@echo " swag - Generate Swagger documentation"
@echo " swag-deps - Install Swaggo dependencies"
@echo " all - Install proto-deps and generate proto"
@echo " test - Run tests"
@echo " clean-proto - Remove generated protobuf code"
@echo " docker-down-v - Stop containers and remove volumes"
@echo " docker-up - Start services with Docker Compose"
@echo " migrate - Run database migrations"
@echo " setup-db - Clean start with Docker and run migrations"
@echo ""
@echo "⚠️ Note: protoc must be installed separately via system package manager"
55 changes: 43 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@

[![Go Version](https://img.shields.io/badge/Go-1.25+-blue.svg)](https://golang.org)
[![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
[![Go Test Coverage](https://img.shields.io/badge/Coverage-Test%20Coverage-1abc9c.svg)](https://golang.org)
![Tests](https://github.com/RD2W/go-notes/actions/workflows/branch_merges.yml/badge.svg)

## Особенности проекта

- **Веб-API**: RESTful API с использованием фреймворка Gin
- **gRPC-сервер**: Реализация gRPC-сервисов для заметок и пользователей
- **Аутентификация**: JWT-токены для защиты маршрутов
- **Хранение данных**: Поддержка различных хранилищ (в памяти и в JSON-файлах)
- **Хранение данных**: Поддержка различных хранилищ (PostgreSQL для основных данных и Redis для токенов)
- **Документация API**: Swagger UI для веб-API
- **Protocol Buffers**: Для определения gRPC-сервисов
- **Тестирование**: Модульные тесты
Expand All @@ -24,17 +26,31 @@ go-notes/
│ ├── grpc-client/ # Клиент gRPC
│ ├── grpc-server/ # Сервер gRPC
│ └── web-server/ # Веб-сервер (REST API)
├── config/ # Конфигурационные файлы
├── docs/ # Документация Swagger
├── internal/ # Внутренний код приложения
│ ├── grpc/ # Реализация gRPC-сервера
│ ├── handler/ # Обработчики HTTP-запросов
│ ├── app/ # Входные точки приложения
│ ├── auth/ # Аутентификация и токены
│ ├── config/ # Управление конфигурацией
│ ├── database/ # Подключения к базам данных
│ ├── delivery/ # Контроллеры/обработчики HTTP и gRPC
│ ├── domain/ # Бизнес-логика и модели
│ │ ├── model/ # Определения структур данных
│ │ └── repository/ # Интерфейсы репозиториев
│ ├── middleware/ # HTTP-мидлвары (например, аутентификация)
│ ├── model/ # Определения структур данных
│ ├── repository/ # Интерфейсы и фабрики репозиториев
│ ├── repository/ # Реализации репозиториев (PostgreSQL, Redis)
│ ├── service/ # Бизнес-сервисы
│ └── util/ # Вспомогательные утилиты
├── migrations/ # SQL-скрипты миграций
├── pkg/ # Публичные пакеты (сгенерированный protobuf-код)
├── scripts/ # Скрипты для генерации кода
└── Makefile # Сборочные команды
├── test/ # Тесты
├── docker-compose.yml # Конфигурация Docker Compose
├── go.mod # Зависимости Go
├── go.sum # Чек-суммы зависимостей
├── LICENSE # Лицензия
├── Makefile # Сборочные команды
└── README.md # Документация проекта
```

## Функциональность
Expand All @@ -52,8 +68,8 @@ go-notes/
- Поддержка всех CRUD-операций через gRPC

### Хранение данных
- RAM-хранилище для временных данных
- JSON-хранилище для сохранения данных между запусками
- PostgreSQL для хранения пользователей и заметок
- Redis для хранения отозванных токенов и кэширования

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

Expand Down Expand Up @@ -102,6 +118,19 @@ go run cmd/grpc-client/main.go

Клиент выполнит тестовые операции с gRPC-сервером.

### Запуск с Docker

```bash
# Запуск PostgreSQL и Redis с помощью Docker Compose
make docker-up

# Запуск миграций базы данных
make migrate

# Полный перезапуск с Docker и миграции
make setup-db
```

## Примеры использования API

### Работа с пользователями
Expand Down Expand Up @@ -220,6 +249,10 @@ curl -X DELETE http://localhost:8080/api/notes/{note_id} \
- `make swag-deps` - установка зависимостей Swagger
- `make test` - запуск тестов
- `make build` - сборка приложения
- `make docker-down-v` - остановка контейнеров и удаление volumes с БД
- `make docker-up` - запуск сервисов с Docker Compose
- `make migrate` - запуск миграций базы данных
- `make setup-db` - полный перезапуск с Docker и запуск миграций
- `make help` - список всех целей

## Переменные окружения
Expand Down Expand Up @@ -267,19 +300,17 @@ curl -X DELETE http://localhost:8080/api/notes/{note_id} \
### Refresh токены
- `REFRESH_SECRET_KEY` - секретный ключ для подписи Refresh токенов (по умолчанию: refresh_secret_key)
- `REFRESH_REVOCATION_ENABLED` - включено ли отслеживание отозванных токенов (по умолчанию: true)
- `REFRESH_REVOCATION_STORE_TYPE` - тип хранилища для отозванных токенов (по умолчанию: memory)

### Репозиторий
- `REPO_TYPE` - тип репозитория (json, ram, postgres) (по умолчанию: json)
- `REPO_TYPE` - тип репозитория (postgres, redis) (по умолчанию: postgres)
- `REPO_PATH` - путь к файлу/директории для хранения данных (по умолчанию: ./data)

### Безопасность
- `PASSWORD_MIN_LENGTH` - минимальная длина пароля (по умолчанию: 8)
- `MAX_LOGIN_ATTEMPTS` - максимальное количество попыток входа (по умолчанию: 5)
- `LOGIN_BLOCK_TIME` - время блокировки после неудачных попыток (по умолчанию: 30m)
- `TOKEN_CLEANUP_INTERVAL` - интервал очистки токенов (по умолчанию: 1h)
- `BCRYPT_COST_SEC` - стоимость хеширования паролей (по умолчанию: 10)

### Завершение работы
- `SHUTDOWN_TIMEOUT` - таймаут завершения работы (по умолчанию: 5s)
- `SHUTDOWN_TIMEOUT` - таймаут завершения работы (по умолчанию: 25s)
- `SHUTDOWN_WAIT` - время ожидания перед завершением (по умолчанию: 3s)
4 changes: 3 additions & 1 deletion api/proto/note/notes.proto
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,16 @@ message Note {
string id = 1;
string title = 2;
string content = 3;
string user_id = 6;
int64 created_at = 4;
int64 updated_at = 5;
}

// Message для запроса создания заметки
message CreateNoteRequest {
string title = 1;
string title = 1;
string content = 2;
string user_id = 3;
}

// Message для запроса получения сущности по ID
Expand Down
Loading