Skip to content

Commit dcfdd76

Browse files
committed
handle top level map, float, int
1 parent 97aa639 commit dcfdd76

File tree

6 files changed

+708
-17
lines changed

6 files changed

+708
-17
lines changed

main_test.go

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,7 @@ func TestAPIResponseConsistency(t *testing.T) {
146146
createdUsers := []db.User{}
147147
for i := 0; i < NUMBER_OF_USERS; i++ {
148148
user, _, err := cacheClient.CreateRandomUser()
149-
if err != nil {
150-
fmt.Println("error ", err)
151-
return
152-
}
149+
assert.Nil(t, err)
153150
createdUsers = append(createdUsers, *user)
154151
}
155152

@@ -159,10 +156,7 @@ func TestAPIResponseConsistency(t *testing.T) {
159156

160157
for i := 0; i < NUMBER_OF_USERS; i++ {
161158
users, tt, err := cacheClient.PaginateUsers()
162-
if err != nil {
163-
fmt.Println("error ", err)
164-
return
165-
}
159+
assert.Nil(t, err)
166160
cachedUsersResponses = append(cachedUsersResponses, users...)
167161
timeTakenForCacheClient += tt
168162
}
@@ -171,10 +165,7 @@ func TestAPIResponseConsistency(t *testing.T) {
171165
timeTakenForDefaultClient := time.Duration(0)
172166
for i := 0; i < NUMBER_OF_USERS; i++ {
173167
users, tt, err := defaultClient.PaginateUsers()
174-
if err != nil {
175-
fmt.Println("error ", err)
176-
return
177-
}
168+
assert.Nil(t, err)
178169
defaultUserResponses = append(defaultUserResponses, users...)
179170
timeTakenForDefaultClient += tt
180171
}
@@ -184,6 +175,27 @@ func TestAPIResponseConsistency(t *testing.T) {
184175

185176
assert.Equal(t, len(cachedUsersResponses), len(defaultUserResponses))
186177
assert.Equal(t, cachedUsersResponses, defaultUserResponses)
178+
179+
cachedSystemDetailsResponses := []map[string]interface{}{}
180+
defaultSystemDetailsResponses := []map[string]interface{}{}
181+
// get system details from cache client and default client
182+
for i := 0; i < NUMBER_OF_USERS; i++ {
183+
details, _, err := defaultClient.GetSystemDetails()
184+
assert.NotNil(t, details)
185+
assert.Nil(t, err)
186+
defaultSystemDetailsResponses = append(defaultSystemDetailsResponses, details)
187+
}
188+
189+
// get system details from cache client and default client
190+
for i := 0; i < NUMBER_OF_USERS; i++ {
191+
details, _, err := cacheClient.GetSystemDetails()
192+
assert.NotNil(t, details)
193+
assert.Nil(t, err)
194+
cachedSystemDetailsResponses = append(cachedSystemDetailsResponses, details)
195+
}
196+
197+
assert.Equal(t, len(cachedSystemDetailsResponses), len(defaultSystemDetailsResponses))
198+
assert.Equal(t, cachedSystemDetailsResponses, defaultSystemDetailsResponses)
187199
}
188200

189201
func TestWithTodoOperations(t *testing.T) {

test_api/todo/db/connection.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,76 @@ func (d Connection) GetAllTodos(todos *[]Todo) error {
100100
return d.DB.Find(todos).Error
101101
}
102102

103+
func (d Connection) GetTotalTodos() int {
104+
var count int64
105+
d.DB.Model(&Todo{}).Count(&count)
106+
return int(count)
107+
}
108+
109+
func (d Connection) GetSystemActivityHistoryForLast7Days() ([]int, error) {
110+
var todos []Todo
111+
err := d.GetAllTodos(&todos)
112+
if err != nil {
113+
return nil, err
114+
}
115+
activityHistory := make([]int, 7)
116+
for i := 0; i < 7; i++ {
117+
var activity int
118+
for _, todo := range todos {
119+
if todo.CreatedAt.After(time.Now().AddDate(0, 0, -i)) {
120+
activity++
121+
}
122+
}
123+
activityHistory[i] = activity
124+
}
125+
return activityHistory, nil
126+
}
127+
128+
func (d Connection) GetSystemCompletionRateForLast7Days() ([]float64, error) {
129+
var todos []Todo
130+
err := d.GetAllTodos(&todos)
131+
if err != nil {
132+
return nil, err
133+
}
134+
completionRates := make([]float64, 7)
135+
for i := 0; i < 7; i++ {
136+
var completed, total int
137+
for _, todo := range todos {
138+
if todo.CreatedAt.After(time.Now().AddDate(0, 0, -i)) {
139+
total++
140+
if todo.Done {
141+
completed++
142+
}
143+
}
144+
}
145+
if total == 0 {
146+
completionRates[i] = 0
147+
continue
148+
}
149+
completionRates[i] = float64(completed) / float64(total)
150+
}
151+
return completionRates, nil
152+
}
153+
154+
func (d Connection) GetSystemCompletionRate() (float64, error) {
155+
var todos []Todo
156+
err := d.GetAllTodos(&todos)
157+
if err != nil {
158+
return 0, err
159+
}
160+
var completed, total int
161+
for _, todo := range todos {
162+
total++
163+
if todo.Done {
164+
completed++
165+
}
166+
}
167+
if total == 0 {
168+
return 0, nil
169+
}
170+
return float64(completed) / float64(total), nil
171+
}
172+
103173
func (d Connection) GetTodosByUserID(todos *[]Todo, userID string) error {
104174
return d.DB.Where("user_id=?", userID).Find(todos).Error
105175
}

0 commit comments

Comments
 (0)