# 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](../dockertest/README.md). Добиться успешного запуска ``` 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) ```