com.suibari.nagi.putPreferences
Schema Diff
+91 -1
Compatibility Analysis
Backward Compatible
Backward compatible. 49 non-breaking changes.
Non-Breaking Changes (49)
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#moderationPreferences" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.chronicleReadYears" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.languagePreferences" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.languagePreferencesUpdatedAt" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderId" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderUpdatedAt" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.moderationPreferences" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.moderationPreferencesUpdatedAt" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.preferredName" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.replyFreq" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.languagePreferences" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.languagePreferencesUpdatedAt" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderId" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderUpdatedAt" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.moderationPreferences" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.moderationPreferencesUpdatedAt" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.preferredName" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.replyFreq" }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.chronicleReadYears", kind: "prop", name: Some("chronicleReadYears") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.languagePreferences", kind: "prop", name: Some("languagePreferences") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.moderationPreferences", kind: "prop", name: Some("moderationPreferences") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.moderationPreferencesUpdatedAt", kind: "prop", name: Some("moderationPreferencesUpdatedAt") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.preferredName", kind: "prop", name: Some("preferredName") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.replyFreq", kind: "prop", name: Some("replyFreq") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.chronicleReadYears", tgt: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items", tgt: "com.suibari.nagi.getChronicle#readYear", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:input.moderationPreferences", tgt: "com.suibari.nagi.getPreferences#moderationPreferences", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.chronicleReadYears", kind: "prop", name: Some("chronicleReadYears") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.languagePreferences", kind: "prop", name: Some("languagePreferences") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.moderationPreferences", kind: "prop", name: Some("moderationPreferences") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.moderationPreferencesUpdatedAt", kind: "prop", name: Some("moderationPreferencesUpdatedAt") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.preferredName", kind: "prop", name: Some("preferredName") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.replyFreq", kind: "prop", name: Some("replyFreq") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output.chronicleReadYears", tgt: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items", tgt: "com.suibari.nagi.getChronicle#readYear", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.suibari.nagi.putPreferences:output.moderationPreferences", tgt: "com.suibari.nagi.getPreferences#moderationPreferences", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.suibari.nagi.getChronicle#readYear" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#languagePreferences" }AddedVertex { vertex_id: "com.suibari.nagi.getPreferences#moderationPreferences" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.chronicleReadYears" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.languagePreferences" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.languagePreferencesUpdatedAt" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderId" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderUpdatedAt" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.moderationPreferences" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.moderationPreferencesUpdatedAt" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.preferredName" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:input.replyFreq" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.languagePreferences" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.languagePreferencesUpdatedAt" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderId" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderUpdatedAt" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.moderationPreferences" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.moderationPreferencesUpdatedAt" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.preferredName" }AddedVertex { vertex_id: "com.suibari.nagi.putPreferences:output.replyFreq" }
Additional Notes
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.chronicleReadYears", kind: "prop", name: Some("chronicleReadYears") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.languagePreferences", kind: "prop", name: Some("languagePreferences") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.moderationPreferences", kind: "prop", name: Some("moderationPreferences") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.moderationPreferencesUpdatedAt", kind: "prop", name: Some("moderationPreferencesUpdatedAt") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.preferredName", kind: "prop", name: Some("preferredName") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input", tgt: "com.suibari.nagi.putPreferences:input.replyFreq", kind: "prop", name: Some("replyFreq") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.chronicleReadYears", tgt: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.chronicleReadYears:items", tgt: "com.suibari.nagi.getChronicle#readYear", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:input.moderationPreferences", tgt: "com.suibari.nagi.getPreferences#moderationPreferences", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.chronicleReadYears", kind: "prop", name: Some("chronicleReadYears") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.languagePreferences", kind: "prop", name: Some("languagePreferences") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.languagePreferencesUpdatedAt", kind: "prop", name: Some("languagePreferencesUpdatedAt") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderId", kind: "prop", name: Some("lastBookmarkFolderId") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.lastBookmarkFolderUpdatedAt", kind: "prop", name: Some("lastBookmarkFolderUpdatedAt") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.moderationPreferences", kind: "prop", name: Some("moderationPreferences") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.moderationPreferencesUpdatedAt", kind: "prop", name: Some("moderationPreferencesUpdatedAt") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.preferredName", kind: "prop", name: Some("preferredName") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output", tgt: "com.suibari.nagi.putPreferences:output.replyFreq", kind: "prop", name: Some("replyFreq") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output.chronicleReadYears", tgt: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output.chronicleReadYears:items", tgt: "com.suibari.nagi.getChronicle#readYear", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output.languagePreferences", tgt: "com.suibari.nagi.getPreferences#languagePreferences", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.putPreferences:output.moderationPreferences", tgt: "com.suibari.nagi.getPreferences#moderationPreferences", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
-
"description": "同期対象の設定を書き込む。既読位置は (indexedAt, uri) が進むときだけ更新する単調マージ、お気に入りは updatedAt による後勝ち。どちらも省略でき、送った分だけが更新される。",
5
+
"description": "同期対象の本人設定を書き込む。既読位置は単調マージ、配列・言語・コンテンツ表示設定・最後のブックマークフォルダは updatedAt による後勝ち。各項目は省略でき、送った分だけを更新する。",
6
6
"errors": [
7
7
{
8
8
"name": "AuthRequired"
9
9
},
10
10
{
11
11
"name": "InvalidRequest"
12
12
}
13
13
],
14
14
"input": {
15
15
"encoding": "application/json",
16
16
"schema": {
17
17
"properties": {
18
+
"chronicleReadYears": {
19
+
"description": "年ごとの既読ハッシュ。過去の版は蓄積せず、現在の年表内容と一致する版だけを保存する。",
20
+
"items": {
21
+
"ref": "com.suibari.nagi.getChronicle#readYear",
22
+
"type": "ref"
23
+
},
24
+
"maxLength": 100,
25
+
"type": "array"
26
+
},
18
27
"emojiFavorites": {
19
28
"items": {
20
29
"type": "unknown"
21
30
},
22
31
"maxLength": 32,
23
32
"type": "array"
24
33
},
25
34
"emojiFavoritesUpdatedAt": {
26
35
"description": "emojiFavorites を送るときは必須。保存済みより古ければ書き込まない。",
27
36
"format": "datetime",
28
37
"type": "string"
29
38
},
30
39
"feedTabs": {
31
40
"items": {
32
41
"ref": "com.suibari.nagi.getPreferences#feedTab",
33
42
"type": "ref"
34
43
},
35
44
"maxLength": 16,
36
45
"type": "array"
37
46
},
38
47
"feedTabsUpdatedAt": {
39
48
"description": "feedTabs を送るときは必須。保存済みより古ければ書き込まない。",
40
49
"format": "datetime",
41
50
"type": "string"
42
51
},
52
+
"languagePreferences": {
53
+
"ref": "com.suibari.nagi.getPreferences#languagePreferences",
54
+
"type": "ref"
55
+
},
56
+
"languagePreferencesUpdatedAt": {
57
+
"format": "datetime",
58
+
"type": "string"
59
+
},
60
+
"lastBookmarkFolderId": {
61
+
"maxLength": 64,
62
+
"nullable": true,
63
+
"type": "string"
64
+
},
65
+
"lastBookmarkFolderUpdatedAt": {
66
+
"format": "datetime",
67
+
"type": "string"
68
+
},
69
+
"moderationPreferences": {
70
+
"ref": "com.suibari.nagi.getPreferences#moderationPreferences",
71
+
"type": "ref"
72
+
},
73
+
"moderationPreferencesUpdatedAt": {
74
+
"format": "datetime",
75
+
"type": "string"
76
+
},
77
+
"preferredName": {
78
+
"description": "botたんに呼んでほしい名前。空文字を送ると登録を解除し、表示名に戻す。送らなければ変更しない。",
79
+
"maxGraphemes": 40,
80
+
"maxLength": 120,
81
+
"type": "string"
82
+
},
43
83
"readPositions": {
44
84
"items": {
45
85
"ref": "com.suibari.nagi.getPreferences#readPosition",
46
86
"type": "ref"
47
87
},
48
88
"maxLength": 16,
49
89
"type": "array"
90
+
},
91
+
"replyFreq": {
92
+
"description": "botたんからの返信確率(0〜100%)。送らなければ変更しない。",
93
+
"maximum": 100,
94
+
"minimum": 0,
95
+
"type": "integer"
50
96
}
51
97
},
52
98
"type": "object"
53
99
}
54
100
},
55
101
"output": {
56
102
"encoding": "application/json",
57
103
"schema": {
58
104
"properties": {
105
+
"chronicleReadYears": {
106
+
"description": "年ごとの既読ハッシュ。過去の版は蓄積せず、現在の年表内容と一致する版だけを保存する。",
107
+
"items": {
108
+
"ref": "com.suibari.nagi.getChronicle#readYear",
109
+
"type": "ref"
110
+
},
111
+
"type": "array"
112
+
},
59
113
"emojiFavorites": {
60
114
"items": {
61
115
"type": "unknown"
62
116
},
63
117
"maxLength": 32,
64
118
"type": "array"
65
119
},
66
120
"emojiFavoritesUpdatedAt": {
67
121
"format": "datetime",
68
122
"type": "string"
69
123
},
70
124
"feedTabs": {
71
125
"items": {
72
126
"ref": "com.suibari.nagi.getPreferences#feedTab",
73
127
"type": "ref"
74
128
},
75
129
"maxLength": 16,
76
130
"type": "array"
77
131
},
78
132
"feedTabsUpdatedAt": {
79
133
"format": "datetime",
80
134
"type": "string"
81
135
},
136
+
"languagePreferences": {
137
+
"ref": "com.suibari.nagi.getPreferences#languagePreferences",
138
+
"type": "ref"
139
+
},
140
+
"languagePreferencesUpdatedAt": {
141
+
"format": "datetime",
142
+
"type": "string"
143
+
},
144
+
"lastBookmarkFolderId": {
145
+
"maxLength": 64,
146
+
"type": "string"
147
+
},
148
+
"lastBookmarkFolderUpdatedAt": {
149
+
"format": "datetime",
150
+
"type": "string"
151
+
},
152
+
"moderationPreferences": {
153
+
"ref": "com.suibari.nagi.getPreferences#moderationPreferences",
154
+
"type": "ref"
155
+
},
156
+
"moderationPreferencesUpdatedAt": {
157
+
"format": "datetime",
158
+
"type": "string"
159
+
},
160
+
"preferredName": {
161
+
"description": "botたんに呼んでほしい名前。省略時は未設定=表示名で呼ばれる。",
162
+
"maxGraphemes": 40,
163
+
"maxLength": 120,
164
+
"type": "string"
165
+
},
82
166
"readPositions": {
83
167
"description": "マージ後の確定値。送った位置が負けた場合は保存済みの方が返る。",
84
168
"items": {
85
169
"ref": "com.suibari.nagi.getPreferences#readPosition",
86
170
"type": "ref"
87
171
},
88
172
"type": "array"
173
+
},
174
+
"replyFreq": {
175
+
"description": "botたんからの返信確率(0〜100%)。",
176
+
"maximum": 100,
177
+
"minimum": 0,
178
+
"type": "integer"
89
179
}
90
180
},
91
181
"required": [
92
182
"readPositions",
93
183
"emojiFavorites"
94
184
],
95
185
"type": "object"
96
186
}
97
187
},
98
188
"type": "procedure"
99
189
}
100
190
},
101
191
"id": "com.suibari.nagi.putPreferences",
102
192
"lexicon": 1
103
193
}