Skip to content

Commit

Permalink
feat: my tasks filters
Browse files Browse the repository at this point in the history
  • Loading branch information
stepan662 committed Jul 29, 2024
1 parent 7bf8c80 commit d56655b
Show file tree
Hide file tree
Showing 21 changed files with 49 additions and 62 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,12 @@ package io.tolgee.api.v2.controllers
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import io.tolgee.dtos.request.task.*
import io.tolgee.dtos.request.translation.GetTranslationsParams
import io.tolgee.dtos.request.translation.TranslationFilters
import io.tolgee.hateoas.task.TaskModel
import io.tolgee.hateoas.task.TaskModelAssembler
import io.tolgee.hateoas.userAccount.UserAccountInProjectModel
import io.tolgee.hateoas.userAccount.UserAccountInProjectModelAssembler
import io.tolgee.model.task.Task
import io.tolgee.model.views.ExtendedUserAccountInProject
import io.tolgee.model.views.KeysScopeView
import io.tolgee.model.views.TaskScopeView
import io.tolgee.model.views.TaskWithScopeView
import io.tolgee.openApiDocs.OpenApiOrderExtension
import io.tolgee.security.ProjectHolder
Expand All @@ -22,12 +18,9 @@ import io.tolgee.service.TaskService
import io.tolgee.service.security.UserAccountService
import jakarta.validation.Valid
import org.springdoc.core.annotations.ParameterObject
import org.springframework.beans.propertyeditors.CustomCollectionEditor
import org.springframework.data.domain.PageRequest
import org.springframework.data.domain.Pageable
import org.springframework.data.web.PagedResourcesAssembler
import org.springframework.hateoas.PagedModel
import org.springframework.web.bind.WebDataBinder
import org.springframework.web.bind.annotation.*

@RestController
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import io.swagger.v3.oas.annotations.tags.Tag
import io.tolgee.dtos.request.task.TaskFilters
import io.tolgee.hateoas.task.TaskWithProjectModel
import io.tolgee.hateoas.task.TaskWithProjectModelAssembler
import io.tolgee.model.task.Task
import io.tolgee.model.views.TaskWithScopeView
import io.tolgee.security.authentication.AllowApiAccess
import io.tolgee.security.authentication.AuthenticationFacade
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ class V2LanguagesController(
@PathVariable("projectId") pathProjectId: Long?,
@ParameterObject @SortDefault("tag") pageable: Pageable,
@ParameterObject
filters: LanguageFilters
filters: LanguageFilters,
): PagedModel<LanguageModel> {
val data = languageService.getPaged(projectHolder.project.id, pageable, filters)
return pagedAssembler.toModel(data, languageModelAssembler)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ class ProjectsController(
pageable: Pageable,
@RequestParam("search") search: String?,
): PagedModel<ProjectModel> {
val projects = projectService.findPermittedInOrganizationPaged(pageable, search, filters=filters)
val projects = projectService.findPermittedInOrganizationPaged(pageable, search, filters = filters)
return arrayResourcesAssembler.toModel(projects, projectModelAssembler)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package io.tolgee.hateoas.task

import io.tolgee.hateoas.language.LanguageModel
import io.tolgee.hateoas.userAccount.SimpleUserAccountModel
import io.tolgee.hateoas.userAccount.UserAccountModel
import io.tolgee.model.enums.TaskState
import io.tolgee.model.enums.TaskType
import org.springframework.hateoas.RepresentationModel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ import io.tolgee.api.v2.controllers.TaskController
import io.tolgee.dtos.cacheable.LanguageDto
import io.tolgee.hateoas.language.LanguageModelAssembler
import io.tolgee.hateoas.userAccount.SimpleUserAccountModelAssembler
import io.tolgee.hateoas.userAccount.UserAccountModelAssembler
import io.tolgee.model.task.Task
import io.tolgee.model.views.TaskWithScopeView
import org.springframework.hateoas.server.mvc.RepresentationModelAssemblerSupport
import org.springframework.stereotype.Component
Expand All @@ -25,14 +23,14 @@ class TaskModelAssembler(
description = entity.description,
type = entity.type,
language =
entity.language.let {
languageModelAssembler.toModel(
LanguageDto.fromEntity(
it,
entity.project.baseLanguage?.id,
),
)
},
entity.language.let {
languageModelAssembler.toModel(
LanguageDto.fromEntity(
it,
entity.project.baseLanguage?.id,
),
)
},
dueDate = entity.dueDate?.time,
assignees = entity.assignees.map { simpleUserAccountModelAssembler.toModel(it) }.toMutableSet(),
author = entity.author?.let { simpleUserAccountModelAssembler.toModel(it) },
Expand All @@ -44,5 +42,4 @@ class TaskModelAssembler(
state = entity.state,
)
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package io.tolgee.hateoas.task
import io.tolgee.hateoas.language.LanguageModel
import io.tolgee.hateoas.project.SimpleProjectModel
import io.tolgee.hateoas.userAccount.SimpleUserAccountModel
import io.tolgee.hateoas.userAccount.UserAccountModel
import io.tolgee.model.enums.TaskState
import io.tolgee.model.enums.TaskType
import org.springframework.hateoas.RepresentationModel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ import io.tolgee.dtos.cacheable.LanguageDto
import io.tolgee.hateoas.language.LanguageModelAssembler
import io.tolgee.hateoas.project.SimpleProjectModelAssembler
import io.tolgee.hateoas.userAccount.SimpleUserAccountModelAssembler
import io.tolgee.hateoas.userAccount.UserAccountModelAssembler
import io.tolgee.model.task.Task
import io.tolgee.model.views.TaskWithScopeView
import org.springframework.hateoas.server.mvc.RepresentationModelAssemblerSupport
import org.springframework.stereotype.Component
Expand All @@ -20,22 +18,21 @@ class TaskWithProjectModelAssembler(
TaskController::class.java,
TaskWithProjectModel::class.java,
) {

override fun toModel(entity: TaskWithScopeView): TaskWithProjectModel {
return TaskWithProjectModel(
id = entity.id,
name = entity.name,
description = entity.description,
type = entity.type,
language =
entity.language.let {
languageModelAssembler.toModel(
LanguageDto.fromEntity(
it,
entity.project.baseLanguage?.id,
),
)
},
entity.language.let {
languageModelAssembler.toModel(
LanguageDto.fromEntity(
it,
entity.project.baseLanguage?.id,
),
)
},
dueDate = entity.dueDate?.time,
assignees = entity.assignees.map { simpleUserAccountModelAssembler.toModel(it) }.toMutableSet(),
author = entity.author?.let { simpleUserAccountModelAssembler.toModel(it) },
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.tolgee.repository

import io.tolgee.development.DbPopulatorReal
import io.tolgee.dtos.request.project.ProjectFilters
import io.tolgee.fixtures.generateUniqueString
import io.tolgee.model.OrganizationRole
import io.tolgee.model.Project
Expand Down Expand Up @@ -52,7 +53,12 @@ class ProjectRepositoryTest {
fun findAllPermittedPaged() {
val users = dbPopulatorReal.createUsersAndOrganizations()
dbPopulatorReal.createBase("No org project", users[3].username)
val result = projectRepository.findAllPermitted(users[3].id, PageRequest.of(0, 20, Sort.by(Sort.Order.asc("id"))))
val result =
projectRepository.findAllPermitted(
users[3].id,
PageRequest.of(0, 20, Sort.by(Sort.Order.asc("id"))),
filters = ProjectFilters(),
)
assertThat(result).hasSize(10)
assertThat(result.content[0].organizationOwner?.name).isNotNull
assertThat(result.content[8].organizationOwner?.slug).isNotNull
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class CursorUtilUnitTest {
mtProvider = null,
commentCount = 0,
unresolvedCommentCount = 1,
assignedTaskId = 1
assignedTaskId = 1,
),
),
contextPresent = false,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.tolgee.dtos.request.task

import io.swagger.v3.oas.annotations.Parameter
import io.swagger.v3.oas.annotations.media.ExampleObject
import io.tolgee.model.enums.TaskState
import io.tolgee.model.enums.TaskType

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package io.tolgee.dtos.request.task

import io.swagger.v3.oas.annotations.Parameter
import io.tolgee.model.enums.TaskState
import io.tolgee.model.enums.TaskType

open class UserAccountFilters {
@field:Parameter(
Expand Down
1 change: 0 additions & 1 deletion backend/data/src/main/kotlin/io/tolgee/model/task/Task.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import io.tolgee.model.enums.TaskState
import io.tolgee.model.enums.TaskType
import jakarta.persistence.*
import jakarta.validation.constraints.Size
import org.hibernate.annotations.Formula
import java.util.*

@Entity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ interface LanguageRepository : JpaRepository<Language, Long> {
fun findAllByProjectId(
projectId: Long?,
pageable: Pageable,
filters: LanguageFilters
filters: LanguageFilters,
): Page<LanguageDto>

fun findAllByTagInAndProjectId(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ interface ProjectRepository : JpaRepository<Project, Long> {
pageable: Pageable,
@Param("search") search: String? = null,
organizationId: Long? = null,
filters: ProjectFilters
filters: ProjectFilters,
): Page<ProjectView>

fun findAllByOrganizationOwnerId(organizationOwnerId: Long): List<Project>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ interface TaskRepository : JpaRepository<Task, TaskId> {
projectId: Long,
pageable: Pageable,
search: String?,
filters: TaskFilters
filters: TaskFilters,
): Page<Task>

@Query(
Expand All @@ -92,7 +92,7 @@ interface TaskRepository : JpaRepository<Task, TaskId> {
userId: Long,
pageable: Pageable,
search: String?,
filters: TaskFilters
filters: TaskFilters,
): Page<Task>

@Query(
Expand All @@ -104,7 +104,7 @@ interface TaskRepository : JpaRepository<Task, TaskId> {
left join fetch t.project
left join fetch t.language
where t in :tasks
"""
""",
)
fun getByIdsWithAllPrefetched(tasks: Collection<Task>): List<Task>

Expand Down Expand Up @@ -142,7 +142,7 @@ interface TaskRepository : JpaRepository<Task, TaskId> {
where k.project.id = :projectId
and (t.language.id = :baseLangId or t.id is NULL)
and k.id in :keyIds
"""
""",
)
fun calculateScope(
projectId: Long,
Expand All @@ -167,7 +167,5 @@ interface TaskRepository : JpaRepository<Task, TaskId> {
group by tk.id
""",
)
fun getTasksScopes(
tasks: Collection<Task>
): List<TaskScopeView>
fun getTasksScopes(tasks: Collection<Task>): List<TaskScopeView>
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import org.springframework.data.jpa.repository.Query
import org.springframework.stereotype.Repository
import java.util.*


const val USER_FILTERS = """
(
:#{#filters.filterId} is null
Expand Down Expand Up @@ -136,7 +135,7 @@ interface UserAccountRepository : JpaRepository<UserAccount, Long> {
pageable: Pageable,
search: String? = "",
exceptUserId: Long? = null,
filters: UserAccountFilters? = null
filters: UserAccountFilters? = null,
): Page<UserAccountInProjectView>

@Query(
Expand Down
16 changes: 10 additions & 6 deletions backend/data/src/main/kotlin/io/tolgee/service/TaskService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class TaskService(
project: Project,
pageable: Pageable,
search: String?,
filters: TaskFilters
filters: TaskFilters,
): Page<TaskWithScopeView> {
val pagedTasks = taskRepository.getAllByProjectId(project.id, pageable, search, filters)
val withPrefetched = taskRepository.getByIdsWithAllPrefetched(pagedTasks.content)
Expand All @@ -64,15 +64,18 @@ class TaskService(
userId: Long,
pageable: Pageable,
search: String?,
filters: TaskFilters
filters: TaskFilters,
): Page<TaskWithScopeView> {
val pagedTasks = taskRepository.getAllByAssignee(userId, pageable, search, filters)
val withPrefetched = taskRepository.getByIdsWithAllPrefetched(pagedTasks.content)
return PageImpl(getTasksWithScope(withPrefetched), pageable, pagedTasks.totalElements)
}

@Transactional
fun createMultipleTasks(project: Project, dtos: Collection<CreateTaskRequest>) {
fun createMultipleTasks(
project: Project,
dtos: Collection<CreateTaskRequest>,
) {
dtos.forEach {
createTask(project, it)
}
Expand Down Expand Up @@ -225,9 +228,10 @@ class TaskService(
val translationIdsToAdd = translationsToAdd.map { it.id }.toMutableSet()
val existingTranslations = task.translations.map { it.translation.id }.toMutableSet()
val nonExistingTranslationIds = translationIdsToAdd.subtract(existingTranslations).toMutableSet()
val taskTranslationsToAdd = translationsToAdd
.filter { nonExistingTranslationIds.contains(it.id) }
.map { TaskTranslation(task, it) }
val taskTranslationsToAdd =
translationsToAdd
.filter { nonExistingTranslationIds.contains(it.id) }
.map { TaskTranslation(task, it) }
task.translations = task.translations.union(taskTranslationsToAdd).toMutableSet()
taskTranslationRepository.saveAll(taskTranslationsToAdd)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ class LanguageService(
fun getPaged(
projectId: Long,
pageable: Pageable,
filters: LanguageFilters?
filters: LanguageFilters?,
): Page<LanguageDto> {
return this.languageRepository.findAllByProjectId(projectId, pageable, filters ?: LanguageFilters())
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ class ProjectService(
search = search,
organizationId = organizationId,
userAccountId = authenticationFacade.authenticatedUser.id,
filters = filters
filters = filters,
)
}

Expand All @@ -381,15 +381,15 @@ class ProjectService(
search: String?,
organizationId: Long? = null,
userAccountId: Long,
filters: ProjectFilters? = ProjectFilters()
filters: ProjectFilters? = ProjectFilters(),
): Page<ProjectWithLanguagesView> {
val withoutPermittedLanguages =
projectRepository.findAllPermitted(
userAccountId,
pageable,
search,
organizationId,
filters ?: ProjectFilters()
filters ?: ProjectFilters(),
)
return addPermittedLanguagesToProjects(withoutPermittedLanguages, userAccountId)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ class UserAccountService(
pageable: Pageable,
search: String?,
exceptUserId: Long? = null,
filters: UserAccountFilters? = null
filters: UserAccountFilters? = null,
): Page<UserAccountInProjectView> {
return userAccountRepository.getAllInProject(projectId, pageable, search = search, exceptUserId, filters)
}
Expand Down

0 comments on commit d56655b

Please sign in to comment.