shad-go/dao
2023-04-08 13:08:35 +04:00
..
dao.go Add dao. Simple sql task. 2022-03-26 20:41:17 +03:00
dao_test.go Check for goroutine leaks in SQL tasks 2023-04-08 13:08:35 +04:00
docker-compose.yaml Add instructions to run databases in docker. 2022-03-31 17:40:40 +03:00
model.go [dao] Add Close() method. 2022-04-13 18:07:35 +03:00
README.md [dao] Add Close() method. 2022-04-13 18:07:35 +03:00

dao

В этой задаче вам нужно реализовать data access object для доступа к таблице пользователей.

  • Функция CreateDao должна создавать таблицу в базе данных.
  • Метод Create должен создавать нового пользователя и назначать его ID. За генерацию ID должна отвечать база данных, использовать rand запрещается. pgx не поддерживает LastInsertId, используйте синтаксис RETURNING id.
  • Метод Update меняет Name пользователя.
  • Метод Delete удаляет пользователя из таблицы.
  • Метод Lookup возвращает Name пользователя по ID.
  • Метод List возвращает список всех пользователей в таблице.
  • Метод Close закрывает коннекты к базе данных.

Запуск тестов на linux

Для работы тестов на ubuntu нужно установить пакет postgresql.

sudo apt install postgresql

Если вы работаете на другом дистрибутиве linux, воспользуйтесь своим пакетным менеджером. Для работы тестов нужны исполняемые файлы postgres и initdb.

Тесты сами запускают базу данных в начале, и останавливают её в конце. База данных работает от текущего пользователя во временной директории.

Запуск postgres в docker

Даже если у вас linux (и уж тем более, если нет), вы можете не захотеть ставить postgres в систему. Альтернативный способ — запустить бд в докере.

Для этого нужно установить docker и docker-compose по инструкции из dockertest. Добиться успешного запуска

go test -v ./dockertest/...

Запускать тесты можно будет так:

(cd dao && docker-compose up -d && sleep 1 && env PGCONN="host=127.0.0.1 port=5432 database=shad-go user=gopher password=pass" go test -v ./... -count=1 || true && docker-compose down)

Эта команда стартует docker с postgresql, запускает тесты, передав им DSN через переменную окружения, удаляет контейнеры в конце.

Как подчистить контейнеры, если что-то пошло не так:

(cd dao && docker-compose down)