Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public static VersionedAspect getAspectFromLocalContext(DataFetchingEnvironment
Object localContext = environment.getLocalContext();
// if we have context & the version is 0, we should try to retrieve it from the fetched entity
// otherwise, we should just fetch the entity from the aspect resource
if (localContext == null && version == 0 || version == null) {
if (localContext != null && version == 0 || version == null) {
if (localContext instanceof Map) {
// de-register the prefetched aspect from local context. Since aspects will only
// ever be first-class properties of an entity type, local context will always
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,12 +91,22 @@ public Map<Urn, List<RecordTemplate>> getLatestAspects(@Nonnull final Set<Urn> u
return urnToAspects;
}

/*
* When a user tries to fetch a negative version, we want to index most recent to least recent snapshots.
* To do this, we want to fetch the maximum version and subtract the negative version from that. Since -1 represents
* the maximum version, we need to add 1 to the final result.
*/
private long calculateVersionNumber(@Nonnull final Urn urn, @Nonnull final String aspectName, @Nonnull long version) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add a preconditions.assert that version is indeed negative when passed into this method?

if (version < 0) {
return _entityDao.getMaxVersion(urn.toString(), aspectName) + version + 1;
}
return version;
}

@Override
@Nullable
public RecordTemplate getAspect(@Nonnull final Urn urn, @Nonnull final String aspectName, @Nonnull long version) {
if (version < 0) {
version = _entityDao.getMaxVersion(urn.toString(), aspectName) - version + 1;
}
version = calculateVersionNumber(urn, aspectName, version);
final EbeanAspectV2.PrimaryKey primaryKey = new EbeanAspectV2.PrimaryKey(urn.toString(), aspectName, version);
final Optional<EbeanAspectV2> maybeAspect = Optional.ofNullable(_entityDao.getAspect(primaryKey));
return maybeAspect
Expand All @@ -108,9 +118,7 @@ public RecordTemplate getAspect(@Nonnull final Urn urn, @Nonnull final String as
public VersionedAspect getVersionedAspect(@Nonnull Urn urn, @Nonnull String aspectName, long version) {
VersionedAspect result = new VersionedAspect();

if (version < 0) {
version = _entityDao.getMaxVersion(urn.toString(), aspectName) + version + 1;
}
version = calculateVersionNumber(urn, aspectName, version);

final EbeanAspectV2.PrimaryKey primaryKey = new EbeanAspectV2.PrimaryKey(urn.toString(), aspectName, version);
final Optional<EbeanAspectV2> maybeAspect = Optional.ofNullable(_entityDao.getAspect(primaryKey));
Expand Down