@@ -6,10 +6,12 @@ defmodule CodeCorps.GitHub.Adapters.Issue do
66
77 alias CodeCorps . {
88 Adapter.MapTransformer ,
9- GithubIssue
9+ GitHub.Adapters.Utils.BodyDecorator ,
10+ GithubIssue ,
11+ Task
1012 }
1113
12- @ mapping [
14+ @ issue_mapping [
1315 { :body , [ "body" ] } ,
1416 { :closed_at , [ "closed_at" ] } ,
1517 { :comments_url , [ "comments_url" ] } ,
@@ -27,25 +29,50 @@ defmodule CodeCorps.GitHub.Adapters.Issue do
2729 ]
2830
2931 @ doc ~S"""
30- Converts a GitHub Issue payload into a set of attributes used to update or
31- create a `GithubIssue` record.
32+ Converts a GitHub Issue payload into a set of attributes used to create or
33+ update a `GithubIssue` record.
3234 """
33- @ spec from_api ( map ) :: map
34- def from_api ( % { } = payload ) do
35- payload |> MapTransformer . transform ( @ mapping )
35+ @ spec to_issue ( map ) :: map
36+ def to_issue ( % { } = payload ) do
37+ payload |> MapTransformer . transform ( @ issue_mapping )
38+ end
39+
40+ @ task_mapping [
41+ { :created_at , [ "created_at" ] } ,
42+ { :markdown , [ "body" ] } ,
43+ { :modified_at , [ "updated_at" ] } ,
44+ { :status , [ "state" ] } ,
45+ { :title , [ "title" ] }
46+ ]
47+
48+ @ doc ~S"""
49+ Converts a GitHub Issue payload into a set of attributes used to create or
50+ update a `Task` record.
51+ """
52+ @ spec to_task ( map ) :: map
53+ def to_task ( % { } = payload ) do
54+ payload |> MapTransformer . transform ( @ task_mapping )
3655 end
3756
3857 @ autogenerated_github_keys ~w( closed_at comments_url created_at events_url html_url id labels_url number updated_at url)
3958
4059 @ doc ~S"""
41- Converts a `GithubIssue` into a set of attributes used to update or create an
42- associated GitHub Issue.
60+ Converts a `GithubIssue` or `Task` into a set of attributes used to create or
61+ update an associated GitHub Issue on the GitHub API .
4362 """
44- @ spec to_api ( GithubIssue . t ) :: map
63+ @ spec to_api ( GithubIssue . t | Task . t ) :: map
4564 def to_api ( % GithubIssue { } = github_issue ) do
4665 github_issue
4766 |> Map . from_struct
48- |> MapTransformer . transform_inverse ( @ mapping )
67+ |> MapTransformer . transform_inverse ( @ issue_mapping )
68+ |> Map . drop ( @ autogenerated_github_keys )
69+ |> BodyDecorator . add_code_corps_header ( github_issue )
70+ end
71+ def to_api ( % Task { } = task ) do
72+ task
73+ |> Map . from_struct
74+ |> MapTransformer . transform_inverse ( @ task_mapping )
4975 |> Map . drop ( @ autogenerated_github_keys )
76+ |> BodyDecorator . add_code_corps_header ( task )
5077 end
5178end
0 commit comments