[commit-keeper sha=488f11b] Несоответствие именования колонок в БД #4

Open
opened 2026-04-27 09:13:43 +00:00 by commit-keeper · 0 comments

Severity: minor
Commit: 488f11b — alpha
Затронутые места:

  • store/gorm.go строки 38–41

В чём проблема

Несоответствие имени поля в БД и в модели Go. В модели Document поле называется LatestVersion, GORM по умолчанию преобразует его в snake_case (latest_version). Однако, в методе Update("latest_version", versionID) используется явное указание строки. Если в будущем будет изменена стратегия именования или используется специфический тег gorm:"column:...";, возникнет ошибка. Более того, в SQLite/GORM, если запись не найдена, Update() может не вернуть ошибку, но и не обновить ничего.

Цитата кода

if err := s.db.Model(&models.Document{}).Where("id = ?", docID).Update("latest_version", versionID).Error

Как исправить

Вариант 1 — Использовать обновление через структуру или map, чтобы избежать хардкода имен колонок.

Это делает код более устойчивым к изменениям в схеме БД.

return s.db.Model(&models.Document{ID: docID}).Update("LatestVersion", versionID).Error

Автоматическая проверка commit-keeper · модель gemma4:31b · sha=488f11b

**Severity:** minor **Commit:** [`488f11b`](https://git.gm6.ru/icewind/seadoc/commit/488f11bd56db4f7e17b4b4bd9bd6e6f4f4a394c5) — alpha **Затронутые места:** - `store/gorm.go` строки 38–41 ## В чём проблема Несоответствие имени поля в БД и в модели Go. В модели Document поле называется LatestVersion, GORM по умолчанию преобразует его в snake_case (latest_version). Однако, в методе Update("latest_version", versionID) используется явное указание строки. Если в будущем будет изменена стратегия именования или используется специфический тег gorm:"column:...";, возникнет ошибка. Более того, в SQLite/GORM, если запись не найдена, Update() может не вернуть ошибку, но и не обновить ничего. ## Цитата кода ``` if err := s.db.Model(&models.Document{}).Where("id = ?", docID).Update("latest_version", versionID).Error ``` ## Как исправить ### Вариант 1 — Использовать обновление через структуру или map, чтобы избежать хардкода имен колонок. Это делает код более устойчивым к изменениям в схеме БД. ``` return s.db.Model(&models.Document{ID: docID}).Update("LatestVersion", versionID).Error ``` --- <sub><sup>Автоматическая проверка commit-keeper · модель `gemma4:31b` · `sha=488f11b`</sup></sub> <!-- commit-keeper -->
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: icewind/seadoc#4
No description provided.