From d56655b647b4edca08ca7d6c809c6e838a84b3cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0t=C4=9Bp=C3=A1n=20Gran=C3=A1t?= Date: Mon, 29 Jul 2024 20:39:01 +0200 Subject: [PATCH] feat: my tasks filters --- .../api/v2/controllers/TaskController.kt | 7 ------- .../api/v2/controllers/UserTasksController.kt | 1 - .../v2/controllers/V2LanguagesController.kt | 2 +- .../controllers/project/ProjectsController.kt | 2 +- .../io/tolgee/hateoas/task/TaskModel.kt | 1 - .../tolgee/hateoas/task/TaskModelAssembler.kt | 19 ++++++++----------- .../hateoas/task/TaskWithProjectModel.kt | 1 - .../task/TaskWithProjectModelAssembler.kt | 19 ++++++++----------- .../repository/ProjectRepositoryTest.kt | 8 +++++++- .../queryBuilders/CursorUtilUnitTest.kt | 2 +- .../tolgee/dtos/request/task/TaskFilters.kt | 1 - .../request/userAccount/UserAccountFilters.kt | 2 -- .../main/kotlin/io/tolgee/model/task/Task.kt | 1 - .../tolgee/repository/LanguageRepository.kt | 2 +- .../io/tolgee/repository/ProjectRepository.kt | 2 +- .../io/tolgee/repository/TaskRepository.kt | 12 +++++------- .../repository/UserAccountRepository.kt | 3 +-- .../kotlin/io/tolgee/service/TaskService.kt | 16 ++++++++++------ .../service/language/LanguageService.kt | 2 +- .../tolgee/service/project/ProjectService.kt | 6 +++--- .../service/security/UserAccountService.kt | 2 +- 21 files changed, 49 insertions(+), 62 deletions(-) diff --git a/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/TaskController.kt b/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/TaskController.kt index d8211fce85..6e5ab8feb0 100644 --- a/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/TaskController.kt +++ b/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/TaskController.kt @@ -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 @@ -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 diff --git a/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/UserTasksController.kt b/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/UserTasksController.kt index 3b7b976014..6f44364f45 100644 --- a/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/UserTasksController.kt +++ b/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/UserTasksController.kt @@ -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 diff --git a/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/V2LanguagesController.kt b/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/V2LanguagesController.kt index 61f56b220d..f67d73b4d3 100644 --- a/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/V2LanguagesController.kt +++ b/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/V2LanguagesController.kt @@ -97,7 +97,7 @@ class V2LanguagesController( @PathVariable("projectId") pathProjectId: Long?, @ParameterObject @SortDefault("tag") pageable: Pageable, @ParameterObject - filters: LanguageFilters + filters: LanguageFilters, ): PagedModel { val data = languageService.getPaged(projectHolder.project.id, pageable, filters) return pagedAssembler.toModel(data, languageModelAssembler) diff --git a/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/project/ProjectsController.kt b/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/project/ProjectsController.kt index 79a64c46eb..e2b93807d7 100644 --- a/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/project/ProjectsController.kt +++ b/backend/api/src/main/kotlin/io/tolgee/api/v2/controllers/project/ProjectsController.kt @@ -121,7 +121,7 @@ class ProjectsController( pageable: Pageable, @RequestParam("search") search: String?, ): PagedModel { - val projects = projectService.findPermittedInOrganizationPaged(pageable, search, filters=filters) + val projects = projectService.findPermittedInOrganizationPaged(pageable, search, filters = filters) return arrayResourcesAssembler.toModel(projects, projectModelAssembler) } diff --git a/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskModel.kt b/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskModel.kt index ac856e7b2b..160fea2e90 100644 --- a/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskModel.kt +++ b/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskModel.kt @@ -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 diff --git a/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskModelAssembler.kt b/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskModelAssembler.kt index fe504505c2..d4f29c7f79 100644 --- a/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskModelAssembler.kt +++ b/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskModelAssembler.kt @@ -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 @@ -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) }, @@ -44,5 +42,4 @@ class TaskModelAssembler( state = entity.state, ) } - } diff --git a/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskWithProjectModel.kt b/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskWithProjectModel.kt index 2a22b4fe3d..311389eb76 100644 --- a/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskWithProjectModel.kt +++ b/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskWithProjectModel.kt @@ -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 diff --git a/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskWithProjectModelAssembler.kt b/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskWithProjectModelAssembler.kt index 9ffeb8e19a..58b8940999 100644 --- a/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskWithProjectModelAssembler.kt +++ b/backend/api/src/main/kotlin/io/tolgee/hateoas/task/TaskWithProjectModelAssembler.kt @@ -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 @@ -20,7 +18,6 @@ class TaskWithProjectModelAssembler( TaskController::class.java, TaskWithProjectModel::class.java, ) { - override fun toModel(entity: TaskWithScopeView): TaskWithProjectModel { return TaskWithProjectModel( id = entity.id, @@ -28,14 +25,14 @@ class TaskWithProjectModelAssembler( 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) }, diff --git a/backend/app/src/test/kotlin/io/tolgee/repository/ProjectRepositoryTest.kt b/backend/app/src/test/kotlin/io/tolgee/repository/ProjectRepositoryTest.kt index 1d9ce53b4d..26a0ec7e93 100644 --- a/backend/app/src/test/kotlin/io/tolgee/repository/ProjectRepositoryTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/repository/ProjectRepositoryTest.kt @@ -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 @@ -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 diff --git a/backend/app/src/test/kotlin/io/tolgee/service/queryBuilders/CursorUtilUnitTest.kt b/backend/app/src/test/kotlin/io/tolgee/service/queryBuilders/CursorUtilUnitTest.kt index 31250183b5..a5e1342051 100644 --- a/backend/app/src/test/kotlin/io/tolgee/service/queryBuilders/CursorUtilUnitTest.kt +++ b/backend/app/src/test/kotlin/io/tolgee/service/queryBuilders/CursorUtilUnitTest.kt @@ -38,7 +38,7 @@ class CursorUtilUnitTest { mtProvider = null, commentCount = 0, unresolvedCommentCount = 1, - assignedTaskId = 1 + assignedTaskId = 1, ), ), contextPresent = false, diff --git a/backend/data/src/main/kotlin/io/tolgee/dtos/request/task/TaskFilters.kt b/backend/data/src/main/kotlin/io/tolgee/dtos/request/task/TaskFilters.kt index d87186b257..e94aa85716 100644 --- a/backend/data/src/main/kotlin/io/tolgee/dtos/request/task/TaskFilters.kt +++ b/backend/data/src/main/kotlin/io/tolgee/dtos/request/task/TaskFilters.kt @@ -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 diff --git a/backend/data/src/main/kotlin/io/tolgee/dtos/request/userAccount/UserAccountFilters.kt b/backend/data/src/main/kotlin/io/tolgee/dtos/request/userAccount/UserAccountFilters.kt index 0b01436611..df76c7bb19 100644 --- a/backend/data/src/main/kotlin/io/tolgee/dtos/request/userAccount/UserAccountFilters.kt +++ b/backend/data/src/main/kotlin/io/tolgee/dtos/request/userAccount/UserAccountFilters.kt @@ -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( diff --git a/backend/data/src/main/kotlin/io/tolgee/model/task/Task.kt b/backend/data/src/main/kotlin/io/tolgee/model/task/Task.kt index 61f3a98bb3..e0fc58a42a 100644 --- a/backend/data/src/main/kotlin/io/tolgee/model/task/Task.kt +++ b/backend/data/src/main/kotlin/io/tolgee/model/task/Task.kt @@ -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 diff --git a/backend/data/src/main/kotlin/io/tolgee/repository/LanguageRepository.kt b/backend/data/src/main/kotlin/io/tolgee/repository/LanguageRepository.kt index e2e17f146d..7405e4aded 100644 --- a/backend/data/src/main/kotlin/io/tolgee/repository/LanguageRepository.kt +++ b/backend/data/src/main/kotlin/io/tolgee/repository/LanguageRepository.kt @@ -63,7 +63,7 @@ interface LanguageRepository : JpaRepository { fun findAllByProjectId( projectId: Long?, pageable: Pageable, - filters: LanguageFilters + filters: LanguageFilters, ): Page fun findAllByTagInAndProjectId( diff --git a/backend/data/src/main/kotlin/io/tolgee/repository/ProjectRepository.kt b/backend/data/src/main/kotlin/io/tolgee/repository/ProjectRepository.kt index f84e2958e3..f57544ef3f 100644 --- a/backend/data/src/main/kotlin/io/tolgee/repository/ProjectRepository.kt +++ b/backend/data/src/main/kotlin/io/tolgee/repository/ProjectRepository.kt @@ -79,7 +79,7 @@ interface ProjectRepository : JpaRepository { pageable: Pageable, @Param("search") search: String? = null, organizationId: Long? = null, - filters: ProjectFilters + filters: ProjectFilters, ): Page fun findAllByOrganizationOwnerId(organizationOwnerId: Long): List diff --git a/backend/data/src/main/kotlin/io/tolgee/repository/TaskRepository.kt b/backend/data/src/main/kotlin/io/tolgee/repository/TaskRepository.kt index fa9decdc95..e28ceac2e7 100644 --- a/backend/data/src/main/kotlin/io/tolgee/repository/TaskRepository.kt +++ b/backend/data/src/main/kotlin/io/tolgee/repository/TaskRepository.kt @@ -75,7 +75,7 @@ interface TaskRepository : JpaRepository { projectId: Long, pageable: Pageable, search: String?, - filters: TaskFilters + filters: TaskFilters, ): Page @Query( @@ -92,7 +92,7 @@ interface TaskRepository : JpaRepository { userId: Long, pageable: Pageable, search: String?, - filters: TaskFilters + filters: TaskFilters, ): Page @Query( @@ -104,7 +104,7 @@ interface TaskRepository : JpaRepository { left join fetch t.project left join fetch t.language where t in :tasks - """ + """, ) fun getByIdsWithAllPrefetched(tasks: Collection): List @@ -142,7 +142,7 @@ interface TaskRepository : JpaRepository { where k.project.id = :projectId and (t.language.id = :baseLangId or t.id is NULL) and k.id in :keyIds - """ + """, ) fun calculateScope( projectId: Long, @@ -167,7 +167,5 @@ interface TaskRepository : JpaRepository { group by tk.id """, ) - fun getTasksScopes( - tasks: Collection - ): List + fun getTasksScopes(tasks: Collection): List } diff --git a/backend/data/src/main/kotlin/io/tolgee/repository/UserAccountRepository.kt b/backend/data/src/main/kotlin/io/tolgee/repository/UserAccountRepository.kt index 22199a5567..97f393c080 100644 --- a/backend/data/src/main/kotlin/io/tolgee/repository/UserAccountRepository.kt +++ b/backend/data/src/main/kotlin/io/tolgee/repository/UserAccountRepository.kt @@ -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 @@ -136,7 +135,7 @@ interface UserAccountRepository : JpaRepository { pageable: Pageable, search: String? = "", exceptUserId: Long? = null, - filters: UserAccountFilters? = null + filters: UserAccountFilters? = null, ): Page @Query( diff --git a/backend/data/src/main/kotlin/io/tolgee/service/TaskService.kt b/backend/data/src/main/kotlin/io/tolgee/service/TaskService.kt index a4f3c86caa..e99d99d122 100644 --- a/backend/data/src/main/kotlin/io/tolgee/service/TaskService.kt +++ b/backend/data/src/main/kotlin/io/tolgee/service/TaskService.kt @@ -53,7 +53,7 @@ class TaskService( project: Project, pageable: Pageable, search: String?, - filters: TaskFilters + filters: TaskFilters, ): Page { val pagedTasks = taskRepository.getAllByProjectId(project.id, pageable, search, filters) val withPrefetched = taskRepository.getByIdsWithAllPrefetched(pagedTasks.content) @@ -64,7 +64,7 @@ class TaskService( userId: Long, pageable: Pageable, search: String?, - filters: TaskFilters + filters: TaskFilters, ): Page { val pagedTasks = taskRepository.getAllByAssignee(userId, pageable, search, filters) val withPrefetched = taskRepository.getByIdsWithAllPrefetched(pagedTasks.content) @@ -72,7 +72,10 @@ class TaskService( } @Transactional - fun createMultipleTasks(project: Project, dtos: Collection) { + fun createMultipleTasks( + project: Project, + dtos: Collection, + ) { dtos.forEach { createTask(project, it) } @@ -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) } diff --git a/backend/data/src/main/kotlin/io/tolgee/service/language/LanguageService.kt b/backend/data/src/main/kotlin/io/tolgee/service/language/LanguageService.kt index 7dfe4c0621..7caebff7a2 100644 --- a/backend/data/src/main/kotlin/io/tolgee/service/language/LanguageService.kt +++ b/backend/data/src/main/kotlin/io/tolgee/service/language/LanguageService.kt @@ -339,7 +339,7 @@ class LanguageService( fun getPaged( projectId: Long, pageable: Pageable, - filters: LanguageFilters? + filters: LanguageFilters?, ): Page { return this.languageRepository.findAllByProjectId(projectId, pageable, filters ?: LanguageFilters()) } diff --git a/backend/data/src/main/kotlin/io/tolgee/service/project/ProjectService.kt b/backend/data/src/main/kotlin/io/tolgee/service/project/ProjectService.kt index 554ddb1d31..87627b8d7b 100644 --- a/backend/data/src/main/kotlin/io/tolgee/service/project/ProjectService.kt +++ b/backend/data/src/main/kotlin/io/tolgee/service/project/ProjectService.kt @@ -372,7 +372,7 @@ class ProjectService( search = search, organizationId = organizationId, userAccountId = authenticationFacade.authenticatedUser.id, - filters = filters + filters = filters, ) } @@ -381,7 +381,7 @@ class ProjectService( search: String?, organizationId: Long? = null, userAccountId: Long, - filters: ProjectFilters? = ProjectFilters() + filters: ProjectFilters? = ProjectFilters(), ): Page { val withoutPermittedLanguages = projectRepository.findAllPermitted( @@ -389,7 +389,7 @@ class ProjectService( pageable, search, organizationId, - filters ?: ProjectFilters() + filters ?: ProjectFilters(), ) return addPermittedLanguagesToProjects(withoutPermittedLanguages, userAccountId) } diff --git a/backend/data/src/main/kotlin/io/tolgee/service/security/UserAccountService.kt b/backend/data/src/main/kotlin/io/tolgee/service/security/UserAccountService.kt index 48439c3b5c..ed75c8ffd9 100644 --- a/backend/data/src/main/kotlin/io/tolgee/service/security/UserAccountService.kt +++ b/backend/data/src/main/kotlin/io/tolgee/service/security/UserAccountService.kt @@ -343,7 +343,7 @@ class UserAccountService( pageable: Pageable, search: String?, exceptUserId: Long? = null, - filters: UserAccountFilters? = null + filters: UserAccountFilters? = null, ): Page { return userAccountRepository.getAllInProject(projectId, pageable, search = search, exceptUserId, filters) }