fix(gms): fixes for version aspect fetching (#2723)

This commit is contained in:
Gabe Lyons 2021-06-22 14:16:10 -07:00 committed by GitHub
parent 7171e97a48
commit 48061454ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 7 deletions

View File

@ -96,7 +96,7 @@ public class ResolverUtils {
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

View File

@ -91,12 +91,22 @@ public class EbeanEntityService extends EntityService {
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) {
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
@ -108,9 +118,7 @@ public class EbeanEntityService extends EntityService {
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));