package googleDrive import ( "context" "google.golang.org/api/drive/v3" "houston/common/util" "net/http" "time" ) type ActionsImpl struct { filesService *drive.FilesService } func (driveActions *ActionsImpl) SearchInDrive(timeout time.Duration, query string) (*drive.FileList, error) { driveContext, cancelFunc := context.WithTimeout(context.Background(), timeout) defer cancelFunc() fileList, err := driveActions.filesService.List().Q(query).Context(driveContext).Do() if err != nil { return nil, err } return fileList, nil } func (driveActions *ActionsImpl) CreateDirectory(timeout time.Duration, directoryName string) (*drive.File, error) { driveContext, cancelFunc := context.WithTimeout(context.Background(), timeout) defer cancelFunc() directory := &drive.File{MimeType: util.GoogleDriveFileMimeType, Name: directoryName} file, err := driveActions.filesService.Create(directory).Context(driveContext).Fields("*").Do() if err != nil { return nil, err } return file, nil } func (driveActions *ActionsImpl) DeleteFile(timeout time.Duration, fileId string) error { driveContext, cancelFunc := context.WithTimeout(context.Background(), timeout) defer cancelFunc() err := driveActions.filesService.Delete(fileId).Context(driveContext).Do() if err != nil { return err } return nil } func (driveActions *ActionsImpl) CopyFile(timeout time.Duration, fileId string, directoryId string) (*drive.File, error) { driveContext, cancelFunc := context.WithTimeout(context.Background(), timeout) defer cancelFunc() copyFile := &drive.File{Parents: []string{directoryId}} file, err := driveActions.filesService.Copy(fileId, copyFile).Fields("*").Context(driveContext).Do() if err != nil { return nil, err } return file, nil } func (driveActions *ActionsImpl) ExportFile(timeout time.Duration, fileId string, mimeType string) (*http.Response, error) { driveContext, cancelFunc := context.WithTimeout(context.Background(), timeout) defer cancelFunc() download, err := driveActions.filesService.Export(fileId, mimeType).Context(driveContext).Download() if err != nil { return nil, err } return download, nil }