48 lines
2.8 KiB
Markdown
48 lines
2.8 KiB
Markdown
# 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)
|
||
```
|