📖 j~dict!^w^ это...
...небольшое веб-приложение для ведения личного японского словаря. В нём вы можете создавать, читать, обновлять и удалять слова, а также организовывать слова по тегам и даже... управлять личным кабинетом и настраивать свою аватарку!😜
Этот пет-проект резюмирует практические навыки, полученные в процессе прохождения производстенной практики от Колледжа связи №54 им. П. М. Вострухина.
Основные части системы взаимодействуют следующим образом:
- Пользователь работает с интерфейсом (Фронтенда);
- Фронтенд отправляет запросы к Бэкенду (REST API);
- Бэкенд сохраняет/читает данные из PostgreSQL и отправляет события изменений в Kafka.
graph LR
User((Пользователь))
subgraph FE["Фронтенд"]
UI["Пользовательский интерфейс"]
AuthStore["Хранилище авторизации"]
WordStore["Хранилище слов"]
end
subgraph BE["Бэкенд"]
API["REST API"]
AuthService["Сервис авторизации"]
WordService["Сервис словаря"]
ImportService["Сервис импорта"]
KafkaProducer["Продюсер Kafka"]
end
subgraph INF["Инфраструктура"]
DB[(PostgreSQL)]
Kafka{{Kafka}}
Zookeeper["Zookeeper"]
end
User <--> UI
UI --> API
API --> AuthService
API --> WordService
API --> ImportService
AuthService --> DB
WordService --> DB
ImportService --> WordService
WordService --> KafkaProducer
KafkaProducer --> Kafka
Kafka -.-> Zookeeper
classDef frontend fill:#E3F2FD,stroke:#1E88E5,stroke-width:2px
classDef backend fill:#E8F5E9,stroke:#43A047,stroke-width:2px
classDef infra fill:#FFFDE7,stroke:#F9A825,stroke-width:2px
classDef user fill:#FCE4EC,stroke:#C2185B,stroke-width:2px
class UI,AuthStore,WordStore frontend
class API,AuthService,WordService,ImportService,KafkaProducer backend
class DB,Kafka,Zookeeper infra
class User user
Изнутри ИС настроена следующим образом:
- Фронтенд: Состоит из Vue-компонентов (UI), Pinia (хранение данных в памяти) и Axios (общение с сервером);
- Бэкенд: Разделен на слои:
- Handlers (обработчики) - принимают HTTP-запросы;
- Services (сервисы) - содержат бизнес-логику (правила работы);
- Repositories (репозитории) - работают напрямую с базой данных.
- База данных и Kafka: Внешние системы для хранения данных и очереди событий.
classDiagram
direction LR
class Фронтенд {
Компоненты интерфейса
Управление состоянием
HTTP-запросы
}
class Бэкенд {
REST API
Бизнес-логика
Доступ к данным
}
class База данных {
Пользователи
Слова
}
class Kafka {
События изменений слов
}
Фронтенд ..> Бэкенд : HTTP / JSON
Бэкенд ..> PostgreSQL : SQL
Бэкенд ..> Kafka : Публикация событий
classDef frontend fill:#E3F2FD,stroke:#1E88E5,stroke-width:2px
classDef backend fill:#E8F5E9,stroke:#43A047,stroke-width:2px
classDef infra fill:#FFFDE7,stroke:#F9A825,stroke-width:2px
Для запуска проекта необходимы установленные Docker и docker-compose.
Быстрый старт через Makefile
Самый простой способ запустить проект - использовать make. Команды выполняются из корня проекта.
# Запуск всех сервисов (в фоновом режиме, с пересборкой)
make up
# Просмотр логов всех сервисов
make logs
# Остановка сервисов
make downРучной запуск через docker-compose.yml
Используйте команды docker-compose из корня проекта напрямую:
docker-compose up --build -dПриложение будет доступно по адресу: http://localhost:5173.
API задокументировано с помощью Swagger. После запуска бэкенда Swagger-документация доступна по адресу:
http://localhost:8080/swagger/index.html
- Auth:
POST /api/auth/register- РегистрацияPOST /api/auth/login- ВходGET /api/auth/me- Получение текущего пользователя
- Words:
GET /api/words- Получение списка словPOST /api/words- Добавление словаPATCH /api/words/{id}- Обновление словаDELETE /api/words/{id}- Удаление слова
- Import:
POST /api/words/import- Загрузка слов из CSV через Kafka
| Область | Технология |
|---|---|
| Бэкенд | Go (Golang), Gin Gonic, JWT-Auth |
| Фронтенд | Vue 3, Pinia, Vue Router, TailwindCSS, Vite |
| База данных | PostgreSQL 18 |
| Брокер сообщений | Apache Kafka (для асинхронной обработки импорта) |
| Инфраструктура | Docker, docker-compose, Makefile |
| Документация | Swagger (OpenAPI) |
├── backend/ # Код бэкенда
│ ├── cmd/ # Точка входа (main.go)
│ ├── internal/ # Бизнес-логика, хендлеры, сервисы
│ ├── db/migrations/ # SQL-миграции
│ └── docs/ # Swagger-документация
├── frontend/ # Код фронтенда
│ ├── src/ # Компоненты, сторы, представления
├── docker-compose.yml # Описание сервисов и их связей
└── Makefile # Команды для управления проектом
В ветке gh-pages находится статическая версия фронтенда, которая используется для демо UI проекта на GitHub Pages.
ВАЖНО! Без запущенного локально бэкенда функционал API (авторизация, загрузка слов) работать не будет.