Правильная обработка типов gRPC в SQL ORM - PullRequest
1 голос
/ 28 апреля 2019

Я внедряю сервер gRPC и использую ORM под названием Boiler for Go. Я дошел до того, что собрал все свои модели и прототипы и теперь занимаюсь конкретными проблемами типа.

В моих файлах protobuf я объявил большинство типов как strings. Однако мой ORM рассматривает (из-за того, как он взаимодействует с Postgres) строки как null.String в своих моделях. Следовательно, когда я пытаюсь что-то вроде этого, я получаю ошибку:

user := &models.User{
    FirstName:   req.FirstName,
    LastName:    req.LastName,
    Email:       req.Email,
    Gender:      req.Gender,
    PhoneNumber: req.PhoneNumber,
}

Ошибка: services/users.go:46:3: cannot use req.FirstName (type string) as type null.String in field value

Вопрос в том, что было бы наиболее подходящим способом справиться с этой ситуацией. Я мог бы: сгенерировать новую структуру (которую я уже использую для проверки данных) и привести их к null.String или, я полагаю, я мог бы попытаться каким-либо образом вызвать приведение?

Тогда возникает вопрос, если пользователь не предоставляет значение в API, и процесс проверки позволяет это сделать, как это будет обрабатывать несуществующую запись?

Редактировать: Похоже, разработчики SQLBoiler имеют пакет для обработки нулей отдельно. то есть. null.StringFrom(), null.Int15From и т. Д., По сути, я бы обернул все свои поля так:

user := &models.User{
    FirstName:        null.StringFrom(req.FirstName),
    LastName:         null.StringFrom(req.LastName),
    Email:            null.StringFrom(req.Email),
    Password:         string(password_hash),
    Role:             "BASIC_USER",
    Status:           "ACTIVE",
    Gender:           null.Int16From(req.Gender),
    PhoneNumber:      null.StringFrom(req.PhoneNumber),
    VerificationCode: null.StringFrom(code.String()),
}

Чувствует себя немного грязно, но я не вижу других вариантов. Предложения / мнения кто-нибудь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...