Skip to content

Commit

Permalink
активные теги в ленте форума считаем с учетом фильтра
Browse files Browse the repository at this point in the history
  • Loading branch information
maxcom committed Aug 12, 2023
1 parent f632b94 commit 593d7a1
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/main/scala/ru/org/linux/group/GroupController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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))))
}

Expand Down
25 changes: 20 additions & 5 deletions src/main/scala/ru/org/linux/tag/TagService.scala
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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

/**
* Получение идентификационного номера тега по названию.
*
Expand Down Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down

0 comments on commit 593d7a1

Please sign in to comment.