Skip to content

Commit 88626fc

Browse files
committed
refactor: lines API에서 숫자이외의 문자가 들어와도 처리할 수 있도록 한다
1 parent 85049a2 commit 88626fc

File tree

3 files changed

+72
-17
lines changed

3 files changed

+72
-17
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package org.gitanimals.core.extension
2+
3+
object StringExtension {
4+
5+
fun String.trimNotDigitCharacters(): String {
6+
var trimed = this.trim()
7+
8+
if (trimed.first().isDigit().not()) {
9+
trimed = trimed.drop(1)
10+
}
11+
if (trimed.last().isDigit().not()) {
12+
trimed = trimed.dropLast(1)
13+
}
14+
15+
return trimed
16+
}
17+
18+
fun String.deleteBrackets(): String {
19+
val start = when (this[0]) {
20+
'{' -> 1
21+
else -> 0
22+
}
23+
24+
val end = when (this.last()) {
25+
'}' -> this.length - 1
26+
else -> this.length
27+
}
28+
29+
return this.substring(start, end)
30+
}
31+
}

src/main/kotlin/org/gitanimals/render/controller/AnimationController.kt

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package org.gitanimals.render.controller
22

33
import jakarta.servlet.http.HttpServletResponse
44
import org.gitanimals.core.Mode
5+
import org.gitanimals.core.extension.StringExtension.deleteBrackets
6+
import org.gitanimals.core.extension.StringExtension.trimNotDigitCharacters
57
import org.gitanimals.render.app.AnimationFacade
68
import org.springframework.http.HttpHeaders
79
import org.springframework.web.bind.annotation.GetMapping
@@ -20,13 +22,13 @@ class AnimationController(
2022
response: HttpServletResponse
2123
): String {
2224
response.cacheControl(3600)
23-
return animationFacade.getFarmAnimation(deleteBrackets(username))
25+
return animationFacade.getFarmAnimation(username.deleteBrackets())
2426
}
2527

2628
@GetMapping(value = ["/lines/{username}"], produces = ["image/svg+xml"])
2729
fun getLineSvgAnimation(
2830
@PathVariable("username") username: String,
29-
@RequestParam(name = "pet-id", defaultValue = "0") personaId: Long,
31+
@RequestParam(name = "pet-id", defaultValue = "0") personaId: String,
3032
@RequestParam(name = "contribution-view", defaultValue = "true") contributionView: Boolean,
3133
response: HttpServletResponse,
3234
): String {
@@ -37,21 +39,11 @@ class AnimationController(
3739
false -> Mode.LINE_NO_CONTRIBUTION
3840
}
3941

40-
return animationFacade.getLineAnimation(deleteBrackets(username), personaId, mode)
41-
}
42-
43-
private fun deleteBrackets(username: String): String {
44-
val start = when (username[0]) {
45-
'{' -> 1
46-
else -> 0
47-
}
48-
49-
val end = when (username.last()) {
50-
'}' -> username.length - 1
51-
else -> username.length
52-
}
53-
54-
return username.substring(start, end)
42+
return animationFacade.getLineAnimation(
43+
username = username.deleteBrackets(),
44+
personaId = personaId.trimNotDigitCharacters().toLong(),
45+
mode = mode,
46+
)
5547
}
5648

5749
private fun HttpServletResponse.cacheControl(maxAgeSeconds: Int): HttpServletResponse {
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.gitanimals.core.extension
2+
3+
import io.kotest.core.annotation.DisplayName
4+
import io.kotest.core.spec.style.DescribeSpec
5+
import io.kotest.matchers.shouldBe
6+
import org.gitanimals.core.extension.StringExtension.deleteBrackets
7+
import org.gitanimals.core.extension.StringExtension.trimNotDigitCharacters
8+
9+
@DisplayName("StringExtension class의")
10+
internal class StringExtensionTest : DescribeSpec({
11+
12+
describe("trimNotDigitCharacters 메소드는") {
13+
context("입력받은 문자의 앞 뒤로 숫자가 아닌 문자가 있다면") {
14+
val text = "\"12345\""
15+
16+
it("앞 뒤 문자를 삭제한다.") {
17+
val result = text.trimNotDigitCharacters()
18+
19+
result shouldBe "12345"
20+
}
21+
}
22+
}
23+
24+
describe("deleteBrackets 메소드는") {
25+
val text = "{devxb}"
26+
context("입력받은 문자의 앞 뒤로 bracket이 있다면, 삭제한다") {
27+
val result = text.deleteBrackets()
28+
29+
result shouldBe "devxb"
30+
}
31+
}
32+
})

0 commit comments

Comments
 (0)