REST API приложение для ведения списков задач (todo-списков).
Данное серверное (backend) приложение предоставляет API для регистрации и аутентификации пользователя, а также работы с todo-списками и отдельными задачами внутри них.
Публичные endpoint'ы, доступные всем:
POST /users - регистрация пользователя
POST /tokens - аутентификация пользователя и выдача JWT
Приватные endpoint'ы, доступные только аутентифицированным пользователям:
GET /profile - просмотр профиля пользователя
POST /lists - создание списка
GET /lists - просмотр всех списков
GET /lists/{id} - просмотр списка
PUT /lists/{id} - редактирование списка
DELETE /lists/{id} - удаление списка
POST /lists/{id}/tasks - добавление задачи в список
GET /lists/{id}/tasks - просмотр всех задач в списке
GET /tasks/{id} - просмотр задачи в списке
PUT /tasks/{id} - редактирование задачи в списке
DELETE /tasks/{id} - удаление задачи из списка
├── cmd
| ├── app
|
├── configs
├── internal
| ├── app
| ├── controller
| ├── entity
| ├── store
| ├── usecase
|
├── migrations
├── .env
├── .gitignore
├── Makefile
├── README.md
├── go.mod
├── go.sum
Все команды, используемые в процессе разработки и тестирования, фиксировались в Makefile
.
Чтобы поднять проект, необходимо выполнить две задачи из Makefile
:
make compose-build
make compose-up
todo_paper.md
- файл со статьей
- Регистрация
- Аутентификация
- Просмотр профиля
- Создание списка
- Просмотр всех списков
- Просмотр списка
- Редактирование списка
Регистрация пользователя:
curl --location --request POST http://localhost:8080/users \
--data-raw '{
"email":"user@example.org",
"password":"password"
}'
Пример ответа:
{
"user_id":1,
"email":"user@example.org"
}
Аутентификация пользователя и выдача JWT:
curl --location --request POST http://localhost:8080/tokens \
--data-raw '{
"email":"user@example.org",
"password":"password"
}' -v
Пример ответа:
HTTP/1.1 200 OK
Set-Cookie: token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2OTM3NjY5OTB9.FhxzjhKtylOZQYrpG88r_lH7-kssye9IWh7UsZ8_t6k
X-Request-Id: f7e4e8ab-ac7f-4266-b683-d35564927fc7
Date: Sun, 03 Sep 2023 18:44:50 GMT
Content-Length: 0
Просмотр профиля аутентифицированного пользователя:
curl --location --request GET http://localhost:8080/profile \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2OTM3NjY5OTB9.FhxzjhKtylOZQYrpG88r_lH7-kssye9IWh7UsZ8_t6k'
Пример ответа:
{
"user_id":1,
"email":"user@example.org"
}
Создание списка задач:
curl --location --request POST http://localhost:8080/lists \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2OTM3NjY5OTB9.FhxzjhKtylOZQYrpG88r_lH7-kssye9IWh7UsZ8_t6k' \
--data-raw '{
"list_title":"test title 1"
}'
Пример ответа:
{
"list_id": 1,
"list_title": "TEST TITLE 1",
"user_id": 1
}
Просмотр всех списков задач:
curl --location --request GET http://localhost:8080/lists \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2OTM3NjY5OTB9.FhxzjhKtylOZQYrpG88r_lH7-kssye9IWh7UsZ8_t6k'
Пример ответа:
[
{
"list_id": 1,
"list_title": "TEST TITLE 1"
},
{
"list_id": 2,
"list_title": "TEST TITLE 2"
}
]
Просмотр списка задач по идентификатору:
curl --location --request GET http://localhost:8080/lists/1 \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2OTM3NjY5OTB9.FhxzjhKtylOZQYrpG88r_lH7-kssye9IWh7UsZ8_t6k'
Пример ответа:
{
"list_id": 1,
"list_title": "TEST TITLE 1",
"user_id": 1
}
Редактирование названия списка задач по идентификатору:
curl --location --request PUT http://localhost:8080/lists/1 \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2OTM3NjY5OTB9.FhxzjhKtylOZQYrpG88r_lH7-kssye9IWh7UsZ8_t6k' \
--data-raw '{
"list_title":"test title 2"
}'
Пример ответа:
{
"list_id": 1,
"list_title": "TEST TITLE 2",
"user_id": 1
}