Files
rmser/internal/infrastructure/repository/invoices/postgres.go
2025-11-29 08:40:24 +03:00

53 lines
1.1 KiB
Go

package invoices
import (
"time"
"rmser/internal/domain/invoices"
"gorm.io/gorm"
"gorm.io/gorm/clause"
)
type pgRepository struct {
db *gorm.DB
}
func NewRepository(db *gorm.DB) invoices.Repository {
return &pgRepository{db: db}
}
func (r *pgRepository) GetLastInvoiceDate() (*time.Time, error) {
var inv invoices.Invoice
err := r.db.Order("date_incoming DESC").First(&inv).Error
if err != nil {
if err == gorm.ErrRecordNotFound {
return nil, nil
}
return nil, err
}
return &inv.DateIncoming, nil
}
func (r *pgRepository) SaveInvoices(list []invoices.Invoice) error {
return r.db.Transaction(func(tx *gorm.DB) error {
for _, inv := range list {
if err := tx.Omit("Items").Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "id"}},
UpdateAll: true,
}).Create(&inv).Error; err != nil {
return err
}
if err := tx.Where("invoice_id = ?", inv.ID).Delete(&invoices.InvoiceItem{}).Error; err != nil {
return err
}
if len(inv.Items) > 0 {
if err := tx.Create(&inv.Items).Error; err != nil {
return err
}
}
}
return nil
})
}