Skip to content

Commit c5652a2

Browse files
authored
release: 0.0.9 (#8)
2 parents 8391702 + ec2bf46 commit c5652a2

File tree

8 files changed

+75
-67
lines changed

8 files changed

+75
-67
lines changed

settings.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11

2-
rootProject.name = 'gitanimals-render'
2+
rootProject.name = 'gitanimals'
33

src/main/kotlin/org/gitanimals/render/domain/Persona.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ class Persona(
1818

1919
@Embedded
2020
val level: Level,
21-
) : AbstractTime() {
2221

2322
@JsonIgnore
2423
@JoinColumn(name = "user_id")
2524
@ManyToOne(fetch = FetchType.LAZY, optional = false)
26-
lateinit var user: User
25+
var user: User? = null,
26+
) : AbstractTime() {
2727

2828
constructor(
2929
type: PersonaType,

src/main/kotlin/org/gitanimals/render/domain/Svgs.kt

Lines changed: 54 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1,175 +1,176 @@
11
package org.gitanimals.render.domain
22

33
import org.springframework.core.io.ClassPathResource
4+
import org.springframework.util.ClassUtils
45
import java.nio.charset.Charset
56

6-
val whiteFieldSvg: String = ClassPathResource("classpath:persona/field/white-field.svg")
7+
val whiteFieldSvg: String = ClassPathResource("persona/field/white-field.svg")
78
.getContentAsString(Charset.defaultCharset())
89

9-
val snowyFieldSvg: String = ClassPathResource("classpath:persona/field/snowy-field.svg")
10+
val snowyFieldSvg: String = ClassPathResource("persona/field/snowy-field.svg")
1011
.getContentAsString(Charset.defaultCharset())
1112

12-
val gooseSvg: String = ClassPathResource("classpath:persona/animal/goose.svg")
13+
val gooseSvg: String = ClassPathResource("persona/animal/goose.svg")
1314
.getContentAsString(Charset.defaultCharset())
1415

15-
val gooseSunglassesSvg: String = ClassPathResource("classpath:persona/animal/goose-sunglasses.svg")
16+
val gooseSunglassesSvg: String = ClassPathResource("persona/animal/goose-sunglasses.svg")
1617
.getContentAsString(Charset.defaultCharset())
1718

18-
val gooseKotlinSvg: String = ClassPathResource("classpath:persona/animal/goose-kotlin.svg")
19+
val gooseKotlinSvg: String = ClassPathResource("persona/animal/goose-kotlin.svg")
1920
.getContentAsString(Charset.defaultCharset())
2021

21-
val gooseJavaSvg: String = ClassPathResource("classpath:persona/animal/goose-java.svg")
22+
val gooseJavaSvg: String = ClassPathResource("persona/animal/goose-java.svg")
2223
.getContentAsString(Charset.defaultCharset())
2324

24-
val gooseJsSvg: String = ClassPathResource("classpath:persona/animal/goose-js.svg")
25+
val gooseJsSvg: String = ClassPathResource("persona/animal/goose-js.svg")
2526
.getContentAsString(Charset.defaultCharset())
2627

27-
val gooseNodeSvg: String = ClassPathResource("classpath:persona/animal/goose-node.svg")
28+
val gooseNodeSvg: String = ClassPathResource("persona/animal/goose-node.svg")
2829
.getContentAsString(Charset.defaultCharset())
2930

30-
val gooseSwiftSvg: String = ClassPathResource("classpath:persona/animal/goose-swift.svg")
31+
val gooseSwiftSvg: String = ClassPathResource("persona/animal/goose-swift.svg")
3132
.getContentAsString(Charset.defaultCharset())
3233

33-
val gooseLinuxSvg: String = ClassPathResource("classpath:persona/animal/goose-linux.svg")
34+
val gooseLinuxSvg: String = ClassPathResource("persona/animal/goose-linux.svg")
3435
.getContentAsString(Charset.defaultCharset())
3536

36-
val gooseSpringSvg: String = ClassPathResource("classpath:persona/animal/goose-spring.svg")
37+
val gooseSpringSvg: String = ClassPathResource("persona/animal/goose-spring.svg")
3738
.getContentAsString(Charset.defaultCharset())
3839

39-
val littleChickSvg: String = ClassPathResource("classpath:persona/animal/little-chick.svg")
40+
val littleChickSvg: String = ClassPathResource("persona/animal/little-chick.svg")
4041
.getContentAsString(Charset.defaultCharset())
4142

42-
val littleChickSunglassesSvg: String = ClassPathResource("classpath:persona/animal/little-chick-sunglasses.svg")
43+
val littleChickSunglassesSvg: String = ClassPathResource("persona/animal/little-chick-sunglasses.svg")
4344
.getContentAsString(Charset.defaultCharset())
4445

45-
val littleChickKotlinSvg: String = ClassPathResource("classpath:persona/animal/little-chick-kotlin.svg")
46+
val littleChickKotlinSvg: String = ClassPathResource("persona/animal/little-chick-kotlin.svg")
4647
.getContentAsString(Charset.defaultCharset())
4748

48-
val littleChickJavaSvg: String = ClassPathResource("classpath:persona/animal/little-chick-java.svg")
49+
val littleChickJavaSvg: String = ClassPathResource("persona/animal/little-chick-java.svg")
4950
.getContentAsString(Charset.defaultCharset())
5051

51-
val littleChickJsSvg: String = ClassPathResource("classpath:persona/animal/little-chick-js.svg")
52+
val littleChickJsSvg: String = ClassPathResource("persona/animal/little-chick-js.svg")
5253
.getContentAsString(Charset.defaultCharset())
5354

54-
val littleChickNodeSvg: String = ClassPathResource("classpath:persona/animal/little-chick-node.svg")
55+
val littleChickNodeSvg: String = ClassPathResource("persona/animal/little-chick-node.svg")
5556
.getContentAsString(Charset.defaultCharset())
5657

57-
val littleChickSwiftSvg: String = ClassPathResource("classpath:persona/animal/little-chick-swift.svg")
58+
val littleChickSwiftSvg: String = ClassPathResource("persona/animal/little-chick-swift.svg")
5859
.getContentAsString(Charset.defaultCharset())
5960

60-
val littleChickLinuxSvg: String = ClassPathResource("classpath:persona/animal/little-chick-linux.svg")
61+
val littleChickLinuxSvg: String = ClassPathResource("persona/animal/little-chick-linux.svg")
6162
.getContentAsString(Charset.defaultCharset())
6263

63-
val littleChickSpringSvg: String = ClassPathResource("classpath:persona/animal/little-chick-spring.svg")
64+
val littleChickSpringSvg: String = ClassPathResource("persona/animal/little-chick-spring.svg")
6465
.getContentAsString(Charset.defaultCharset())
6566

66-
val penguinSvg: String = ClassPathResource("classpath:persona/animal/penguin.svg")
67+
val penguinSvg: String = ClassPathResource("persona/animal/penguin.svg")
6768
.getContentAsString(Charset.defaultCharset())
6869

69-
val penguinSunglassesSvg: String = ClassPathResource("classpath:persona/animal/penguin-sunglasses.svg")
70+
val penguinSunglassesSvg: String = ClassPathResource("persona/animal/penguin-sunglasses.svg")
7071
.getContentAsString(Charset.defaultCharset())
7172

72-
val penguinKotlinSvg: String = ClassPathResource("classpath:persona/animal/penguin-kotlin.svg")
73+
val penguinKotlinSvg: String = ClassPathResource("persona/animal/penguin-kotlin.svg")
7374
.getContentAsString(Charset.defaultCharset())
7475

75-
val penguinJavaSvg: String = ClassPathResource("classpath:persona/animal/penguin-java.svg")
76+
val penguinJavaSvg: String = ClassPathResource("persona/animal/penguin-java.svg")
7677
.getContentAsString(Charset.defaultCharset())
7778

78-
val penguinJsSvg: String = ClassPathResource("classpath:persona/animal/penguin-js.svg")
79+
val penguinJsSvg: String = ClassPathResource("persona/animal/penguin-js.svg")
7980
.getContentAsString(Charset.defaultCharset())
8081

81-
val penguinNodeSvg: String = ClassPathResource("classpath:persona/animal/penguin-node.svg")
82+
val penguinNodeSvg: String = ClassPathResource("persona/animal/penguin-node.svg")
8283
.getContentAsString(Charset.defaultCharset())
8384

84-
val penguinSwiftSvg: String = ClassPathResource("classpath:persona/animal/penguin-swift.svg")
85+
val penguinSwiftSvg: String = ClassPathResource("persona/animal/penguin-swift.svg")
8586
.getContentAsString(Charset.defaultCharset())
8687

87-
val penguinLinuxSvg: String = ClassPathResource("classpath:persona/animal/penguin-linux.svg")
88+
val penguinLinuxSvg: String = ClassPathResource("persona/animal/penguin-linux.svg")
8889
.getContentAsString(Charset.defaultCharset())
8990

90-
val penguinSpringSvg: String = ClassPathResource("classpath:persona/animal/penguin-spring.svg")
91+
val penguinSpringSvg: String = ClassPathResource("persona/animal/penguin-spring.svg")
9192
.getContentAsString(Charset.defaultCharset())
9293

93-
val pigSvg: String = ClassPathResource("classpath:persona/animal/pig.svg")
94+
val pigSvg: String = ClassPathResource("persona/animal/pig.svg")
9495
.getContentAsString(Charset.defaultCharset())
9596

96-
val pigSunglassesSvg: String = ClassPathResource("classpath:persona/animal/pig-sunglasses.svg")
97+
val pigSunglassesSvg: String = ClassPathResource("persona/animal/pig-sunglasses.svg")
9798
.getContentAsString(Charset.defaultCharset())
9899

99-
val pigKotlinSvg: String = ClassPathResource("classpath:persona/animal/pig-kotlin.svg")
100+
val pigKotlinSvg: String = ClassPathResource("persona/animal/pig-kotlin.svg")
100101
.getContentAsString(Charset.defaultCharset())
101102

102-
val pigJavaSvg: String = ClassPathResource("classpath:persona/animal/pig-java.svg")
103+
val pigJavaSvg: String = ClassPathResource("persona/animal/pig-java.svg")
103104
.getContentAsString(Charset.defaultCharset())
104105

105-
val pigJsSvg: String = ClassPathResource("classpath:persona/animal/pig-js.svg")
106+
val pigJsSvg: String = ClassPathResource("persona/animal/pig-js.svg")
106107
.getContentAsString(Charset.defaultCharset())
107108

108-
val pigNodeSvg: String = ClassPathResource("classpath:persona/animal/pig-node.svg")
109+
val pigNodeSvg: String = ClassPathResource("persona/animal/pig-node.svg")
109110
.getContentAsString(Charset.defaultCharset())
110111

111-
val pigSwiftSvg: String = ClassPathResource("classpath:persona/animal/pig-swift.svg")
112+
val pigSwiftSvg: String = ClassPathResource("persona/animal/pig-swift.svg")
112113
.getContentAsString(Charset.defaultCharset())
113114

114-
val pigLinuxSvg: String = ClassPathResource("classpath:persona/animal/pig-linux.svg")
115+
val pigLinuxSvg: String = ClassPathResource("persona/animal/pig-linux.svg")
115116
.getContentAsString(Charset.defaultCharset())
116117

117-
val pigSpringSvg: String = ClassPathResource("classpath:persona/animal/pig-spring.svg")
118+
val pigSpringSvg: String = ClassPathResource("persona/animal/pig-spring.svg")
118119
.getContentAsString(Charset.defaultCharset())
119120

120-
val slimeRedSvg: String = ClassPathResource("classpath:persona/animal/slime-red.svg")
121+
val slimeRedSvg: String = ClassPathResource("persona/animal/slime-red.svg")
121122
.getContentAsString(Charset.defaultCharset())
122123

123-
val slimeRedKotlinSvg: String = ClassPathResource("classpath:persona/animal/slime-red-kotlin.svg")
124+
val slimeRedKotlinSvg: String = ClassPathResource("persona/animal/slime-red-kotlin.svg")
124125
.getContentAsString(Charset.defaultCharset())
125126

126-
val slimeRedJavaSvg: String = ClassPathResource("classpath:persona/animal/slime-red-java.svg")
127+
val slimeRedJavaSvg: String = ClassPathResource("persona/animal/slime-red-java.svg")
127128
.getContentAsString(Charset.defaultCharset())
128129

129-
val slimeRedJsSvg: String = ClassPathResource("classpath:persona/animal/slime-red-js.svg")
130+
val slimeRedJsSvg: String = ClassPathResource("persona/animal/slime-red-js.svg")
130131
.getContentAsString(Charset.defaultCharset())
131132

132-
val slimeRedNodeSvg: String = ClassPathResource("classpath:persona/animal/slime-red-node.svg")
133+
val slimeRedNodeSvg: String = ClassPathResource("persona/animal/slime-red-node.svg")
133134
.getContentAsString(Charset.defaultCharset())
134135

135-
val slimeRedSwiftSvg: String = ClassPathResource("classpath:persona/animal/slime-red-swift.svg")
136+
val slimeRedSwiftSvg: String = ClassPathResource("persona/animal/slime-red-swift.svg")
136137
.getContentAsString(Charset.defaultCharset())
137138

138-
val slimeRedLinuxSvg: String = ClassPathResource("classpath:persona/animal/slime-red-linux.svg")
139+
val slimeRedLinuxSvg: String = ClassPathResource("persona/animal/slime-red-linux.svg")
139140
.getContentAsString(Charset.defaultCharset())
140141

141-
val slimeBlueSvg: String = ClassPathResource("classpath:persona/animal/slime-blue.svg")
142+
val slimeBlueSvg: String = ClassPathResource("persona/animal/slime-blue.svg")
142143
.getContentAsString(Charset.defaultCharset())
143144

144-
val slimeGreenSvg: String = ClassPathResource("classpath:persona/animal/slime-green.svg")
145+
val slimeGreenSvg: String = ClassPathResource("persona/animal/slime-green.svg")
145146
.getContentAsString(Charset.defaultCharset())
146147

147148
val largeTextSvgs = lazy {
148149
val map = mutableMapOf<String, String>()
149150
for (i in 'A'..'Z') {
150-
val path = "classpath:persona/text/large/$i.svg"
151+
val path = "persona/text/large/$i.svg"
151152
map[i.toString()] = ClassPathResource(path)
152153
.getContentAsString(Charset.defaultCharset())
153154
}
154155
for (i in 'a'..'z') {
155-
val path = "classpath:persona/text/large/_$i.svg"
156+
val path = "persona/text/large/_$i.svg"
156157
map[i.toString()] = ClassPathResource(path)
157158
.getContentAsString(Charset.defaultCharset())
158159
}
159160
for (i in 0..9) {
160-
val path = "classpath:persona/text/large/$i.svg"
161+
val path = "persona/text/large/$i.svg"
161162
map[i.toString()] = ClassPathResource(path)
162163
.getContentAsString(Charset.defaultCharset())
163164
}
164-
map["-"] = ClassPathResource("classpath:persona/text/large/hyphens.svg")
165+
map["-"] = ClassPathResource("persona/text/large/hyphens.svg")
165166
.getContentAsString(Charset.defaultCharset())
166167
map
167168
}.value
168169

169170
val mediumNumberSvgs = lazy {
170171
val list = mutableListOf<String>()
171172
for (i in 0..9) {
172-
val path = "classpath:persona/text/medium/$i.svg"
173+
val path = "persona/text/medium/$i.svg"
173174
list.add(
174175
ClassPathResource(path)
175176
.getContentAsString(Charset.defaultCharset())
@@ -181,7 +182,7 @@ val mediumNumberSvgs = lazy {
181182
val numberSvgs = lazy {
182183
val list = mutableListOf<String>()
183184
for (i in 0..9) {
184-
val path = "classpath:persona/text/small/$i.svg"
185+
val path = "persona/text/small/$i.svg"
185186
list.add(
186187
ClassPathResource(path)
187188
.getContentAsString(Charset.defaultCharset())

src/main/kotlin/org/gitanimals/render/domain/User.kt

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ package org.gitanimals.render.domain
33
import jakarta.persistence.*
44
import org.gitanimals.render.core.AggregateRoot
55
import org.gitanimals.render.domain.value.Contribution
6+
import org.gitanimals.render.domain.value.Level
67
import org.hibernate.annotations.BatchSize
78
import java.time.Instant
89
import java.time.ZoneId
910
import java.time.ZonedDateTime
1011
import java.time.temporal.ChronoUnit
1112
import kotlin.math.max
1213
import kotlin.math.min
13-
import kotlin.random.Random
1414

1515
@AggregateRoot
1616
@Entity(name = "user")
@@ -76,8 +76,13 @@ class User(
7676

7777
private fun levelUpPersonas(newContribution: Int) {
7878
repeat(newContribution) {
79-
val persona = personas[Random.nextInt(0, personas.size)]
80-
persona.level.value++
79+
runCatching {
80+
val persona = personas.random()
81+
persona.level.value++
82+
}.onFailure {
83+
it.printStackTrace()
84+
throw it
85+
}
8186
}
8287
}
8388

@@ -88,7 +93,8 @@ class User(
8893
if (personas.size >= MAX_PERSONA_COUNT) {
8994
return
9095
}
91-
personas.add(Persona(PersonaType.random(), 0))
96+
val newPersona = Persona(type = PersonaType.random(), level = Level(0), user = this)
97+
personas.add(newPersona)
9298
}
9399

94100
fun increaseVisitCount() {

src/main/kotlin/org/gitanimals/render/domain/UserService.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ class UserService(
2525
@Retryable(retryFor = [OptimisticLockingFailureException::class], maxAttempts = 10)
2626
@Transactional
2727
fun updateContributions(username: String, contribution: Int) {
28-
getUserByName(username).updateContribution(contribution)
28+
getUserByName(username)
29+
.updateContribution(contribution)
2930
}
3031

3132
fun isContributionUpdatedBeforeOneHour(name: String): Boolean =

src/main/kotlin/org/gitanimals/render/domain/value/Contribution.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import jakarta.persistence.Embeddable
55
import java.time.Instant
66

77
@Embeddable
8-
class Contribution(
8+
data class Contribution(
99
@Column(name = "year", nullable = false)
1010
val year: Int,
1111
@Column(name = "contribution", nullable = false)

src/main/kotlin/org/gitanimals/render/infra/GithubContributionApi.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,11 @@ class GithubContributionApi(
120120
private const val YEAR_FIX = "*{year}"
121121

122122
private val contributionYearQuery: String =
123-
ClassPathResource("classpath:github-graphql/contribution-year.graphql")
123+
ClassPathResource("github-graphql/contribution-year.graphql")
124124
.getContentAsString(Charset.defaultCharset())
125125

126126
private val contributionCountByYearQuery =
127-
ClassPathResource("classpath:github-graphql/contribution-count-by-year.graphql")
127+
ClassPathResource("github-graphql/contribution-count-by-year.graphql")
128128
.getContentAsString(Charset.defaultCharset())
129129
}
130130
}

src/main/resources/application.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
server.name=gitanimals-render
22
server.port=8080
33

4-
spring.datasource.url=
4+
spring.datasource.url=jdbc:mysql://localhost:3306/gitanimalsrender
55
spring.datasource.username=
66
spring.datasource.password=
77
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
@@ -11,8 +11,8 @@ spring.jpa.hibernate.ddl-auto=update
1111
spring.jpa.open-in-view=false
1212

1313
netx.mode=redis
14-
netx.host=
15-
netx.port=
14+
netx.host=localhost
15+
netx.port=6379
1616
netx.group=render
1717
netx.node-id=1
1818
netx.node-name=render-1

0 commit comments

Comments
 (0)