com.suibari.nagi.drawCard
Schema Diff
+43 -1
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 13 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 (13)
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.drawCard:input" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.drawCard:input.guestToken" }
- 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.cards" }
- AddedVertex AddedVertex { vertex_id: "com.suibari.nagi.drawCard:output.cards:items" }
- 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.guestToken", kind: "prop", name: Some("guestToken") }
- 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") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.drawCard:output", tgt: "com.suibari.nagi.drawCard:output.cards", kind: "prop", name: Some("cards") }
- AddedEdge AddedEdge { src: "com.suibari.nagi.drawCard:output.cards", tgt: "com.suibari.nagi.drawCard:output.cards:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "com.suibari.nagi.drawCard:input" }AddedVertex { vertex_id: "com.suibari.nagi.drawCard:input.guestToken" }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.cards" }AddedVertex { vertex_id: "com.suibari.nagi.drawCard:output.cards:items" }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.guestToken", kind: "prop", name: Some("guestToken") }
- 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") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.drawCard:output", tgt: "com.suibari.nagi.drawCard:output.cards", kind: "prop", name: Some("cards") }
- Non-breaking: AddedEdge { src: "com.suibari.nagi.drawCard:output.cards", tgt: "com.suibari.nagi.drawCard:output.cards:items", kind: "items", name: None }
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。anniversary は記念日カードの受け取りで、抽選枠を消費しない。",
13
+
"knownValues": [
14
+
"my_nagi",
15
+
"reaction",
16
+
"anniversary"
17
+
]
18
+
},
19
+
"guestToken": {
20
+
"type": "string",
21
+
"description": "未サインイン中に同日引いた通常枠を引き継ぐ端末秘密。source=my_nagi のときだけ利用できる。"
22
+
},
23
+
"reactionUri": {
24
+
"type": "string",
25
+
"format": "at-uri",
26
+
"description": "source=reaction のとき必須。本人が当日作成した他ユーザー宛てリアクション。"
27
+
}
28
+
}
29
+
},
30
+
"encoding": "application/json"
31
+
},
6
32
"errors": [
7
33
{
8
34
"name": "AuthRequired"
9
35
}
10
36
],
11
37
"output": {
12
38
"schema": {
13
39
"type": "object",
14
40
"required": [
15
41
"card",
42
+
"source",
16
43
"alreadyDrawn",
17
44
"drawStatus"
18
45
],
19
46
"properties": {
20
47
"card": {
21
48
"type": "unknown",
22
49
"description": "引いたカード(定義 + 所持情報)。botたんコメントは非同期生成なので初回は空。"
23
50
},
51
+
"cards": {
52
+
"type": "array",
53
+
"items": {
54
+
"type": "unknown"
55
+
},
56
+
"description": "source=anniversary のみ。同日に複数の記念日が重なることがあるので今回受け取ったぶんを全部返す。card はこの先頭と同じ。"
57
+
},
24
58
"isNew": {
25
59
"type": "boolean",
26
60
"description": "コレクション初登場なら true。既に持っているカードなら false。"
27
61
},
62
+
"source": {
63
+
"type": "string",
64
+
"knownValues": [
65
+
"my_nagi",
66
+
"reaction",
67
+
"anniversary"
68
+
]
69
+
},
28
70
"drawStatus": {
29
71
"type": "unknown"
30
72
},
31
73
"alreadyDrawn": {
32
74
"type": "boolean",
33
75
"description": "true なら本日は既に引き済みで、返しているのはそのカード。"
34
76
},
35
77
"commentPending": {
36
78
"type": "boolean",
37
79
"description": "true の間は botたんコメントを生成中。クライアントは getCards で取り直す。"
38
80
}
39
81
}
40
82
},
41
83
"encoding": "application/json"
42
84
},
43
-
"description": "全肯定カードを1枚引く。1日1回(JST 4:00 が日付境界)。本日ぶんを既に引いている場合はエラーにせず、その日引いたカードをそのまま返す(冪等)。抽選はサーバ側で行い、結果は AppView にのみ保存される。"
85
+
"description": "全肯定カードを1枚引く。my Nagiの通常枠と他ユーザーへのリアクション枠を1日各1回利用できる(JST 4:00 が日付境界)。同じ枠を既に引いている場合は、そのカードをそのまま返す(冪等)。抽選はサーバ側で行う。source=anniversary は抽選ではなく、その日が記念日の人へ未受領ぶんを一括で配る(同じ記念日は1年に1枚)。"
44
86
}
45
87
},
46
88
"$type": "com.atproto.lexicon.schema",
47
89
"lexicon": 1
48
90
}