package sheet import ( "context" "recipe-manager/helpers" "golang.org/x/oauth2" "google.golang.org/api/option" "google.golang.org/api/sheets/v4" ) type SheetService interface { GetSheet(ctx context.Context, sheetID string) [][]interface{} } type sheetService struct { config *oauth2.Config service *sheets.Service } func NewSheetService(ctx context.Context) (SheetService, error) { clientSecret, err := helpers.GetClientSecret("client_secret.json") if err != nil { return nil, err } token, err := helpers.GetToken("token.json") if err != nil { return nil, err } service, err := sheets.NewService(ctx, option.WithTokenSource(clientSecret.TokenSource(ctx, token))) if err != nil { return nil, err } return &sheetService{ config: clientSecret, service: service, }, nil } func (s *sheetService) GetSheet(ctx context.Context, sheetID string) [][]interface{} { spreadSheet, err := s.service.Spreadsheets.Get(sheetID).Do() if err != nil { panic(err) } var sheetIndex int for i, sheet := range spreadSheet.Sheets { // print data collumn C if sheet.Properties.Title == "menu-name" { sheetIndex = i break } } sheet, err := s.service.Spreadsheets.Values.Get(sheetID, spreadSheet.Sheets[sheetIndex].Properties.Title).Do() if err != nil { panic(err) } result := [][]interface{}{} for _, row := range sheet.Values { if len(row) >= 6 { result = append(result, row) } } return result }