Небольшое API блога. Пользователи могут добавлять, редактировать и удалять посты. Также есть возможность увидеть посты конкретного пользователя и поставить лайк на конкретный пост.
Роутер - chi;
Логгер - slog;
Хранилище - sqlite3 (при желании можно использовать любую базу данных, если реализовать используемые в хэндлерах интерфейсы);
Хэширование пароля - bcrypt;
JWT-аутентификация - jwt-go;
Документация - Swagger 2.0;
Написан Dockerfile;
Моки для тестов - mockery;
Тестирование - стандартная библиотека и пакет httpexpect.
A small API of a blog. Users can add, update and delete posts. It is also possible to get the posts of a particular user and like a particular post.
Router - chi;
Logger - slog;
Storage - sqlite3 (it is possible to use any database you want, if you implement the interfaces used in the handlers);
Password hashing - bcrypt;
JWT authentication - jwt-go;
Documentation - Swagger 2.0;
Dockerfile is written;
Mocks - mockery;
Testing - standart library and httpexpect.
{
"login": "cool_user",
"password": "qwerty123"
}
{
"status": "OK",
"id": 7
}
{
"login": "cool_user",
"password": "qwerty123"
}
{
"status": "OK",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjI3ODA4OTIsInN1YiI6ImNvb2xfdXNlciJ9.n-c0YymZyImpDRCui4WLKmH25mzhdX2q_kTYyAIHpXE"
}
GET /user/{login} - получить все посты конкретного пользователя (get all posts of a particular user)
{
"status": "OK",
"posts": [
{
"id": 3,
"created_by": "prince123",
"title": "aaaaaaaa",
"text": "3333333333",
"likes": 2,
"liked_by": [
"prince123",
"solum123"
],
"created_at": "2024-08-01T17:18:30Z",
"updated_at": "2024-08-01T17:20:49Z"
},
{
"id": 1,
"created_by": "prince123",
"title": "post1",
"text": "aaaaaaaa",
"likes": 2,
"liked_by": [
"prince123",
"testuser"
],
"created_at": "2024-08-01T17:18:21Z",
"updated_at": "2024-08-01T17:20:55Z"
}
]
}
{
"title": "very cool title",
"text": "very cool text"
}
{
"status": "OK",
"id": 6
}
{
"id": 6,
"title": "new title",
"text": "new text"
}
{
"status": "OK"
}
{
"id": 6
}
{
"status": "OK"
}
{
"id": 3
}
{
"status": "OK"
}
{
"id": 3
}
{
"status": "OK"
}