diff options
Diffstat (limited to 'juick-commands/src/main/java/com/juick/command/SubscribeTag.java')
-rw-r--r-- | juick-commands/src/main/java/com/juick/command/SubscribeTag.java | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/juick-commands/src/main/java/com/juick/command/SubscribeTag.java b/juick-commands/src/main/java/com/juick/command/SubscribeTag.java new file mode 100644 index 00000000..ce9ebc20 --- /dev/null +++ b/juick-commands/src/main/java/com/juick/command/SubscribeTag.java @@ -0,0 +1,58 @@ +package com.juick.command; + +import com.juick.Tag; +import com.juick.User; +import com.juick.server.protocol.ProtocolListener; +import com.juick.service.SubscriptionService; +import com.juick.service.TagService; +import lombok.Getter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.regex.Pattern; + +/** + * @author ma1uta + */ +@Component +@Getter +public class SubscribeTag extends MultiArgsCommand { + + private static final Pattern PATTERN = Pattern.compile("^([su])\\s+\\*(\\S+)$", Pattern.CASE_INSENSITIVE); + + private final TagService tagService; + private final SubscriptionService subscriptionService; + + @Autowired + public SubscribeTag(TagService tagService, SubscriptionService subscriptionService) { + this.tagService = tagService; + this.subscriptionService = subscriptionService; + } + + @Override + public Pattern pattern() { + return PATTERN; + } + + @Override + public String help() { + return "S *tag - subscribe to tag\nU *tag - unsubscribe from tag"; + } + + @Override + protected String execute(User sender, ProtocolListener protocolListener, String... arguments) { + boolean subscribe = arguments[0].equalsIgnoreCase("s"); + Tag tag = getTagService().getTag(arguments[1], true); + if (subscribe) { + if (getSubscriptionService().subscribeTag(sender, tag)) { + return "Subscribed"; + } + } else { + if (getSubscriptionService().unSubscribeTag(sender, tag)) { + return "Unsubscribed from " + tag.getName(); + } + return "You was not subscribed to " + tag.getName(); + } + return "Error"; + } +} |