package csv import ( "encoding/csv" "os" "go.uber.org/fx" "go.uber.org/zap" ) type Helper struct { fx.In csvFile *os.File csvWriter *csv.Writer logger *zap.Logger } func NewHelper(lc fx.Lifecycle, logger *zap.Logger) *Helper { csvFile, err := os.OpenFile("mqtt-logs.csv", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0644) if err != nil { logger.Fatal("error opening csv file", zap.Error(err)) } csvWriter := csv.NewWriter(csvFile) return &Helper{ csvFile: csvFile, csvWriter: csvWriter, logger: logger, } } func (h *Helper) AddEntry(date string, topic string, message string) error { record := []string{date, topic, message} if err := h.csvWriter.Write(record); err != nil { h.logger.Error("error writing to csv file", zap.Error(err)) return err } h.csvWriter.Flush() return nil } func (h *Helper) Close() error { h.csvWriter.Flush() if err := h.csvFile.Close(); err != nil { h.logger.Error("error closing csv file", zap.Error(err)) return err } return nil }