Skip to content

Commit fc185d4

Browse files
committed
Issue #192 - WIP
1 parent 03c017d commit fc185d4

File tree

4 files changed

+176
-1
lines changed

4 files changed

+176
-1
lines changed

src/main/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryCriteria.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ protected void applySortIfSpecified(QueryRequest queryRequest, List<String> perm
181181
sortAlreadySet = true;
182182
} else {
183183
throw new UnsupportedOperationException(
184-
"Sorting only possible by " + permittedPropertyNames + " for the criteria specified");
184+
"Sorting only possible by " + permittedPropertyNames + " for the criteria specified and not for " + order.getProperty());
185185
}
186186
}
187187
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package org.socialsignin.spring.data.dynamodb.core;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNotEquals;
5+
import static org.springframework.test.context.TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS;
6+
7+
import java.time.LocalDateTime;
8+
import java.util.Random;
9+
10+
import org.junit.Ignore;
11+
import org.junit.Test;
12+
import org.junit.runner.RunWith;
13+
import org.socialsignin.spring.data.dynamodb.domain.sample.Feed;
14+
import org.socialsignin.spring.data.dynamodb.domain.sample.FeedPagingRepository;
15+
import org.socialsignin.spring.data.dynamodb.domain.sample.FeedUserRepository;
16+
import org.socialsignin.spring.data.dynamodb.domain.sample.User;
17+
import org.socialsignin.spring.data.dynamodb.repository.config.EnableDynamoDBRepositories;
18+
import org.socialsignin.spring.data.dynamodb.utils.DynamoDBLocalResource;
19+
import org.socialsignin.spring.data.dynamodb.utils.DynamoDBResource;
20+
import org.socialsignin.spring.data.dynamodb.utils.TableCreationListener;
21+
import org.socialsignin.spring.data.dynamodb.utils.TableCreationListener.DynamoDBCreateTable;
22+
import org.springframework.beans.factory.annotation.Autowired;
23+
import org.springframework.context.annotation.Configuration;
24+
import org.springframework.data.domain.Page;
25+
import org.springframework.data.domain.PageRequest;
26+
import org.springframework.data.domain.Sort;
27+
import org.springframework.data.domain.Sort.Direction;
28+
import org.springframework.test.context.ContextConfiguration;
29+
import org.springframework.test.context.TestExecutionListeners;
30+
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
31+
32+
@RunWith(SpringJUnit4ClassRunner.class)
33+
@ContextConfiguration(classes = {SortPageableIT.TestAppConfig.class, DynamoDBLocalResource.class})
34+
@TestExecutionListeners(listeners = TableCreationListener.class, mergeMode = MERGE_WITH_DEFAULTS)
35+
@DynamoDBCreateTable(entityClasses = {Feed.class})
36+
public class SortPageableIT {
37+
private final Random r = new Random();
38+
39+
@Configuration
40+
@EnableDynamoDBRepositories(basePackages = "org.socialsignin.spring.data.dynamodb.domain.sample")
41+
public static class TestAppConfig {
42+
}
43+
44+
45+
@Autowired
46+
FeedPagingRepository feedPagingRepository;
47+
48+
private Feed createFeed(String message) {
49+
Feed retValue = new Feed();
50+
retValue.setUserIdx(r.nextInt());
51+
retValue.setPaymentType(r.nextInt());
52+
retValue.setMessage(message);
53+
retValue.setRegDate(LocalDateTime.now());
54+
return retValue;
55+
}
56+
57+
@Test
58+
public void feed_test() {
59+
feedPagingRepository.save(createFeed("not yet me"));
60+
feedPagingRepository.save(createFeed("me"));
61+
feedPagingRepository.save(createFeed("not me"));
62+
feedPagingRepository.save(createFeed("me"));
63+
feedPagingRepository.save(createFeed("also not me"));
64+
65+
PageRequest pageable = PageRequest.of(0, 10);
66+
67+
Page<Feed> actuals = feedPagingRepository.findAllByMessageOrderByRegDateDesc("me", pageable);
68+
assertEquals(2, actuals.getTotalElements());
69+
70+
for (Feed actual : actuals) {
71+
assertNotEquals(0, actual.getPaymentType());
72+
assertNotEquals(0, actual.getUserIdx());
73+
}
74+
75+
}
76+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package org.socialsignin.spring.data.dynamodb.domain.sample;
2+
3+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute;
4+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAutoGeneratedKey;
5+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
6+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexHashKey;
7+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexRangeKey;
8+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable;
9+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverted;
10+
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverter;
11+
import java.time.LocalDateTime;
12+
13+
@DynamoDBTable(tableName = "gz_feed")
14+
public class Feed {
15+
private String idx;
16+
private int userIdx;
17+
private String message;
18+
private int paymentType;
19+
private LocalDateTime regDate;
20+
21+
@DynamoDBHashKey
22+
@DynamoDBAutoGeneratedKey
23+
public String getIdx() {
24+
return idx;
25+
}
26+
27+
@DynamoDBAttribute
28+
public int getUserIdx() {
29+
return userIdx;
30+
}
31+
32+
@DynamoDBAttribute
33+
@DynamoDBIndexHashKey(globalSecondaryIndexName = "aaa")
34+
public String getMessage() {
35+
return message;
36+
}
37+
38+
//@DynamoDBIndexRangeKey(attributeName = "PaymentType", globalSecondaryIndexName = "aaa")
39+
@DynamoDBAttribute
40+
public int getPaymentType() {
41+
return paymentType;
42+
}
43+
44+
@DynamoDBTypeConverted(converter = LocalDateTimeConverter.class)
45+
@DynamoDBAttribute
46+
@DynamoDBIndexRangeKey(globalSecondaryIndexName = "aaa")
47+
public LocalDateTime getRegDate() {
48+
return regDate;
49+
}
50+
51+
public void setIdx(String idx) {
52+
this.idx = idx;
53+
}
54+
55+
public void setUserIdx(int userIdx) {
56+
this.userIdx = userIdx;
57+
}
58+
59+
public void setMessage(String message) {
60+
this.message = message;
61+
}
62+
63+
public void setPaymentType(int paymentType) {
64+
this.paymentType = paymentType;
65+
}
66+
67+
public void setRegDate(LocalDateTime regDate) {
68+
this.regDate = regDate;
69+
}
70+
71+
static public class LocalDateTimeConverter implements
72+
DynamoDBTypeConverter<String, LocalDateTime> {
73+
74+
@Override
75+
public String convert( final LocalDateTime time ) {
76+
77+
return time.toString();
78+
}
79+
80+
@Override
81+
public LocalDateTime unconvert( final String stringValue ) {
82+
83+
return LocalDateTime.parse(stringValue);
84+
}
85+
}
86+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.socialsignin.spring.data.dynamodb.domain.sample;
2+
3+
import org.socialsignin.spring.data.dynamodb.repository.DynamoDBPagingAndSortingRepository;
4+
import org.socialsignin.spring.data.dynamodb.repository.EnableScan;
5+
import org.socialsignin.spring.data.dynamodb.repository.EnableScanCount;
6+
import org.springframework.data.domain.Page;
7+
import org.springframework.data.domain.Pageable;
8+
9+
@EnableScan
10+
@EnableScanCount
11+
public interface FeedPagingRepository extends DynamoDBPagingAndSortingRepository<Feed, String> {
12+
Page<Feed> findAllByMessageOrderByRegDateDesc(String message, Pageable pageable);
13+
}

0 commit comments

Comments
 (0)