Skip to content

Commit

Permalink
Client構造体を利用する形にリファクタリング
Browse files Browse the repository at this point in the history
  • Loading branch information
Sinhalite committed Mar 22, 2024
1 parent 0dc78fd commit 436d58a
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 32 deletions.
22 changes: 11 additions & 11 deletions contents.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,32 +10,32 @@ import (
"os"
)

func backupContents(option Config, baseDir string) error {
func (c *Client) backupContents(baseDir string) error {
log.Println("コンテンツのバックアップを開始します")

for _, endpoint := range option.Endpoints {
for _, endpoint := range c.Config.Endpoints {
log.Printf("%sのバックアップを開始します\n", endpoint)

totalCount, err := getContentsTotalCount(option, endpoint)
totalCount, err := c.getContentsTotalCount(endpoint)
if err != nil {
return fmt.Errorf("コンテンツの合計件数の取得でエラーが発生しました: %w", err)
}
requiredRequestCount := (totalCount/option.RequestUnit + 1)
requiredRequestCount := (totalCount/c.Config.RequestUnit + 1)

err = saveContents(option, endpoint, requiredRequestCount, baseDir)
err = c.saveContents(endpoint, requiredRequestCount, baseDir)
if err != nil {
return fmt.Errorf("コンテンツの保存でエラーが発生しました: %w", err)
}
}
return nil
}

func getContentsTotalCount(option Config, endpoint string) (int, error) {
func (c *Client) getContentsTotalCount(endpoint string) (int, error) {
req, _ := http.NewRequest(
"GET",
fmt.Sprintf("https://%s.microcms.io/api/v1/%s?limit=0", option.ServiceID, endpoint),
fmt.Sprintf("https://%s.microcms.io/api/v1/%s?limit=0", c.Config.ServiceID, endpoint),
nil)
req.Header.Set("X-MICROCMS-API-KEY", option.APIKey)
req.Header.Set("X-MICROCMS-API-KEY", c.Config.APIKey)

client := new(http.Client)
resp, err := client.Do(req)
Expand Down Expand Up @@ -63,12 +63,12 @@ func getContentsTotalCount(option Config, endpoint string) (int, error) {
return response.TotalCount, err
}

func saveContents(option Config, endpoint string, requiredRequestCount int, baseDir string) error {
func (c *Client) saveContents(endpoint string, requiredRequestCount int, baseDir string) error {
for i := 0; i < requiredRequestCount; i++ {
client := new(http.Client)
requestURL := fmt.Sprintf("https://%s.microcms.io/api/v1/%s?limit=%d&offset=%d", option.ServiceID, endpoint, option.RequestUnit, option.RequestUnit*i)
requestURL := fmt.Sprintf("https://%s.microcms.io/api/v1/%s?limit=%d&offset=%d", c.Config.ServiceID, endpoint, c.Config.RequestUnit, c.Config.RequestUnit*i)
req, _ := http.NewRequest("GET", requestURL, nil)
req.Header.Set("X-MICROCMS-API-KEY", option.APIKey)
req.Header.Set("X-MICROCMS-API-KEY", c.Config.APIKey)
resp, err := client.Do(req)
if err != nil {
return err
Expand Down
4 changes: 4 additions & 0 deletions entitiy.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,7 @@ type Config struct {
Endpoints []string `json:"endpoints"`
RequestUnit int `json:"requestUnit"`
}

type Client struct {
Config *Config
}
16 changes: 9 additions & 7 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,19 +133,21 @@ func initOption(modeFlag string) (*Config, error) {
}

func main() {
client := &Client{}
// コマンドライン因数の取得
modeFlag := flag.String("mode", "", "mode value")
flag.Parse()

option, err := initOption(*modeFlag)
var err error
client.Config, err = initOption(*modeFlag)
if err != nil {
log.Fatal("正常にオプションをセットできませんでした")
}

// バックアップのディレクトリ作成
t := time.Now()
timeDir := t.Format("2006_01_02_15_04_05")
baseDir := "backup/" + option.ServiceID + "/" + timeDir + "/"
baseDir := "backup/" + client.Config.ServiceID + "/" + timeDir + "/"

err = os.MkdirAll(baseDir, os.ModePerm)
if err != nil {
Expand All @@ -154,23 +156,23 @@ func main() {
log.Println("バックアップディレクトリを作成しました")
log.Println("バックアップを開始します")

switch option.Target {
switch client.Config.Target {
case "all":
err = backupContents(*option, baseDir)
err = client.backupContents(baseDir)
if err != nil {
log.Fatal(err)
}
err = backupMedia(*option, baseDir)
err = client.backupMedia(baseDir)
if err != nil {
log.Fatal(err)
}
case "contents":
err = backupContents(*option, baseDir)
err = client.backupContents(baseDir)
if err != nil {
log.Fatal(err)
}
case "media":
err = backupMedia(*option, baseDir)
err = client.backupMedia(baseDir)
if err != nil {
log.Fatal(err)
}
Expand Down
10 changes: 8 additions & 2 deletions main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,10 @@ func TestBackupMedia(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := backupMedia(*tt.args.config, tt.args.baseDir)
client := &Client{}
client.Config = tt.args.config

err := client.backupMedia(tt.args.baseDir)
got := err == nil
if got != tt.want {
t.Errorf("backupMedia() = %v, want %v", got, tt.want)
Expand Down Expand Up @@ -93,7 +96,10 @@ func TestBackupContents(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := backupContents(*tt.args.config, tt.args.baseDir)
client := &Client{}
client.Config = tt.args.config

err := client.backupContents(tt.args.baseDir)
got := err == nil
if got != tt.want {
t.Errorf("backupContents() = %v, want %v", got, tt.want)
Expand Down
24 changes: 12 additions & 12 deletions media.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,32 @@ import (
"strings"
)

func backupMedia(option Config, baseDir string) error {
func (c *Client) backupMedia(baseDir string) error {
log.Println("メディアのバックアップを開始します")
const requestUnit = 50
totalCount, err := getTotalCount(option)
totalCount, err := c.getTotalCount()
if err != nil {
return fmt.Errorf("合計件数の取得でエラーが発生しました: %w", err)
}
requiredRequestCount := (totalCount/requestUnit + 1)

mediaAry, err := getMediaAry(option, requiredRequestCount, requestUnit)
mediaAry, err := c.getMediaAry(requiredRequestCount, requestUnit)
if err != nil {
return fmt.Errorf("メディア一覧の取得でエラーが発生しました: %w", err)
}
err = saveMedia(mediaAry, option, totalCount, baseDir)
err = c.saveMedia(mediaAry, totalCount, baseDir)
if err != nil {
return fmt.Errorf("メディアの保存でエラーが発生しました: %w", err)
}
return nil
}

func getTotalCount(option Config) (int, error) {
func (c *Client) getTotalCount() (int, error) {
req, _ := http.NewRequest(
"GET",
fmt.Sprintf("https://%s.microcms-management.io/api/v2/media?limit=0", option.ServiceID),
fmt.Sprintf("https://%s.microcms-management.io/api/v2/media?limit=0", c.Config.ServiceID),
nil)
req.Header.Set("X-MICROCMS-API-KEY", option.APIKey)
req.Header.Set("X-MICROCMS-API-KEY", c.Config.APIKey)

client := new(http.Client)
resp, err := client.Do(req)
Expand Down Expand Up @@ -64,18 +64,18 @@ func getTotalCount(option Config) (int, error) {
return response.TotalCount, err
}

func getMediaAry(option Config, requiredRequestCount int, requestUnit int) ([]Media, error) {
func (c *Client) getMediaAry(requiredRequestCount int, requestUnit int) ([]Media, error) {
var ary []Media
var token string

for i := 0; i < requiredRequestCount; i++ {
client := new(http.Client)
req, _ := http.NewRequest(
"GET",
fmt.Sprintf("https://%s.microcms-management.io/api/v2/media?limit=%d&token=%s", option.ServiceID, requestUnit, token),
fmt.Sprintf("https://%s.microcms-management.io/api/v2/media?limit=%d&token=%s", c.Config.ServiceID, requestUnit, token),
nil,
)
req.Header.Set("X-MICROCMS-API-KEY", option.APIKey)
req.Header.Set("X-MICROCMS-API-KEY", c.Config.APIKey)
resp, err := client.Do(req)
if err != nil {
return nil, err
Expand Down Expand Up @@ -103,11 +103,11 @@ func getMediaAry(option Config, requiredRequestCount int, requestUnit int) ([]Me
return ary, nil
}

func saveMedia(mediaAry []Media, option Config, totalCount int, baseDir string) error {
func (c *Client) saveMedia(mediaAry []Media, totalCount int, baseDir string) error {
for i, media := range mediaAry {
client := new(http.Client)
req, _ := http.NewRequest("GET", media.Url, nil)
req.Header.Set("X-MICROCMS-API-KEY", option.APIKey)
req.Header.Set("X-MICROCMS-API-KEY", c.Config.APIKey)

resp, err := client.Do(req)
if err != nil {
Expand Down

0 comments on commit 436d58a

Please sign in to comment.