forked from code-corps/code-corps-api
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgithub_pull_request.ex
More file actions
92 lines (82 loc) · 2.71 KB
/
github_pull_request.ex
File metadata and controls
92 lines (82 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
defmodule CodeCorps.GithubPullRequest do
use Ecto.Schema
import Ecto.Changeset
@type t :: %__MODULE__{}
schema "github_pull_requests" do
field :additions, :integer
field :body, :string
field :changed_files, :integer
field :closed_at, :utc_datetime
field :comments, :integer
field :comments_url, :string
field :commits, :integer
field :commits_url, :string
field :deletions, :integer
field :diff_url, :string
field :github_created_at, :utc_datetime
field :github_id, :integer
field :github_updated_at, :utc_datetime
field :html_url, :string
field :issue_url, :string
field :locked, :boolean, default: false
field :merge_commit_sha, :string
field :mergeable_state, :string
field :merged, :boolean, default: false
field :merged_at, :utc_datetime
field :number, :integer
field :patch_url, :string
field :review_comment_url, :string
field :review_comments, :integer
field :review_comments_url, :string
field :state, :string
field :statuses_url, :string
field :title, :string
field :url, :string
belongs_to :github_repo, CodeCorps.GithubRepo
belongs_to :github_user, CodeCorps.GithubUser
timestamps()
end
@attrs [
:additions, :body, :changed_files, :closed_at, :comments, :comments_url,
:commits, :commits_url, :deletions, :diff_url, :github_created_at,
:github_id, :github_updated_at, :html_url, :issue_url, :locked,
:merge_commit_sha, :mergeable_state, :merged, :merged_at, :number,
:patch_url, :review_comment_url, :review_comments, :review_comments_url,
:state, :statuses_url, :title, :url
]
@required_attrs [
:github_created_at, :github_id, :github_updated_at, :html_url, :locked,
:number, :state, :title
]
@doc false
def changeset(struct, params) do
struct
|> cast(params, @attrs)
|> add_merged()
|> validate_required(@required_attrs)
|> unique_constraint(:github_id)
end
def create_changeset(struct, params) do
struct
|> changeset(params)
|> cast(params, [:github_repo_id, :github_user_id])
|> assoc_constraint(:github_repo)
|> assoc_constraint(:github_user)
end
def update_changeset(struct, params) do
struct
|> changeset(params)
|> cast(params, [:github_repo_id, :github_user_id])
|> assoc_constraint(:github_repo)
|> assoc_constraint(:github_user)
end
defp add_merged(%Ecto.Changeset{changes: %{merged: merged}} = changeset) when is_boolean(merged) do
changeset
end
defp add_merged(%Ecto.Changeset{changes: %{merged_at: _}} = changeset) do
changeset |> put_change(:merged, true)
end
defp add_merged(%Ecto.Changeset{} = changeset) do
changeset |> put_change(:merged, false)
end
end