Skip to content

Commit

Permalink
changelog list
Browse files Browse the repository at this point in the history
  • Loading branch information
minhluuquang committed Feb 21, 2023
1 parent cad8f2e commit 3e2aea8
Show file tree
Hide file tree
Showing 15 changed files with 234 additions and 0 deletions.
16 changes: 16 additions & 0 deletions pkg/adapter/fortress/fortress.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,22 @@ func New(url string) FortressAdapter {
}
}

// GetChangelogs implements FortressAdapter
func (f *Fortress) GetChangelogs() (changelogs *model.ChangelogDigest, err error) {
resp, err := http.Get(f.Url + "/api/v1/notion-changelog/projects/available")
if err != nil {
return nil, err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("invalid call, code %v", resp.StatusCode)
}
if err := json.NewDecoder(resp.Body).Decode(&changelogs); err != nil {
return nil, fmt.Errorf("invalid decoded, error %v", err.Error())
}
return changelogs, nil
}

func (f *Fortress) GetCommunityEarn() (earns *model.AdapterEarn, err error) {
resp, err := http.Get(f.Url + "/api/v1/earn")
if err != nil {
Expand Down
2 changes: 2 additions & 0 deletions pkg/adapter/fortress/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,6 @@ type FortressAdapter interface {
GetActiveIssues() (issues *model.AdapterIssue, err error)

LogTechRadarTopic(topicName string, discordId string) error

GetChangelogs() (digests *model.ChangelogDigest, err error)
}
41 changes: 41 additions & 0 deletions pkg/discord/command/changelog/base.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package changelog

import (
"github.com/dwarvesf/fortress-discord/pkg/model"
)

func (a *Changelog) Prefix() []string {
return []string{"changelog"}
}

// Execute is where we handle logic for each command
func (a *Changelog) Execute(message *model.DiscordMessage) error {
// default command for only 1 args input from user, e.g `?earn`
if len(message.ContentArgs) == 1 {
return a.DefaultCommand(message)
}

// handle command for 2 args input from user, e.g `?earn list`
switch message.ContentArgs[1] {
case "list":
return a.List(message)
}

return nil
}

func (a *Changelog) Name() string {
return "Changelog Command"
}

func (a *Changelog) Help(message *model.DiscordMessage) error {
return nil
}

func (a *Changelog) DefaultCommand(message *model.DiscordMessage) error {
return a.List(message)
}

func (a *Changelog) PermissionCheck(message *model.DiscordMessage) (bool, []string) {
return true, []string{}
}
37 changes: 37 additions & 0 deletions pkg/discord/command/changelog/changelog.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package changelog

import (
"github.com/dwarvesf/fortress-discord/pkg/discord/service"
"github.com/dwarvesf/fortress-discord/pkg/discord/view"
"github.com/dwarvesf/fortress-discord/pkg/logger"
"github.com/dwarvesf/fortress-discord/pkg/model"
"github.com/k0kubun/pp"
)

type Changelog struct {
L logger.Logger
svc service.Servicer
view view.Viewer
}

func New(l logger.Logger, svc service.Servicer, view view.Viewer) ChangelogCommander {
return &Changelog{
L: l,
svc: svc,
view: view,
}
}

func (t *Changelog) List(message *model.DiscordMessage) error {
// 1. get data from service
data, err := t.svc.Changelog().GetListChangelogs()
if err != nil {
t.L.Error(err, "can't get list of Changelog")
return err
}

pp.Println(data)

// 2. render
return t.view.Changelog().Changelog(message, data)
}
12 changes: 12 additions & 0 deletions pkg/discord/command/changelog/interface.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package changelog

import (
"github.com/dwarvesf/fortress-discord/pkg/discord/base"
"github.com/dwarvesf/fortress-discord/pkg/model"
)

type ChangelogCommander interface {
base.TextCommander

List(message *model.DiscordMessage) error
}
2 changes: 2 additions & 0 deletions pkg/discord/command/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"github.com/dwarvesf/fortress-discord/pkg/discord/base"
"github.com/dwarvesf/fortress-discord/pkg/discord/command/adopt"
"github.com/dwarvesf/fortress-discord/pkg/discord/command/assess"
"github.com/dwarvesf/fortress-discord/pkg/discord/command/changelog"
"github.com/dwarvesf/fortress-discord/pkg/discord/command/digest"
"github.com/dwarvesf/fortress-discord/pkg/discord/command/done"
"github.com/dwarvesf/fortress-discord/pkg/discord/command/earn"
Expand Down Expand Up @@ -60,6 +61,7 @@ func New(cfg *config.Config, l logger.Logger, svc service.Servicer, view view.Vi
done.New(cfg, l, svc, view),
radar.New(l, svc, view),
issue.New(l, svc, view),
changelog.New(l, svc, view),
})

return cmd
Expand Down
33 changes: 33 additions & 0 deletions pkg/discord/service/changelog/changelog.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package changelog

import (
"github.com/dwarvesf/fortress-discord/pkg/adapter"
"github.com/dwarvesf/fortress-discord/pkg/logger"
"github.com/dwarvesf/fortress-discord/pkg/model"
)

type Changelog struct {
adapter adapter.IAdapter
l logger.Logger
}

func New(adapter adapter.IAdapter, l logger.Logger) ChangelogServicer {
return &Changelog{
adapter: adapter,
l: l,
}
}

func (e *Changelog) GetListChangelogs() ([]*model.Changelog, error) {
// get response from fortress
adapterChangelog, err := e.adapter.Fortress().GetChangelogs()
if err != nil {
e.l.Error(err, "can't get open changelog from fortress")
return nil, err
}

// normalized into in-app model
changelog := adapterChangelog.Data

return changelog, nil
}
7 changes: 7 additions & 0 deletions pkg/discord/service/changelog/interface.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package changelog

import "github.com/dwarvesf/fortress-discord/pkg/model"

type ChangelogServicer interface {
GetListChangelogs() ([]*model.Changelog, error)
}
2 changes: 2 additions & 0 deletions pkg/discord/service/interface.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package service

import (
"github.com/dwarvesf/fortress-discord/pkg/discord/service/changelog"
"github.com/dwarvesf/fortress-discord/pkg/discord/service/digest"
"github.com/dwarvesf/fortress-discord/pkg/discord/service/earn"
"github.com/dwarvesf/fortress-discord/pkg/discord/service/event"
Expand All @@ -23,6 +24,7 @@ type Servicer interface {
Staff() staff.StaffServicer
Project() project.ProjectServicer
Digest() digest.DigestServicer
Changelog() changelog.ChangelogServicer
Memo() memo.MemoServicer
Treasury() treasury.TreasuryServicer
Issue() issue.IssueServicer
Expand Down
7 changes: 7 additions & 0 deletions pkg/discord/service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package service

import (
"github.com/dwarvesf/fortress-discord/pkg/adapter"
"github.com/dwarvesf/fortress-discord/pkg/discord/service/changelog"
"github.com/dwarvesf/fortress-discord/pkg/discord/service/digest"
"github.com/dwarvesf/fortress-discord/pkg/discord/service/earn"
"github.com/dwarvesf/fortress-discord/pkg/discord/service/event"
Expand Down Expand Up @@ -32,6 +33,7 @@ type subService struct {
Memo memo.MemoServicer
Treasury treasury.TreasuryServicer
Issue issue.IssueServicer
Changelog changelog.ChangelogServicer
}

func New(adapter adapter.IAdapter, l logger.Logger) Servicer {
Expand All @@ -48,6 +50,7 @@ func New(adapter adapter.IAdapter, l logger.Logger) Servicer {
Memo: memo.New(adapter, l),
Treasury: treasury.New(adapter, l),
Issue: issue.New(adapter, l),
Changelog: changelog.New(adapter, l),
},
}
}
Expand Down Expand Up @@ -95,3 +98,7 @@ func (s *Service) Treasury() treasury.TreasuryServicer {
func (s *Service) Issue() issue.IssueServicer {
return s.subService.Issue
}

func (s *Service) Changelog() changelog.ChangelogServicer {
return s.subService.Changelog
}
43 changes: 43 additions & 0 deletions pkg/discord/view/changelog/changelog.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package changelog

import (
"strings"

"github.com/bwmarrin/discordgo"
"github.com/dwarvesf/fortress-discord/pkg/discord/view/base"
"github.com/dwarvesf/fortress-discord/pkg/model"
)

type Changelog struct {
ses *discordgo.Session
}

func New(ses *discordgo.Session) ChangelogViewer {
return &Changelog{
ses: ses,
}
}

func (c *Changelog) Changelog(message *model.DiscordMessage, data []*model.Changelog) error {
content := []string{
"**?earn**・earn $ICY for free",
"**?trial**・list of trial tech",
"**?assess**・list of assess tech",
"**?adopt**・list of adopt tech",
"**?hold**・list of on-hold tech",
"**?new**・list of new subscribers",
"**?event**・list of upcoming events",
"**?hiring**・list of open positions",
"**?staff**・list of staffing demands",
"**?milestones**・list of projects milestones",
"**?updates**・list of Dwarves updates",
"**?digest**・list of Internal Digests",
"**?memos**・list of Team memos",
}
msg := &discordgo.MessageEmbed{
Title: "**Changelog**",
Description: strings.Join(content, "\n"),
}

return base.SendEmbededMessage(c.ses, message, msg)
}
8 changes: 8 additions & 0 deletions pkg/discord/view/changelog/interface.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package changelog

import "github.com/dwarvesf/fortress-discord/pkg/model"

// ChangelogViewer is an interface for changelog view
type ChangelogViewer interface {
Changelog(message *model.DiscordMessage, data []*model.Changelog) error
}
2 changes: 2 additions & 0 deletions pkg/discord/view/interface.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package view

import (
"github.com/dwarvesf/fortress-discord/pkg/discord/view/changelog"
"github.com/dwarvesf/fortress-discord/pkg/discord/view/digest"
"github.com/dwarvesf/fortress-discord/pkg/discord/view/done"
"github.com/dwarvesf/fortress-discord/pkg/discord/view/earn"
Expand Down Expand Up @@ -30,4 +31,5 @@ type Viewer interface {
Memo() memo.MemoViewer
Done() done.DoneViewer
Issue() issue.IssueViewer
Changelog() changelog.ChangelogViewer
}
7 changes: 7 additions & 0 deletions pkg/discord/view/view.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package view
import (
"github.com/bwmarrin/discordgo"

"github.com/dwarvesf/fortress-discord/pkg/discord/view/changelog"
"github.com/dwarvesf/fortress-discord/pkg/discord/view/digest"
"github.com/dwarvesf/fortress-discord/pkg/discord/view/done"
"github.com/dwarvesf/fortress-discord/pkg/discord/view/earn"
Expand Down Expand Up @@ -36,6 +37,7 @@ type subView struct {
Memo memo.MemoViewer
Done done.DoneViewer
Issue issue.IssueViewer
Changelog changelog.ChangelogViewer
}

func New(ses *discordgo.Session) Viewer {
Expand All @@ -54,6 +56,7 @@ func New(ses *discordgo.Session) Viewer {
Memo: memo.New(ses),
Done: done.New(ses),
Issue: issue.New(ses),
Changelog: changelog.New(ses),
},
}
}
Expand Down Expand Up @@ -109,3 +112,7 @@ func (v *View) Done() done.DoneViewer {
func (v *View) Issue() issue.IssueViewer {
return v.subView.Issue
}

func (v *View) Changelog() changelog.ChangelogViewer {
return v.subView.Changelog
}
15 changes: 15 additions & 0 deletions pkg/model/changelog.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package model

// ChangelogDigest is a struct response from adapter, before process to in-app model
type ChangelogDigest struct {
Data []*Changelog `json:"data"`
Message string `json:"message"`
}

// Changelog is a model for changelog
type Changelog struct {
RowID string `json:"row_id"`
Name string `json:"name"`
Title string `json:"title"`
ChangelogURL string `json:"changelog_url"`
}

0 comments on commit 3e2aea8

Please sign in to comment.