1
0
forked from BRT/arc

Disable server-side material DELETE operations across multiple workflows; restrict DELETE to card toggling in AccountSettingsWindow.

This commit is contained in:
slava 2026-06-02 14:38:18 +05:00
parent 569eefb3e8
commit 0168cf7610
3 changed files with 22 additions and 0 deletions

View File

@ -1952,6 +1952,10 @@ void NetworkService::onDeviceWentOffline(const QString &deviceId) {
QSharedPointer<QMutex> mtx = keyMutex(deviceId, app.bankProfileId);
QMutexLocker locker(mtx.data());
// [ОТКЛЮЧЕНО] Серверный DELETE материала при уходе устройства в офлайн убран.
// DELETE материала на сервере выполняется только при переключении карты в
// настройках банка (AccountSettingsWindow::toggleMaterialStatus).
/*
const QList<MaterialInfo> materials = MaterialDAO::getAccounts(deviceId, app.code);
for (const MaterialInfo &mat : materials) {
if (mat.materialId.isEmpty()) continue;
@ -1965,6 +1969,7 @@ void NetworkService::onDeviceWentOffline(const QString &deviceId) {
<< mat.materialId;
}
}
*/
const QString path = m_apiBase + m_pathBankProfile + "/" + app.bankProfileId + "/false";
patchJson(path, QJsonObject(), true);
@ -2099,6 +2104,10 @@ void NetworkService::disableAllProfilesOnServer() {
const QString bpState = bp["state"].toString();
if (bpId.isEmpty()) continue;
// [ОТКЛЮЧЕНО] Серверный DELETE материала при shutdown убран. DELETE материала
// на сервере выполняется только при переключении карты в настройках банка
// (AccountSettingsWindow::toggleMaterialStatus).
/*
// Сперва DELETE всех материалов профиля — инвариант «материал живёт на
// сервере только при локально active профиле». Идём по списку с сервера,
// чтобы зацепить и те, что локально потеряли materialId, но на бэке остались.
@ -2116,6 +2125,7 @@ void NetworkService::disableAllProfilesOnServer() {
qWarning() << "[shutdown] DELETE failed for material" << matId;
}
}
*/
if (bpState != "disabled") {
patchJson(m_apiBase + m_pathBankProfile + "/" + bpId + "/false", QJsonObject(), true);

View File

@ -280,6 +280,11 @@ void AccountSettingsWindow::toggleProfileStatus() {
}
};
} else {
// [ОТКЛЮЧЕНО] Серверный DELETE материала при выключении профиля убран.
// DELETE материала на сервере выполняется только при переключении карты
// в настройках банка (toggleMaterialStatus).
onSuccess = []() {};
/*
onSuccess = [this, deviceId, appCode]() {
const QList<MaterialInfo> materials = MaterialDAO::getAccounts(deviceId, appCode);
for (const auto &mat : materials) {
@ -298,6 +303,7 @@ void AccountSettingsWindow::toggleProfileStatus() {
qDebug() << "[AccountSettings] Deleting material on profile-disable:" << mat.materialId;
}
};
*/
}
sendAppStatus(newStatus, std::move(onSuccess));
}

View File

@ -674,6 +674,11 @@ void BankSetupWizard::applyActiveCardSelection() {
return;
}
// [ОТКЛЮЧЕНО] Серверный DELETE материала в мастере настройки убран — DELETE
// материала на сервере выполняется только при переключении карты в настройках
// банка (AccountSettingsWindow::toggleMaterialStatus). Сразу выполняем POST.
launchPost();
/*
auto remaining = QSharedPointer<int>::create(toDelete.size());
for (const MaterialInfo &m : toDelete) {
auto *t = new QThread;
@ -691,6 +696,7 @@ void BankSetupWizard::applyActiveCardSelection() {
QObject::connect(t, &QThread::finished, t, &QThread::deleteLater);
t->start();
}
*/
}
static QString humanReadableError(const QString &error) {