jvmchat | Unsorted

Telegram-канал jvmchat - pro.jvm

5916

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш канал: @proJVM Вакансии: @jvmjobs @jvmjobschat ⚠️ Оффтоп -> @flood ❌Переход на личности ❌Троллинг ❌Реклама ❌HH (вакансии) ❌Варез

Subscribe to a channel

pro.jvm

а тесты поймали бы ошибку на вставке null

Читать полностью…

pro.jvm

хотя да, тот кто сделал правку должен был бы и маппинг поправить (если мы говорим о кастомном, как в моем случае FilmFields, наборе филдов)

Читать полностью…

pro.jvm

как только ты это в миграции поменял, ты автоматом поменяешь в конвертации поля

+ тесты

твой сценарий возможен либо в командах с низкой инженерной культурой, либо там, где не ты хозяин бд

Читать полностью…

pro.jvm

ослабляет. код считает что по дефолту все nullable, мы точечно правим и зашиваем в код. какое-то поле меняется на not nullable, генеренный код не меняется, наш ручной маппинг тоже...

Читать полностью…

pro.jvm

но ведь не ослабляет, мы просто фиксим баг ленивца эдера

Читать полностью…

pro.jvm

меня только одно расстраивает в таком подходе, как и любом другом для обхода бага - оно ослабляет compile time проверки по сути

Читать полностью…

pro.jvm

её писать во всех селектах тогда

Читать полностью…

pro.jvm

и потом в select использовать FilmFields

Читать полностью…

pro.jvm

А нельзя unchecked cast в одном месте, чтобы не писать кучу бойлер-плейта?

Читать полностью…

pro.jvm

+ дсл в имплементации репозитория связывает твой дата класс и структуру в бд, пропустить не выйдет

Читать полностью…

pro.jvm

а если структура в ~базе~ таблице поменялась, то это не скажется же если не апдейтить дата класс?

Читать полностью…

pro.jvm

у меня это кастомный data class User, если ты про это

Читать полностью…

pro.jvm

какие то чудеса и рождественская магия между 22.0.5 и 25.0.5

Читать полностью…

pro.jvm

шайтанства нет, мой дата-класс 1 в 1 повторяет структуру, что в бд
просто обхожу баг Эдера

Читать полностью…

pro.jvm

override fun findByKeycloakId(keycloakId: String): User? {
return db.select(
USERS.ID.convertFrom { it!! },
USERS.KEYCLOAK_ID.convertFrom { it!! },
USERS.EMAIL.convertFrom { it!! },
USERS.USERNAME.convertFrom { it!! },
USERS.FIRST_NAME,
USERS.LAST_NAME,
USERS.CREATED_AT.convertFrom { it!! },
USERS.UPDATED_AT
).from(USERS)
.where(USERS.KEYCLOAK_ID.eq(keycloakId))
.fetchOne(Records.mapping(::User))
}

Читать полностью…

pro.jvm

да и его мр не должен был быть слит без этого

Читать полностью…

pro.jvm

ну кто-то слил свою правку, ты писал новый код к этому полю и ребейзнулся.

тут только тесты и культура ревью

Читать полностью…

pro.jvm

сборка будет зеленой. а если тестов на это место нет - поймаем только в рантайм

Читать полностью…

pro.jvm

который закрывает ишью на гитхабе, а у народа наллабл в кодгене

Читать полностью…

pro.jvm

как и маппер с рефлексией, там вообще неявно это делается

Читать полностью…

pro.jvm

ну вот свой маппер написать, я уже об этом говорил как раз

Читать полностью…

pro.jvm

+ можно просто экстеншен функцию сделать

Читать полностью…

pro.jvm

object FilmFields {

val ID = FILM.ID.nonNullable()
val NAME = FILM.NAME.nonNullable()
val LINK = FILM.LINK
val POSTER_LINK = FILM.POSTER_LINK
val STATE = FILM.STATE.nonNullable()

}

inline fun <T> Field<T>.nonNullable() = convertFrom { it!! }

Читать полностью…

pro.jvm

собственно, это единственная задача жука, я бы и просто на строках все писал, если бы тайпсэйф был возможен

Читать полностью…

pro.jvm

упадет компиляция и тесты, править все придется в любом случае

Читать полностью…

pro.jvm

да даже неохота подсвечивать. утро вечера мудренее. порешаю завтра

Читать полностью…

pro.jvm

кстати... можно сделать свой объект со своим набором маппинга, где нужные филды уже будут конвертированы)

Читать полностью…

pro.jvm

эх. этот key от которого сегодня полыхнул мой cloak

Читать полностью…

pro.jvm

так и понял

некрасивое шайтанство, я лучше рефлексией

Читать полностью…

pro.jvm

но благодаря .convertFrom { it!! } это инлайном можно конвертнуть

Читать полностью…
Subscribe to a channel