Skip to content

Commit 9829162

Browse files
committed
hash_links
1 parent 4e4d805 commit 9829162

File tree

2 files changed

+112
-22
lines changed
  • graphql-database-manager-dynamo/src/main/java/com/phocassoftware/graphql/database/manager/dynamo
  • graphql-database-manager-test/src/test/java/com/phocassoftware/graphql/database/manager/test/hashed

2 files changed

+112
-22
lines changed

graphql-database-manager-dynamo/src/main/java/com/phocassoftware/graphql/database/manager/dynamo/DynamoDb.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -551,10 +551,6 @@ public <T extends Table> CompletableFuture<List<T>> getViaLinks(
551551
Class<T> type,
552552
TableDataLoader<DatabaseKey<Table>> items
553553
) {
554-
if (getExtractor(entry.getClass()).isPresent() || getExtractor(type).isPresent()) {
555-
throw new UnsupportedOperationException("hashed objects can not be linked");
556-
}
557-
558554
String tableTarget = table(type);
559555
var links = getLinks(entry).get(tableTarget);
560556
if (links == null) {
@@ -1289,10 +1285,6 @@ private <T extends Table> CompletableFuture<T> updateEntityLinks(
12891285

12901286
@Override
12911287
public <T extends Table> CompletableFuture<T> link(String organisationId, T entity, Class<? extends Table> class1, List<String> groupIds) {
1292-
if (getExtractor(entity.getClass()).isPresent() || getExtractor(class1).isPresent()) {
1293-
throw new UnsupportedOperationException("hashed objects can not be linked");
1294-
}
1295-
12961288
var source = table(entity.getClass());
12971289

12981290
var target = table(class1);
@@ -1333,10 +1325,6 @@ public <T extends Table> CompletableFuture<T> unlink(
13331325
final Class<? extends Table> clazz,
13341326
final String targetId
13351327
) {
1336-
if (getExtractor(entity.getClass()).isPresent() || getExtractor(clazz).isPresent()) {
1337-
throw new UnsupportedOperationException("hashed objects can not be linked");
1338-
}
1339-
13401328
final var updateEntityLinksRequest = createRemoveLinkRequest(organisationId, entity, clazz, targetId);
13411329

13421330
return client
@@ -1394,9 +1382,6 @@ public <T extends Table> CompletableFuture<T> deleteLinks(String organisationId,
13941382
if (getLinks(entity).isEmpty()) {
13951383
return CompletableFuture.completedFuture(entity);
13961384
}
1397-
if (getExtractor(entity.getClass()).isPresent()) {
1398-
throw new UnsupportedOperationException("hashed objects can not be linked");
1399-
}
14001385

14011386
var organisationIdAttribute = AttributeValue.builder().s(organisationId).build();
14021387
var id = AttributeValue.builder().s(table(entity.getClass()) + ":" + entity.getId()).build();

graphql-database-manager-test/src/test/java/com/phocassoftware/graphql/database/manager/test/hashed/DynamoDbLinkTest.java

Lines changed: 112 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,131 @@
1212

1313
package com.phocassoftware.graphql.database.manager.test.hashed;
1414

15-
import static org.junit.jupiter.api.Assertions.assertEquals;
16-
import static org.junit.jupiter.api.Assertions.assertThrows;
1715

1816
import com.phocassoftware.graphql.database.manager.Database;
1917
import com.phocassoftware.graphql.database.manager.Table;
2018
import com.phocassoftware.graphql.database.manager.annotations.Hash;
19+
import com.phocassoftware.graphql.database.manager.test.TestDatabase;
2120
import com.phocassoftware.graphql.database.manager.test.annotations.DatabaseNames;
22-
import java.util.concurrent.CompletionException;
21+
import com.phocassoftware.graphql.database.manager.test.annotations.DatabaseOrganisation;
22+
import org.junit.jupiter.api.Assertions;
23+
24+
import java.util.Comparator;
2325
import java.util.concurrent.ExecutionException;
2426

2527
final class DynamoDbLinkTest {
2628

2729
@TestDatabase
28-
void testSimpleQuery(@DatabaseNames({ "prod", "stage" }) final Database db, @DatabaseNames("prod") final Database dbProd)
29-
throws InterruptedException, ExecutionException {
30+
void testSimpleQuery(
31+
@DatabaseNames({ "prod", "stage" }) @DatabaseOrganisation("fixed") final Database db,
32+
@DatabaseNames("prod") @DatabaseOrganisation("fixed") final Database dbProd
33+
) throws ExecutionException, InterruptedException {
3034
var garry = db.put(new SimpleTable("garry")).get();
35+
var john = db.put(new AnotherTable("john")).get();
36+
var frank = dbProd.put(new SimpleTable("frank")).get();
3137
var bob = dbProd.put(new AnotherTable("bob")).get();
3238

33-
var t = assertThrows(CompletionException.class, () -> db.link(garry, bob.getClass(), bob.getId()).join());
34-
assertEquals(UnsupportedOperationException.class, t.getCause().getClass());
39+
db.link(garry, bob.getClass(), bob.getId()).get();
40+
dbProd.link(frank, bob.getClass(), bob.getId()).get();
41+
db.link(garry, john.getClass(), john.getId()).get();
42+
43+
john = db.get(AnotherTable.class, john.getId()).get();
44+
bob = db.get(AnotherTable.class, bob.getId()).get();
45+
46+
var johnLink = db.getLink(john, SimpleTable.class).get();
47+
Assertions.assertEquals("garry", johnLink.name);
48+
49+
var bobLinks = db.getLinks(bob, SimpleTable.class).get();
50+
51+
Assertions.assertEquals(1, bobLinks.size());
52+
bobLinks.sort(Comparator.comparing(a -> a.name));
53+
54+
Assertions.assertEquals("frank", bobLinks.get(0).name);
55+
}
56+
57+
@TestDatabase
58+
void testUpdate(final Database db) throws InterruptedException, ExecutionException {
59+
var garry = db.put(new SimpleTable("garry")).get();
60+
var john = db.put(new AnotherTable("john")).get();
61+
var bob = db.put(new AnotherTable("bob")).get();
62+
63+
db.link(garry, john.getClass(), john.getId()).get();
64+
db.link(garry, bob.getClass(), bob.getId()).get();
65+
66+
garry = db.get(SimpleTable.class, garry.getId()).get();
67+
john = db.get(AnotherTable.class, john.getId()).get();
68+
bob = db.get(AnotherTable.class, bob.getId()).get();
69+
70+
var bobLinks = db.getLink(bob, SimpleTable.class).get();
71+
Assertions.assertEquals("garry", bobLinks.name);
72+
73+
var garryLink = db.getLink(garry, AnotherTable.class).get();
74+
Assertions.assertEquals("bob", garryLink.getName());
75+
76+
var johnLink = db.getLinks(john, SimpleTable.class).get();
77+
Assertions.assertEquals(0, johnLink.size());
78+
}
79+
80+
@TestDatabase
81+
void testDelete(final Database db) throws InterruptedException, ExecutionException {
82+
var garry = db.put(new SimpleTable("garry")).get();
83+
var john = db.put(new AnotherTable("john")).get();
84+
85+
db.link(garry, john.getClass(), john.getId()).get();
86+
87+
Assertions
88+
.assertThrows(
89+
RuntimeException.class,
90+
() -> {
91+
db.delete(garry, false).get();
92+
}
93+
);
94+
95+
db.delete(garry, true).get();
96+
97+
var list = db.getLinks(john, SimpleTable.class).get();
98+
Assertions.assertEquals(0, list.size());
99+
}
100+
101+
@TestDatabase
102+
void testDeleteLinks(final Database db) throws InterruptedException, ExecutionException {
103+
var garry = db.put(new SimpleTable("garry")).get();
104+
var john = db.put(new AnotherTable("john")).get();
105+
106+
garry = db.link(garry, john.getClass(), john.getId()).get();
107+
108+
garry = db.deleteLinks(garry).get();
109+
110+
garry = db.get(SimpleTable.class, garry.getId()).get();
111+
112+
var list = db.getLinks(john, SimpleTable.class).get();
113+
Assertions.assertEquals(0, list.size());
114+
115+
var list2 = db.getLinks(garry, AnotherTable.class).get();
116+
Assertions.assertEquals(0, list2.size());
117+
}
118+
119+
120+
@TestDatabase
121+
void unlink(final Database db) throws InterruptedException, ExecutionException {
122+
var garry = db.put(new SimpleTable("garry")).get();
123+
var bob = db.put(new AnotherTable("bob")).get();
124+
125+
db.link(garry, bob.getClass(), bob.getId()).get();
126+
127+
garry = db.get(SimpleTable.class, garry.getId()).get();
128+
bob = db.get(AnotherTable.class, bob.getId()).get();
129+
130+
var bobLinks = db.getLink(bob, SimpleTable.class).get();
131+
Assertions.assertEquals("garry", bobLinks.name);
132+
133+
var garryLink = db.getLink(garry, AnotherTable.class).get();
134+
Assertions.assertEquals("bob", garryLink.getName());
135+
136+
db.unlink(garry, AnotherTable.class, bob.getId()).get();
137+
138+
var unlinked = db.getLink(garry, AnotherTable.class).get();
139+
Assertions.assertNull(unlinked);
35140
}
36141

37142
@Hash(SimplerHasher.class)

0 commit comments

Comments
 (0)