REST API Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ (todo-list) Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· JWT ΠΈ CRUD-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΠΎ Π·Π°Π΄Π°ΡΠ°ΠΌ.
- π Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ ΠΈ Π»ΠΎΠ³ΠΈΠ½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ (Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΡΠΎΠ»Ρ Π² Π²ΠΈΠ΄Π΅ bcrypt-Ρ ΡΡΠ°).
- π JWT-Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ.
- β
CRUD ΠΏΠΎ Π·Π°Π΄Π°ΡΠ°ΠΌ:
- ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ
- ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° Π·Π°Π΄Π°Ρ
- ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ ID
- ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ
- ΠΎΡΠΌΠ΅ΡΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ
- ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ
- π ΠΡΠΈΠ²ΡΠ·ΠΊΠ° Π·Π°Π΄Π°Ρ ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (
owner_id). - π Swagger UI Π΄Π»Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
- Go (Gin) β Π²Π΅Π±-ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ
- PostgreSQL β Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ
- migrate β ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ
- Docker + docker-compose β Π·Π°ΠΏΡΡΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ
- swaggo β Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Swagger-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
cmd/app/main.go # ΡΠΎΡΠΊΠ° Π²Ρ
ΠΎΠ΄Π°
internal/config # ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ (.env)
internal/database # ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ Postgres
internal/entity # ΡΡΡΠ½ΠΎΡΡΠΈ (User, Task)
internal/repository # ΡΠ°Π±ΠΎΡΠ° Ρ ΠΠ
internal/usecase # Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ°
internal/handler # HTTP-ΡΠ½Π΄ΠΏΠΎΠΈΠ½ΡΡ (Gin)
internal/security # Ρ
ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΠΎΠ»Ρ, JWT
internal/docs # swagger-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ (ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ)
migrations/ # SQL-ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ
docker-compose.yml
Dockerfile
README.mdgit clone https://github.com/iviv660/tasker.git
cd taskerPOSTGRES_USER=postgres
POSTGRES_PASSWORD=070823
POSTGRES_DB=tasker
POSTGRES_URL=postgres://postgres:070823@postgres:5432/tasker?sslmode=disable
BASE_URL=http://localhost:3000
SECRET_KEY=Miromanov070823docker compose up --buildhttp://localhost:3000http://localhost:3000/swagger/index.html| ΠΠ΅ΡΠΎΠ΄ | Endpoint | ΠΡΠΈΠΌΠ΅Ρ Π·Π°ΠΏΡΠΎΡΠ° | ΠΡΠ²Π΅Ρ (ΠΏΡΠΈΠΌΠ΅Ρ) |
|--------|-----------------------|-------------------------------------------------------------------------------------------------------------------------|------------------|
| POST | `/auth/register` | `curl -X POST http://localhost:3000/auth/register -H "Content-Type: application/json" -d '{"email":"x","password":"y"}'`| `{"user_id":1}` |
| POST | `/auth/login` | `curl -X POST http://localhost:3000/auth/login -H "Content-Type: application/json" -d '{"email":"x","password":"y"}'` | `{"token":"..."}`|
| GET | `/tasks` | `curl -X GET http://localhost:3000/tasks -H "Authorization: Bearer <JWT>"` | `{"tasks":[...]}`|
| POST | `/tasks` | `curl -X POST http://localhost:3000/tasks -H "Authorization: Bearer <JWT>" -d '{"title":"Test"}'` | `{...}` |
| PUT | `/tasks/{id}` | `curl -X PUT http://localhost:3000/tasks/1 -H "Authorization: Bearer <JWT>" -d '{"title":"Update"}'` | `{...}` |
| PATCH | `/tasks/{id}/complete`| `curl -X PATCH http://localhost:3000/tasks/1/complete -H "Authorization: Bearer <JWT>"` | `{...}` |
| DELETE | `/tasks/{id}` | `curl -X DELETE http://localhost:3000/tasks/1 -H "Authorization: Bearer <JWT>"` | `204 No Content` |