Taobin-Recipe-Manager/server/services/sheet/sheet.go

69 lines
1.2 KiB
Go
Raw Normal View History

2023-09-28 14:12:09 +07:00
package sheet
import (
"context"
"errors"
"recipe-manager/config"
2023-09-28 14:12:09 +07:00
"google.golang.org/api/option"
"google.golang.org/api/sheets/v4"
)
type SheetService interface {
2023-10-04 15:26:35 +07:00
GetSheet(ctx context.Context, sheetID string) [][]interface{}
2023-09-28 14:12:09 +07:00
}
type sheetService struct {
service *sheets.Service
}
func NewSheetService(ctx context.Context, cfg *config.ServerConfig) (SheetService, error) {
2023-09-28 14:12:09 +07:00
if cfg.APIKey == "" {
return nil, errors.New("API_KEY is empty")
2023-09-28 14:12:09 +07:00
}
service, err := sheets.NewService(ctx, option.WithAPIKey(cfg.APIKey))
2023-09-28 14:12:09 +07:00
if err != nil {
return nil, err
}
return &sheetService{
service: service,
}, nil
}
2023-10-04 15:26:35 +07:00
func (s *sheetService) GetSheet(ctx context.Context, sheetID string) [][]interface{} {
2023-09-28 14:12:09 +07:00
spreadSheet, err := s.service.Spreadsheets.Get(sheetID).Do()
if err != nil {
panic(err)
}
2023-10-04 15:26:35 +07:00
var sheetIndex int
for i, sheet := range spreadSheet.Sheets {
2023-09-28 14:12:09 +07:00
// print data collumn C
2023-10-04 15:26:35 +07:00
if sheet.Properties.Title == "menu-name" {
sheetIndex = i
break
2023-09-28 14:12:09 +07:00
}
2023-10-04 15:26:35 +07:00
}
sheet, err := s.service.Spreadsheets.Values.Get(sheetID, spreadSheet.Sheets[sheetIndex].Properties.Title).Do()
2023-09-28 14:12:09 +07:00
2023-10-04 15:26:35 +07:00
if err != nil {
panic(err)
}
result := [][]interface{}{}
for _, row := range sheet.Values {
if len(row) >= 6 {
result = append(result, row)
2023-09-28 14:12:09 +07:00
}
}
2023-10-04 15:26:35 +07:00
return result
2023-09-28 14:12:09 +07:00
}