use of com.android.example.devsummit.archdemo.vo.Post in project dev-summit-architecture-demo by yigit.
the class FetchFeedJob method handleResponse.
@Nullable
private Post handleResponse(FeedResponse body) {
// not save their post so we don't care.
if (body.getUsers() != null) {
mUserModel.saveAll(body.getUsers());
}
Post oldest = null;
if (body.getPosts() != null) {
mPostModel.saveAll(body.getPosts());
long since = 0;
for (Post post : body.getPosts()) {
if (post.getCreated() > since) {
since = post.getCreated();
}
if (oldest == null || oldest.getCreated() > post.getCreated()) {
oldest = post;
}
}
if (since > 0) {
mFeedModel.saveFeedTimestamp(since, mUserId);
}
}
return oldest;
}
use of com.android.example.devsummit.archdemo.vo.Post in project dev-summit-architecture-demo by yigit.
the class SaveNewPostJob method onAdded.
@Override
public void onAdded() {
Post post = new Post();
post.setText(mText);
post.setId(mFeedModel.generateIdForNewLocalPost());
post.setClientId(mClientId);
post.setUserId(mUserId);
post.setPending(true);
// make sure whatever time we put here is greater / eq to last known time in database.
// this will work around issues related to client's time.
// this time is temporary anyways as it will be overriden when it is synched to server
long feedTs = mFeedModel.getLatestTimestamp(null);
long now = System.currentTimeMillis();
post.setCreated(Math.max(feedTs, now) + 1);
L.d("assigned timestamp %s to the post", post.getCreated());
mPostModel.save(post);
mEventBus.post(new NewPostEvent(post));
}
use of com.android.example.devsummit.archdemo.vo.Post in project dev-summit-architecture-demo by yigit.
the class SaveNewPostJob method onRun.
@Override
public void onRun() throws Throwable {
Post post = mPostModel.loadByClientIdAndUserId(mClientId, mUserId);
if (post != null && !post.isPending()) {
// looks like post probably arrived from somewhere else. Good Job!
mEventBus.post(new UpdatedPostEvent(post));
return;
}
Response<NewPostResponse> response = mApiService.sendPost(mText, mClientId, mUserId).execute();
if (response.isSuccess()) {
NewPostResponse body = response.body();
body.getPost().setPending(false);
mPostModel.save(body.getPost());
mUserModel.save(body.getUser());
mEventBus.post(new UpdatedPostEvent(body.getPost()));
} else {
throw new NetworkException(response.code());
}
}
use of com.android.example.devsummit.archdemo.vo.Post in project dev-summit-architecture-demo by yigit.
the class FetchFeedJobTest method testRun.
@Test
public void testRun() throws Throwable {
FeedResponse response = new FeedResponse();
List<User> users = Arrays.asList(createDummyUser(), createDummyUser());
List<Post> posts = Arrays.asList(createDummyPost(users.get(0).getId()), createDummyPost(users.get(0).getId()), createDummyPost(users.get(1).getId()));
posts.get(0).setCreated(10);
posts.get(1).setCreated(11);
posts.get(2).setCreated(12);
response.setPosts(posts);
response.setUsers(users);
FetchFeedJob job = new FetchFeedJob(BaseJob.BACKGROUND, 101L);
when(mApiService.userFeed(101L, 0L)).thenReturn(createCall(response));
job.inject(getTestComponent());
job.onRun();
FetchedFeedEvent event = mLoggingBus.findEvent(FetchedFeedEvent.class);
assertThat(event, notNullValue());
assertThat(event.isSuccess(), is(true));
assertThat(event.getUserId(), is(101L));
// TODO Better to mock the models and verify the save calls so that this test wont
// be effected by model failures.
assertThat(mUserModel.load(users.get(0).getId()), notNullValue());
assertThat(mUserModel.load(users.get(1).getId()), notNullValue());
assertThat(mPostModel.load(posts.get(0).getId()), notNullValue());
assertThat(mPostModel.load(posts.get(1).getId()), notNullValue());
assertThat(mPostModel.load(posts.get(2).getId()), notNullValue());
assertThat(mFeedModel.getLatestTimestamp(101L), is(12L));
}
use of com.android.example.devsummit.archdemo.vo.Post in project dev-summit-architecture-demo by yigit.
the class FeedModelTest method loadFeed.
@Test
public void loadFeed() {
NewPostResponse response = new NewPostResponse();
Post post = TestUtil.createDummyPost();
User user = TestUtil.createDummyUser();
post.setUserId(user.getId());
response.setUser(user);
response.setPost(post);
mPostModel.save(post);
mUserModel.save(user);
assertThat(mUserModel.load(user.getId()), notNullValue());
assertThat(mPostModel.load(post.getId()), notNullValue());
List<FeedItem> feed = mFeedModel.loadFeed(0, user.getId());
assertThat(feed, notNullValue());
assertThat(feed.size(), is(1));
FeedItem loaded = feed.get(0);
assertThat(loaded.getUser().getId(), is(user.getId()));
assertThat(loaded.getPost().getId(), is(post.getId()));
}
Aggregations