Github 문제를 사용하여 고객 피드백을 추적하는 방법
12001 단어 githubgoproductivityproduct
지금까지 훌륭하게 작동한 솔루션은 각 코딩 과제 내에 직접 피드백 상자를 추가하는 것이었습니다! 이제 학생들은 번거로움 없이 문제를 쉽게 보고할 수 있습니다. 불행히도, 제출된 문제를 얻기 위해 SQL 쿼리를 실행하는 것은 엄청난 고통입니다... Github API가 채팅에 들어갔습니다.
Github 문제를 사용하여 사용자 피드백 추적
Markdown 파일의 Boot.dev에 있는 computer science courses에 대한 모든 콘텐츠를 저장하는 개인 Github 저장소가 있습니다. 사용자가 해당 리포지토리에서 Github 이슈로 자동으로 매니페스트된 이슈를 보고하면 정말 편리할 것입니다! 몇 분 만에 파헤친 후 Github API를 사용하는 것이 매우 쉽다는 것을 깨달았습니다. 내 백엔드가 Go로 작성된 REST-ish API라는 점을 감안하여 Google's Github API client package 및 공식Golang oauth2 package 을 사용하기로 결정했습니다.
따라하고 싶은데 먼저 "repo"권한이 있는 personal access token이 필요합니다.
다음으로 Github API와의 상호 작용을 관리하기 위해 프로젝트에
githubclient
패키지를 생성했습니다. Client
구조체를 노출합니다.// Client -
type Client struct {
githubClient *github.Client
}
// NewClient -
func NewClient(personalAccessToken string) (Client, error) {
ctx := context.Background()
ts := oauth2.StaticTokenSource(
&oauth2.Token{AccessToken: personalAccessToken},
)
tc := oauth2.NewClient(ctx, ts)
client := github.NewClient(tc)
_, ghResp, err := client.Issues.List(ctx, false, nil)
if err != nil {
return Client{}, err
}
if ghResp.StatusCode > 299 {
dat, err := io.ReadAll(ghResp.Body)
if err != nil {
return Client{}, err
}
return Client{}, fmt.Errorf("status code: %v, message: %v", ghResp.StatusCode, string(dat))
}
return Client{
githubClient: client,
}, nil
}
문제를 나열하기 위해 몇 가지 논리를 추가했음을 알 수 있습니다. 우리는 실제로 이러한 문제에 대해 아무 조치도 취하지 않으며 원하는 경우 해당 코드를 제거할 수 있습니다. 저에게는 응용 프로그램 시작 시 토큰이 작동하는지 테스트하는 것이 유용했습니다.
다음으로 클라이언트에 간단한
CreateIssue()
메서드를 작성했습니다.// CreateIssue creates an issue in the example-org/example-repo repository
func (c Client) CreateIssue(exercisePath, fromUsername, userComment string) error {
ctx := context.Background()
const repoName = "example-repo"
const orgName = "example-org"
summary := userComment
const summaryLength = 20
if len(summary) > summaryLength {
summary = summary[:summaryLength]
}
title := fmt.Sprintf("exercise: %v, Summary: %v", exercisePath, summary)
body := fmt.Sprintf(`
Comment: %v
From: %v
`, userComment, fromUsername)
_, ghResp, err := c.githubClient.Issues.Create(ctx, orgName, repoName, &github.IssueRequest{
Title: &title,
Body: &body,
Labels: &[]string{"course-feedback"},
})
if err != nil {
return err
}
if ghResp.StatusCode > 299 {
dat, err := io.ReadAll(ghResp.Body)
if err != nil {
return err
}
return fmt.Errorf("status code: %v, message: %v", ghResp.StatusCode, string(dat))
}
return nil
}
보시다시피 주어진...
...the
CreateIssue
메서드는 단순히 정적 레이블이 있는 저장소에 새 문제를 생성합니다. 가능한 한 빨리 문제를 해결할 수 있도록 필요에 따라 형식이 지정된 Github 문제 "제목"및 "본문"으로 입력을 분할했습니다.즉시 사용 가능한 솔루션을 사용하지 않는 이유는 무엇입니까?
시장에서 구입할 수 있는 15억 개의 문제 추적 도구가 있다는 것을 알고 있지만 몇 가지 이유로 이 솔루션이 정말 마음에 들었습니다.
앱에 대한 간단한 이슈 트래커가 필요한 경우 최소한 API가 작동을 멈출 때까지 API를 통해 Github 이슈를 사용하는 것이 좋습니다!
Reference
이 문제에 관하여(Github 문제를 사용하여 고객 피드백을 추적하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bootdotdev/how-we-use-github-issues-to-track-customer-feedback-4o0h텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)