diff --git a/backend/src/main/java/com/vaessl/app/connection/ConnectionEntity.java b/backend/src/main/java/com/vaessl/app/connection/ConnectionEntity.java index df06a47..96b769f 100644 --- a/backend/src/main/java/com/vaessl/app/connection/ConnectionEntity.java +++ b/backend/src/main/java/com/vaessl/app/connection/ConnectionEntity.java @@ -8,12 +8,13 @@ import jakarta.persistence.Id; import jakarta.persistence.Inheritance; import jakarta.persistence.InheritanceType; import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @Entity -@Table(name = "connections") +@Table(name = "connections", uniqueConstraints = { @UniqueConstraint(columnNames = { "appUrl", "username" }) }) @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "service_type") @Getter @@ -23,6 +24,7 @@ public abstract class ConnectionEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - + private String appUrl; + private String username; } diff --git a/backend/src/main/java/com/vaessl/app/connection/ConnectionProvider.java b/backend/src/main/java/com/vaessl/app/connection/ConnectionProvider.java index ac05ca7..0b6e893 100644 --- a/backend/src/main/java/com/vaessl/app/connection/ConnectionProvider.java +++ b/backend/src/main/java/com/vaessl/app/connection/ConnectionProvider.java @@ -9,6 +9,8 @@ public interface ConnectionProvider { ConnectionResponse authenticate(ConnectionRequest request); + ConnectionEntity findUniqueConnectionEntry(ConnectionRequest request); + ConnectionEntity connectionToEntity(ConnectionRequest request, ConnectionResponse response); void updateToRepository(ConnectionEntity existing, ConnectionResponse response); diff --git a/backend/src/main/java/com/vaessl/app/connection/ConnectionRepository.java b/backend/src/main/java/com/vaessl/app/connection/ConnectionRepository.java index d02823b..880f567 100644 --- a/backend/src/main/java/com/vaessl/app/connection/ConnectionRepository.java +++ b/backend/src/main/java/com/vaessl/app/connection/ConnectionRepository.java @@ -6,5 +6,5 @@ import org.springframework.stereotype.Repository; @Repository public interface ConnectionRepository extends JpaRepository { - ConnectionEntity findByAppUrl(String appUrl); + ConnectionEntity findByAppUrlAndUsername(String appUrl, String username); } diff --git a/backend/src/main/java/com/vaessl/app/connection/ConnectionService.java b/backend/src/main/java/com/vaessl/app/connection/ConnectionService.java index ea5a526..86c3b28 100644 --- a/backend/src/main/java/com/vaessl/app/connection/ConnectionService.java +++ b/backend/src/main/java/com/vaessl/app/connection/ConnectionService.java @@ -33,7 +33,7 @@ public class ConnectionService { ConnectionResponse response = provider.authenticate(request); - ConnectionEntity existing = cRepository.findByAppUrl(request.appUrl()); + ConnectionEntity existing = provider.findUniqueConnectionEntry(request); if (existing != null) { provider.updateToRepository(existing, response); diff --git a/backend/src/main/java/com/vaessl/app/connection/HomeBoxConnectionProvider.java b/backend/src/main/java/com/vaessl/app/connection/HomeBoxConnectionProvider.java index 3294cd7..c8fc2d3 100644 --- a/backend/src/main/java/com/vaessl/app/connection/HomeBoxConnectionProvider.java +++ b/backend/src/main/java/com/vaessl/app/connection/HomeBoxConnectionProvider.java @@ -54,6 +54,12 @@ public class HomeBoxConnectionProvider implements ConnectionProvider { return new ConnectionResponse(hbResponse.token(), hbResponse.expiresAt(), attachmentToken); } + @Override + public ConnectionEntity findUniqueConnectionEntry(ConnectionRequest request) { + + return cRepository.findByAppUrlAndUsername(request.appUrl(), request.credentials().get("username")); + } + @Override public ConnectionEntity connectionToEntity(ConnectionRequest request, ConnectionResponse response) { return HomeboxEntity.from(request, response); diff --git a/backend/src/main/java/com/vaessl/app/connection/HomeboxEntity.java b/backend/src/main/java/com/vaessl/app/connection/HomeboxEntity.java index f23521d..c134af0 100644 --- a/backend/src/main/java/com/vaessl/app/connection/HomeboxEntity.java +++ b/backend/src/main/java/com/vaessl/app/connection/HomeboxEntity.java @@ -25,6 +25,7 @@ public class HomeboxEntity extends ConnectionEntity { HomeboxEntity he = new HomeboxEntity(); he.setAppUrl(request.appUrl()); + he.setUsername(request.credentials().get("username")); he.setToken(response.token()); he.setAttachmentToken(response.getExtraVar("attachmentToken")); he.setExpiresAt(response.expiresAt()); diff --git a/backend/src/test/java/com/vaessl/app/connection/HomeboxIntegrationTest.java b/backend/src/test/java/com/vaessl/app/connection/HomeboxIntegrationTest.java index 2f7cf3c..4ea7388 100644 --- a/backend/src/test/java/com/vaessl/app/connection/HomeboxIntegrationTest.java +++ b/backend/src/test/java/com/vaessl/app/connection/HomeboxIntegrationTest.java @@ -179,11 +179,12 @@ class HomeboxIntegrationTest { DocumentContext responseContext = JsonPath.parse(response.getBody()); - ConnectionEntity dbEntry = cRepository.findByAppUrl(request.appUrl()); + ConnectionEntity dbEntry = cRepository.findByAppUrlAndUsername(request.appUrl(), request.credentials().get("username")); assertThat(dbEntry).isNotNull(); assertThat(dbEntry.getAppUrl()).isEqualTo(request.appUrl()); + assertThat(dbEntry.getUsername()).isEqualTo(request.credentials().get("username")); if (dbEntry instanceof HomeboxEntity hbE) { assertThat(hbE.getToken()).isEqualTo(responseContext.read("$.token"));