Skip to content

solumD/go-blog-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-blog-api

Русский

English

Эндпоинты (Endpoints)


RUS

Небольшое API блога. Пользователи могут добавлять, редактировать и удалять посты. Также есть возможность увидеть посты конкретного пользователя и поставить лайк на конкретный пост.

Использованные пакеты и технологии

Роутер - chi;

Логгер - slog;

Хранилище - sqlite3 (при желании можно использовать любую базу данных, если реализовать используемые в хэндлерах интерфейсы);

Хэширование пароля - bcrypt;

JWT-аутентификация - jwt-go;

Документация - Swagger 2.0;

Написан Dockerfile;

Моки для тестов - mockery;

Тестирование - стандартная библиотека и пакет httpexpect.


ENG

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.

Packages and technologies used

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.


Эндпоинты (Endpoints)

POST /auth/register - регистрация пользователя (user registration)

Example Input:
{
    "login": "cool_user",
    "password": "qwerty123"
}
Example Response:
{
    "status": "OK",
    "id": 7
} 

POST /auth/login - авторизация пользователя (user authorisation)

Example Input:
{
    "login": "cool_user",
    "password": "qwerty123"
}
Example Response:
{
    "status": "OK",
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjI3ODA4OTIsInN1YiI6ImNvb2xfdXNlciJ9.n-c0YymZyImpDRCui4WLKmH25mzhdX2q_kTYyAIHpXE"
}

GET /user/{login} - получить все посты конкретного пользователя (get all posts of a particular user)

Example Response:
{
    "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"
        }
    ]
}

POST /post/create - создать пост (create a post)

Example Input:
{
    "title": "very cool title",
    "text": "very cool text"
}
Example Response:
{
    "status": "OK",
    "id": 6
}

PATCH /post/update - обновить название или текст поста (update post's title or text)

Example Input:
{   
    "id": 6,
    "title": "new title",
    "text": "new text"
}
Example Response:
{
    "status": "OK"
}

DELETE /post/delete - удалить пост (delete a post)

Example Input:
{   
    "id": 6
}
Example Response:
{
    "status": "OK"
}

PUT /post/like - поставить лайк на пост (like a post)

Example Input:
{   
    "id": 3
}
Example Response:
{
    "status": "OK"
}

PUT /post/unlike - убрать лайк с поста (unlike a post)

Example Input:
{   
    "id": 3
}
Example Response:
{
    "status": "OK"
}

About

API of a blog

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published