ops_bill.go raw
1 // Copyright 2022-2025 The sacloud/iaas-api-go Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 package fake
16
17 import (
18 "context"
19 "time"
20
21 "github.com/sacloud/iaas-api-go"
22 "github.com/sacloud/iaas-api-go/types"
23 )
24
25 // ByContract is fake implementation
26 func (o *BillOp) ByContract(ctx context.Context, accountID types.ID) (*iaas.BillByContractResult, error) {
27 results, _ := find(o.key, iaas.APIDefaultZone, nil)
28 var values []*iaas.Bill
29 for _, res := range results {
30 dest := &iaas.Bill{}
31 copySameNameField(res, dest)
32 values = append(values, dest)
33 }
34 return &iaas.BillByContractResult{
35 Total: len(results),
36 Count: len(results),
37 From: 0,
38 Bills: values,
39 }, nil
40 }
41
42 // ByContractYear is fake implementation
43 func (o *BillOp) ByContractYear(ctx context.Context, accountID types.ID, year int) (*iaas.BillByContractYearResult, error) {
44 results, _ := find(o.key, iaas.APIDefaultZone, nil)
45 var values []*iaas.Bill
46 for _, res := range results {
47 dest := &iaas.Bill{}
48 copySameNameField(res, dest)
49 if dest.Date.Year() == year {
50 values = append(values, dest)
51 }
52 }
53 return &iaas.BillByContractYearResult{
54 Total: len(results),
55 Count: len(results),
56 From: 0,
57 Bills: values,
58 }, nil
59 }
60
61 // ByContractYearMonth is fake implementation
62 func (o *BillOp) ByContractYearMonth(ctx context.Context, accountID types.ID, year int, month int) (*iaas.BillByContractYearMonthResult, error) {
63 results, _ := find(o.key, iaas.APIDefaultZone, nil)
64 var values []*iaas.Bill
65 for _, res := range results {
66 dest := &iaas.Bill{}
67 copySameNameField(res, dest)
68 if dest.Date.Year() == year && int(dest.Date.Month()) == month {
69 values = append(values, dest)
70 }
71 }
72 return &iaas.BillByContractYearMonthResult{
73 Total: len(results),
74 Count: len(results),
75 From: 0,
76 Bills: values,
77 }, nil
78 }
79
80 // Read is fake implementation
81 func (o *BillOp) Read(ctx context.Context, id types.ID) (*iaas.BillReadResult, error) {
82 results, _ := find(o.key, iaas.APIDefaultZone, nil)
83 var values []*iaas.Bill
84 for _, res := range results {
85 dest := &iaas.Bill{}
86 copySameNameField(res, dest)
87 if dest.ID == id {
88 values = append(values, dest)
89 }
90 }
91 return &iaas.BillReadResult{
92 Total: len(results),
93 Count: len(results),
94 From: 0,
95 Bills: values,
96 }, nil
97 }
98
99 // Details is fake implementation
100 func (o *BillOp) Details(ctx context.Context, memberCode string, id types.ID) (*iaas.BillDetailsResult, error) {
101 rawResults := ds().Get(o.key+"Details", iaas.APIDefaultZone, id)
102 if rawResults == nil {
103 return nil, newErrorNotFound(o.key+"Details", id)
104 }
105
106 results := rawResults.(*[]*iaas.BillDetail)
107 var values []*iaas.BillDetail
108 for _, res := range *results {
109 dest := &iaas.BillDetail{}
110 copySameNameField(res, dest)
111 values = append(values, dest)
112 }
113
114 return &iaas.BillDetailsResult{
115 Total: len(*results),
116 Count: len(*results),
117 From: 0,
118 BillDetails: values,
119 }, nil
120 }
121
122 // DetailsCSV is fake implementation
123 func (o *BillOp) DetailsCSV(ctx context.Context, memberCode string, id types.ID) (*iaas.BillDetailCSV, error) {
124 rawResults := ds().Get(o.key+"Details", iaas.APIDefaultZone, id)
125 if rawResults == nil {
126 return nil, newErrorNotFound(o.key+"Details", id)
127 }
128
129 results := rawResults.(*[]*iaas.BillDetail)
130 for _, res := range *results {
131 dest := &iaas.BillDetail{}
132 copySameNameField(res, dest)
133 }
134
135 return &iaas.BillDetailCSV{
136 Count: len(*results),
137 ResponsedAt: time.Now(),
138 Filename: "sakura_cloud_20yy_mm.csv",
139 RawBody: "this,is,dummy,header\r\nthis,is,dummy,body",
140 HeaderRow: []string{"this", "is", "dummy", "header"},
141 BodyRows: [][]string{
142 {
143 "this", "is", "dummy", "body",
144 },
145 },
146 }, nil
147 }
148