Search in sources :

Example 6 with Config

use of com.erudika.para.core.utils.Config in project scoold by Erudika.

the class Post method updateTags.

public void updateTags(List<String> oldTags, List<String> newTags) {
    List<String> deleteUs = new LinkedList<>();
    List<Tag> updateUs = new LinkedList<>();
    Map<String, Tag> oldTagz = Optional.ofNullable(oldTags).orElse(Collections.emptyList()).stream().map(t -> new Tag(getTagString(t))).distinct().collect(Collectors.toMap(t -> t.getId(), t -> t));
    Map<String, Tag> newTagz = Optional.ofNullable(newTags).orElse(Collections.emptyList()).stream().map(t -> new Tag(getTagString(t))).distinct().collect(Collectors.toMap(t -> t.getId(), t -> t));
    Map<String, Tag> existingTagz = client().readAll(Stream.concat(oldTagz.keySet().stream(), newTagz.keySet().stream()).distinct().collect(Collectors.toList())).stream().collect(Collectors.toMap(t -> t.getId(), t -> (Tag) t));
    // add newly created tags
    client().createAll(newTagz.values().stream().filter(t -> {
        t.setCount(1);
        return !existingTagz.containsKey(t.getId());
    }).collect(Collectors.toList()));
    // increment or decrement the count of the rest
    existingTagz.values().forEach(t -> {
        if (!oldTagz.containsKey(t.getId()) && newTagz.containsKey(t.getId())) {
            t.setCount(t.getCount() + 1);
            updateUs.add(t);
        } else if (oldTagz.containsKey(t.getId()) && (newTags == null || !newTagz.containsKey(t.getId()))) {
            t.setCount(t.getCount() - 1);
            if (t.getCount() <= 0) {
                // check if actual count is different
                int c = client().getCount(Utils.type(Question.class), Collections.singletonMap(Config._TAGS, t.getTag())).intValue();
                if (c <= 1) {
                    deleteUs.add(t.getId());
                } else {
                    t.setCount(c);
                }
            } else {
                updateUs.add(t);
            }
        }
    // else: count remains unchanged
    });
    client().updateAll(updateUs);
    client().deleteAll(deleteUs);
    int tagsLimit = Math.min(ScooldServer.MAX_TAGS_PER_POST, 100);
    setTags(newTagz.values().stream().limit(tagsLimit).map(t -> t.getTag()).collect(Collectors.toList()));
}
Also used : Sysprop(com.erudika.para.core.Sysprop) Size(javax.validation.constraints.Size) NotBlank(javax.validation.constraints.NotBlank) ParaClient(com.erudika.para.client.ParaClient) Pager(com.erudika.para.core.utils.Pager) StringUtils(org.apache.commons.lang3.StringUtils) ArrayList(java.util.ArrayList) NotEmpty(javax.validation.constraints.NotEmpty) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) JsonIgnore(com.fasterxml.jackson.annotation.JsonIgnore) LinkedList(java.util.LinkedList) Config(com.erudika.para.core.utils.Config) ScooldUtils(com.erudika.scoold.utils.ScooldUtils) ParaObject(com.erudika.para.core.ParaObject) Iterator(java.util.Iterator) User(com.erudika.para.core.User) Collectors(java.util.stream.Collectors) Utils(com.erudika.para.core.utils.Utils) Objects(java.util.Objects) List(java.util.List) Stream(java.util.stream.Stream) ScooldServer(com.erudika.scoold.ScooldServer) Tag(com.erudika.para.core.Tag) Optional(java.util.Optional) Stored(com.erudika.para.core.annotations.Stored) Collections(java.util.Collections) Tag(com.erudika.para.core.Tag) LinkedList(java.util.LinkedList)

Aggregations

ParaClient (com.erudika.para.client.ParaClient)6 Config (com.erudika.para.core.utils.Config)6 Pager (com.erudika.para.core.utils.Pager)6 Utils (com.erudika.para.core.utils.Utils)6 ParaObject (com.erudika.para.core.ParaObject)5 Tag (com.erudika.para.core.Tag)5 Profile (com.erudika.scoold.core.Profile)5 Sysprop (com.erudika.para.core.Sysprop)4 User (com.erudika.para.core.User)4 Question (com.erudika.scoold.core.Question)4 ScooldUtils (com.erudika.scoold.utils.ScooldUtils)4 Collections (java.util.Collections)4 List (java.util.List)4 Webhook (com.erudika.para.core.Webhook)3 ParaObjectUtils (com.erudika.para.core.utils.ParaObjectUtils)3 SIGNINLINK (com.erudika.scoold.ScooldServer.SIGNINLINK)3 LinkedList (java.util.LinkedList)3 Map (java.util.Map)3 Optional (java.util.Optional)3 Collectors (java.util.stream.Collectors)3