Cloud Firestore で プロパティ名を指定する方法

はじめに

今回はFirestoreの保存するプロパティ名を指定する方法を紹介します。

オブジェクトへの変換方法については以下の記事も参考にしてみてください。

qoopmk.hatenablog.jp

解決

@PropatyName を使用して保存されるプロパティ名を指定することができます。

/**
 * メッセージ 作成(送信)リクエスト
 *
 * @property id メッセージID
 * @property roomId メッセージルームID
 * @property senderId メッセージ送信者ID
 * @property type メッセージの種類
 * @property content メッセージの内容
 */
data class MessageSendRequest(
    val id: String,
    @get:PropertyName(value = "room_id") val roomId: String,
    @get:PropertyName(value = "sender_id") val senderId: String,
    val type: String,
    val content: String
) {
    /**
     * 既読フラグ
     */
    @get:PropertyName(value = "isRead")
    val isRead: Boolean = false
    /**
     * 作成日
     */
    @ServerTimestamp
    val createdAt: Date? = null
    /**
     * 更新日
     */
    @ServerTimestamp
    val updatedAt: Date? = null
}

注意点1

isRead というような is から始まるBooleanのプロパティ名には注意してください。
isRead を保存すると read というプロパティ名に自動で変換されて保存されるようです。
Firestoreでも isRead として保存したい場合は、以下のように@PropatyName を付与する必要があります。

@get:PropertyName(value = "isRead")
val isRead: Boolean = false

注意点2

@ServerTimestamp が購読時にnullになるケースについてはこちらの記事を参考にしてください。

qoopmk.hatenablog.jp