Skip to content

Commit 7b7d15f

Browse files
committed
added starred command
1 parent 06d2e55 commit 7b7d15f

3 files changed

Lines changed: 76 additions & 0 deletions

File tree

commands/help.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ func Help() {
2121
fmt.Println("\t\t[user]")
2222
fmt.Println("\trepo: shows information about a repository")
2323
fmt.Println("\t\t[user] [repo]")
24+
fmt.Println("\tstarred: shows repositories starred by a user")
25+
fmt.Println("\t\t[user]")
2426
fmt.Println("\tuser: shows information about a user")
2527
fmt.Println("\t\t[user]")
2628

commands/starred.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package commands
2+
3+
import (
4+
"dev/cqb13/gstats/utils"
5+
"dev/cqb13/gstats/utils/ansi"
6+
"encoding/json"
7+
"fmt"
8+
"slices"
9+
"strings"
10+
)
11+
12+
type repo struct {
13+
Name string `json:"name"`
14+
Owner struct {
15+
Login string `json:"login"`
16+
} `json:"owner"`
17+
URL string `json:"html_url"`
18+
}
19+
20+
func HandleStarredCommand(user string, verbose bool) {
21+
baseUrl := fmt.Sprintf("https://api.github.com/users/%s/starred?per_page=100&page=", user)
22+
23+
page := 1
24+
var repos []repo
25+
26+
for {
27+
resp, err := utils.Get(fmt.Sprintf("%s%d", baseUrl, page))
28+
if err != nil {
29+
fmt.Println(err)
30+
return
31+
}
32+
33+
if strings.Contains(string(resp), `"message":"Not Found"`) {
34+
fmt.Println("Failed to find user")
35+
return
36+
}
37+
38+
var repoList []repo
39+
40+
err = json.Unmarshal(resp, &repoList)
41+
if err != nil {
42+
fmt.Println(err)
43+
return
44+
}
45+
46+
if len(repoList) == 0 {
47+
break
48+
}
49+
50+
repos = slices.Concat(repos, repoList)
51+
52+
page++
53+
}
54+
55+
if verbose {
56+
for i, repo := range repos {
57+
fmt.Printf("%d. %s/%s %s(%s)%s\n", i+1, repo.Owner.Login, repo.Name, ansi.Dim, repo.URL, ansi.Reset)
58+
}
59+
}
60+
fmt.Printf("%s has starred %d repositories\n", user, len(repos))
61+
}

main.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const (
1616
Followers
1717
Following
1818
Repo
19+
Starred
1920
User
2021
)
2122

@@ -82,6 +83,16 @@ func main() {
8283

8384
commands.HandleRepoCommand(user, repo, verbose)
8485
return
86+
case Starred:
87+
if len(args) < 2 {
88+
fmt.Println("Not enough args: user [user]")
89+
return
90+
}
91+
92+
user := posArgs[1]
93+
94+
commands.HandleStarredCommand(user, verbose)
95+
return
8596
case User:
8697
if len(args) < 2 {
8798
fmt.Println("Not enough args: user [user]")
@@ -111,6 +122,8 @@ func matchCommand(cmd string) Command {
111122
return Following
112123
case "repo":
113124
return Repo
125+
case "starred":
126+
return Starred
114127
case "user":
115128
return User
116129
default:

0 commit comments

Comments
 (0)