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