Skip to content

Commit 39918ca

Browse files
committed
fix: unmarshalling number to FileSize
1 parent 4a7f576 commit 39918ca

3 files changed

Lines changed: 20 additions & 13 deletions

File tree

client/client.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ func (z *ZoomClient) GetIntervalMeetings(ctx context.Context, from, to time.Time
157157
recordings := &model.Recordings{}
158158

159159
if err := json.NewDecoder(resp.Body).Decode(recordings); err != nil {
160-
return nil, err
160+
return nil, fmt.Errorf("failed to unmarshal recordings: %w", err)
161161
}
162162

163163
meetings = append(meetings, recordings.Meetings...)
@@ -211,7 +211,7 @@ func (z *ZoomClient) GetAllMeetingsWithRetry(ctx context.Context) ([]model.Meeti
211211
var meetings []model.Meeting
212212
var err error
213213

214-
for i := 0; i < 10; i++ {
214+
for i := range 10 {
215215
meetings, err = z.GetAllMeetings(ctx)
216216
if err != nil {
217217
delay := 30 * time.Duration(i) * time.Second

client/client_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,12 @@ func Test_ZoomClient(t *testing.T) {
5151
assert.Equal(t, len(meetings), len(meetingsInterval))
5252

5353
// DeleteRecordingsOverCapacity test
54-
storageCapacity := model.FileSize(500 * 1024 * 1024 * 1024) // 500GB
54+
storageCapacity := model.FileSize(1000 * 1024 * 1024 * 1024) // 1 TB
5555
deleted, err := c.DeleteRecordingsOverCapacity(context.Background(), storageCapacity)
5656
assert.NoError(t, err)
5757
assert.NotNil(t, deleted)
5858

59-
// Get cloud storage
59+
// GetCloudStorageReport
6060
// from the day before yesterday to yesterday
6161
from := time.Now().AddDate(0, 0, -2).Format("2006-01-02")
6262
to := time.Now().Format("2006-01-02")
@@ -66,7 +66,7 @@ func Test_ZoomClient(t *testing.T) {
6666
assert.NotNil(t, storageReport)
6767
log.Printf("[DEBUG] Storage report: %+v", storageReport)
6868

69-
// Get token error condition
69+
// GetToken error condition
7070
cfg.Client.Secret = "error"
7171
c = NewZoomClient(cfg.Client)
7272
assert.NotNil(t, c)

storage/model/models.go

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,31 +118,38 @@ func (f FileSize) MarshalJSON() ([]byte, error) {
118118
return fmt.Appendf(nil, `"%s"`, f.String()), nil
119119
}
120120

121-
// UnmarshalJSON implements the json.Unmarshaler interface for FileSize
121+
// UnmarshalJSON implements the json.Unmarshaler interface for FileSize.
122+
// It can parse either number (nn) or string (nn KB, nn MB).
122123
func (f *FileSize) UnmarshalJSON(data []byte) error {
123-
var usage string
124-
if err := json.Unmarshal(data, &usage); err != nil {
125-
return err
124+
var sizeNum uint64
125+
if err := json.Unmarshal(data, &sizeNum); err == nil {
126+
*f = FileSize(sizeNum)
127+
return nil
128+
}
129+
130+
var sizeStr string
131+
if err := json.Unmarshal(data, &sizeStr); err != nil {
132+
return fmt.Errorf("cannot unmarshal FileSize value(%s) to neither string nor uint64: %w", data, err)
126133
}
127134

128-
bytes, err := parseUsageToBytes(usage)
135+
size, err := parseSizeStrToBytes(sizeStr)
129136
if err != nil {
130137
return err
131138
}
132139

133-
*f = FileSize(bytes)
140+
*f = FileSize(size)
134141
return nil
135142
}
136143

137-
func parseUsageToBytes(usage string) (int64, error) {
144+
func parseSizeStrToBytes(usage string) (int64, error) {
138145
parts := strings.Fields(usage)
139146
if len(parts) < 1 {
140147
return 0, fmt.Errorf("invalid format: %s", usage)
141148
}
142149

143150
value, err := strconv.ParseFloat(parts[0], 64)
144151
if err != nil {
145-
return 0, err
152+
return 0, fmt.Errorf("cannot parse float value: %f, %w", value, err)
146153
}
147154

148155
if len(parts) < 2 {

0 commit comments

Comments
 (0)