Herman
Herman
ну бд ж нету этой у мене
Herman
Tikhon
Да, я отключил middleware и у меня тоже всё получилось, пришёл нормальный ответ и токен в БД удалился
Tikhon
В middleware я тоже через ctx.Get токен получаю
Tikhon
Буду копать в эту сторону
Tikhon
Мб эта функция одноразовая, или типо того
Tikhon
Надо смотреть как она работает
Tikhon
Спасибо что помогли найти ошибку
Herman
Herman
в мидваре ошибка - просто return nil не будет так работать
Herman
я так понимаю надо делать return ctx.Next()
Herman
то есть переход к следующему хендлеру
Tikhon
Да, теперь всё работает, спасибо
Tikhon
Ещё подскажите пожалуйста, я хотел бы вынести код с парсингом и валидацией запроса из userController в другой файл, так как во-первых код с парсингом и валидацией в функциях Register и Login дублируется, а во-вторых занимает около 13 строк
Tikhon
Я набросал это, но столкнулся с проблемой
Tikhon
Tikhon
Возможно ли как-то передать в функцию неизвестную структуру ?
Herman
в каком смысле неизвестную?
Tikhon
Либо loginRequest, либо registerRequest
Tikhon
Так как в дальнейшем ведь список реквестов может пополняться
Herman
через месяц можно будет
Tikhon
Не хотелось бы для каждого отдельную функцию писать
Herman
щас пока нет дженериков
🅞leksiy
Интерфейс только
Herman
ну можно interface{} и type assertion делать
Tikhon
Можете пожалуйста пример накидать ? Так и не научился нормально с интерфейсами работать
🅞leksiy
Или методы для получения юзернейма и пароля, я так понимаю, они нужны. И в интерфейсе эти же методы прописать
Tikhon
Herman
Herman
в плане как валидация происходить планируется?
Tikhon
Хотелось бы просто эту часть кода из функций юзер контроллера вынести
Herman
validate.Struct(&request) и так принимает interface{}
Herman
то есть тип не нужен
Herman
Herman
в структуру
Tikhon
Да, вот эта часть кода повторяется в нескольких местах, хотелось бы её вынести
Herman
ну валидацию легко вынести, а вот парсить придется с type assertion
Tikhon
Понял, буду делать
Herman
а вот в джине есть shouldbind
Herman
Herman
https://github.com/gofiber/fiber/issues/117
Herman
хотя этот вопрос походу не про валидацию
Herman
валидацию мб и можно вынести, а вот парсинг я бы оставил в самом хендереле
Tikhon
Да, наверное так будет правильнее
Tikhon
Всё оказалось намного проще - методы ctx.BodyParser и validate.Struct тоже принимают в качестве параметра интерфейс, поэтому никаких свитчей с type assertion не понадобилось
Tikhon
Denis Pershin
Разнеси на разные методы, отдельно парсинг отдельно валидация
Tikhon
Так не получится, да и изначальная идея была сократить код как раз за счёт выноса этих функций куда-нибудь в другое место
Tikhon
В общем, похоже что первый вариант самым адекватным был
```
func Register(ctx *fiber.Ctx) error {
var request struct {
Username string json:"username" validate:"required"
Password string json:"password" validate:"required"
AccountType string json:"account_type" validate:"required,contains=user|contains=admin"
}
/* Parse and validate request body */
if err := ctx.BodyParser(&request); err != nil {
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"message": err})
}
if err := validate.Struct(&request); err != nil {
return ctx.Status(fiber.StatusBadRequest).JSON(fiber.Map{"message": "Incorrect entered data"})
}
```
Tikhon
Но тогда дубликация кода происходит
Tikhon
В Register и Login
https://github.com/mzdt/simplewebserver/blob/main/internal/app/controllers/usercontroller/usercontroller.go
Tikhon
Похоже, всё что я могу сделать - вынести тела реквестов в другой файл
Tikhon
Если есть идеи как избавиться от этой дубликации красиво и без костылей - напишите пожалуйста
7yon
Всем привет, есть у кого хорошие примеры выполненной формы отправки email с сайта на Go?
Maks
Ты в своем уме?) отправка формы это жабаскрипт) а прием запроса это уже бэкенд)
Maks
Тада сори
Null
Бесплатный курс: продвинутая разработка микросервисов на Go
Набор на 2-й поток бесплатного курса для разработчиков.
Пишешь на python? Хочешь работать с высокими нагрузками? Переходи на язык микросервисов вместе с экспертами Ozon.
На курсе ты изучишь:
🔹Observability и SRE
🔹Шардирование и кэширование
🔹Храненение файлов и специальные типы баз данных
🔹Высоконагруженный
Machine learning
Как попасть на курс?
Оставь заявку на сайте ➡️ пройди контест ➡️ попади в рейтинг лучших ➡️ развивайся под менторством экспертов Ozon.
Оставь заявку по ссылке
Tikhon
Подскажите пожалуйста насчёт github.com/go-playground/validator , у меня в AccountType заданы правила валидации - это поле не должно быть пустым, и оно может принимать только "user" или "admin" . Но правило contains по какой-то причине не всегда отрабатывает, в плане того, что иногда я могу в него послать "test", и оно почему-то успешно проходит валидацию, хотя такого не должно происходить, а иногда всё отрабатывает нормально, и "test" в "account_type "валидацию не проходит.. Мб я как-то неправильно правила записал ?
Tikhon
20 строка кода
Tikhon
Например я сейчас туда послал "userd" , и оно прошло валидацию
Tikhon
А "test" не проходит валидацию..
Denis Pershin
Потому что contains может?
Denis Pershin
А надо exact какой нибудь
Denis Pershin
administrator тоже подойдёт потом что содержит admin в себе
Tikhon
Tikhon
Но нужно вот добиться, чтобы оно только определённый набор символов содержало, ибо проверять это через if else где-то в коде это будет глупо
Tikhon
Но я не вижу какого-нибудь eqstring в этом валидаторе
Tikhon
Похоже что нужно другой валидатор брать, спасибо что подсказали
Denis Pershin
contains rune а это не?
Denis Pershin
Или eq попробуй
Denis Pershin
Глянь тесты их, может найдёшь что
Tikhon
О, eq=user помогло
Null
ТОП-10 Open Source проектов 2022 | Golang
https://www.youtube.com/watch?v=hwk5vxmks8s
@Golang_google
Anton
Мне зашла, написана я бы сказал "по программерскому"
Anton
стиль похож на то, как в 2000-х писали книги по программированию
Anonymous
как mod.go корректно обновить? версия го 1.16 у проекта, нужно более новую