2022-03-26 17:41:17 +00:00
# dao
В этой задаче вам нужно реализовать data access object для доступа к таблице пользователей.
- Функция `CreateDao` должна создавать таблицу в базе данных.
- Метод `Create` должен создавать нового пользователя и назначать е г о `ID` .
2022-03-31 09:57:23 +00:00
З а генерацию `ID` должна отвечать база данных, использовать `rand` запрещается.
2022-03-31 16:10:53 +00:00
`pgx` не поддерживает `LastInsertId` , используйте синтаксис `RETURNING id` .
2022-03-26 17:41:17 +00:00
- Метод `Update` меняет `Name` пользователя.
- Метод `Delete` удаляет пользователя из таблицы.
- Метод `Lookup` возвращает `Name` пользователя по `ID` .
2022-03-29 14:21:14 +00:00
- Метод `List` возвращает список всех пользователей в таблице.
2022-03-31 09:57:23 +00:00
## Запуск тестов на linux
Для работы тестов на ubuntu нужно установить пакет `postgresql` .
```
sudo apt install postgresql
```
Если вы работаете на другом дистрибутиве linux, воспользуйтесь своим пакетным менеджером. Для работы тестов нужны исполняемые файлы `postgres` и `initdb` .
Тесты сами запускают базу данных в начале, и останавливают её в конце.
База данных работает от текущего пользователя во временной директории.
2022-03-31 14:40:40 +00:00
## Запуск postgres в docker
Даже если у вас linux (и уж тем более, если нет), вы можете не захотеть ставить postgres в систему.
Альтернативный способ — запустить бд в докере.
Для этого нужно установить docker и docker-compose по инструкции из [dockertest ](../dockertest/README.md ).
2022-03-31 14:54:14 +00:00
Добиться успешного запуска
2022-03-31 14:40:40 +00:00
```
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)
```