Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/anatoliybr/todo-app
REST API application for managing task lists (todo lists)
https://github.com/anatoliybr/todo-app
clean-architecture dependency-injection docker-compose dockerfile go jwt-authentication middleware migrations postgresql rest-api
Last synced: about 2 months ago
JSON representation
REST API application for managing task lists (todo lists)
- Host: GitHub
- URL: https://github.com/anatoliybr/todo-app
- Owner: AnatoliyBr
- License: agpl-3.0
- Created: 2023-07-23T11:45:56.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-02-04T16:36:57.000Z (11 months ago)
- Last Synced: 2024-02-04T19:29:43.670Z (11 months ago)
- Topics: clean-architecture, dependency-injection, docker-compose, dockerfile, go, jwt-authentication, middleware, migrations, postgresql, rest-api
- Language: Go
- Homepage:
- Size: 1010 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## TODO-APP
### Описание
REST API приложение для ведения **списков задач** (todo-списков).### Функционал
Данное серверное (backend) приложение предоставляет API для **регистрации** и **аутентификации** пользователя, а также **работы** с todo-списками и отдельными задачами внутри них.## Структура REST API
**Публичные 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`:
```bash
make compose-build
make compose-up
```## Техническая статья
### [Мой опыт создания REST API сервера для ведения todo-списков](/todo_paper.md)
`todo_paper.md` - файл со статьей
## Примеры запросов
* [Регистрация](#регистрация)
* [Аутентификация](#аутентификация)
* [Просмотр профиля](#просмотр-профиля)
* [Создание списка](#создание-списка)
* [Просмотр всех списков](#просмотр-всех-списков)
* [Просмотр списка](#просмотр-списка)
* [Редактирование списка](#редактирование-списка)### Регистрация
Регистрация пользователя:```bash
curl --location --request POST http://localhost:8080/users \
--data-raw '{
"email":"[email protected]",
"password":"password"
}'
```Пример ответа:
```bash
{
"user_id":1,
"email":"[email protected]"
}
```### Аутентификация
Аутентификация пользователя и выдача JWT:```bash
curl --location --request POST http://localhost:8080/tokens \
--data-raw '{
"email":"[email protected]",
"password":"password"
}' -v
```Пример ответа:
```bash
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
```### Просмотр профиля
Просмотр профиля аутентифицированного пользователя:```bash
curl --location --request GET http://localhost:8080/profile \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2OTM3NjY5OTB9.FhxzjhKtylOZQYrpG88r_lH7-kssye9IWh7UsZ8_t6k'
```Пример ответа:
```bash
{
"user_id":1,
"email":"[email protected]"
}
```### Создание списка
Создание списка задач:```bash
curl --location --request POST http://localhost:8080/lists \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2OTM3NjY5OTB9.FhxzjhKtylOZQYrpG88r_lH7-kssye9IWh7UsZ8_t6k' \
--data-raw '{
"list_title":"test title 1"
}'
```Пример ответа:
```bash
{
"list_id": 1,
"list_title": "TEST TITLE 1",
"user_id": 1
}
```### Просмотр всех списков
Просмотр всех списков задач:```bash
curl --location --request GET http://localhost:8080/lists \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2OTM3NjY5OTB9.FhxzjhKtylOZQYrpG88r_lH7-kssye9IWh7UsZ8_t6k'
```Пример ответа:
```bash
[
{
"list_id": 1,
"list_title": "TEST TITLE 1"
},
{
"list_id": 2,
"list_title": "TEST TITLE 2"
}
]
```### Просмотр списка
Просмотр списка задач по идентификатору:```bash
curl --location --request GET http://localhost:8080/lists/1 \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE2OTM3NjY5OTB9.FhxzjhKtylOZQYrpG88r_lH7-kssye9IWh7UsZ8_t6k'
```Пример ответа:
```bash
{
"list_id": 1,
"list_title": "TEST TITLE 1",
"user_id": 1
}
```### Редактирование списка
Редактирование названия списка задач по идентификатору:```bash
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"
}'
```Пример ответа:
```bash
{
"list_id": 1,
"list_title": "TEST TITLE 2",
"user_id": 1
}
```