Skip to content

Commit 2433068

Browse files
committed
WIP
1 parent 4748ee5 commit 2433068

File tree

4 files changed

+74
-7
lines changed

4 files changed

+74
-7
lines changed

src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/HashRangeKeyIT.java

+28-7
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.springframework.test.context.ContextConfiguration;
2222
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
2323

24+
import java.util.List;
2425
import java.util.Optional;
2526
import java.util.UUID;
2627

@@ -37,20 +38,28 @@
3738
public class HashRangeKeyIT {
3839

3940
@Autowired
40-
PlaylistRepository playlistRepository;
41+
private PlaylistRepository playlistRepository;
4142

42-
@Test
43-
public void runCrudOperations() {
44-
final String displayName = "displayName" + UUID.randomUUID().toString();
43+
private Playlist generatePlaylist(String genre, String displayName) {
4544
final String userName = "userName-" + UUID.randomUUID().toString();
4645
final String playlistName = "playlistName-" + UUID.randomUUID().toString();
4746
PlaylistId id = new PlaylistId(userName, playlistName);
4847

49-
Optional<Playlist> actual = playlistRepository.findById(id);
50-
assertFalse(actual.isPresent());
51-
5248
Playlist playlist = new Playlist(id);
5349
playlist.setDisplayName(displayName);
50+
playlist.setGenre(genre);
51+
52+
return playlist;
53+
}
54+
55+
@Test
56+
public void runCrudOperations() {
57+
String displayName = "displayName" + UUID.randomUUID().toString();
58+
Playlist playlist = generatePlaylist("genre-" + UUID.randomUUID().toString(), displayName);
59+
PlaylistId id = playlist.getId();
60+
61+
Optional<Playlist> actual = playlistRepository.findById(id);
62+
assertFalse(actual.isPresent());
5463

5564
playlistRepository.save(playlist);
5665

@@ -60,4 +69,16 @@ public void runCrudOperations() {
6069
assertEquals(id.getPlaylistName(), actual.get().getPlaylistName());
6170
assertEquals(id.getUserName(), actual.get().getUserName());
6271
}
72+
73+
@Test
74+
public void testGsiSharedRange() {
75+
final String GENRE = "GENRE";
76+
playlistRepository.save(generatePlaylist(GENRE, "1"));
77+
playlistRepository.save(generatePlaylist(GENRE, "2"));
78+
playlistRepository.save(generatePlaylist(GENRE, "3"));
79+
80+
List<Playlist> actual = playlistRepository.findByGenreAndPlaylistNameBetween(GENRE, "2", "3");
81+
82+
assertEquals(2, actual.size());
83+
}
6384
}

src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/Playlist.java

+19
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717

1818
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
1919
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
20+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIgnore;
21+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexHashKey;
22+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexRangeKey;
2023
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey;
2124
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
2225
import org.springframework.data.annotation.Id;
@@ -27,13 +30,19 @@ public class Playlist {
2730
@Id
2831
private PlaylistId playlistId;
2932
private String displayName;
33+
private String genre;
3034

3135
public Playlist() {
3236
}
3337

3438
public Playlist(PlaylistId playlistId) {
3539
this.playlistId = playlistId;
3640
}
41+
42+
@DynamoDBIgnore
43+
public PlaylistId getId() {
44+
return this.playlistId;
45+
}
3746

3847
@DynamoDBAttribute(attributeName="DisplayName")
3948
public String getDisplayName() {
@@ -57,6 +66,7 @@ public void setUserName(String userName) {
5766
}
5867

5968
@DynamoDBRangeKey(attributeName = "PlaylistName")
69+
@DynamoDBIndexRangeKey(attributeName = "PlaylistName", globalSecondaryIndexName="Genre-PlaylistName-index")
6070
public String getPlaylistName() {
6171
return playlistId != null ? playlistId.getPlaylistName() : null;
6272
}
@@ -67,4 +77,13 @@ public void setPlaylistName(String playlistName) {
6777
}
6878
playlistId.setPlaylistName(playlistName);
6979
}
80+
81+
@DynamoDBIndexHashKey(attributeName = "Genre", globalSecondaryIndexName="Genre-PlaylistName-index")
82+
public String getGenre() {
83+
return this.genre;
84+
}
85+
86+
public void setGenre(String genre) {
87+
this.genre = genre;
88+
}
7089
}

src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/PlaylistRepository.java

+4
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,12 @@
1515
*/
1616
package org.socialsignin.spring.data.dynamodb.domain.sample;
1717

18+
import java.util.List;
19+
1820
import org.springframework.data.repository.CrudRepository;
1921

2022
public interface PlaylistRepository extends CrudRepository<Playlist, PlaylistId> {
2123

24+
List<Playlist> findByGenreAndPlaylistNameBetween(String genre, String startPlaylistName, String endPlaylistName);
25+
2226
}

src/test/resources/playlist_table.json

+23
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,29 @@
99
"AttributeType": "S"
1010
}
1111
],
12+
"GlobalSecondaryIndexes": [
13+
{
14+
"IndexName": "Genre-PlaylistName-index",
15+
"KeySchema": [
16+
{
17+
"AttributeName": "Genre",
18+
"KeyType": "HASH"
19+
},
20+
{
21+
"AttributeName": "PlaylistName",
22+
"KeyType": "RANGE"
23+
}
24+
],
25+
"Projection": {
26+
"NonKeyAttributes": [],
27+
"ProjectionType": "ALL"
28+
},
29+
"ProvisionedThroughput": {
30+
"ReadCapacityUnits": "10",
31+
"WriteCapacityUnits": "10"
32+
}
33+
}
34+
],
1235
"KeySchema": [
1336
{
1437
"AttributeName": "UserName",

0 commit comments

Comments
 (0)