1
+ // Package handlers provide functions used to handle gRPC.
1
2
package handlers
2
3
3
4
import (
5
+ "errors"
4
6
"sort"
5
7
6
8
"github.com/codingpot/pr12er/server/internal/err"
9
+ "github.com/codingpot/pr12er/server/pkg/handlers/gh"
7
10
"github.com/codingpot/pr12er/server/pkg/handlers/prutils"
8
11
"github.com/codingpot/pr12er/server/pkg/pr12er"
9
12
)
10
13
14
+ // Handler depends on gh.GitHubService interface.
15
+ type Handler struct {
16
+ gh gh.GitHubService
17
+ }
18
+
19
+ func New (service gh.GitHubService ) * Handler {
20
+ return & Handler {gh : service }
21
+ }
22
+
11
23
// VideosResponseFromDB converts DB proto to GetVideosResponse.
12
- func VideosResponseFromDB (db * pr12er.Database ) * pr12er.GetVideosResponse {
24
+ func ( h * Handler ) VideosResponseFromDB (db * pr12er.Database ) * pr12er.GetVideosResponse {
13
25
videos := make ([]* pr12er.Video , len (db .GetPrIdToVideo ()))
14
26
i := 0
15
27
@@ -38,6 +50,43 @@ func VideosResponseFromDB(db *pr12er.Database) *pr12er.GetVideosResponse {
38
50
}
39
51
}
40
52
53
+ // DetailResponseFromDB builds DetailResponse from Database.
54
+ func (h * Handler ) DetailResponseFromDB (prID int32 , db * pr12er.Database ) (* pr12er.GetDetailResponse , error ) {
55
+ video , ok := db .GetPrIdToVideo ()[prID ]
56
+ if ! ok {
57
+ return nil , err.ErrorPrIDNotFound {PrID : prID }
58
+ }
59
+
60
+ return & pr12er.GetDetailResponse {
61
+ Detail : & pr12er.Detail {
62
+ PrId : prID ,
63
+ Papers : video .GetPapers (),
64
+ },
65
+ }, nil
66
+ }
67
+
68
+ // Report handles when a client sends a bug report or a missing PR video report.
69
+ func (h * Handler ) Report (in * pr12er.ReportRequest ) (* pr12er.ReportResponse , error ) {
70
+ var issue * gh.GitHubIssue
71
+ var e error
72
+
73
+ switch in .GetType () {
74
+ case pr12er .ReportRequest_REPORT_TYPE_BUG :
75
+ issue , e = h .gh .CreateIssue ("버그 리포트" , in .GetBody (), []string {"bug" })
76
+ case pr12er .ReportRequest_REPORT_TYPE_MISSING_PR_VIDEO :
77
+ issue , e = h .gh .CreateIssue ("PR12 누락 동영상" , in .GetBody (), []string {"data" })
78
+ case pr12er .ReportRequest_REPORT_TYPE_UNSPECIFIED :
79
+ issue , e = h .gh .CreateIssue ("기타" , in .GetBody (), nil )
80
+ default :
81
+ e = errors .New ("this bug report type is not supported" )
82
+ }
83
+
84
+ if issue == nil || e != nil {
85
+ return nil , e
86
+ }
87
+ return & pr12er.ReportResponse {IssueUrl : issue .URL }, e
88
+ }
89
+
41
90
// getKeywords returns all keywords by merging each paper's methods.
42
91
func getKeywords (prVideo * pr12er.PrVideo ) []string {
43
92
var ret []string
@@ -53,18 +102,3 @@ func getKeywords(prVideo *pr12er.PrVideo) []string {
53
102
func getYouTubeLinkFromID (videoID string ) string {
54
103
return "https://youtu.be/" + videoID
55
104
}
56
-
57
- // DetailResponseFromDB builds DetailResponse from Database.
58
- func DetailResponseFromDB (prID int32 , db * pr12er.Database ) (* pr12er.GetDetailResponse , error ) {
59
- video , ok := db .GetPrIdToVideo ()[prID ]
60
- if ! ok {
61
- return nil , err.ErrorPrIDNotFound {PrID : prID }
62
- }
63
-
64
- return & pr12er.GetDetailResponse {
65
- Detail : & pr12er.Detail {
66
- PrId : prID ,
67
- Papers : video .GetPapers (),
68
- },
69
- }, nil
70
- }
0 commit comments