com.suibari.nagi.drawCard
Schema Diff
+30 -1
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 7 non-breaking changes.
Breaking Changes (1)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.suibari.nagi.drawCard:output", src: "com.suibari.nagi.drawCard:output", tgt: "com.suibari.nagi.drawCard:output.source", kind: "prop", name: Some("source") }
Non-Breaking Changes (7)
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.drawCard:input" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.drawCard:input.reactionUri" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.drawCard:input.source" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.drawCard:output.source" }
- AddedEdge AddedEdge { src: "com.suibari.nagi.drawCard", tgt: "com.suibari.nagi.drawCard:input", kind: "prop", name: Some("input") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.drawCard:input", tgt: "com.suibari.nagi.drawCard:input.reactionUri", kind: "prop", name: Some("reactionUri") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.drawCard:input", tgt: "com.suibari.nagi.drawCard:input.source", kind: "prop", name: Some("source") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.suibari.nagi.drawCard:input" }AddedVertex { vertex_id: "com.suibari.nagi.drawCard:input.reactionUri" }AddedVertex { vertex_id: "com.suibari.nagi.drawCard:input.source" }AddedVertex { vertex_id: "com.suibari.nagi.drawCard:output.source" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.suibari.nagi.drawCard:output", src: "com.suibari.nagi.drawCard:output", tgt: "com.suibari.nagi.drawCard:output.source", kind: "prop", name: Some("source") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.drawCard", tgt: "com.suibari.nagi.drawCard:input", kind: "prop", name: Some("input") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.drawCard:input", tgt: "com.suibari.nagi.drawCard:input.reactionUri", kind: "prop", name: Some("reactionUri") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.drawCard:input", tgt: "com.suibari.nagi.drawCard:input.source", kind: "prop", name: Some("source") }
1
1
{
2
2
"id": "com.suibari.nagi.drawCard",
3
3
"defs": {
4
4
"main": {
5
5
"type": "procedure",
6
+
"input": {
7
+
"schema": {
8
+
"type": "object",
9
+
"properties": {
10
+
"source": {
11
+
"type": "string",
12
+
"description": "省略時は後方互換のためmy_nagi。",
13
+
"knownValues": [
14
+
"my_nagi",
15
+
"reaction"
16
+
]
17
+
},
18
+
"reactionUri": {
19
+
"type": "string",
20
+
"format": "at-uri",
21
+
"description": "source=reaction のとき必須。本人が当日作成した他ユーザー宛てリアクション。"
22
+
}
23
+
}
24
+
},
25
+
"encoding": "application/json"
26
+
},
6
27
"errors": [
7
28
{
8
29
"name": "AuthRequired"
9
30
}
10
31
],
11
32
"output": {
12
33
"schema": {
13
34
"type": "object",
14
35
"required": [
15
36
"card",
37
+
"source",
16
38
"alreadyDrawn",
17
39
"drawStatus"
18
40
],
19
41
"properties": {
20
42
"card": {
21
43
"type": "unknown",
22
44
"description": "引いたカード(定義 + 所持情報)。botたんコメントは非同期生成なので初回は空。"
23
45
},
24
46
"isNew": {
25
47
"type": "boolean",
26
48
"description": "コレクション初登場なら true。既に持っているカードなら false。"
27
49
},
50
+
"source": {
51
+
"type": "string",
52
+
"knownValues": [
53
+
"my_nagi",
54
+
"reaction"
55
+
]
56
+
},
28
57
"drawStatus": {
29
58
"type": "unknown"
30
59
},
31
60
"alreadyDrawn": {
32
61
"type": "boolean",
33
62
"description": "true なら本日は既に引き済みで、返しているのはそのカード。"
34
63
},
35
64
"commentPending": {
36
65
"type": "boolean",
37
66
"description": "true の間は botたんコメントを生成中。クライアントは getCards で取り直す。"
38
67
}
39
68
}
40
69
},
41
70
"encoding": "application/json"
42
71
},
43
-
"description": "全肯定カードを1枚引く。1日1回(JST 4:00 が日付境界)。本日ぶんを既に引いている場合はエラーにせず、その日引いたカードをそのまま返す(冪等)。抽選はサーバ側で行い、結果は AppView にのみ保存される。"
72
+
"description": "全肯定カードを1枚引く。my Nagiの通常枠と他ユーザーへのリアクション枠を1日各1回利用できる(JST 4:00 が日付境界)。同じ枠を既に引いている場合は、そのカードをそのまま返す(冪等)。抽選はサーバ側で行う。"
44
73
}
45
74
},
46
75
"$type": "com.atproto.lexicon.schema",
47
76
"lexicon": 1
48
77
}