Skip to content

Commit 673caa8

Browse files
committed
feat: 대표 펫 변경 api를 개발한다
1 parent 9c7b5dd commit 673caa8

File tree

4 files changed

+61
-0
lines changed

4 files changed

+61
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.gitanimals.guild.app
2+
3+
import org.gitanimals.guild.domain.GuildService
4+
import org.springframework.stereotype.Component
5+
6+
@Component
7+
class ChangeMainPersonaFacade(
8+
private val renderApi: RenderApi,
9+
private val identityApi: IdentityApi,
10+
private val guildService: GuildService,
11+
) {
12+
13+
fun changeMainPersona(token: String, guildId: Long, personaId: Long) {
14+
val user = identityApi.getUserByToken(token)
15+
val personas = renderApi.getUserByName(user.username).personas
16+
17+
val changedPersona = personas.firstOrNull { it.id.toLong() == personaId }
18+
?: throw IllegalArgumentException("Cannot change persona to \"$personaId\" from user \"${user.username}\"")
19+
20+
guildService.changeMainPersona(
21+
guildId = guildId,
22+
userId = user.id.toLong(),
23+
personaId = changedPersona.id.toLong(),
24+
personaType = changedPersona.type,
25+
)
26+
}
27+
}

src/main/kotlin/org/gitanimals/guild/controller/GuildController.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class GuildController(
2525
private val changeGuildFacade: ChangeGuildFacade,
2626
private val joinedGuildFacade: GetJoinedGuildFacade,
2727
private val searchGuildFacade: SearchGuildFacade,
28+
private val changeMainPersonaFacade: ChangeMainPersonaFacade,
2829
) {
2930

3031
@ResponseStatus(HttpStatus.OK)
@@ -116,4 +117,15 @@ class GuildController(
116117
GuildIcons.entries.map { it.getImagePath() }.toList()
117118
)
118119
}
120+
121+
@PostMapping("/guilds/{guildId}/personas")
122+
fun changeMainPersona(
123+
@RequestHeader(HttpHeaders.AUTHORIZATION) token: String,
124+
@PathVariable("guildId") guildId: Long,
125+
@RequestParam("persona-id") personaId: Long,
126+
) = changeMainPersonaFacade.changeMainPersona(
127+
token = token,
128+
guildId = guildId,
129+
personaId = personaId,
130+
)
119131
}

src/main/kotlin/org/gitanimals/guild/domain/Guild.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,21 @@ class Guild(
187187
return leader.personaType
188188
}
189189

190+
fun changeMainPersona(userId: Long, personaId: Long, personaType: String) {
191+
if (leader.userId == userId) {
192+
leader.personaId = personaId
193+
leader.personaType = personaType
194+
return
195+
}
196+
197+
members.first {
198+
it.userId == userId
199+
}.run {
200+
this.personaId = personaId
201+
this.personaType = personaType
202+
}
203+
}
204+
190205
companion object {
191206

192207
fun create(

src/main/kotlin/org/gitanimals/guild/domain/GuildService.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,13 @@ class GuildService(
9494
guild.change(request)
9595
}
9696

97+
@Transactional
98+
fun changeMainPersona(guildId: Long, userId: Long, personaId: Long, personaType: String) {
99+
val guild = getGuildById(guildId)
100+
101+
guild.changeMainPersona(userId, personaId, personaType)
102+
}
103+
97104
fun getGuildById(id: Long, vararg lazyLoading: (Guild) -> Unit): Guild {
98105
val guild = guildRepository.findByIdOrNull(id)
99106
?: throw IllegalArgumentException("Cannot fint guild by id \"$id\"")

0 commit comments

Comments
 (0)