update get type(s) for pagination and filter
- update TypesEndpoint for all new endpoints - update application to use properties for sql script - update types controller - update types.http for all types of types calls - update test mocking for service - update getTypes to use filter, page, and show in TypesController - add validation dependency - update unit test for uuid assertion from test library in - remove UUIDAssert.kt - update IdentityControllerTest - update MappingKtTest - update NodeControllerTest - update TypeControllerTest - update TypesControllerTest - add test library dependency - update getTypes to handle filter limit and offset in TypeService - update TypeRepository - add findAllContaining with filter, limit and offset - add findAll with limit and offset - update type database with specific name key - split Type and Types
This commit is contained in:
@@ -1,12 +1,9 @@
|
||||
package ltd.hlaeja.controller
|
||||
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.map
|
||||
import ltd.hlaeja.library.deviceRegistry.Type
|
||||
import ltd.hlaeja.service.TypeService
|
||||
import ltd.hlaeja.util.toTypeEntity
|
||||
import ltd.hlaeja.util.toTypeResponse
|
||||
import org.springframework.web.bind.annotation.GetMapping
|
||||
import org.springframework.web.bind.annotation.PostMapping
|
||||
import org.springframework.web.bind.annotation.RequestBody
|
||||
import org.springframework.web.bind.annotation.RestController
|
||||
@@ -16,9 +13,6 @@ class TypeController(
|
||||
private val service: TypeService,
|
||||
) {
|
||||
|
||||
@GetMapping("/types")
|
||||
fun getTypes(): Flow<Type.Response> = service.getTypes().map { it.toTypeResponse() }
|
||||
|
||||
@PostMapping("/type")
|
||||
suspend fun addType(
|
||||
@RequestBody register: Type.Request,
|
||||
|
||||
36
src/main/kotlin/ltd/hlaeja/controller/TypesController.kt
Normal file
36
src/main/kotlin/ltd/hlaeja/controller/TypesController.kt
Normal file
@@ -0,0 +1,36 @@
|
||||
package ltd.hlaeja.controller
|
||||
|
||||
import jakarta.validation.constraints.Min
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.map
|
||||
import ltd.hlaeja.library.deviceRegistry.Type
|
||||
import ltd.hlaeja.service.TypeService
|
||||
import ltd.hlaeja.util.toTypeResponse
|
||||
import org.springframework.web.bind.annotation.GetMapping
|
||||
import org.springframework.web.bind.annotation.PathVariable
|
||||
import org.springframework.web.bind.annotation.RestController
|
||||
|
||||
@RestController
|
||||
class TypesController(
|
||||
private val service: TypeService,
|
||||
) {
|
||||
companion object {
|
||||
const val DEFAULT_PAGE: Int = 1
|
||||
const val DEFAULT_SIZE: Int = 25
|
||||
}
|
||||
|
||||
@GetMapping(
|
||||
"/types",
|
||||
"/types/page-{page}",
|
||||
"/types/page-{page}/show-{show}",
|
||||
"/types/filter-{filter}",
|
||||
"/types/filter-{filter}/page-{page}",
|
||||
"/types/filter-{filter}/page-{page}/show-{show}",
|
||||
)
|
||||
fun getTypes(
|
||||
@PathVariable(required = false) @Min(1) page: Int = DEFAULT_PAGE,
|
||||
@PathVariable(required = false) @Min(1) show: Int = DEFAULT_SIZE,
|
||||
@PathVariable(required = false) filter: String? = null,
|
||||
): Flow<Type.Response> = service.getTypes((page - 1) * show, show, filter)
|
||||
.map { it.toTypeResponse() }
|
||||
}
|
||||
@@ -1,9 +1,27 @@
|
||||
package ltd.hlaeja.repository
|
||||
|
||||
import java.util.UUID
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import ltd.hlaeja.entity.TypeEntity
|
||||
|
||||
import org.springframework.data.r2dbc.repository.Query
|
||||
import org.springframework.data.repository.kotlin.CoroutineCrudRepository
|
||||
import org.springframework.data.repository.query.Param
|
||||
import org.springframework.stereotype.Repository
|
||||
|
||||
@Repository
|
||||
interface TypeRepository : CoroutineCrudRepository<TypeEntity, UUID>
|
||||
interface TypeRepository : CoroutineCrudRepository<TypeEntity, UUID> {
|
||||
|
||||
@Query("SELECT * FROM types ORDER BY name LIMIT :limit OFFSET :offset")
|
||||
fun findAll(
|
||||
@Param("offset") offset: Int,
|
||||
@Param("limit") limit: Int,
|
||||
): Flow<TypeEntity>
|
||||
|
||||
@Query("SELECT * FROM types WHERE name ILIKE :filter ORDER BY name LIMIT :limit OFFSET :offset")
|
||||
fun findAllContaining(
|
||||
@Param("filter") filter: String,
|
||||
@Param("offset") offset: Int,
|
||||
@Param("limit") limit: Int,
|
||||
): Flow<TypeEntity>
|
||||
}
|
||||
|
||||
@@ -16,7 +16,14 @@ class TypeService(
|
||||
private val typeRepository: TypeRepository,
|
||||
) {
|
||||
|
||||
fun getTypes(): Flow<TypeEntity> = typeRepository.findAll()
|
||||
fun getTypes(
|
||||
page: Int,
|
||||
show: Int,
|
||||
filter: String?,
|
||||
): Flow<TypeEntity> = when {
|
||||
!filter.isNullOrEmpty() -> typeRepository.findAllContaining("%$filter%", page, show)
|
||||
else -> typeRepository.findAll(page, show)
|
||||
}
|
||||
|
||||
suspend fun addType(
|
||||
entity: TypeEntity,
|
||||
|
||||
Reference in New Issue
Block a user