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