shad-go/dao
2024-06-05 20:36:34 +03:00
..
dao.go Add dao. Simple sql task. 2022-03-26 20:41:17 +03:00
dao_test.go Updated to the most recent version, which uses go 1.22 2024-06-05 20:36:34 +03:00
docker-compose.yaml Updated to the most recent version, which uses go 1.22 2024-06-05 20:36:34 +03:00
model.go [dao] Add Close() method. 2022-04-13 18:07:35 +03:00
README.md Updated to the most recent version, which uses go 1.22 2024-06-05 20:36:34 +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.

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

(cd dao && docker compose up -d --wait && 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)