Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Commit0a0d280

Browse files
committed
add statistics context
1 parent7830d71 commit0a0d280

File tree

16 files changed

+407
-2
lines changed

16 files changed

+407
-2
lines changed

‎docker/dev/Dockerfile‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ RUN mkdir /root/mastani_server
44
RUN mkdir /root/mastani_web
55
RUN mkdir /root/mastani_api_monitor
66

7+
# change timezone to +8
8+
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo'Asia/Shanghai' >/etc/timezone
9+
710
RUN npm install -g http-server --registry=https://registry.npm.taobao.org
811
ADD mastani_server.tar.gz /root/mastani_server
912
ADD mastani_web.tar.gz /root/mastani_web

‎docker/production/Dockerfile‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ RUN mkdir /root/mastani_server
44
RUN mkdir /root/mastani_web
55
RUN mkdir /root/mastani_api_monitor
66

7+
# change timezone to +8
8+
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo'Asia/Shanghai' >/etc/timezone
9+
710
RUN npm install -g http-server --registry=https://registry.npm.taobao.org
811
ADD mastani_server.tar.gz /root/mastani_server
912
ADD mastani_web.tar.gz /root/mastani_web

‎docs/draft.ex‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
2+
# Statistics
3+
# |___ UserHeatMap
4+
5+
6+
mixphx.gen.contextStatistics UserContributesuser_contributesuser_id:references:users date:datecount:integer

‎lib/mastani_server/accounts/user.ex‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ defmodule MastaniServer.Accounts.User do
3131
# |___ ...
3232
# |___ timeline / timemachine --> only record CURD, Tag, ..
3333

34-
3534
timestamps(type::utc_datetime)
3635
end
3736

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
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
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
defmoduleMastaniServer.Statistics.UserContributesdo
2+
useEcto.Schema
3+
importEcto.Changeset
4+
5+
schema"user_contributes"do
6+
field(:count,:integer)
7+
field(:date,:date)
8+
field(:user_id,:id)
9+
10+
timestamps()
11+
end
12+
13+
@docfalse
14+
defchangeset(user_contributes,attrs)do
15+
user_contributes
16+
|>cast(attrs,[:date,:count,:user_id])
17+
|>validate_required([:date,:count,:user_id])
18+
|>foreign_key_constraint(:user_id)
19+
end
20+
end
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
defmoduleMastaniServerWeb.Resolvers.Statisticsdo
2+
aliasMastaniServer.Statistics
3+
aliasMastaniServer.Accounts.User
4+
# alias Helper.ORM
5+
6+
defuser_contributes(_root,%{user_id:user_id},_info)do
7+
# Statistics.list_user_contributes(String.to_integer(user_id)) |> IO.inspect
8+
Statistics.list_user_contributes(%User{id:user_id})
9+
end
10+
11+
defmake_contrubute(_root,%{user_id:user_id},_info)do
12+
Statistics.make_contribute(%User{id:user_id})
13+
end
14+
end

‎lib/mastani_server_web/schema.ex‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
defmoduleMastaniServerWeb.Schemado
22
useAbsinthe.Schema
33

4-
aliasMastaniServerWeb.Schema.{Account,CMS}
4+
aliasMastaniServerWeb.Schema.{Account,CMS,Statistics}
55
aliasMastaniServerWeb.Middleware
66

77
import_types(Absinthe.Type.Custom)
@@ -14,14 +14,20 @@ defmodule MastaniServerWeb.Schema do
1414
import_types(CMS.Queries)
1515
import_types(CMS.Mutations)
1616

17+
import_types(Statistics.Types)
18+
import_types(Statistics.Queries)
19+
import_types(Statistics.Mutations)
20+
1721
querydo
1822
import_fields(:account_queries)
1923
import_fields(:cms_queries)
24+
import_fields(:statistics_queries)
2025
end
2126

2227
mutationdo
2328
import_fields(:account_mutations)
2429
import_fields(:cms_mutations)
30+
import_fields(:statistics_mutations)
2531
end
2632

2733
defmiddleware(middleware,_field,%{identifier::query})do
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
defmoduleMastaniServerWeb.Schema.Statistics.Mutationsdo
2+
useAbsinthe.Schema.Notation
3+
useAbsinthe.Ecto,repo:MastaniServerWeb.Repo
4+
5+
aliasMastaniServerWeb.Resolvers
6+
# alias MastaniServerWeb.Middleware
7+
8+
object:statistics_mutationsdo
9+
field:make_contrubute,:user_contributedo
10+
arg(:user_id,non_null(:id))
11+
12+
resolve(&Resolvers.Statistics.make_contrubute/3)
13+
end
14+
end
15+
end
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
defmoduleMastaniServerWeb.Schema.Statistics.Queriesdo
2+
useAbsinthe.Schema.Notation
3+
useAbsinthe.Ecto,repo:MastaniServerWeb.Repo
4+
# import Absinthe.Resolution.Helpers
5+
aliasMastaniServerWeb.{Resolvers}
6+
7+
object:statistics_queriesdo
8+
@desc"list of user contribute in last 6 month"
9+
field:user_contributes,list_of(:user_contribute)do
10+
arg(:user_id,non_null(:id))
11+
12+
resolve(&Resolvers.Statistics.user_contributes/3)
13+
end
14+
end
15+
end

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp