From 593d7a1f77af73a7756bd9f8e155a8d036fa19d0 Mon Sep 17 00:00:00 2001 From: Maxim Valyanskiy Date: Sat, 12 Aug 2023 11:24:54 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D1=82=D0=B5=D0=B3=D0=B8=20=D0=B2=20=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B5=20=D1=84=D0=BE=D1=80=D1=83=D0=BC=D0=B0=20=D1=81?= =?UTF-8?q?=D1=87=D0=B8=D1=82=D0=B0=D0=B5=D0=BC=20=D1=81=20=D1=83=D1=87?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=BC=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ru/org/linux/group/GroupController.scala | 2 +- .../scala/ru/org/linux/tag/TagService.scala | 25 +++++++++++++++---- .../org/linux/topic/TopicListController.scala | 2 +- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/scala/ru/org/linux/group/GroupController.scala b/src/main/scala/ru/org/linux/group/GroupController.scala index da9d9c7acd..e08ff4bd25 100644 --- a/src/main/scala/ru/org/linux/group/GroupController.scala +++ b/src/main/scala/ru/org/linux/group/GroupController.scala @@ -133,7 +133,7 @@ class GroupController(groupDao: GroupDao, archiveDao: ArchiveDao, sectionService val firstPage = isFirstPage(offset) - val activeTagsF = tagService.getActiveTopTags(section, Some(group), deadline).map { tags => + val activeTagsF = tagService.getActiveTopTags(section, Some(group), None, deadline).map { tags => tags.map(tag => tag.copy(url = tag.url.map(_ => group.getUrl + "?tag=" + URLEncoder.encode(tag.name, StandardCharsets.UTF_8)))) } diff --git a/src/main/scala/ru/org/linux/tag/TagService.scala b/src/main/scala/ru/org/linux/tag/TagService.scala index bfffb2212a..b4c876810d 100644 --- a/src/main/scala/ru/org/linux/tag/TagService.scala +++ b/src/main/scala/ru/org/linux/tag/TagService.scala @@ -20,9 +20,9 @@ import com.sksamuel.elastic4s.ElasticDsl.* import com.sksamuel.elastic4s.{ElasticClient, ElasticDate} import com.typesafe.scalalogging.StrictLogging import org.springframework.stereotype.Service -import ru.org.linux.group.Group +import ru.org.linux.group.{Group, GroupDao} import ru.org.linux.search.ElasticsearchIndexService.{COLUMN_TOPIC_AWAITS_COMMIT, MessageIndex} -import ru.org.linux.section.Section +import ru.org.linux.section.{Section, SectionController, SectionService} import ru.org.linux.topic.TagTopicListController import ru.org.linux.util.RichFuture.RichFuture @@ -36,11 +36,16 @@ import scala.concurrent.duration.Deadline import scala.jdk.CollectionConverters.* @Service -class TagService(tagDao: TagDao, elastic: ElasticClient, actorSystem: ActorSystem) extends StrictLogging { +class TagService(tagDao: TagDao, elastic: ElasticClient, actorSystem: ActorSystem, + sectionService: SectionService, groupDao: GroupDao) extends StrictLogging { private implicit val akka: ActorSystem = actorSystem import ru.org.linux.tag.TagService.* + private val sectionForum: Section = sectionService.getSection(Section.SECTION_FORUM) + private val NonTechNames: Seq[String] = + groupDao.getGroups(sectionForum).asScala.filter(g => SectionController.NonTech.contains(g.getId)).map(_.getUrlName).toSeq + /** * Получение идентификационного номера тега по названию. * @@ -103,17 +108,27 @@ class TagService(tagDao: TagDao, elastic: ElasticClient, actorSystem: ActorSyste }).sorted.filterNot(_.name == tag) // filtering in query is broken in elastic4s-tcp 6.2.x } - def getActiveTopTags(section: Section, group: Option[Group], deadline: Deadline): Future[Seq[TagRef]] = { + def getActiveTopTags(section: Section, group: Option[Group], filter: Option[String], deadline: Deadline): Future[Seq[TagRef]] = { if (group.exists(g => g.getId == 4068)) { Future.successful(Seq.empty) } else { val groupFilter = group.map(g => termQuery("group", g.getUrlName)) + val additionalFilter = filter.collect { + case "tech" => + boolQuery() + .filter(termQuery("section", sectionForum.getUrlName)) + .not(termsQuery("section", NonTechNames)) + case "notalks" => + boolQuery() + .not(termQuery("section", "talks")) + } + val filters = Seq( termQuery("is_comment", "false"), termQuery("section", section.getUrlName), rangeQuery("postdate").gte("now/d-1y") - ) ++ groupFilter + ) ++ groupFilter ++ additionalFilter Future.successful(elastic).flatMap { _.execute { diff --git a/src/main/scala/ru/org/linux/topic/TopicListController.scala b/src/main/scala/ru/org/linux/topic/TopicListController.scala index 90018878ac..4ac7186cad 100644 --- a/src/main/scala/ru/org/linux/topic/TopicListController.scala +++ b/src/main/scala/ru/org/linux/topic/TopicListController.scala @@ -81,7 +81,7 @@ class TopicListController(sectionService: SectionService, topicListService: Topi checkRequestConditions(section, group) val activeTagsF = if (topicListForm.yearMonth.isEmpty) { - tagService.getActiveTopTags(section, group, deadline) + tagService.getActiveTopTags(section, group, topicListForm.filter, deadline) } else { Future.successful(Seq.empty) }