Smart Contract
CookStocker
A.b576a3926d239682.CookStocker
1access(all) contract CookStocker {
2
3 access(self) let info: Info
4
5 /* 構造体 */
6 access(all) struct Info {
7
8 access(contract) var data: {String: VegeData}
9
10 /* setter */
11 access(contract) fun set(id: String, add: [String], remove: [String]) {
12 if let saved = self.data[id] {
13 for name in add {
14 saved.set(category: name, bought_at: getCurrentBlock().timestamp)
15 }
16 for name in remove {
17 saved.unset(category: name)
18 }
19 // Save
20 self.data[id] = saved
21 } else {
22 var data = VegeData()
23 for name in add {
24 data.set(category: name, bought_at: getCurrentBlock().timestamp)
25 }
26 for name in remove {
27 data.unset(category: name)
28 }
29 self.data[id] = data
30 }
31 }
32
33 access(contract) fun delete(id: String) {
34 self.data[id] = nil
35 }
36
37 init() {
38 self.data = {}
39 }
40 }
41
42 /* Info内の構造体 */
43 access(all) struct VegeData {
44
45 access(contract) var data: {String: UFix64?}
46
47 /* setter */
48 access(contract) fun set(category: String, bought_at: UFix64) {
49 self.data[category] = bought_at
50 }
51
52 access(contract) fun unset(category: String) {
53 self.data[category] = nil
54 }
55
56 init() {
57 self.data = {}
58 }
59 }
60
61 // GET
62 access(all) fun getCookStockerInfo(id: String): VegeData? {
63 return self.info.data[id]
64 }
65 // PUT
66 access(all) fun setCookStockerInfo(id: String, add: [String], remove: [String]) {
67 self.info.set(id: id, add: add, remove: remove);
68 }
69 // DELETE
70 access(all) fun deleteCookStockerInfo(id: String) {
71 self.info.delete(id: id)
72 }
73
74 init() {
75 self.info = Info()
76 }
77}
78