Skip to content

Commit

Permalink
Added ability to set TimeToLive on records created through a webhook (#7
Browse files Browse the repository at this point in the history
)
  • Loading branch information
mfriesen authored Feb 1, 2021
1 parent aa741fd commit 5083827
Show file tree
Hide file tree
Showing 36 changed files with 788 additions and 283 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ spotless {
}

allprojects {
version = '1.2.1'
version = '1.2.2'
group = 'com.formkiq.stacks'
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,10 @@ public DocumentItem apply(final Map<String, AttributeValue> map) {
if (map.containsKey("belongsToDocumentId")) {
item.setBelongsToDocumentId(map.get("belongsToDocumentId").s());
}

if (map.containsKey("TimeToLive")) {
item.setTimeToLive(map.get("TimeToLive").n());
}

return item;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,10 @@ public DynamicObject apply(final Map<String, AttributeValue> map) {
DynamicObject o = new DynamicObject(new HashMap<>());

for (Map.Entry<String, AttributeValue> e : map.entrySet()) {
o.put(e.getKey(), e.getValue().s());
String s = e.getValue().s();
String n = e.getValue().n();
String v = s == null && n != null ? n : s;
o.put(e.getKey(), v);
}

return o;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,13 @@ public interface DocumentItem {
*/
String getPath();

/**
* Get Time To Live.
*
* @return {@link String}
*/
String getTimeToLive();

/**
* Get User Id.
*
Expand Down Expand Up @@ -147,7 +154,14 @@ public interface DocumentItem {
* @param filepath {@link String}
*/
void setPath(String filepath);


/**
* Set Time To Live.
*
* @param ttl {@link String}
*/
void setTimeToLive(String ttl);

/**
* Set User Id.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ public class DocumentItemDynamoDb implements DocumentItem {
private List<DocumentItem> documents;
/** Belongs To Document Id. */
private String belongsToDocumentId;
/** Time to Live. */
@Reflectable
private String timeToLive;

/** constructor. */
public DocumentItemDynamoDb() {}
Expand All @@ -74,6 +77,11 @@ public DocumentItemDynamoDb(final String docid, final Date date, final String us
setUserId(username);
}

@Override
public String getBelongsToDocumentId() {
return this.belongsToDocumentId;
}

@Override
public String getChecksum() {
return this.checksum;
Expand All @@ -94,6 +102,11 @@ public String getDocumentId() {
return this.documentId;
}

@Override
public List<DocumentItem> getDocuments() {
return this.documents;
}

@Override
public Date getInsertedDate() {
return this.insertedDate != null ? (Date) this.insertedDate.clone() : null;
Expand All @@ -104,11 +117,21 @@ public String getPath() {
return this.path;
}

@Override
public String getTimeToLive() {
return this.timeToLive;
}

@Override
public String getUserId() {
return this.userId;
}

@Override
public void setBelongsToDocumentId(final String id) {
this.belongsToDocumentId = id;
}

@Override
public void setChecksum(final String etag) {
this.checksum = etag;
Expand All @@ -129,6 +152,11 @@ public void setDocumentId(final String id) {
this.documentId = id;
}

@Override
public void setDocuments(final List<DocumentItem> objects) {
this.documents = objects;
}

@Override
public void setInsertedDate(final Date date) {
this.insertedDate = date != null ? (Date) date.clone() : null;
Expand All @@ -139,6 +167,11 @@ public void setPath(final String filepath) {
this.path = filepath;
}

@Override
public void setTimeToLive(final String ttl) {
this.timeToLive = ttl;
}

@Override
public void setUserId(final String username) {
this.userId = username;
Expand All @@ -148,24 +181,4 @@ public void setUserId(final String username) {
public String toString() {
return "documentId=" + this.documentId + ",inserteddate=" + this.insertedDate;
}

@Override
public String getBelongsToDocumentId() {
return this.belongsToDocumentId;
}

@Override
public List<DocumentItem> getDocuments() {
return this.documents;
}

@Override
public void setBelongsToDocumentId(final String id) {
this.belongsToDocumentId = id;
}

@Override
public void setDocuments(final List<DocumentItem> objects) {
this.documents = objects;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ private DynamicDocumentItem convert(final DocumentItem item) {
map.put("path", item.getPath());
map.put("userId", item.getUserId());
map.put("belongsToDocumentId", item.getBelongsToDocumentId());
map.put("TimeToLive", item.getTimeToLive());

return new DynamicDocumentItem(map);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,9 @@ public interface DocumentService {
* @param siteId Optional Grouping siteId
* @param documentId {@link String}
* @param tags {@link Collection} {@link DocumentTag}
* @param timeToLive {@link String}
*/
void addTags(String siteId, String documentId, Collection<DocumentTag> tags);
void addTags(String siteId, String documentId, Collection<DocumentTag> tags, String timeToLive);

/**
* Delete Document.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public DocumentServiceImpl(final DynamoDbConnectionBuilder builder, final String

@Override
public void addTags(final String siteId, final String documentId,
final Collection<DocumentTag> tags) {
final Collection<DocumentTag> tags, final String timeToLive) {

if (tags != null) {
Predicate<DocumentTag> predicate = tag -> DocumentTagType.SYSTEMDEFINED.equals(tag.getType())
Expand All @@ -109,7 +109,14 @@ public void addTags(final String siteId, final String documentId,
DocumentTagToAttributeValueMap mapper =
new DocumentTagToAttributeValueMap(this.df, siteId, documentId);

List<Put> putitems = tags.stream().filter(predicate).map(mapper)
List<Map<String, AttributeValue>> valueList =
tags.stream().filter(predicate).map(mapper).collect(Collectors.toList());

if (timeToLive != null) {
valueList.forEach(v -> addN(v, "TimeToLive", timeToLive));
}

List<Put> putitems = valueList.stream()
.map(values -> Put.builder().tableName(this.documentTableName).item(values).build())
.collect(Collectors.toList());

Expand Down Expand Up @@ -814,9 +821,10 @@ private Map<String, AttributeValue> save(final Map<String, AttributeValue> value
* @param siteId DynamoDB PK siteId
* @param document {@link DocumentItem}
* @param saveGsi1 boolean
* @param timeToLive {@link String}
*/
private void saveDocument(final Map<String, AttributeValue> keys, final String siteId,
final DocumentItem document, final boolean saveGsi1) {
final DocumentItem document, final boolean saveGsi1, final String timeToLive) {

Date insertedDate = document.getInsertedDate();
String shortdate = insertedDate != null ? this.yyyymmddFormat.format(insertedDate) : null;
Expand Down Expand Up @@ -851,6 +859,10 @@ private void saveDocument(final Map<String, AttributeValue> keys, final String s
if (document.getBelongsToDocumentId() != null) {
addS(pkvalues, "belongsToDocumentId", document.getBelongsToDocumentId());
}

if (timeToLive != null) {
addN(pkvalues, "TimeToLive", timeToLive);
}

save(pkvalues);
}
Expand All @@ -863,12 +875,14 @@ private void saveDocument(final Map<String, AttributeValue> keys, final String s
* @param document {@link DocumentItem}
* @param tags {@link Collection} {@link DocumentTag}
* @param saveGsi1 boolean
* @param timeToLive {@link String}
*/
private void saveDocument(final Map<String, AttributeValue> keys, final String siteId,
final DocumentItem document, final Collection<DocumentTag> tags, final boolean saveGsi1) {
final DocumentItem document, final Collection<DocumentTag> tags, final boolean saveGsi1,
final String timeToLive) {
// TODO save Document/Tags inside transaction.
saveDocument(keys, siteId, document, saveGsi1);
addTags(siteId, document.getDocumentId(), tags);
saveDocument(keys, siteId, document, saveGsi1, timeToLive);
addTags(siteId, document.getDocumentId(), tags, timeToLive);

if (saveGsi1) {
saveDocumentDate(document);
Expand All @@ -879,7 +893,7 @@ private void saveDocument(final Map<String, AttributeValue> keys, final String s
public void saveDocument(final String siteId, final DocumentItem document,
final Collection<DocumentTag> tags) {
Map<String, AttributeValue> keys = keysDocument(siteId, document.getDocumentId());
saveDocument(keys, siteId, document, tags, true);
saveDocument(keys, siteId, document, tags, true, null);
}

/**
Expand Down Expand Up @@ -994,7 +1008,7 @@ public DocumentItem saveDocumentItemWithTag(final String siteId, final DynamicDo

boolean saveGsi1 = doc.getBelongsToDocumentId() == null;
Map<String, AttributeValue> keys = keysDocument(siteId, item.getDocumentId());
saveDocument(keys, siteId, item, tags, saveGsi1);
saveDocument(keys, siteId, item, tags, saveGsi1, doc.getString("TimeToLive"));

List<DynamicObject> documents = doc.getList("documents");
for (DynamicObject subdoc : documents) {
Expand All @@ -1013,14 +1027,14 @@ public DocumentItem saveDocumentItemWithTag(final String siteId, final DynamicDo
// save child document
keys =
keysDocument(siteId, item.getDocumentId(), Optional.of(subdoc.getString("documentId")));
saveDocument(keys, siteId, dockey, null, false);
saveDocument(keys, siteId, dockey, null, false, doc.getString("TimeToLive"));

List<DynamicObject> doctags = subdoc.getList("tags");
tags = doctags.stream().map(t -> new DynamicObjectToDocumentTag().apply(t))
.collect(Collectors.toList());

keys = keysDocument(siteId, subdoc.getString("documentId"));
saveDocument(keys, siteId, document, tags, false);
saveDocument(keys, siteId, document, tags, false, doc.getString("TimeToLive"));
}

return item;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@ public DynamicDocumentItem(final Map<String, Object> map) {
super(map);
}

@Override
public String getBelongsToDocumentId() {
return getString("belongsToDocumentId");
}

@Override
public String getChecksum() {
return getString("checksum");
Expand All @@ -68,6 +73,13 @@ public String getDocumentId() {
return getString("documentId");
}

@Override
public List<DocumentItem> getDocuments() {
List<DynamicObject> list = getList("documents");
return list.stream().map(o -> new DynamicObjectToDocumentItem().apply(o))
.collect(Collectors.toList());
}

@Override
public Date getInsertedDate() {
return getDate("insertedDate");
Expand All @@ -78,11 +90,21 @@ public String getPath() {
return getString("path");
}

@Override
public String getTimeToLive() {
return getString("TimeToLive");
}

@Override
public String getUserId() {
return getString("userId");
}

@Override
public void setBelongsToDocumentId(final String documentId) {
put("belongsToDocumentId", documentId);
}

@Override
public void setChecksum(final String checksum) {
put("checksum", checksum);
Expand All @@ -104,40 +126,28 @@ public void setDocumentId(final String documentId) {
}

@Override
public void setInsertedDate(final Date date) {
put("insertedDate", date);
}

@Override
public void setPath(final String path) {
put("path", path);
}
public void setDocuments(final List<DocumentItem> list) {
put("documents", list);

@Override
public void setUserId(final String userId) {
put("userId", userId);
}

@Override
public String getBelongsToDocumentId() {
return getString("belongsToDocumentId");
public void setInsertedDate(final Date date) {
put("insertedDate", date);
}

@Override
public List<DocumentItem> getDocuments() {
List<DynamicObject> list = getList("documents");
return list.stream().map(o -> new DynamicObjectToDocumentItem().apply(o))
.collect(Collectors.toList());
public void setPath(final String path) {
put("path", path);
}

@Override
public void setBelongsToDocumentId(final String documentId) {
put("belongsToDocumentId", documentId);
public void setTimeToLive(final String ttl) {
put("TimeToLive", ttl);
}

@Override
public void setDocuments(final List<DocumentItem> list) {
put("documents", list);

public void setUserId(final String userId) {
put("userId", userId);
}
}
Loading

0 comments on commit 5083827

Please sign in to comment.