com.suibari.nagi.putPreferences
Schema Diff
+24 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 8 non-breaking changes.
Non-Breaking Changes (8)
- 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.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.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: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") }
Migration Guidance
Added Elements
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.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.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: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") }
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
10
"feedTabs": {
11
11
"type": "array",
12
12
"items": {
13
13
"ref": "com.suibari.nagi.getPreferences#feedTab",
14
14
"type": "ref"
15
15
},
16
16
"maxLength": 16
17
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
+
},
18
30
"readPositions": {
19
31
"type": "array",
20
32
"items": {
21
33
"ref": "com.suibari.nagi.getPreferences#readPosition",
22
34
"type": "ref"
23
35
},
24
36
"maxLength": 16
25
37
},
26
38
"emojiFavorites": {
27
39
"type": "array",
28
40
"items": {
29
41
"type": "unknown"
30
42
},
31
43
"maxLength": 32
32
44
},
33
45
"feedTabsUpdatedAt": {
34
46
"type": "string",
35
47
"format": "datetime",
36
48
"description": "feedTabs を送るときは必須。保存済みより古ければ書き込まない。"
37
49
},
38
50
"emojiFavoritesUpdatedAt": {
39
51
"type": "string",
40
52
"format": "datetime",
41
53
"description": "emojiFavorites を送るときは必須。保存済みより古ければ書き込まない。"
42
54
}
43
55
}
44
56
},
45
57
"encoding": "application/json"
46
58
},
47
59
"errors": [
48
60
{
49
61
"name": "AuthRequired"
50
62
},
51
63
{
52
64
"name": "InvalidRequest"
53
65
}
54
66
],
55
67
"output": {
56
68
"schema": {
57
69
"type": "object",
58
70
"required": [
59
71
"readPositions",
60
72
"emojiFavorites"
61
73
],
62
74
"properties": {
63
75
"feedTabs": {
64
76
"type": "array",
65
77
"items": {
66
78
"ref": "com.suibari.nagi.getPreferences#feedTab",
67
79
"type": "ref"
68
80
},
69
81
"maxLength": 16
70
82
},
83
+
"replyFreq": {
84
+
"type": "integer",
85
+
"maximum": 100,
86
+
"minimum": 0,
87
+
"description": "botたんからの返信確率(0〜100%)。"
88
+
},
89
+
"preferredName": {
90
+
"type": "string",
91
+
"maxLength": 120,
92
+
"description": "botたんに呼んでほしい名前。省略時は未設定=表示名で呼ばれる。",
93
+
"maxGraphemes": 40
94
+
},
71
95
"readPositions": {
72
96
"type": "array",
73
97
"items": {
74
98
"ref": "com.suibari.nagi.getPreferences#readPosition",
75
99
"type": "ref"
76
100
},
77
101
"description": "マージ後の確定値。送った位置が負けた場合は保存済みの方が返る。"
78
102
},
79
103
"emojiFavorites": {
80
104
"type": "array",
81
105
"items": {
82
106
"type": "unknown"
83
107
},
84
108
"maxLength": 32
85
109
},
86
110
"feedTabsUpdatedAt": {
87
111
"type": "string",
88
112
"format": "datetime"
89
113
},
90
114
"emojiFavoritesUpdatedAt": {
91
115
"type": "string",
92
116
"format": "datetime"
93
117
}
94
118
}
95
119
},
96
120
"encoding": "application/json"
97
121
},
98
122
"description": "同期対象の設定を書き込む。既読位置は (indexedAt, uri) が進むときだけ更新する単調マージ、お気に入りは updatedAt による後勝ち。どちらも省略でき、送った分だけが更新される。"
99
123
}
100
124
},
101
125
"$type": "com.atproto.lexicon.schema",
102
126
"lexicon": 1
103
127
}