Categorygithub.com/famusovsky/VkTestTask
module
0.0.0-20240318202154-4604167f07b6
Repository: https://github.com/famusovsky/vktesttask.git
Documentation: pkg.go.dev

# README

Выполнил Степанов Алексей Александрович

Для проекта я использовал Go 1.22.1 (версия 1.22 необходима для работы приложения, так как в нём используется новый функционал пакета net/http) и БД PostgreSQL.

Запуск:

Запуск dev-среды с помощью docker-compose:

docker-compose up

Среда, в которой происходит запуск, должна иметь переменные окружения:

  • DB_HOST - хост базы данных.
  • DB_PORT - порт для доступа к базе данных.
  • DB_USER - логин пользователя БД.
  • DB_PASSWORD - пароль пользователя БД.
  • DB_NAME - ИМЯ пользователя БД.

Запуск с помощью go run:

go run ./cmd/api/main.go
# Флаги:
# -override_tables=true - запуск с автоматическим созданием таблиц в БД
# -addr=:8080 - выбор порта, с которым будет работать сервер
# -default_admin=true - запуск с существованием базового администратора (admin|admin).

PostgreSQL Query для создания таблиц в БД вручную:

CREATE TABLE IF NOT EXISTS users (
	id SERIAL PRIMARY KEY,
	name TEXT NOT NULL,
	password TEXT NOT NULL,
	is_admin BOOlEAN NOT NULL
);
CREATE TABLE IF NOT EXISTS actors (
	id SERIAL PRIMARY KEY,
	name TEXT NOT NULL,
	gender TEXT NOT NULL,
	date_of_birth DATE NOT NULL
);
CREATE TABLE IF NOT EXISTS movies (
	id SERIAL PRIMARY KEY,
	name TEXT NOT NULL,
	description TEXT NOT NULL,
	release_date DATE NOT NULL,
	rating INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS movie_actors (
	movie_id INTEGER NOT NULL,
	actor_id INTEGER NOT NULL,
	FOREIGN KEY (movie_id) REFERENCES movies(id),
   	FOREIGN KEY (actor_id) REFERENCES actors(id),
   	PRIMARY KEY (movie_id, actor_id)
);

UI Swagger доступен по адресу /swagger

Документация располагается в папке docs

Для генерации документации использовалась утилита Swag:

# Установка Swag
go install github.com/swaggo/swag/cmd/swag@latest
# Генерация документации
swag init -d ./cmd/api,./internal/filmoteka -o ./docs

Комментарий

Так как в задании было разрешено упростить процесс сопоставления ролей и пользователей (считать, что роли задаются вручную), мною было решено устроить это так:

Новых пользователей через Api может создавать только администратор. При создании указывается логин, пароль и роль. Также, доступна возможность создания администратора admin|admin с помощью флага -default_admin=true.

# Packages

No description provided by the author
Package docs Code generated by swaggo/swag.
No description provided by the author