Skip to content

Commit 3831d9f

Browse files
committed
chats word count api
1 parent bfa8354 commit 3831d9f

File tree

3 files changed

+58
-3
lines changed

3 files changed

+58
-3
lines changed

src/main/java/vc/controller/ChatsController.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public ChatsController(final DSLContext dsl, final PlayerLookup playerLookup) {
3535

3636
public record ChatsResponse(List<Chat> chats, int total, int pageCount) { }
3737
public record Chat(OffsetDateTime time, String chat) {}
38+
public record WordCount(int count) {}
3839

3940
@GetMapping("/chats")
4041
@RateLimiter(name = "main")
@@ -98,4 +99,36 @@ public ResponseEntity<ChatsResponse> chats(
9899
return ResponseEntity.ok(new ChatsResponse(chats, rowCount.intValue(), (int) Math.ceil(rowCount / (double) size)));
99100
}
100101
}
102+
103+
@GetMapping("/chats/word-count")
104+
@RateLimiter(name = "main")
105+
@Cacheable("chats-word-count")
106+
@ApiResponses(value = {
107+
@ApiResponse(
108+
responseCode = "200",
109+
description = "Counts the number of times a word has appeared in chat",
110+
content = {
111+
@Content(
112+
mediaType = "application/json",
113+
schema = @Schema(implementation = WordCount.class)
114+
)
115+
}
116+
),
117+
@ApiResponse(
118+
responseCode = "400",
119+
description = "Bad request. The word must be at least 4 characters long.",
120+
content = @Content
121+
)
122+
})
123+
public ResponseEntity<WordCount> wordCount(String word) {
124+
if (word == null || word.length() < 3) {
125+
return ResponseEntity.badRequest().build();
126+
}
127+
var count = dsl.selectCount()
128+
.from(CHATS)
129+
.where(CHATS.CHAT.likeIgnoreCase("%" + word + "%"))
130+
.fetchOneInto(Integer.class);
131+
if (count == null) count = 0;
132+
return ResponseEntity.ok(new WordCount(count));
133+
}
101134
}

src/main/resources/META-INF/native-image/reflect-config.json

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3664,6 +3664,9 @@
36643664
{
36653665
"name":"java.lang.invoke.SerializedLambda"
36663666
},
3667+
{
3668+
"name":"java.lang.invoke.StringConcatFactory"
3669+
},
36673670
{
36683671
"name":"java.lang.invoke.TypeDescriptor$OfField",
36693672
"queryAllPublicMethods":true
@@ -3694,7 +3697,8 @@
36943697
},
36953698
{
36963699
"name":"java.lang.management.MemoryMXBean",
3697-
"queryAllPublicMethods":true
3700+
"queryAllPublicMethods":true,
3701+
"methods":[{"name":"getHeapMemoryUsage","parameterTypes":[] }]
36983702
},
36993703
{
37003704
"name":"java.lang.management.MemoryManagerMXBean",
@@ -3707,7 +3711,7 @@
37073711
{
37083712
"name":"java.lang.management.MemoryUsage",
37093713
"queryAllPublicMethods":true,
3710-
"methods":[{"name":"from","parameterTypes":["javax.management.openmbean.CompositeData"] }]
3714+
"methods":[{"name":"from","parameterTypes":["javax.management.openmbean.CompositeData"] }, {"name":"getCommitted","parameterTypes":[] }, {"name":"getInit","parameterTypes":[] }, {"name":"getMax","parameterTypes":[] }, {"name":"getUsed","parameterTypes":[] }]
37113715
},
37123716
{
37133717
"name":"java.lang.management.MonitorInfo",
@@ -13208,7 +13212,7 @@
1320813212
"allDeclaredFields":true,
1320913213
"queryAllDeclaredMethods":true,
1321013214
"queryAllDeclaredConstructors":true,
13211-
"methods":[{"name":"<init>","parameterTypes":["org.jooq.DSLContext","vc.util.PlayerLookup"] }, {"name":"chats","parameterTypes":["java.util.UUID","java.lang.String","java.lang.Integer","java.lang.Integer"] }]
13215+
"methods":[{"name":"<init>","parameterTypes":["org.jooq.DSLContext","vc.util.PlayerLookup"] }, {"name":"chats","parameterTypes":["java.util.UUID","java.lang.String","java.lang.Integer","java.lang.Integer"] }, {"name":"wordCount","parameterTypes":["java.lang.String"] }]
1321213216
},
1321313217
{
1321413218
"name":"vc.controller.ChatsController$$SpringCGLIB$$0",
@@ -13229,6 +13233,12 @@
1322913233
"queryAllDeclaredConstructors":true,
1323013234
"methods":[{"name":"<init>","parameterTypes":["java.util.List","int","int"] }, {"name":"chats","parameterTypes":[] }, {"name":"pageCount","parameterTypes":[] }, {"name":"total","parameterTypes":[] }]
1323113235
},
13236+
{
13237+
"name":"vc.controller.ChatsController$WordCount",
13238+
"allDeclaredFields":true,
13239+
"queryAllDeclaredMethods":true,
13240+
"methods":[{"name":"count","parameterTypes":[] }]
13241+
},
1323213242
{
1323313243
"name":"vc.controller.ConnectionsController",
1323413244
"allDeclaredFields":true,

src/main/resources/META-INF/native-image/resource-config.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -898,6 +898,8 @@
898898
"pattern":"\\Qorg/springframework/boot/LazyInitializationExcludeFilter$$Lambda/0x0000018dd86cb460.class\\E"
899899
}, {
900900
"pattern":"\\Qorg/springframework/boot/LazyInitializationExcludeFilter$$Lambda/0x000001a0ac6a6230.class\\E"
901+
}, {
902+
"pattern":"\\Qorg/springframework/boot/LazyInitializationExcludeFilter$$Lambda/0x000001b1a86a6a78.class\\E"
901903
}, {
902904
"pattern":"\\Qorg/springframework/boot/LazyInitializationExcludeFilter$$Lambda/0x000002059c6df8b0.class\\E"
903905
}, {
@@ -942,6 +944,8 @@
942944
"pattern":"\\Qorg/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfiguration$$Lambda/0x0000018dd8654478.class\\E"
943945
}, {
944946
"pattern":"\\Qorg/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfiguration$$Lambda/0x000001a0ac61f320.class\\E"
947+
}, {
948+
"pattern":"\\Qorg/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfiguration$$Lambda/0x000001b1a861df78.class\\E"
945949
}, {
946950
"pattern":"\\Qorg/springframework/boot/actuate/autoconfigure/endpoint/jackson/JacksonEndpointAutoConfiguration$$Lambda/0x000002059c65c000.class\\E"
947951
}, {
@@ -1208,6 +1212,8 @@
12081212
"pattern":"\\Qorg/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextAutoConfiguration$$Lambda/0x0000018dd86c60a8.class\\E"
12091213
}, {
12101214
"pattern":"\\Qorg/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextAutoConfiguration$$Lambda/0x000001a0ac69c000.class\\E"
1215+
}, {
1216+
"pattern":"\\Qorg/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextAutoConfiguration$$Lambda/0x000001b1a8697c50.class\\E"
12111217
}, {
12121218
"pattern":"\\Qorg/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementContextAutoConfiguration$$Lambda/0x000002059c6d75f0.class\\E"
12131219
}, {
@@ -1462,6 +1468,8 @@
14621468
"pattern":"\\Qorg/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration$HikariPoolDataSourceMetadataProviderConfiguration$$Lambda/0x0000018dd86c4680.class\\E"
14631469
}, {
14641470
"pattern":"\\Qorg/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration$HikariPoolDataSourceMetadataProviderConfiguration$$Lambda/0x000001a0ac6963d8.class\\E"
1471+
}, {
1472+
"pattern":"\\Qorg/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration$HikariPoolDataSourceMetadataProviderConfiguration$$Lambda/0x000001b1a8696000.class\\E"
14651473
}, {
14661474
"pattern":"\\Qorg/springframework/boot/autoconfigure/jdbc/metadata/DataSourcePoolMetadataProvidersConfiguration$HikariPoolDataSourceMetadataProviderConfiguration$$Lambda/0x000002059c6cf8b8.class\\E"
14671475
}, {
@@ -1746,6 +1754,8 @@
17461754
"pattern":"\\Qorg/springframework/boot/devtools/autoconfigure/LocalDevToolsAutoConfiguration$LiveReloadServerEventListener.class\\E"
17471755
}, {
17481756
"pattern":"\\Qorg/springframework/boot/devtools/autoconfigure/LocalDevToolsAutoConfiguration$RestartConfiguration$$Lambda/0x0000018dd86e71f0.class\\E"
1757+
}, {
1758+
"pattern":"\\Qorg/springframework/boot/devtools/autoconfigure/LocalDevToolsAutoConfiguration$RestartConfiguration$$Lambda/0x000001b1a86af270.class\\E"
17491759
}, {
17501760
"pattern":"\\Qorg/springframework/boot/devtools/autoconfigure/LocalDevToolsAutoConfiguration$RestartConfiguration$$Lambda/0x000002059c6f3270.class\\E"
17511761
}, {
@@ -1806,6 +1816,8 @@
18061816
"pattern":"\\Qorg/springframework/boot/validation/beanvalidation/MethodValidationExcludeFilter$$Lambda/0x0000018dd864c1f8.class\\E"
18071817
}, {
18081818
"pattern":"\\Qorg/springframework/boot/validation/beanvalidation/MethodValidationExcludeFilter$$Lambda/0x000001a0ac616288.class\\E"
1819+
}, {
1820+
"pattern":"\\Qorg/springframework/boot/validation/beanvalidation/MethodValidationExcludeFilter$$Lambda/0x000001b1a86137f0.class\\E"
18091821
}, {
18101822
"pattern":"\\Qorg/springframework/boot/validation/beanvalidation/MethodValidationExcludeFilter$$Lambda/0x000002059c64f810.class\\E"
18111823
}, {

0 commit comments

Comments
 (0)