@Override public void addTag(@Nonnull OWLEntity entity, @Nonnull TagId tagId) { try { writeLock.lock(); Query<EntityTags> query = tagWithProjectIdAndEntity(projectId, entity); UpdateOperations<EntityTags> updateOps = datastore.createUpdateOperations(EntityTags.class); updateOps.addToSet(TAGS, tagId); datastore.update(query, updateOps); } finally { writeLock.unlock(); } }
@Override public void addApiKey(@Nonnull UserId userId, @Nonnull ApiKeyRecord record) { UserApiKeys existingKeys = datastore.createQuery(UserApiKeys.class) .field(USER_ID).equal(userId) .get(); if (existingKeys == null) { datastore.save(new UserApiKeys(userId, singletonList(record))); } else { Optional<ApiKeyRecord> existingKeyRecord = existingKeys.getApiKeys().stream() .filter(r -> r.getApiKeyId().equals(record.getApiKeyId())) .findFirst(); existingKeyRecord.ifPresent(existing -> dropApiKey(userId, existing.getApiKeyId())); UpdateOperations<UserApiKeys> updateOps = datastore.createUpdateOperations(UserApiKeys.class) .addToSet(API_KEYS, record); datastore.update(existingKeys, updateOps); } }