fix company_developer deletes
diff --git a/api_test.go b/api_test.go index 74ecf36..87430a8 100644 --- a/api_test.go +++ b/api_test.go
@@ -146,6 +146,12 @@ Expect(res).Should(BeTrue()) } + for i := 0; i < 10; i++ { + row := generateTestCompanyDeveloper(i) + res := deleteCompanyDeveloper(row, txn) + Expect(res).Should(BeTrue()) + } + txn.Commit() }) @@ -174,7 +180,7 @@ res = deleteObject("COMPANY", row, txn) Expect(res).Should(BeFalse()) - res = deleteObject("COMPANY_DEVELOPER", row, txn) + res = deleteCompanyDeveloper(row, txn) Expect(res).Should(BeFalse()) txn.Rollback()
diff --git a/listener.go b/listener.go index 0837149..edc9992 100644 --- a/listener.go +++ b/listener.go
@@ -528,12 +528,12 @@ ok = insertCompanyDevelopers(rows, txn) case common.Update: - ok = deleteObject("COMPANY_DEVELOPER", payload.OldRow, txn) + ok = deleteCompanyDeveloper(payload.OldRow, txn) rows = append(rows, payload.NewRow) ok = insertCompanyDevelopers(rows, txn) case common.Delete: - ok = deleteObject("COMPANY_DEVELOPER", payload.OldRow, txn) + ok = deleteCompanyDeveloper(payload.OldRow, txn) } case "kms.app_credential": switch payload.Operation { @@ -648,3 +648,30 @@ log.Errorf("DELETE APP_CREDENTIAL_APIPRODUCT_MAPPER (%s, %s, %s, %s) failed.", ApiProduct, AppId, EntityIdentifier, apid_scope, err) return false } + +func deleteCompanyDeveloper(ele common.Row, txn *sql.Tx) bool { + prep, err := txn.Prepare(` + DELETE FROM COMPANY_DEVELOPER + WHERE tenant_id=$1 AND company_id=$2 AND developer_id=$3`) + if err != nil { + log.Errorf("DELETE COMPANY_DEVELOPER Failed: %v", err) + return false + } + defer prep.Close() + + var tenantId, companyId, developerId string + ele.Get("tenant_id", &tenantId) + ele.Get("company_id", &companyId) + ele.Get("developer_id", &developerId) + + res, err := txn.Stmt(prep).Exec(tenantId, companyId, developerId) + if err == nil { + affect, err := res.RowsAffected() + if err == nil && affect != 0 { + log.Debugf("DELETE COMPANY_DEVELOPER (%s, %s, %s) success.", tenantId, companyId, developerId) + return true + } + } + log.Errorf("DELETE COMPANY_DEVELOPER (%s, %s, %s) failed: %v", tenantId, companyId, developerId, err) + return false +}