Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package com.kioschool.kioschoolapi.domain.order.controller

import com.kioschool.kioschoolapi.domain.order.dto.common.*
import com.kioschool.kioschoolapi.domain.order.dto.common.OrderDto
import com.kioschool.kioschoolapi.domain.order.dto.common.OrderHourlyPrice
import com.kioschool.kioschoolapi.domain.order.dto.common.OrderPrefixSumPrice
import com.kioschool.kioschoolapi.domain.order.dto.common.OrderProductDto
import com.kioschool.kioschoolapi.domain.order.dto.common.OrderSessionDto
import com.kioschool.kioschoolapi.domain.order.dto.request.*
import com.kioschool.kioschoolapi.domain.order.facade.OrderFacade
import com.kioschool.kioschoolapi.global.security.annotation.AdminUsername
import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag
import org.springframework.data.domain.Page
import org.springframework.web.bind.annotation.*
import java.time.LocalDateTime

Expand Down Expand Up @@ -78,16 +81,16 @@ class AdminOrderController(
fun getOrdersByTable(
@AdminUsername username: String,
@RequestParam("workspaceId") workspaceId: Long,
@RequestParam("tableNumber") tableNumber: Int,
@RequestParam("page") page: Int,
@RequestParam("size") size: Int
): Page<OrderDto> {
@RequestParam("tableNumber") tableNumber: Int? = null,
@RequestParam("startDate") startDate: LocalDateTime,
@RequestParam("endDate") endDate: LocalDateTime
): List<OrderSessionDto> {
return orderFacade.getOrdersByTable(
username,
workspaceId,
tableNumber,
page,
size
startDate,
endDate
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import com.kioschool.kioschoolapi.global.cache.constant.CacheNames
import com.kioschool.kioschoolapi.global.common.enums.OrderStatus
import com.kioschool.kioschoolapi.global.common.enums.WebsocketType
import org.springframework.cache.annotation.Cacheable
import org.springframework.data.domain.Page
import org.springframework.stereotype.Component
import org.springframework.transaction.annotation.Transactional
import java.time.LocalDateTime
Expand Down Expand Up @@ -132,13 +131,18 @@ class OrderFacade(
fun getOrdersByTable(
username: String,
workspaceId: Long,
tableNumber: Int,
page: Int,
size: Int
): Page<OrderDto> {
tableNumber: Int?,
startDate: LocalDateTime,
endDate: LocalDateTime
): List<OrderSessionDto> {
workspaceService.checkAccessible(username, workspaceId)
return orderService.getAllOrdersByTable(workspaceId, tableNumber, page, size)
.map { OrderDto.of(it) }
return orderService.getAllOrderSessionsByCondition(
workspaceId,
tableNumber,
startDate,
endDate
)
.map { OrderSessionDto.of(it) }
}

fun changeOrderProductServedCount(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.kioschool.kioschoolapi.domain.order.repository

import com.kioschool.kioschoolapi.domain.order.entity.OrderSession
import com.kioschool.kioschoolapi.domain.order.entity.QOrderSession
import com.querydsl.jpa.impl.JPAQueryFactory
import org.springframework.stereotype.Repository
import java.time.LocalDateTime

@Repository
class CustomOrderSessionRepository(
private val queryFactory: JPAQueryFactory
) {
fun findAllByCondition(
workspaceId: Long,
tableNumber: Int?,
start: LocalDateTime,
end: LocalDateTime
): List<OrderSession> {
val orderSession = QOrderSession.orderSession
val query = queryFactory.selectFrom(orderSession)
.where(orderSession.workspace.id.eq(workspaceId))
.where(orderSession.createdAt.between(start, end))
.orderBy(orderSession.createdAt.asc())

if (tableNumber != null) {
query.where(orderSession.tableNumber.eq(tableNumber))
}

return query.fetch()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.kioschool.kioschoolapi.domain.order.repository
import com.kioschool.kioschoolapi.domain.order.entity.OrderSession
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.stereotype.Repository
import java.time.LocalDateTime

@Repository
interface OrderSessionRepository : JpaRepository<OrderSession, Long> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@ package com.kioschool.kioschoolapi.domain.order.service
import com.kioschool.kioschoolapi.domain.order.entity.Order
import com.kioschool.kioschoolapi.domain.order.entity.OrderProduct
import com.kioschool.kioschoolapi.domain.order.entity.OrderSession
import com.kioschool.kioschoolapi.domain.order.repository.*
import com.kioschool.kioschoolapi.domain.order.repository.CustomOrderRepository
import com.kioschool.kioschoolapi.domain.order.repository.CustomOrderSessionRepository
import com.kioschool.kioschoolapi.domain.order.repository.OrderProductRepository
import com.kioschool.kioschoolapi.domain.order.repository.OrderRedisRepository
import com.kioschool.kioschoolapi.domain.order.repository.OrderRepository
import com.kioschool.kioschoolapi.domain.order.repository.OrderSessionRepository
import com.kioschool.kioschoolapi.domain.workspace.entity.Workspace
import com.kioschool.kioschoolapi.domain.workspace.entity.WorkspaceSetting
import com.kioschool.kioschoolapi.domain.workspace.entity.WorkspaceTable
Expand All @@ -13,9 +18,6 @@ import com.kioschool.kioschoolapi.global.common.enums.OrderStatus
import com.kioschool.kioschoolapi.global.common.enums.WebsocketType
import com.kioschool.kioschoolapi.global.websocket.dto.Message
import com.kioschool.kioschoolapi.global.websocket.service.CustomWebSocketService
import org.springframework.data.domain.Page
import org.springframework.data.domain.PageRequest
import org.springframework.data.domain.Sort
import org.springframework.stereotype.Service
import java.time.LocalDateTime

Expand All @@ -26,7 +28,8 @@ class OrderService(
private val customOrderRepository: CustomOrderRepository,
private val orderRedisRepository: OrderRedisRepository,
private val orderProductRepository: OrderProductRepository,
private val orderSessionRepository: OrderSessionRepository
private val orderSessionRepository: OrderSessionRepository,
private val customOrderSessionRepository: CustomOrderSessionRepository
) {
@OrderUpdateEvent
fun saveOrder(order: Order): Order {
Expand Down Expand Up @@ -90,22 +93,17 @@ class OrderService(
orderRedisRepository.resetAllOrderNumber()
}

fun getAllOrdersByTable(
fun getAllOrderSessionsByCondition(
workspaceId: Long,
tableNumber: Int,
page: Int,
size: Int
): Page<Order> {
return orderRepository.findAllByWorkspaceIdAndTableNumber(
tableNumber: Int?,
start: LocalDateTime,
end: LocalDateTime
): List<OrderSession> {
return customOrderSessionRepository.findAllByCondition(
workspaceId,
tableNumber,
PageRequest.of(
page,
size,
Sort.by(
Sort.Order.desc("id")
)
)
start,
end
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -426,34 +426,34 @@ class OrderFacadeTest : DescribeSpec({
}

describe("getOrdersByTable") {
it("should call workspaceService.checkAccessible and orderService.getAllOrdersByTable") {
it("should call workspaceService.checkAccessible and orderService.getAllOrderSessionsByCondition") {
val username = "test"
val workspaceId = 1L
val tableNumber = 1
val page = 0
val size = 10
val startDate = LocalDateTime.now()
val endDate = LocalDateTime.now()

every { workspaceService.checkAccessible(username, workspaceId) } just Runs
every {
orderService.getAllOrdersByTable(workspaceId, tableNumber, page, size)
} returns PageImpl(listOf(SampleEntity.order1))
orderService.getAllOrderSessionsByCondition(workspaceId, tableNumber, startDate, endDate)
} returns listOf(SampleEntity.orderSession)

val result = sut.getOrdersByTable(username, workspaceId, tableNumber, page, size)
val result = sut.getOrdersByTable(username, workspaceId, tableNumber, startDate, endDate)

assert(result.content.first().id == SampleEntity.order1.id)
assert(result.first().id == SampleEntity.orderSession.id)

verify { workspaceService.checkAccessible(username, workspaceId) }
verify {
orderService.getAllOrdersByTable(workspaceId, tableNumber, page, size)
orderService.getAllOrderSessionsByCondition(workspaceId, tableNumber, startDate, endDate)
}
}

it("should throw WorkspaceInaccessibleException when workspace is not accessible") {
val username = "test"
val workspaceId = 1L
val tableNumber = 1
val page = 0
val size = 10
val startDate = LocalDateTime.now()
val endDate = LocalDateTime.now()

every {
workspaceService.checkAccessible(
Expand All @@ -463,12 +463,12 @@ class OrderFacadeTest : DescribeSpec({
} throws WorkspaceInaccessibleException()

assertThrows<WorkspaceInaccessibleException> {
sut.getOrdersByTable(username, workspaceId, tableNumber, page, size)
sut.getOrdersByTable(username, workspaceId, tableNumber, startDate, endDate)
}

verify { workspaceService.checkAccessible(username, workspaceId) }
verify(exactly = 0) {
orderService.getAllOrdersByTable(workspaceId, tableNumber, page, size)
orderService.getAllOrderSessionsByCondition(any(), any(), any(), any())
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
package com.kioschool.kioschoolapi.order.service

import com.kioschool.kioschoolapi.domain.order.repository.*
import com.kioschool.kioschoolapi.domain.order.repository.CustomOrderRepository
import com.kioschool.kioschoolapi.domain.order.repository.CustomOrderSessionRepository
import com.kioschool.kioschoolapi.domain.order.repository.OrderProductRepository
import com.kioschool.kioschoolapi.domain.order.repository.OrderRedisRepository
import com.kioschool.kioschoolapi.domain.order.repository.OrderRepository
import com.kioschool.kioschoolapi.domain.order.repository.OrderSessionRepository
import com.kioschool.kioschoolapi.domain.order.service.OrderService
import com.kioschool.kioschoolapi.domain.workspace.service.WorkspaceService
import com.kioschool.kioschoolapi.factory.SampleEntity
Expand All @@ -20,14 +25,16 @@ class OrderServiceTest : DescribeSpec({
val orderRedisRepository = mockk<OrderRedisRepository>()
val orderProductRepository = mockk<OrderProductRepository>()
val orderSessionRepository = mockk<OrderSessionRepository>()
val customOrderSessionRepository = mockk<CustomOrderSessionRepository>()

val sut = OrderService(
repository,
websocketService,
customOrderRepository,
orderRedisRepository,
orderProductRepository,
orderSessionRepository
orderSessionRepository,
customOrderSessionRepository
)

beforeTest {
Expand All @@ -38,6 +45,7 @@ class OrderServiceTest : DescribeSpec({
mockkObject(orderRedisRepository)
mockkObject(orderProductRepository)
mockkObject(orderSessionRepository)
mockkObject(customOrderSessionRepository)
}

afterTest {
Expand Down Expand Up @@ -238,45 +246,39 @@ class OrderServiceTest : DescribeSpec({
}
}

describe("getAllOrdersByTable") {
it("should call orderRepository.findAllByTableNumber") {
describe("getAllOrderSessionsByCondition") {
it("should call customOrderSessionRepository.findAllByCondition") {
// Arrange
val workspaceId = 1L
val tableNumber = 1
val page = 1
val size = 10
val start = java.time.LocalDateTime.now()
val end = java.time.LocalDateTime.now()

// Mock
every {
repository.findAllByWorkspaceIdAndTableNumber(
customOrderSessionRepository.findAllByCondition(
workspaceId,
tableNumber,
PageRequest.of(
page, size, Sort.by(
Sort.Order.desc("id")
)
)
start,
end
)
} returns mockk()
} returns emptyList()

// Act
sut.getAllOrdersByTable(
sut.getAllOrderSessionsByCondition(
workspaceId,
tableNumber,
page,
size
)
start,
end
) shouldBe emptyList()

// Assert
verify {
repository.findAllByWorkspaceIdAndTableNumber(
customOrderSessionRepository.findAllByCondition(
workspaceId,
tableNumber,
PageRequest.of(
page, size, Sort.by(
Sort.Order.desc("id")
)
)
start,
end
)
}
}
Expand Down