From b0a5c550246987b2e97eaf109004e072a302fa91 Mon Sep 17 00:00:00 2001 From: Rhythm <35167328+kRhythm@users.noreply.github.com> Date: Mon, 6 Dec 2021 17:04:09 +0530 Subject: [PATCH] removed switch cases --- handlers/downtimes.go | 5 +-- types/downtimes/database.go | 72 +++++++++++++++++++++---------------- 2 files changed, 42 insertions(+), 35 deletions(-) diff --git a/handlers/downtimes.go b/handlers/downtimes.go index 4385a04c..df45cac6 100644 --- a/handlers/downtimes.go +++ b/handlers/downtimes.go @@ -24,10 +24,7 @@ func findDowntime(r *http.Request) (*downtimes.Downtime, error) { func apiAllDowntimes(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) fmt.Println(vars) - ninetyDaysAgo := time.Now().Add(time.Duration(-90*24) * time.Hour) - start := ninetyDaysAgo - end := time.Now() - downtime,err := downtimes.FindAll(vars,start, end) + downtime,err := downtimes.FindAll(vars) if err != nil { sendErrorJson(err, w, r) return diff --git a/types/downtimes/database.go b/types/downtimes/database.go index 0286d71b..1c400036 100644 --- a/types/downtimes/database.go +++ b/types/downtimes/database.go @@ -3,7 +3,6 @@ package downtimes import ( "fmt" "github.com/statping/statping/database" - "github.com/statping/statping/types/services" "strconv" "time" ) @@ -74,38 +73,49 @@ type invalidTimeDurationError struct{} func (m *invalidTimeDurationError) Error() string { return "invalid time duration" } -func FindAll(vars map[string]string ,start time.Time, end time.Time) (*[]Downtime, error) { +func FindAll(vars map[string]string ) (*[]Downtime, error) { var downtime []Downtime - q := db.Where("start BETWEEN ? AND ? ", start, end) - for key,val :=range vars{ - switch key{ - case "start": - _,ok := vars["end"] - if ok && (vars["end"]>vars["start"]) { - start,err := ConvertToUnixTime(vars["start"]) - if err!=nil { - return &downtime,err - } - end,err := ConvertToUnixTime(vars["end"]) - if err!=nil { - return &downtime,err - } - q = q.Where("start BETWEEN ? AND ? ", start, end) - }else { - return &downtime,&invalidTimeDurationError{} - } - case "sub_status": - q = q.Where(" sub_status = ?",val) - case "service": - allServices := services.All() - for k,v := range allServices{ - if v.Name == val { - q = q.Where(" service = ?",k) - } - } - case "type": - q = q.Where(" type = ?",val) + var start time.Time + var end time.Time + var err error + var count int64 + st,ok1 := vars["start"] + en,ok2 := vars["end"] + if ok1 && ok2 && (en > st){ + start,err = ConvertToUnixTime(vars["start"]) + if err!=nil { + return &downtime,err } + end,err = ConvertToUnixTime(vars["end"]) + if err!=nil { + return &downtime,err + } + }else{ + ninetyDaysAgo := time.Now().Add(time.Duration(-90*24) * time.Hour) + start = ninetyDaysAgo + end = time.Now() + } + q := db.Where("start BETWEEN ? AND ? ", start, end) + subStatus,ok3 := vars["sub_status"] + if ok3{ + q = q.Where(" sub_status = ?", subStatus) + } + service,ok4 := vars["service"] + if ok4{ + q = q.Where(" service = ?", service) + } + ty,ok5 := vars["type"] + if ok5{ + q = q.Where(" type = ?", ty) + } + cnt,ok5 := vars["count"] + if ok5{ + count,err = strconv.ParseInt(cnt,10,64) + if count > 100 { + count = 100 + } + }else { + count = 20 } q = q.Order("id ASC ").Find(&downtime) return &downtime, q.Error()