!7 concept PostedLine { S globalID = aGlobalIDUnlessLoading(); S channelID; S text; bool isImage; S context; // not null if post successful long posted; // timestamp - not 0 if post successful } cmodule GPostedLines > DynCRUD { // API // returns ID of entry S postingLine(S channelID, S text) { ret nu PostedLine(+channelID, +text).globalID; } S postingImage(S channelID, S imageURL) { ret nu PostedLine(+channelID, text := imageURL, isImage := true).globalID; } void donePosting(S postID, S context) { cset(conceptWhere PostedLine(globalID := postID), posted := now(), +context); } }