Skip to content

Commit bc57296

Browse files
committed
[backend] feat(multitenancy): adding builtin connectors for new tenants (#3505)
1 parent 0828eb7 commit bc57296

7 files changed

Lines changed: 47 additions & 6 deletions

File tree

openaev-api/src/main/java/io/openaev/service/InjectorService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,8 @@ private void deleteDummyInjectorIfItExists(
448448
});
449449
injectorContractRepository.saveAll(injectorContracts);
450450
}
451-
injectorRepository.delete(dummyInjector);
451+
injectorRepository.deleteByIdAndTenantId(
452+
dummyInjector.getId(), TenantContext.getCurrentTenant());
452453
});
453454
}
454455

openaev-api/src/main/java/io/openaev/service/connector_instances/ConnectorInstanceService.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -326,10 +326,11 @@ public void deleteById(String id) throws ConnectorStatusException {
326326
.orElse(null);
327327

328328
if (connectorId != null) {
329+
String tenantId = connectorInstance.getTenant().getId();
329330
switch (connectorInstance.getCatalogConnector().getContainerType()) {
330-
case EXECUTOR -> executorRepository.deleteById(connectorId);
331-
case INJECTOR -> injectorRepository.deleteById(connectorId);
332-
case COLLECTOR -> collectorRepository.deleteById(connectorId);
331+
case EXECUTOR -> executorRepository.deleteByIdAndTenantId(connectorId, tenantId);
332+
case INJECTOR -> injectorRepository.deleteByIdAndTenantId(connectorId, tenantId);
333+
case COLLECTOR -> collectorRepository.deleteByIdAndTenantId(connectorId, tenantId);
333334
}
334335
}
335336

openaev-api/src/test/java/io/openaev/api/chaining/InjectExecutionStepTest.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -458,14 +458,25 @@ public void run_shouldReturnNull_whenInjectorIsNotFoundInDatabase()
458458
assertNotNull(injectorIdsJson);
459459
String[] injectorIds = mapper.readValue(injectorIdsJson, String[].class);
460460
for (String id : injectorIds) {
461-
injectorRepository.deleteById(id);
461+
injectorRepository.deleteByIdAndTenantId(
462+
id, io.openaev.context.TenantContext.getCurrentTenant());
462463
}
464+
entityManager.flush();
465+
entityManager.clear();
466+
467+
// Clear injectors from the mocked contract so the code cannot resolve them
468+
injectorContractSaved.getInjectors().clear();
463469

464470
// ACT
465471
ChainingException ex =
466472
Assertions.assertThrows(ChainingException.class, () -> injectExecutionStep.run(stepReady));
467473
// ASSERT
468-
Assertions.assertEquals("Step (READY) : Error processing JSON to Inject ", ex.getMessage());
474+
Assertions.assertEquals(
475+
"Injector not found for injectorId "
476+
+ injectorIds[0]
477+
+ " and step (READY) ID "
478+
+ stepReady.getId(),
479+
ex.getMessage());
469480
}
470481

471482
@Test

openaev-model/src/main/java/io/openaev/aop/HibernateFilterTransactionAspect.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ public class HibernateFilterTransactionAspect {
2727
"@annotation(org.springframework.transaction.annotation.Transactional) || "
2828
+ "@annotation(jakarta.transaction.Transactional)")
2929
public void enableFilters() {
30+
if (TenantContext.isRlsBypassed()) {
31+
return;
32+
}
3033
String tenantId = TenantContext.getCurrentTenant();
3134
Session session = entityManager.unwrap(Session.class);
3235

openaev-model/src/main/java/io/openaev/database/repository/CollectorRepository.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import java.util.List;
66
import java.util.Optional;
77
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
8+
import org.springframework.data.jpa.repository.Modifying;
89
import org.springframework.data.jpa.repository.Query;
910
import org.springframework.data.repository.CrudRepository;
1011
import org.springframework.data.repository.query.Param;
@@ -40,4 +41,10 @@ WHERE c.collectorType IN (
4041
)
4142
""")
4243
List<Collector> findByInjectId(@Param("injectId") String injectId);
44+
45+
@Modifying
46+
@Query(
47+
nativeQuery = true,
48+
value = "DELETE FROM collectors WHERE collector_id = :id AND tenant_id = :tenantId")
49+
void deleteByIdAndTenantId(@Param("id") String id, @Param("tenantId") String tenantId);
4350
}

openaev-model/src/main/java/io/openaev/database/repository/ExecutorRepository.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
import io.openaev.database.model.Executor;
44
import jakarta.validation.constraints.NotNull;
55
import java.util.Optional;
6+
import org.springframework.data.jpa.repository.Modifying;
7+
import org.springframework.data.jpa.repository.Query;
68
import org.springframework.data.repository.CrudRepository;
9+
import org.springframework.data.repository.query.Param;
710
import org.springframework.stereotype.Repository;
811

912
@Repository
@@ -13,4 +16,10 @@ public interface ExecutorRepository extends CrudRepository<Executor, String> {
1316

1417
@NotNull
1518
Optional<Executor> findByTypeAndTenantId(@NotNull String type, @NotNull String tenantId);
19+
20+
@Modifying
21+
@Query(
22+
nativeQuery = true,
23+
value = "DELETE FROM executors WHERE executor_id = :id AND tenant_id = :tenantId")
24+
void deleteByIdAndTenantId(@Param("id") String id, @Param("tenantId") String tenantId);
1625
}

openaev-model/src/main/java/io/openaev/database/repository/InjectorRepository.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
import java.util.Optional;
77
import org.springframework.data.jpa.repository.JpaRepository;
88
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
9+
import org.springframework.data.jpa.repository.Modifying;
10+
import org.springframework.data.jpa.repository.Query;
11+
import org.springframework.data.repository.query.Param;
912
import org.springframework.stereotype.Repository;
1013

1114
@Repository
@@ -18,4 +21,10 @@ public interface InjectorRepository
1821
Optional<Injector> findByTypeAndTenantId(@NotNull String type, @NotNull String tenantId);
1922

2023
List<Injector> findAllByPayloadsAndTenantId(@NotNull Boolean payloads, @NotNull String tenantId);
24+
25+
@Modifying
26+
@Query(
27+
nativeQuery = true,
28+
value = "DELETE FROM injectors WHERE injector_id = :id AND tenant_id = :tenantId")
29+
void deleteByIdAndTenantId(@Param("id") String id, @Param("tenantId") String tenantId);
2130
}

0 commit comments

Comments
 (0)