Packages
ami
0.2.2
0.3.9
0.3.8
retired
0.3.7
retired
0.3.6
retired
0.3.5
retired
0.3.4
retired
0.3.3
retired
0.3.2
retired
0.3.1
retired
0.3.0
retired
0.2.9
retired
0.2.8
retired
0.2.7
retired
0.2.6
retired
0.2.5
retired
0.2.3
retired
0.2.2
retired
0.2.1
retired
0.2.0
retired
0.1.9
retired
0.1.8
retired
0.1.7
retired
0.1.6
retired
0.1.5
retired
0.1.4
retired
Package containing all AMI Models shared between micro-services.
Retired package: Security issue - retiring
Current section
Files
Jump to
Current section
Files
lib/ami/recenty_activity.ex
defmodule Ami.RecentActivity do
use Ecto.Schema
import Ecto.{
Changeset,
Query
}
alias Ami.{
Repo,
Community,
CoursePeriod,
User
}
schema "recent_activities" do
@timestamps_opts [type: :naive_datetime_usec]
field(:activity_time, :utc_datetime_usec)
field(:update_count, :integer)
belongs_to(:community, Community)
belongs_to(:course_period, CoursePeriod)
belongs_to(:user, User)
end
def track(%{"id" => community_id, "user_id" => user_id}) do
case Repo.all(
from(
ra in __MODULE__,
where: ra.community_id == ^community_id and ra.user_id == ^user_id,
limit: 1
)
) do
[] -> create_activity(%{community_id: community_id, user_id: user_id})
[activity] -> update_activity(activity)
end
AmiWeb.Endpoint.broadcast!("community_activity_room:#{community_id}", "new_track", %{
"communityId" => community_id
})
end
def track(%{"course_period_id" => course_period_id, "user_id" => user_id}) do
case Repo.all(
from(
ra in __MODULE__,
where: ra.course_period_id == ^course_period_id and ra.user_id == ^user_id,
limit: 1
)
) do
[] -> create_activity(%{course_period_id: course_period_id, user_id: user_id})
[activity] -> update_activity(activity)
end
AmiWeb.Endpoint.broadcast!("studygroup_activity_room:#{course_period_id}", "new_track", %{
"coursePeriodId" => course_period_id
})
end
def create_activity(%{community_id: _community_id, user_id: _user_id} = params) do
%__MODULE__{}
|> cast(params, [:community_id, :user_id])
|> cast(%{activity_time: DateTime.utc_now()}, [:activity_time])
|> Repo.insert()
end
def create_activity(%{course_period_id: _course_period_id, user_id: _user_id} = params) do
%__MODULE__{}
|> cast(params, [:course_period_id, :user_id])
|> cast(%{activity_time: DateTime.utc_now()}, [:activity_time])
|> Repo.insert()
end
def update_activity(activity) do
change(activity, activity_time: DateTime.utc_now(), update_count: activity.update_count + 1)
|> Repo.update()
end
def member_of_the_month(%{community: community_id}) do
start_period = Timex.beginning_of_month(Timex.shift(DateTime.utc_now(), months: -1))
end_period = Timex.end_of_month(Timex.shift(DateTime.utc_now(), months: -1))
from(
r in Ami.RecentActivity,
where: r.community_id == ^community_id,
where: r.activity_time >= ^start_period and r.activity_time <= ^end_period,
order_by: [desc: r.update_count, desc: r.activity_time],
select: r.user_id,
limit: 1
)
|> Repo.all()
|> List.first()
end
def member_of_the_month(%{course_period: course_period_id}) do
start_period = Timex.beginning_of_month(Timex.shift(DateTime.utc_now(), months: -1))
end_period = Timex.end_of_month(Timex.shift(DateTime.utc_now(), months: -1))
from(
r in Ami.RecentActivity,
where: r.course_period_id == ^course_period_id,
where: r.activity_time >= ^start_period and r.activity_time <= ^end_period,
order_by: [desc: r.update_count, desc: r.activity_time],
select: r.user_id,
limit: 1
)
|> Repo.all()
|> List.first()
end
def active_members_count(%Community{} = community) do
from(
r in Ami.RecentActivity,
where: r.community_id == ^community.id,
select: count(r.user_id, :distinct)
)
|> Repo.one()
end
def active_members_count(%CoursePeriod{} = course_period) do
from(
r in Ami.RecentActivity,
where: r.course_period_id == ^course_period.id,
select: count(r.user_id, :distinct)
)
|> Repo.one()
end
end