diff --git a/routers/api/v1/repo/repo_dashbord.go b/routers/api/v1/repo/repo_dashbord.go index 975c3aa00..d5d4ceae2 100644 --- a/routers/api/v1/repo/repo_dashbord.go +++ b/routers/api/v1/repo/repo_dashbord.go @@ -107,6 +107,7 @@ func GetAllProjectsPeriodStatistics(ctx *context.Context) { ctx.Error(http.StatusBadRequest, ctx.Tr("repo.total_count_get_error")) return } + sql := generateSqlByType(ctx, beginTime, endTime, latestDate, q, orderBy, page, pageSize) projectsPeriodData := ProjectsPeriodData{ RecordBeginTime: recordBeginTime.Format(DATE_FORMAT), @@ -114,13 +115,23 @@ func GetAllProjectsPeriodStatistics(ctx *context.Context) { TotalPage: getTotalPage(total, pageSize), TotalCount: total, LastUpdatedTime: latestUpdatedTime, - PageRecords: models.GetRepoStatisticByRawSql(generatePageSql(beginTime, endTime, latestDate, q, orderBy, page, pageSize)), + PageRecords: models.GetRepoStatisticByRawSql(sql), } ctx.JSON(http.StatusOK, projectsPeriodData) } +func generateSqlByType(ctx *context.Context, beginTime time.Time, endTime time.Time, latestDate string, q string, orderBy string, page int, pageSize int) string { + sql := "" + if ctx.QueryTrim("type") == "all" { + sql = generateTypeAllSql(beginTime, endTime, latestDate, q, orderBy, page, pageSize) + } else { + sql = generatePageSql(beginTime, endTime, latestDate, q, orderBy, page, pageSize) + } + return sql +} + func ServeAllProjectsPeriodStatisticsFile(ctx *context.Context) { recordBeginTime, err := getRecordBeginTime() @@ -175,7 +186,7 @@ func ServeAllProjectsPeriodStatisticsFile(ctx *context.Context) { writer.Write(allProjectsPeroidHeader(ctx)) for i := 0; i <= totalPage; i++ { - pageRecords := models.GetRepoStatisticByRawSql(generatePageSql(beginTime, endTime, latestDate, q, orderBy, i+1, pageSize)) + pageRecords := models.GetRepoStatisticByRawSql(generateSqlByType(ctx, beginTime, endTime, latestDate, q, orderBy, i+1, pageSize)) for _, record := range pageRecords { e = writer.Write(allProjectsPeroidValues(record, ctx)) if e != nil { @@ -358,11 +369,11 @@ func generateTargetSql(beginTime time.Time, endTime time.Time, repoId int64) str return sql } -func generateCountSql(beginTime time.Time, endTime time.Time, yesterday string, q string) string { +func generateCountSql(beginTime time.Time, endTime time.Time, latestDate string, q string) string { countSql := "SELECT count(*) FROM " + "(SELECT repo_id FROM repo_statistic where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " group by repo_id) A," + - "(SELECT repo_id,name,is_private,radar_total from public.repo_statistic where date='" + yesterday + "') B" + + "(SELECT repo_id,name,is_private,radar_total from public.repo_statistic where date='" + latestDate + "') B" + " where A.repo_id=B.repo_id" if q != "" { countSql = countSql + " and B.name like '%" + q + "%'" @@ -370,18 +381,34 @@ func generateCountSql(beginTime time.Time, endTime time.Time, yesterday string, return countSql } -func generatePageSql(beginTime time.Time, endTime time.Time, yesterday string, q string, orderBy string, page int, pageSize int) string { - countSql := "SELECT A.repo_id,name,is_private,radar_total,num_watches,num_visits,num_downloads,num_pulls,num_commits,num_stars,num_forks,num_issues,num_closed_issues,num_contributor FROM " + +func generateTypeAllSql(beginTime time.Time, endTime time.Time, latestDate string, q string, orderBy string, page int, pageSize int) string { + sql := "SELECT A.repo_id,name,is_private,radar_total,num_watches,num_visits,num_downloads,num_pulls,num_commits,num_stars,num_forks,num_issues,num_closed_issues,num_contributor FROM " + + "(SELECT repo_id,sum(num_visits) as num_visits " + + " FROM repo_statistic where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " group by repo_id) A," + + "(SELECT repo_id,name,is_private,radar_total,num_watches,num_downloads,num_pulls,num_commits,num_stars,num_forks,num_issues,num_closed_issues,num_contributor from public.repo_statistic where date='" + latestDate + "') B" + + " where A.repo_id=B.repo_id" + + if q != "" { + sql = sql + " and name like '%" + q + "%'" + } + sql = sql + " order by " + orderBy + " desc,repo_id" + " limit " + strconv.Itoa(pageSize) + " offset " + strconv.Itoa((page-1)*pageSize) + return sql +} + +func generatePageSql(beginTime time.Time, endTime time.Time, latestDate string, q string, orderBy string, page int, pageSize int) string { + + sql := "SELECT A.repo_id,name,is_private,radar_total,num_watches,num_visits,num_downloads,num_pulls,num_commits,num_stars,num_forks,num_issues,num_closed_issues,num_contributor FROM " + "(SELECT repo_id,sum(num_watches_added) as num_watches,sum(num_visits) as num_visits, sum(num_downloads_added) as num_downloads,sum(num_pulls_added) as num_pulls,sum(num_commits_added) as num_commits,sum(num_stars_added) as num_stars,sum(num_forks_added) num_forks,sum(num_issues_added) as num_issues,sum(num_closed_issues_added) as num_closed_issues,sum(num_contributor_added) as num_contributor " + " FROM repo_statistic where created_unix >=" + strconv.FormatInt(beginTime.Unix(), 10) + " and created_unix<" + strconv.FormatInt(endTime.Unix(), 10) + " group by repo_id) A," + - "(SELECT repo_id,name,is_private,radar_total from public.repo_statistic where date='" + yesterday + "') B" + + "(SELECT repo_id,name,is_private,radar_total from public.repo_statistic where date='" + latestDate + "') B" + " where A.repo_id=B.repo_id" if q != "" { - countSql = countSql + " and B.name like '%" + q + "%'" + sql = sql + " and B.name like '%" + q + "%'" } - countSql = countSql + " order by " + orderBy + " desc,A.repo_id" + " limit " + strconv.Itoa(pageSize) + " offset " + strconv.Itoa((page-1)*pageSize) - return countSql + sql = sql + " order by " + orderBy + " desc,A.repo_id" + " limit " + strconv.Itoa(pageSize) + " offset " + strconv.Itoa((page-1)*pageSize) + return sql } func getOrderBy(ctx *context.Context) string {