fix: конфигуратор зависал на «Загрузка...», infinite retry при sync, UpsertByUUID
1. JS-конфигуратор: при загрузке сохранённой конфигурации item.category всегда undefined (в config.items хранится только lot_name/quantity/unit_price). Добавлено обогащение cart из allComponents после загрузки, все сравнения категорий переведены на ciStr() вместо .toUpperCase(), исправлены все 4 точки построения ASSIGNED_CATEGORIES — устраняет TypeError и таб «Other» показывал компоненты с известными категориями. 2. RepairPendingChanges: repair-функции теперь возвращают (bool, error); attempts/last_error сбрасываются только при modified=true — устраняет бесконечный retry когда ошибка на стороне сервера, а не локальных данных. 3. UpsertByUUID: сброс project.ID=0 перед INSERT … ON DUPLICATE KEY UPDATE, чтобы конфликт шёл по уникальному uuid, а не по PK чужой строки — устраняет «record not found» при разрешении изменений проекта. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -23,6 +23,11 @@ func (r *ProjectRepository) Update(project *models.Project) error {
|
||||
}
|
||||
|
||||
func (r *ProjectRepository) UpsertByUUID(project *models.Project) error {
|
||||
// Clear the client-side primary key so the upsert is driven purely by the
|
||||
// uuid unique constraint. Passing a non-zero ID can trigger ON DUPLICATE KEY
|
||||
// on the primary key of an unrelated row, leaving uuid unchanged and causing
|
||||
// the follow-up SELECT to return ErrRecordNotFound.
|
||||
project.ID = 0
|
||||
if err := r.db.Clauses(clause.OnConflict{
|
||||
Columns: []clause.Column{{Name: "uuid"}},
|
||||
DoUpdates: clause.AssignmentColumns([]string{
|
||||
|
||||
Reference in New Issue
Block a user