Skip to content

Commit e3ac985

Browse files
committed
Feature: Add feature to find user by name
1 parent b7fe088 commit e3ac985

File tree

5 files changed

+79
-0
lines changed

5 files changed

+79
-0
lines changed

src/main/kotlin/com/mptsix/todaydiary/controller/UserController.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,12 @@ class UserController(
9292
userService.getFollowingUser(userToken)
9393
)
9494
}
95+
96+
@GetMapping("/api/v1/user/{name}")
97+
fun findUserByName(@RequestHeader header: HttpHeaders, @PathVariable("name") targetName: String): ResponseEntity<List<UserFiltered>> {
98+
val userToken: String = header["X-AUTH-TOKEN"]!![0]
99+
return ResponseEntity.ok(
100+
userService.findUserByName(userToken, targetName)
101+
)
102+
}
95103
}

src/main/kotlin/com/mptsix/todaydiary/data/user/UserRepository.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import org.slf4j.Logger
88
import org.slf4j.LoggerFactory
99
import org.springframework.data.mongodb.core.MongoTemplate
1010
import org.springframework.data.mongodb.core.aggregation.*
11+
import org.springframework.data.mongodb.core.find
1112
import org.springframework.data.mongodb.core.findOne
1213
import org.springframework.data.mongodb.core.query.Criteria
1314
import org.springframework.data.mongodb.core.query.Query
@@ -46,6 +47,13 @@ class UserRepository(
4647
}
4748
}
4849

50+
private fun findAllByQuery(fieldName: String, fieldTargetValue: String): List<User> {
51+
// Find it
52+
return mongoTemplate.find<User>(
53+
getQueryForFindBy(fieldName, fieldTargetValue)
54+
)
55+
}
56+
4957
// Add or update user
5058
fun addUser(user: User): User = mongoTemplate.save(user)
5159

@@ -55,6 +63,9 @@ class UserRepository(
5563
// Find User by User Name
5664
fun findByUserName(userName: String): User = findOneByQuery(userNameField, userName)
5765

66+
// Find all user by user name
67+
fun findAllByUserName(userName: String): List<User> = findAllByQuery(userNameField, userName)
68+
5869
// Find category size by user id / by category name
5970
fun findCategorySizeByUserId(categoryName: String, userId:String):Int {
6071
// First, match user Id

src/main/kotlin/com/mptsix/todaydiary/service/UserService.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,23 @@ class UserService(
167167
}
168168
}
169169

170+
fun findUserByName(userToken: String, userName: String): List<UserFiltered> {
171+
val user: User = userRepository.findByUserId(getUserIdFromToken(userToken))
172+
val userList: List<User> = userRepository.findAllByUserName(userName)
173+
174+
return userList.map {
175+
UserFiltered(
176+
userName = it.userName,
177+
userId = it.userId,
178+
isUserFollowedTargetUser = (
179+
user.followList.find { eachString ->
180+
eachString == it.userId
181+
}
182+
) != null
183+
)
184+
}
185+
}
186+
170187
private fun createJournalCategoryList(userId: String): List<JournalCategoryResponse> {
171188
return enumValues<JournalCategory>().map {
172189
JournalCategoryResponse(

src/test/kotlin/com/mptsix/todaydiary/controller/UserControllerTest.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,4 +261,20 @@ internal class UserControllerTest {
261261
assertThat(responseEntity.hasBody()).isEqualTo(true)
262262
assertThat(responseEntity.body!!.size).isEqualTo(0)
263263
}
264+
265+
@Test
266+
fun is_findUserByName_works_well() {
267+
val loginToken: String = loginUser()
268+
val url: String = "${serverUrl}/api/v1/user/test"
269+
val httpHeaders: HttpHeaders = HttpHeaders().apply {
270+
put("X-AUTH-TOKEN", listOf(loginToken))
271+
}
272+
273+
val responseEntity: ResponseEntity<List<UserFiltered>> =
274+
restTemplate.exchange(url, HttpMethod.GET, HttpEntity<Unit>(httpHeaders))
275+
276+
assertThat(responseEntity.statusCode).isEqualTo(HttpStatus.OK)
277+
assertThat(responseEntity.hasBody()).isEqualTo(true)
278+
assertThat(responseEntity.body!!.size).isEqualTo(0)
279+
}
264280
}

src/test/kotlin/com/mptsix/todaydiary/service/UserServiceTest.kt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,4 +385,31 @@ internal class UserServiceTest {
385385
assertThat(size).isEqualTo(1)
386386
}
387387
}
388+
389+
@Test
390+
fun is_findUserByName_works_well() {
391+
val loginToken: String = loginUser()
392+
393+
// Register another 3 user
394+
registerUser("test")
395+
registerUser("test2")
396+
registerUser("test3")
397+
398+
// Follow one of them
399+
userService.followUser(loginToken, "test")
400+
401+
userService.findUserByName(loginToken, "test").also {
402+
assertThat(it.size).isEqualTo(1)
403+
assertThat(it[0].isUserFollowedTargetUser).isEqualTo(true) // we followed test user.
404+
assertThat(it[0].userId).isEqualTo("test")
405+
assertThat(it[0].userName).isEqualTo("test")
406+
}
407+
408+
userService.findUserByName(loginToken, "test2").also {
409+
assertThat(it.size).isEqualTo(1)
410+
assertThat(it[0].isUserFollowedTargetUser).isEqualTo(false)
411+
assertThat(it[0].userId).isEqualTo("test2")
412+
assertThat(it[0].userName).isEqualTo("test2")
413+
}
414+
}
388415
}

0 commit comments

Comments
 (0)