46 lines
996 B
Go
46 lines
996 B
Go
|
package storage
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"time"
|
||
|
|
||
|
"arxiv-processor/arxiv"
|
||
|
)
|
||
|
|
||
|
// JSONStorage handles saving papers to JSON files
|
||
|
type JSONStorage struct {
|
||
|
FilePath string
|
||
|
}
|
||
|
|
||
|
// NewJSONStorage creates a new JSON storage handler
|
||
|
func NewJSONStorage(filePath string) *JSONStorage {
|
||
|
return &JSONStorage{FilePath: filePath}
|
||
|
}
|
||
|
|
||
|
// SavePapers saves papers to a JSON file
|
||
|
func (s *JSONStorage) SavePapers(papers []arxiv.Paper) error {
|
||
|
file, err := os.Create(s.FilePath)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("failed to create file: %w", err)
|
||
|
}
|
||
|
defer file.Close()
|
||
|
|
||
|
encoder := json.NewEncoder(file)
|
||
|
encoder.SetIndent("", " ")
|
||
|
if err := encoder.Encode(papers); err != nil {
|
||
|
return fmt.Errorf("failed to encode papers: %w", err)
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// Paper represents a simplified paper structure for JSON storage
|
||
|
type Paper struct {
|
||
|
ID string `json:"id"`
|
||
|
Title string `json:"title"`
|
||
|
Published time.Time `json:"published"`
|
||
|
Authors []string `json:"authors"`
|
||
|
}
|