Skip to content

Commit

Permalink
feat(api/badge): rework
Browse files Browse the repository at this point in the history
  • Loading branch information
ernado committed Apr 17, 2024
1 parent 8aa12e0 commit 20ed5b5
Show file tree
Hide file tree
Showing 11 changed files with 344 additions and 71 deletions.
20 changes: 16 additions & 4 deletions _oas/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,25 @@ paths:
$ref: "#/components/schemas/Status"
default:
$ref: "#/components/responses/Error"
/badge/telegram/gotd:
/badge/telegram/${group_name}:
parameters:
- required: true
in: path
name: group_name
schema:
type: string
get:
operationId: "getTelegramGoTDBadge"
description: "get svg badge for gotd telegram groups"
operationId: "getTelegramBadge"
description: "get svg badge for telegram group"
parameters:
- in: query
name: title
required: false
schema:
type: string
responses:
200:
description: Go Faster Badge
description: Badge
content:
"image/svg+xml":
schema:
Expand Down
21 changes: 13 additions & 8 deletions internal/api/badge.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,31 +26,36 @@ func generateBadgePath(name, text, style string) string {
style,
}, "-")
}

func (s Server) GetTelegramGoTDBadge(ctx context.Context) (oas.GetTelegramGoTDBadgeOK, error) {
members := 236 + 234 + 15
func (s Server) GetTelegramBadge(ctx context.Context, params oas.GetTelegramBadgeParams) (rr oas.GetTelegramBadgeOK, err error) {
members := map[string]int{
"gotd_en": 237,
"gotd_ru": 234,
"gotd_cn": 15,
}[params.GroupName]
_ = s.tg // TODO(ernado): fetch actual data.
title := params.Title.Or(params.GroupName)
text := strconv.Itoa(members)
u := &url.URL{
Scheme: "https",
Host: "img.shields.io",
Path: generateBadgePath(strconv.Itoa(members), "members", "179cde"),
Path: generateBadgePath(title, text, "179cde"),
}
q := u.Query()
q.Set("logo", "telegram")
u.RawQuery = q.Encode()

req, err := http.NewRequestWithContext(ctx, http.MethodGet, u.String(), http.NoBody)
if err != nil {
return oas.GetTelegramGoTDBadgeOK{}, errors.Wrap(err, "create request")
return rr, errors.Wrap(err, "create request")
}
res, err := s.ht.Do(req)
if err != nil {
return oas.GetTelegramGoTDBadgeOK{}, errors.Wrap(err, "send request")
return rr, errors.Wrap(err, "send request")
}
defer func() { _ = res.Body.Close() }()
data, err := io.ReadAll(res.Body)
if err != nil {
return oas.GetTelegramGoTDBadgeOK{}, errors.Wrap(err, "read body")
return rr, errors.Wrap(err, "read body")
}
return oas.GetTelegramGoTDBadgeOK{Data: bytes.NewReader(data)}, nil
return oas.GetTelegramBadgeOK{Data: bytes.NewReader(data)}, nil
}
72 changes: 56 additions & 16 deletions internal/oas/oas_client_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

62 changes: 43 additions & 19 deletions internal/oas/oas_handlers_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 20ed5b5

Please sign in to comment.