diff --git a/app/controllers/users/statistics_controller.rb b/app/controllers/users/statistics_controller.rb index 680fb49f..dbd6ad7f 100644 --- a/app/controllers/users/statistics_controller.rb +++ b/app/controllers/users/statistics_controller.rb @@ -38,18 +38,13 @@ class Users::StatisticsController < Users::BaseController badges_visable = Array.new @badges_dic.each do |key,value| if value > 0 - badges_visable.append({"#{key}":value}) + #与describe同理,此处应该再增加一个 url字典 + describe = @badges_describe_dic[key] + badges_visable.append({"#{key}":value, "describe":describe}) end end render :json => {list: badges_visable, count: badges_visable.size} - # @badge = Badge.where(user_id: observed_user.id).pluck(:watcher, :pullrequest, :many_fans, :amazing_project_owner).first - # watcher = @badge[0] - # pullrequest = @badge[1] - # many_fans = @badge[2] - # amazing_project_owner = @badge[3] - # render :json => {watcher: watcher, pullrequest: pullrequest, many_fans: many_fans, amazing_project_owner: amazing_project_owner} - end ###############change############### @@ -281,39 +276,32 @@ end # 三类 # 第一类 贡献类 -# 1. 用户拥有10个项目以上 # 2.用户有项目获得高星 # 3.用户有数个高星项目 # 4.用户拥有一个点赞数很高的项目 # 5.用户拥有数个点赞数很高的项目 # 6. 用户关注数超过10人 # 7. 用户的累积获赞人数 -# 8. 用户连续一周/月有commit -# 9. 用户累积pr数 +# 8. 用户累积pr数 # 第二类 活动类 -# 第三类 特殊类 +# 第三类 活跃类 +# 1. 用户拥有10个项目以上 +# 2. 用户连续一周/月有commit +# 3. 用户涨粉迅速 def preload_badge_data - - @many_projects_cache = "many_projects" - @manyParisesProject_cache = "manyParisesProject" - @parises_project_cache = "parises_project" - @manyWatchersProject_cache = "manyWatchersProject" - @watchers_project_cache = "watchers_project" - @many_fans_cache = "many_fans" - @many_pr_cache = "many_pr" - @many_issue_cache = "many_issue" - @active_in_week_cache = "active_in_week" + badge_describe + cache_describe #加载缓存资源 load_redis - #存放用户获得的徽章字典 @badges_dic = Hash.new(0) - # 有些数据直接从缓存中读取,由于题目要求不能破坏原本的函数,其他暂时缓存写到了 Cache::V2::UserBadgeService里, - # 但数据类型比较相似,感觉写到UserStatisticService里比较合适,这里暂时使用的是直接查询得到的数据 + # 有些数据可以考虑直接从缓存中读取,由于题目要求不能破坏原本的函数,暂时缓存写了直接查询, + # 例如 Watcher.where(watchable: observed_user).count 可以用@user_result["follow-count"]来替代 + # @user_result = Cache::V2::UserStatisticService.new(observed_user.id).read # 用户项目获得的徽章 @@ -322,7 +310,9 @@ def preload_badge_data # 用户项目数量 y project_count = @user_result["project-count"].to_i - @badges_dic["project_count"] = project_count + if project_count > 10 + @badges_dic["project_count"] = project_count + end # 用户点赞数量 y # 用户项目被follow数量 @@ -407,8 +397,7 @@ def redis_judge_reload(judge_cache, new_value) end end - -def cache_name +def cache_describe @many_projects_cache = "many_projects" @manyParisesProject_cache = "manyParisesProject" @parises_project_cache = "parises_project" @@ -421,6 +410,24 @@ def cache_name end +def badge_describe + + @badges_describe_dic = Hash.new(0) + @badges_describe_dic["many_projects"] = "参与了多个project!" + @badges_describe_dic["manyParisesProject"] = "有多个点赞数高的project!" + @badges_describe_dic["parises_project"] = "有一个项目获得了很高的点赞数!" + @badges_describe_dic["manyWatchersProject"] = "有多个关注三诉讼诉讼诉讼诉讼诉讼诉讼数高的project!" + @badges_describe_dic["watchers_project"] = "有一个项目获得了很高的关注数!" + @badges_describe_dic["watchers_project"] = "有一个项目获得了很高的关注数!" + @badges_describe_dic["many_fans"] = "粉丝数很多!" + @badges_describe_dic["many_fans"] = "贡献了很多pr!" + @badges_describe_dic["many_pr"] = "贡献了很多issue!" + @badges_describe_dic["many_issue"] = "粉丝数很多!" + @badges_describe_dic["active_in_week"] = "一周活跃打卡成就!" + +end + + def load_redis @badge = Badge.find_or_create_by(user_id: observed_user.id) $redis_cache.hset(user_statistic_key, @many_projects_cache, @badge.many_projects) @@ -435,8 +442,11 @@ def load_redis end def updateService(update_name, update_value) - @badge = Badge.find_or_create_by(user_id: observed_user.id) - @badge.update_attribute(update_name,update_value) - @badge.save + #添加事务,如果更新失败则回滚 + ActiveRecord::Base.transaction do + @badge = Badge.find_or_create_by!(user_id: observed_user.id) + @badge.update_attributes!(update_name => update_value) + @badge.save! + end end