Skip to content

T-AKHMAD/gopher-notes

Repository files navigation

CI

Gopher Notes

Разработал REST API сервис заметок на Go: signup/login, bearer-token sessions, защищённые эндпоинты, PostgreSQL, миграции и Docker Compose. Реализовал middleware для логирования и авторизации, graceful shutdown.

Requirements

  • Go
  • Docker + Docker Compose
  • migrate (golang-migrate)

Quick start

  1. Запустить PostgreSQL:
make up
  1. Установить переменную окружения для подключения к БД:
export DATABASE_URL='postgres://app:app@localhost:5432/gopher_notes?sslmode=disable'

или положить в окружение любым способом.

  1. Применить миграции:
make migrate-up
  1. Запустить сервер:
make run

Server будет доступен на http://localhost:8080.

API

Health

curl -i http://localhost:8080/health

Signup

curl -i -X POST http://localhost:8080/signup \
  -H 'Content-Type: application/json' \
  -d '{"email":"a@b.com","password":"123"}'

Login

curl -i -X POST http://localhost:8080/login \
  -H 'Content-Type: application/json' \
  -d '{"email":"a@b.com","password":"123"}'

Logout

curl -i -X POST http://localhost:8080/logout \
  -H "Authorization: Bearer <TOKEN>"

Me

curl -i http://localhost:8080/me \
  -H "Authorization: Bearer <TOKEN>"

Notes

Create:

curl -i -X POST http://localhost:8080/notes \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer <TOKEN>" \
  -d '{"title":"t1","body":"b1"}'

List:

curl -i http://localhost:8080/notes \
  -H "Authorization: Bearer <TOKEN>"

Get by id:

curl -i http://localhost:8080/notes/1 \
  -H "Authorization: Bearer <TOKEN>"

Delete:

curl -i -X DELETE http://localhost:8080/notes/1 \
  -H "Authorization: Bearer <TOKEN>"

Project structure

  • cmd/api — entrypoint
  • internal/app — wiring (db, http server, graceful shutdown)
  • internal/http — handlers, middleware, router, dto
  • internal/repository — работа с PostgreSQL (users/sessions/notes)
  • migrations — миграции базы данных

Все ошибки возвращаются в JSON, например:

{"error":"..."}

Future improvements

  • Config struct + env validation
  • Cleanup expired sessions (cron / background job)
  • Pagination for notes list

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages