Skip to content
This repository has been archived by the owner on Nov 29, 2021. It is now read-only.

Commit

Permalink
feat: フォームの定義を追加 #13
Browse files Browse the repository at this point in the history
  • Loading branch information
sya-ri committed May 7, 2021
1 parent 807b52b commit 0fa72a0
Show file tree
Hide file tree
Showing 7 changed files with 149 additions and 0 deletions.
6 changes: 6 additions & 0 deletions DOCUMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@
- /group
- [/list](#get-usergrouplist)

## データタイプ

| 名前 | 内容 | 説明 |
|-----|------|-----|
| Date | `yyyy/MM/dd HH:mm:ss` | 日付 |

## `GET` `/auth`
ログインできているか確認する。

Expand Down
43 changes: 43 additions & 0 deletions src/main/kotlin/com/kokasai/api/form/FormDefineFile.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.kokasai.api.form

import com.kokasai.api.util.serialize.DateSerializer
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import java.util.Date

@Serializable
data class FormDefineFile(
val name: String,
val description: String,
@Serializable(with = DateSerializer::class) val receive: Date,
@Serializable(with = DateSerializer::class) val limit: Date,
val values: Map<Int, FormDefineValue>,
val group: List<String>
)

@Serializable
data class FormDefineValue(
val name: String,
val description: String,
val type: FormDefineType
)

@Serializable
sealed class FormDefineType {
@Serializable
@SerialName("string")
object String : FormDefineType() {
const val name = "string"
}

@Serializable
@SerialName("check")
data class Check(
val element: Map<Int, kotlin.String>,
val limit: Int
) : FormDefineType() {
companion object {
const val name = "check"
}
}
}
25 changes: 25 additions & 0 deletions src/main/kotlin/com/kokasai/api/form/FormGetFile.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.kokasai.api.form

import com.kokasai.api.util.serialize.DateSerializer
import kotlinx.serialization.Serializable
import java.util.Date

@Serializable
data class FormGetFile(
val name: String,
val description: String,
@Serializable(with = DateSerializer::class) val receive: Date,
@Serializable(with = DateSerializer::class) val limit: Date,
val values: Map<Int, FormGetValue>,
val comment: String,
val status: Int
)

@Serializable
data class FormGetValue(
val name: String,
val description: String,
val type: FormDefineType,
val value: FormSaveValue,
val comment: String
)
10 changes: 10 additions & 0 deletions src/main/kotlin/com/kokasai/api/form/FormResponseFile.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.kokasai.api.form

import kotlinx.serialization.Serializable

@Serializable
data class FormResponseFile(
val values: Map<Int, FormSaveType>,
val comment: String,
val status: Int
)
28 changes: 28 additions & 0 deletions src/main/kotlin/com/kokasai/api/form/FormSaveFile.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.kokasai.api.form

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class FormSaveFile(
val values: Map<Int, FormSaveValue>,
val comment: String,
val status: Int
)

@Serializable
data class FormSaveValue(
val value: FormSaveType,
val comment: String
)

@Serializable
sealed class FormSaveType {
@Serializable
@SerialName("string")
data class String(val content: kotlin.String)

@Serializable
@SerialName("check")
data class Check(val select: List<Int>)
}
8 changes: 8 additions & 0 deletions src/main/kotlin/com/kokasai/api/form/FormSubmitFile.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.kokasai.api.form

import kotlinx.serialization.Serializable

@Serializable
data class FormSubmitFile(
val values: Map<Int, FormSaveType>
)
29 changes: 29 additions & 0 deletions src/main/kotlin/com/kokasai/api/util/serialize/DateSerializer.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.kokasai.api.util.serialize

import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import java.text.SimpleDateFormat
import java.util.Date

class DateSerializer : KSerializer<Date> {
override val descriptor: SerialDescriptor by lazy {
PrimitiveSerialDescriptor(
DateSerializer::class.qualifiedName!!,
PrimitiveKind.STRING
)
}

private val formatter = SimpleDateFormat("yyyy/MM/dd HH:mm:ss")

override fun serialize(encoder: Encoder, value: Date) {
encoder.encodeString(formatter.format(value))
}

override fun deserialize(decoder: Decoder): Date {
return formatter.parse(decoder.decodeString())
}
}

0 comments on commit 0fa72a0

Please sign in to comment.