Introduce Chat API with message handling, server state updates, and IP-based security restrictions.
This commit is contained in:
@@ -14,6 +14,7 @@ repositories {
|
||||
|
||||
tasks.named("compileJava") {
|
||||
dependsOn("generateJavaApi")
|
||||
dependsOn("generateJavaChatApi")
|
||||
dependsOn("generateFrontendApi")
|
||||
}
|
||||
|
||||
@@ -34,7 +35,7 @@ tasks.jar {
|
||||
sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir("${projectDir}/build/generated-resources/model/src/main/java")
|
||||
srcDir("${projectDir}/build/generated-sources/model/src/main/java")
|
||||
exclude("org/openapitools/configuration/SpringDocConfiguration.java")
|
||||
}
|
||||
}
|
||||
@@ -51,7 +52,7 @@ dependencies {
|
||||
implementation("org.springframework.hateoas:spring-hateoas:2.2.0")
|
||||
}
|
||||
|
||||
tasks.register< GenerateTask>("generateJavaApi") {
|
||||
tasks.register<GenerateTask>("generateJavaApi") {
|
||||
inputs.file("${projectDir}/src/main/resources/api.yml")
|
||||
inputs.file("${projectDir}/src/main/resources/config_backend.json")
|
||||
inputs.dir("${projectDir}/src/main/resources/schemas")
|
||||
@@ -59,7 +60,33 @@ tasks.register< GenerateTask>("generateJavaApi") {
|
||||
library.set("spring-boot")
|
||||
inputSpec.set("${projectDir}/src/main/resources/api.yml")
|
||||
configFile.set("${projectDir}/src/main/resources/config_backend.json")
|
||||
outputDir.set("${projectDir}/build/generated-resources/model")
|
||||
outputDir.set("${projectDir}/build/generated-sources/model")
|
||||
typeMappings.put("OffsetDateTime", "Instant")
|
||||
importMappings.put("java.time.OffsetDateTime", "java.time.Instant")
|
||||
modelNameSuffix.set("Dto")
|
||||
|
||||
// Make generator use Java 8 time types and map date-time -> Instant
|
||||
additionalProperties.set(mapOf("dateLibrary" to "java8"))
|
||||
typeMappings.set(mapOf("date-time" to "Instant"))
|
||||
importMappings.set(mapOf("Instant" to "java.time.Instant"))
|
||||
generateModelTests.set(false)
|
||||
generateModelDocumentation.set(false)
|
||||
generateApiTests.set(false)
|
||||
generateApiDocumentation.set(false)
|
||||
generateAliasAsModel.set(true)
|
||||
modelPackage.set("com.alttd.altitudeweb.model")
|
||||
generateApiTests.set(false)
|
||||
}
|
||||
|
||||
tasks.register<GenerateTask>("generateJavaChatApi") {
|
||||
inputs.file("${projectDir}/src/main/resources/chat-api.yml")
|
||||
inputs.file("${projectDir}/src/main/resources/config_backend.json")
|
||||
inputs.dir("${projectDir}/src/main/resources/schemas")
|
||||
generatorName.set("spring")
|
||||
library.set("spring-boot")
|
||||
inputSpec.set("${projectDir}/src/main/resources/chat-api.yml")
|
||||
configFile.set("${projectDir}/src/main/resources/config_backend.json")
|
||||
outputDir.set("${projectDir}/build/generated-sources/model")
|
||||
typeMappings.put("OffsetDateTime", "Instant")
|
||||
importMappings.put("java.time.OffsetDateTime", "java.time.Instant")
|
||||
modelNameSuffix.set("Dto")
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
openapi: 3.0.3
|
||||
|
||||
info:
|
||||
title: Minecraft Network API
|
||||
version: 1.0.0
|
||||
|
||||
servers:
|
||||
- url: http://localhost:8080/api
|
||||
|
||||
tags:
|
||||
- name: chat
|
||||
description: Data for displaying Chat messages to clients
|
||||
|
||||
paths:
|
||||
/chat/send/chat/message:
|
||||
post:
|
||||
tags:
|
||||
- chat
|
||||
summary: Sends one or more chat messages
|
||||
operationId: sendChatMessages
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/ChatMessage"
|
||||
responses:
|
||||
"202":
|
||||
description: Accepted
|
||||
|
||||
/chat/send/servers/state:
|
||||
post:
|
||||
tags:
|
||||
- chat
|
||||
summary: Update server states
|
||||
operationId: updateServerStates
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: "#/components/schemas/ServerState"
|
||||
responses:
|
||||
"202":
|
||||
description: Accepted
|
||||
components:
|
||||
schemas:
|
||||
User:
|
||||
type: object
|
||||
required:
|
||||
- uuid
|
||||
- name
|
||||
- styledName
|
||||
|
||||
properties:
|
||||
uuid:
|
||||
type: string
|
||||
format: uuid
|
||||
name:
|
||||
type: string
|
||||
styledName:
|
||||
type: string
|
||||
|
||||
ChatMessage:
|
||||
type: object
|
||||
required:
|
||||
- uuid
|
||||
- message
|
||||
- channel
|
||||
- server
|
||||
- timestamp
|
||||
- blocked
|
||||
properties:
|
||||
uuid:
|
||||
type: string
|
||||
format: uuid
|
||||
channel:
|
||||
type: string
|
||||
enum:
|
||||
- CHAT
|
||||
- PARTY
|
||||
- AC
|
||||
- GAC
|
||||
message:
|
||||
type: string
|
||||
server:
|
||||
type: string
|
||||
timestamp:
|
||||
type: string
|
||||
format: date-time
|
||||
blocked:
|
||||
type: boolean
|
||||
|
||||
PrivateMessage:
|
||||
type: object
|
||||
required:
|
||||
- sender
|
||||
- receiver
|
||||
- message
|
||||
- senderServer
|
||||
- receiverServer
|
||||
properties:
|
||||
sender:
|
||||
type: string
|
||||
format: uuid
|
||||
receiver:
|
||||
type: string
|
||||
format: uuid
|
||||
message:
|
||||
type: string
|
||||
senderServer:
|
||||
type: string
|
||||
receiverServer:
|
||||
type: string
|
||||
|
||||
Server:
|
||||
type: object
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
players:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/User"
|
||||
|
||||
ServerState:
|
||||
type: object
|
||||
properties:
|
||||
servers:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/Server"
|
||||
parameters:
|
||||
From:
|
||||
name: from
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
format: date-time
|
||||
Reference in New Issue
Block a user