Skip to content

Commit

Permalink
Merge pull request #6 from soma-baekgu/feature/BG-130-get-workspaces
Browse files Browse the repository at this point in the history
[BG-130]: 워크스페이스 조회 API 기능 구현 (실제소요시간3 / 스토리포인트2)
  • Loading branch information
GGHDMS authored Jun 27, 2024
2 parents ada0d24 + 04ae047 commit b17a967
Show file tree
Hide file tree
Showing 18 changed files with 266 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@ package com.backgu.amaker.workspace.controller

import com.backgu.amaker.workspace.dto.WorkspaceCreateDto
import com.backgu.amaker.workspace.service.WorkspaceService
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.RequestHeader
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
import java.util.UUID

@RestController
@RequestMapping("/api/v1")
Expand All @@ -19,4 +22,12 @@ class WorkspaceController(
// TODO : 로그인한 사용자의 아이디를 가져와서 넣어줘야함
workspaceService.createWorkspace(workspaceCreateDto)
}

@GetMapping
fun findWorkspaces(
@RequestHeader("Authorization") userId: UUID,
) {
// TODO : 로그인한 사용자의 아이디를 가져와서 넣어줘야함
workspaceService.findWorkspaces(userId)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.backgu.amaker.workspace.dto

class WorkspaceDto(
val id: Long,
val name: String,
val thumbnail: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.backgu.amaker.workspace.dto

import java.util.UUID

class WorkspacesDto(
val userId: UUID,
val workspaces: List<WorkspaceDto>,
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,12 @@ package com.backgu.amaker.workspace.repository

import com.backgu.amaker.workspace.domain.Workspace
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.data.jpa.repository.Query
import org.springframework.data.repository.query.Param

interface WorkspaceRepository : JpaRepository<Workspace, Long>
interface WorkspaceRepository : JpaRepository<Workspace, Long> {
@Query("select w from Workspace w where w.id in :workspaceIds")
fun findByWorkspaceIds(
@Param("workspaceIds") workspaceIds: List<Long>,
): List<Workspace>
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,13 @@ package com.backgu.amaker.workspace.repository

import com.backgu.amaker.workspace.domain.WorkspaceUser
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.data.jpa.repository.Query
import org.springframework.data.repository.query.Param
import java.util.UUID

interface WorkspaceUserRepository : JpaRepository<WorkspaceUser, Long>
interface WorkspaceUserRepository : JpaRepository<WorkspaceUser, Long> {
@Query("select wu.workspaceId from WorkspaceUser wu where wu.userId = :userId")
fun findWorkspaceIdsByUserId(
@Param("userId") userId: UUID,
): List<Long>
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,16 @@ import com.backgu.amaker.workspace.domain.Workspace
import com.backgu.amaker.workspace.domain.WorkspaceRole
import com.backgu.amaker.workspace.domain.WorkspaceUser
import com.backgu.amaker.workspace.dto.WorkspaceCreateDto
import com.backgu.amaker.workspace.dto.WorkspaceDto
import com.backgu.amaker.workspace.dto.WorkspacesDto
import com.backgu.amaker.workspace.repository.WorkspaceRepository
import com.backgu.amaker.workspace.repository.WorkspaceUserRepository
import io.github.oshai.kotlinlogging.KotlinLogging
import jakarta.persistence.EntityNotFoundException
import org.springframework.data.repository.findByIdOrNull
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import java.util.UUID

private val logger = KotlinLogging.logger {}

Expand Down Expand Up @@ -69,4 +72,28 @@ class WorkspaceService(

return workspace.id
}

fun findWorkspaces(userId: UUID): WorkspacesDto {
val user =
userRepository.findByIdOrNull(userId) ?: run {
logger.error { "User not found : $userId" }
throw EntityNotFoundException("User not found : $userId")
}

val workspaceUsers = workspaceUserRepository.findWorkspaceIdsByUserId(user.id)

val workspaceDtos =
workspaceRepository.findByWorkspaceIds(workspaceUsers).map {
WorkspaceDto(
id = it.id,
name = it.name,
thumbnail = it.thumbnail,
)
}

return WorkspacesDto(
userId = user.id,
workspaces = workspaceDtos,
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import org.assertj.core.api.Assertions.assertThatThrownBy
import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test

@DisplayName("AuthService 테스트")
class AuthServiceTest {
private lateinit var authService: AuthService
private lateinit var googleOAuthClient: GoogleOAuthClient
Expand Down Expand Up @@ -42,8 +43,7 @@ class AuthServiceTest {
googleApiClient = SuccessfulStubGoogleApiClient(email)
authService = AuthService(googleOAuthClient, googleApiClient, AuthFixture.createUserRequest())

// when
// then
// when & then
assertThatThrownBy { authService.googleLogin("authCode") }
.isInstanceOf(IllegalArgumentException::class.java)
.hasMessage("Failed to get access token")
Expand All @@ -53,13 +53,11 @@ class AuthServiceTest {
@DisplayName("구글 oauth 서버에서 토큰 획득 실패 테스트")
fun failedToUserInfo() {
// given
val email = "[email protected]"
googleOAuthClient = SuccessfulStubGoogleOAuthClient()
googleApiClient = FailedFakeGoogleApiClient()
authService = AuthService(googleOAuthClient, googleApiClient, AuthFixture.createUserRequest())

// when
// then
// when & then
assertThatThrownBy { authService.googleLogin("authCode") }
.isInstanceOf(IllegalArgumentException::class.java)
.hasMessage("Failed to get user information")
Expand Down
18 changes: 18 additions & 0 deletions api/src/test/kotlin/com/backgu/amaker/fixture/ChatRoomFixture.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.backgu.amaker.fixture

import com.backgu.amaker.chat.domain.ChatRoom
import com.backgu.amaker.chat.domain.ChatRoomType
import com.backgu.amaker.chat.repository.ChatRoomRepository

class ChatRoomFixture(
private val chatRoomRepository: ChatRoomRepository,
) {
fun testChatRoomSetUp() {
chatRoomRepository.saveAll(
listOf(
ChatRoom(workspaceId = 1L, chatRoomType = ChatRoomType.GROUP),
ChatRoom(workspaceId = 2L, chatRoomType = ChatRoomType.GROUP),
),
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package com.backgu.amaker.fixture

import com.backgu.amaker.chat.domain.ChatRoomUser
import com.backgu.amaker.chat.repository.ChatRoomUserRepository
import java.util.UUID

class ChatRoomUserFixture(
private val chatRoomUserRepository: ChatRoomUserRepository,
) {
fun testChatRoomUserSetUp() {
chatRoomUserRepository.saveAll(
listOf(
ChatRoomUser(
chatRoomId = 1L,
userId = UUID.fromString("00000000-0000-0000-0000-000000000001"),
),
ChatRoomUser(
chatRoomId = 1L,
userId = UUID.fromString("00000000-0000-0000-0000-000000000002"),
),
ChatRoomUser(
chatRoomId = 1L,
userId = UUID.fromString("00000000-0000-0000-0000-000000000003"),
),
ChatRoomUser(
chatRoomId = 2L,
userId = UUID.fromString("00000000-0000-0000-0000-000000000002"),
),
ChatRoomUser(
chatRoomId = 2L,
userId = UUID.fromString("00000000-0000-0000-0000-000000000001"),
),
ChatRoomUser(
chatRoomId = 2L,
userId = UUID.fromString("00000000-0000-0000-0000-000000000003"),
),
),
)
}
}
14 changes: 12 additions & 2 deletions api/src/test/kotlin/com/backgu/amaker/fixture/UserFixture.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ package com.backgu.amaker.fixture

import com.backgu.amaker.user.domain.User
import com.backgu.amaker.user.dto.UserRequest
import com.backgu.amaker.user.repository.UserRepository
import java.util.UUID

class UserFixture {
class UserFixture(
private val userRepository: UserRepository,
) {
companion object {
val defaultUserId = UUID.fromString("00000000-0000-0000-0000-000000000000")
val defaultUserId = UUID.fromString("00000000-0000-0000-0000-000000000001")

fun createUserRequest() =
UserRequest(
Expand All @@ -23,4 +26,11 @@ class UserFixture {
picture = "picture",
)
}

fun testUserSetUp() {
userRepository.save(createUser(defaultUserId))
for (i in 2..9) {
userRepository.save(createUser(UUID.fromString("00000000-0000-0000-0000-00000000000$i")))
}
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,35 @@
package com.backgu.amaker.fixture

import com.backgu.amaker.workspace.domain.Workspace
import com.backgu.amaker.workspace.dto.WorkspaceCreateDto
import com.backgu.amaker.workspace.repository.WorkspaceRepository
import java.util.UUID

class WorkspaceFixture {
class WorkspaceFixture(
private val workspaceRepository: WorkspaceRepository,
) {
companion object {
fun createWorkspaceRequest(userId: UUID) =
WorkspaceCreateDto(
userId = userId,
name = "name",
)
}

fun testWorkspaceSetUp() {
workspaceRepository.saveAll(
listOf(
Workspace(
id = 1L,
name = "워크스페이습",
thumbnail = "image/thumbnail1.png",
),
Workspace(
id = 2L,
name = "워크스페이습",
thumbnail = "image/thumbnail2.png",
),
),
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.backgu.amaker.fixture

import com.backgu.amaker.workspace.domain.WorkspaceRole
import com.backgu.amaker.workspace.domain.WorkspaceUser
import com.backgu.amaker.workspace.repository.WorkspaceUserRepository
import java.util.UUID

class WorkspaceUserFixture(
private val workspaceUserRepository: WorkspaceUserRepository,
) {
fun testWorkspaceUserSetUp() {
workspaceUserRepository.saveAll(
listOf(
WorkspaceUser(
workspaceId = 1L,
userId = UUID.fromString("00000000-0000-0000-0000-000000000001"),
workspaceRole = WorkspaceRole.LEADER,
),
WorkspaceUser(
workspaceId = 1L,
userId = UUID.fromString("00000000-0000-0000-0000-000000000002"),
workspaceRole = WorkspaceRole.MEMBER,
),
WorkspaceUser(
workspaceId = 1L,
userId = UUID.fromString("00000000-0000-0000-0000-000000000003"),
workspaceRole = WorkspaceRole.MEMBER,
),
WorkspaceUser(
workspaceId = 2L,
userId = UUID.fromString("00000000-0000-0000-0000-000000000002"),
workspaceRole = WorkspaceRole.LEADER,
),
WorkspaceUser(
workspaceId = 2L,
userId = UUID.fromString("00000000-0000-0000-0000-000000000001"),
workspaceRole = WorkspaceRole.MEMBER,
),
WorkspaceUser(
workspaceId = 2L,
userId = UUID.fromString("00000000-0000-0000-0000-000000000003"),
workspaceRole = WorkspaceRole.MEMBER,
),
),
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ import org.junit.jupiter.api.DisplayName
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.transaction.annotation.Transactional

@DisplayName("UserService 테스트")
@Transactional
@SpringBootTest
class UserServiceTest {
@Autowired
Expand Down
Loading

0 comments on commit b17a967

Please sign in to comment.