101 lines
2.6 KiB
Go
101 lines
2.6 KiB
Go
package repositories
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
"git.dynamicdiscord.de/kalipso/zineshop/models"
|
|
)
|
|
|
|
type InvoiceRepository interface {
|
|
Create(models.Invoice) (models.Invoice, error)
|
|
GetAll() ([]models.Invoice, error)
|
|
GetAllSorted(string) ([]models.Invoice, error)
|
|
GetAllNewestFirst() ([]models.Invoice, error)
|
|
GetAllNewestLast() ([]models.Invoice, error)
|
|
GetById(string) (models.Invoice, error)
|
|
//GetByInvoiceId(string) (models.Invoice, error)
|
|
Update(models.Invoice) (models.Invoice, error)
|
|
DeleteById(string) error
|
|
}
|
|
|
|
type GORMInvoiceRepository struct {
|
|
DB *gorm.DB
|
|
}
|
|
|
|
func NewGORMInvoiceRepository(db *gorm.DB) InvoiceRepository {
|
|
return &GORMInvoiceRepository{
|
|
DB: db,
|
|
}
|
|
}
|
|
|
|
func (t *GORMInvoiceRepository) Create(invoice models.Invoice) (models.Invoice, error) {
|
|
result := t.DB.Create(&invoice)
|
|
|
|
if result.Error != nil {
|
|
return models.Invoice{}, result.Error
|
|
}
|
|
|
|
return invoice, nil
|
|
}
|
|
|
|
func (t *GORMInvoiceRepository) GetAll() ([]models.Invoice, error) {
|
|
var invoice []models.Invoice
|
|
result := t.DB.Preload("PrintJobs.ShopItem").Preload("PrintJobs.Variant").Preload("PrintJobs.PaperType").Preload("PrintJobs.CoverPaperType").Preload("PrintJobs").Find(&invoice)
|
|
|
|
return invoice, result.Error
|
|
}
|
|
|
|
func (t *GORMInvoiceRepository) GetAllSorted(sortString string) ([]models.Invoice, error) {
|
|
var invoices []models.Invoice
|
|
result := t.DB.Preload("PrintJobs.ShopItem").Preload("PrintJobs.Variant").Preload("PrintJobs.PaperType").Preload("PrintJobs.CoverPaperType").Preload("PrintJobs").Order(sortString).Find(&invoices)
|
|
|
|
return invoices, result.Error
|
|
}
|
|
|
|
func (r *GORMInvoiceRepository) GetAllNewestFirst() ([]models.Invoice, error) {
|
|
return r.GetAllSorted("created_at desc")
|
|
}
|
|
|
|
func (r *GORMInvoiceRepository) GetAllNewestLast() ([]models.Invoice, error) {
|
|
return r.GetAllSorted("created_at asc")
|
|
}
|
|
|
|
func (t *GORMInvoiceRepository) GetById(id string) (models.Invoice, error) {
|
|
invoiceId, err := strconv.Atoi(id)
|
|
|
|
if err != nil {
|
|
return models.Invoice{}, err
|
|
}
|
|
|
|
var invoice models.Invoice
|
|
result := t.DB.Preload("PrintJobs").First(&invoice, uint(invoiceId))
|
|
|
|
if result.Error != nil {
|
|
return models.Invoice{}, result.Error
|
|
}
|
|
|
|
return invoice, nil
|
|
}
|
|
|
|
func (t *GORMInvoiceRepository) Update(invoice models.Invoice) (models.Invoice, error) {
|
|
result := t.DB.Save(&invoice)
|
|
if result.Error != nil {
|
|
return models.Invoice{}, result.Error
|
|
}
|
|
|
|
return invoice, nil
|
|
}
|
|
|
|
func (t *GORMInvoiceRepository) DeleteById(id string) error {
|
|
invoiceId, err := strconv.Atoi(id)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
result := t.DB.Delete(&models.Invoice{}, invoiceId)
|
|
return result.Error
|
|
}
|