Skip to content

Commit

Permalink
release: 0.6.1 (#77)
Browse files Browse the repository at this point in the history
  • Loading branch information
devxb authored Jun 8, 2024
2 parents 3390fb5 + d40a1b6 commit 5e8f945
Show file tree
Hide file tree
Showing 8 changed files with 100 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ import org.gitanimals.render.app.AuthorizationException
import org.gitanimals.render.app.UserFacade
import org.gitanimals.render.controller.request.AddPersonaRequest
import org.gitanimals.render.controller.response.ErrorResponse
import org.gitanimals.render.controller.response.PersonaEnumResponse
import org.gitanimals.render.controller.response.PersonaResponse
import org.gitanimals.render.controller.response.UserResponse
import org.gitanimals.render.domain.PersonaType
import org.gitanimals.render.domain.UserService
import org.gitanimals.render.domain.request.PersonaChangeRequest
import org.springframework.http.HttpHeaders
Expand All @@ -30,7 +32,13 @@ class PersonaController(
): PersonaResponse {
val persona = userFacade.getPersona(token, personaId)

return PersonaResponse(persona.id, persona.type, persona.level, persona.visible)
return PersonaResponse(
persona.id,
persona.type,
persona.level,
persona.visible,
persona.dropRate
)
}

@PatchMapping("/personas")
Expand All @@ -46,9 +54,27 @@ class PersonaController(
changedPersona.type,
changedPersona.level,
changedPersona.visible,
changedPersona.dropRate,
)
}

@GetMapping("/personas/infos")
@ResponseStatus(HttpStatus.OK)
fun getAllPersonaInfo(): Map<String, List<PersonaEnumResponse>> {
return mapOf(
"personas" to PersonaType.entries
.sortedByDescending { it.weight }
.asSequence()
.map { PersonaEnumResponse.from(it) }
.toList()
)
}

@ExceptionHandler(IllegalArgumentException::class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
fun handleIllegalArgumentException(exception: IllegalArgumentException): ErrorResponse =
ErrorResponse.from(exception)

@PostMapping("/internals/personas")
fun addPersona(
@RequestHeader(HttpHeaders.AUTHORIZATION) token: String,
Expand All @@ -63,7 +89,13 @@ class PersonaController(
addPersonaRequest.level,
)

return PersonaResponse(persona.id, persona.type, persona.level, persona.visible)
return PersonaResponse(
persona.id,
persona.type,
persona.level,
persona.visible,
persona.dropRate,
)
}

@DeleteMapping("/internals/personas")
Expand All @@ -73,14 +105,15 @@ class PersonaController(
): PersonaResponse {
val persona = userFacade.deletePersona(token, personaId)

return PersonaResponse(persona.id, persona.type, persona.level, persona.visible)
return PersonaResponse(
persona.id,
persona.type,
persona.level,
persona.visible,
persona.dropRate,
)
}

@ExceptionHandler(IllegalArgumentException::class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
fun handleIllegalArgumentException(exception: IllegalArgumentException): ErrorResponse =
ErrorResponse.from(exception)

@ExceptionHandler(AuthorizationException::class)
@ResponseStatus(HttpStatus.UNAUTHORIZED)
fun handleAuthorizationException(exception: AuthorizationException): ErrorResponse =
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.gitanimals.render.controller.response

import org.gitanimals.render.domain.PersonaType

data class PersonaEnumResponse(
val type: PersonaType,
val dropRate: String,
) {

companion object {
fun from(personaType: PersonaType): PersonaEnumResponse {
return PersonaEnumResponse(personaType, personaType.getDropRate())
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ data class PersonaResponse(
val type: PersonaType,
val level: String,
val visible: Boolean,
val dropRate: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,13 @@ data class UserResponse(
user.id.toString(),
user.name,
user.personas.map {
PersonaResponse(it.id.toString(), it.type, it.level().toString(), it.visible)
PersonaResponse(
it.id.toString(),
it.type,
it.level().toString(),
it.visible,
it.type.getDropRate()
)
}.toList()
)
}
Expand Down
25 changes: 22 additions & 3 deletions src/main/kotlin/org/gitanimals/render/domain/PersonaType.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package org.gitanimals.render.domain

import java.text.DecimalFormat
import kotlin.math.atan2
import kotlin.math.max
import kotlin.math.min
import kotlin.random.Random

enum class PersonaType(private val weight: Double) {
enum class PersonaType(val weight: Double, private var dropRate: String? = null) {
GOOSE(1.0) {
override fun loadSvg(user: User, persona: Persona, mode: Mode): String {
val goose = gooseSvg.replace("*{act}", act(persona.id))
Expand Down Expand Up @@ -1071,7 +1072,7 @@ enum class PersonaType(private val weight: Double) {
StringBuilder().moveRandomly("mole", id, 40, "180s", 5, 14.0)
.toString()
},
MOLE_GRASS(0.1){
MOLE_GRASS(0.1) {
override fun loadSvg(user: User, persona: Persona, mode: Mode): String {
return moleGrassSvg.replace("*{act}", act(persona.id))
.replace("*{id}", persona.id.toString())
Expand All @@ -1086,7 +1087,7 @@ enum class PersonaType(private val weight: Double) {
StringBuilder().moveRandomly("mole", id, 40, "180s", 5, 14.0)
.toString()
},
RABBIT(0.9){
RABBIT(0.9) {
override fun loadSvg(user: User, persona: Persona, mode: Mode): String {
return rabbitSvg.replace("*{act}", act(persona.id))
.replace("*{id}", persona.id.toString())
Expand All @@ -1107,6 +1108,23 @@ enum class PersonaType(private val weight: Double) {
require(weight in 0.000..1.0) { "PersonaType's weight should be between 0.000 to 1.0" }
}

fun getDropRate(): String {
return this.dropRate ?: loadDropRate()
}

private fun loadDropRate(): String {
val allPersonaCount = personas.size
val personaCount = (weight * 1000).toInt()

val dropRateTemp = (personaCount.toDouble() / allPersonaCount.toDouble()) * 100.0
this.dropRate = if (dropRateTemp < 1.0) {
"${dropRateFormat.format(dropRateTemp)}%"
} else {
"${dropRateTemp.toInt()}%"
}
return dropRate!!
}

fun load(user: User, persona: Persona, mode: Mode): String =
loadSvg(user, persona, mode)
.drawContribution(mode, user)
Expand Down Expand Up @@ -1145,6 +1163,7 @@ enum class PersonaType(private val weight: Double) {
}

companion object {
private val dropRateFormat = DecimalFormat("#.#")

private val maxWeight = lazy {
var maxWeight = 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@ data class PersonaResponse(
val type: PersonaType,
val level: String,
val visible: Boolean,
val dropRate: String,
) {
companion object {
fun from(persona: Persona): PersonaResponse {
return PersonaResponse(
persona.id.toString(),
persona.type,
persona.level.value.toString(),
persona.visible
persona.visible,
persona.type.getDropRate()
)
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ server.name=gitanimals-render
server.port=8080

spring.datasource.url=jdbc:mysql://localhost:3306/gitanimalsrender
spring.datasource.username=a
spring.datasource.password=a
spring.datasource.username=root
spring.datasource.password=Dlwnsdud0414
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
Expand Down
18 changes: 9 additions & 9 deletions src/main/resources/persona/animal/rabbit.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 5e8f945

Please sign in to comment.