|
| 1 | +defmoduleMastaniServer.Statisticsdo |
| 2 | +@moduledoc""" |
| 3 | + The Statistics context. |
| 4 | + """ |
| 5 | + |
| 6 | +importEcto.Query,warn:false |
| 7 | +importHelper.Utils,only:[done:1] |
| 8 | + |
| 9 | +aliasMastaniServer.Repo |
| 10 | +aliasMastaniServer.Accounts.User |
| 11 | +aliasMastaniServer.Statistics.UserContributes |
| 12 | +aliasHelper.ORM |
| 13 | + |
| 14 | +@doc""" |
| 15 | + Returns the list of user_contributes. |
| 16 | + """ |
| 17 | +defmake_contribute(%User{}=user)do |
| 18 | +today=Timex.today()|>Date.to_iso8601() |
| 19 | + |
| 20 | +user_id= |
| 21 | +ifis_integer(user.id), |
| 22 | +do:user.id, |
| 23 | +else:user.id|>String.to_integer() |
| 24 | + |
| 25 | +with{:ok,contribute}<-ORM.find_by(UserContributes,user_id:user_id,date:today)do |
| 26 | +inc_contribute_count(contribute)|>done |
| 27 | +else |
| 28 | +{:error,_}-> |
| 29 | +%UserContributes{} |
| 30 | +|>UserContributes.changeset(%{user_id:user_id,date:today,count:1}) |
| 31 | +|>Repo.insert() |
| 32 | +end |
| 33 | +end |
| 34 | + |
| 35 | +deflist_user_contributes(%User{}=user)do |
| 36 | +end_of_today=Timex.now()|>Timex.end_of_day() |
| 37 | +six_month_ago=Timex.shift(Timex.today(),months:-6)|>Timex.to_datetime() |
| 38 | + |
| 39 | +user_id= |
| 40 | +ifis_integer(user.id), |
| 41 | +do:user.id, |
| 42 | +else:user.id|>String.to_integer() |
| 43 | + |
| 44 | +query= |
| 45 | +from( |
| 46 | +cin"user_contributes", |
| 47 | +where:c.user_id==^user_id, |
| 48 | +where:c.inserted_at>=^six_month_ago, |
| 49 | +where:c.inserted_at<=^end_of_today, |
| 50 | +# where: c.date >= ^(Timex.shift(today, months: -6) |> Date.to_iso8601), |
| 51 | +# where: c.date <= ^(Timex.end_of_day(today) |> Date.to_iso8601), |
| 52 | +select:%{date:c.date,count:c.count} |
| 53 | +) |
| 54 | + |
| 55 | +Repo.all(query)|>to_contribute_map|>done |
| 56 | +end |
| 57 | + |
| 58 | +defpto_contribute_map(data)do |
| 59 | +data |
| 60 | +|>Enum.map(fn%{count:count,date:date}->%{date:convert_date(date),count:count}end) |
| 61 | +end |
| 62 | + |
| 63 | +defpconvert_date(date)do |
| 64 | +{:ok,edate}=Date.from_erl(date) |
| 65 | +edate |
| 66 | +end |
| 67 | + |
| 68 | +defpinc_contribute_count(contribute)do |
| 69 | +{1,[result]}= |
| 70 | +Repo.update_all( |
| 71 | +from( |
| 72 | +cinUserContributes, |
| 73 | +where:c.user_id==^contribute.user_idandc.date==^contribute.date |
| 74 | +), |
| 75 | +[inc:[count:1]], |
| 76 | +returning:[:count] |
| 77 | +) |
| 78 | + |
| 79 | +put_in(contribute.count,result.count) |
| 80 | +end |
| 81 | +end |