Categorygithub.com/argooDev/http-restAPI
module
0.0.0-20241104095300-90b0a640eeaa
Repository: https://github.com/argoodev/http-restapi.git
Documentation: pkg.go.dev

# README

go mod init - позволяет инициализировать go модули для управления зависимостями и тд

*Makefile - набор инструкций для программы make, которая позволяет легко собирать и запускать проект При вызове make в терминале, программа попытается найти файл с именем Makefile в текущем каталоге и выполнить его инструкции. Если таких файлов несколько, то make -f MakefileName

Сборка = Компиляция + Линковка. Сначала компилятор берет файлы с исходным кодом и получает из них объектные файлы. Затем линковщик берет объектные файл и получает из них исполняемый файл

.PHONY используется для того, чтобы make не искал файлы с определенным именем .PHONY: all build install ..etc.. .DEFAULT_GOLE: устанавливает задачу по умолчанию

cmd/apiserver/main.go - точка входа в программу internal/app/apiserver/apiserver.go - сам apiserver

Чтобы не хардкодить параметры, порты для запуска веб сервера или url доступа к БД, можно использовать toml файлы, чтобы конфигурировать apiserver

configs/apiserver.toml - файл с конфигом Добавляем в проект зависимость, которая нужна для парсинга конфиг файла - github.com/BurntSushi/toml

go get github.com/BurntSushi/toml - обновляет go.mod файл и добавляет туда новую зависимость

Библиотека toml позволяет парсить конфиг из файла apiserver.toml и записывать результат в перменную config. Это происходит в файле main.go

Библиотека logrus - позволяет реализовать логирование Логирование - это процесс формирования логов, а именно: фиксация и структурирование информации о работе системы в отдельные лог-файлы с возможностью быстрого доступа к ним в случае необходимости

go get github.com/sirupsen/logrus У logrus есть много уровней логирования(debug, error, trace, warning, etc...) Нужно иметь возможность конфигурировать эти уровни с помощью config файлов

Для http сервера понадобится роутер, чтобы обрабатывать все входящие запросы. go get -u github.com/gorilla/mux - эта Библиотека как раз поможет создать роутер и работать с ним!

Тесты, Библиотека - go get github.com/stretchr/testify Тесты будут в internal/app/apiserver/apiserver_internal_test internal потому что тестироваться будут внутренние непубличные методы, если бы тестировались публичные методы, то файл был бы apiserver_test

Чтобы в тестах использовать библиотеку assert - go get github.com/stretchr/testify/[email protected]

БД - postgres Хранилище скрывает детали реализации и предоставляет удобные методы работы с БД и будет состоять из нескольких репозиториев

Установка драйвера для пакета "database/sql", тк БД - postgres, то ставим - go get github.com/lib/pq Анонимно импортируем его в store.go

Далее в конфиг apiserver.toml добавляем секцию [store]

sudo apt install postgresql - установка postgres sudo -u postgres psql - вход в оболочку postgres \du - список пользователей, по умолчанию там postgres \l - список БД \dt - посмотреть список таблицу \d tableName - посмотреть конкретную таблицу
\q - выход \d - показывает отношения CREATE USER argodev WITH PASSWORD '1'; - добавляет пользователя с паролем ALTER USER argodev WITH SUPERUSER; - из обычного делает superuser DROP USER argodev; - удаляет юзера DROP DATABASE dbname; - удаляет БД

Миграции - перенос инфы из одной бд в другую бд (up(продвигает базу вперед)|down(откатывает миграцию)): Качаем с github релиз версию, через deb ставим на систему - Используем утилиту - migrate Создать Миграцию - migrate -path migrations -database "postgres://localhost/restapi_dev?sslmode=disable" up В up - создаем таблицу, в down - дропаем ее

internal/app/model - Хранит все структуры, которые являются представлениями записей в БД (модели данных)

Модели не знают о взаимодействии с БД, за работу с БД отвечают репозитории -internal/app/store/userrepository.go

store/testing.go - возвращает тестовый store, который будет сконфигурирован и функцию, которая позволит очищать заполненные таблицы, чтобы следующие тесты работали с пустой БД

store_test.go - позволит избежать хардкода БД и конфигурить ее, с помощью env переменных Создаем БД restapi_test, прогоняем миграцию migrate -path migrations -database "postgres://localhost/restapi_test?sslmode=disable" up

userrepository_test.go - в нем будут тесты для метода create и findbyemail

go get golang.org/x/crypto - Для шифрования использую bcrypt

go get github.com/go-ozzo/ozzo-validation } Валидация данных будет реализована с помощью ozzo-validation go get github.com/go-ozzo/ozzo-validation/is }

# Packages

No description provided by the author