yasshi2525/RushHour

View on GitHub
entities/persistence.go

Summary

Maintainability
A
0 mins
Test Coverage
F
33%
package entities

import "time"

// PersistentStatus represents wethear entity requires database update.
type PersistentStatus uint

const (
    // DBNew represents that entity doesn't exist in database.
    DBNew PersistentStatus = iota
    // DBMerged represents that entity is synchronized to database.
    DBMerged
    // DBChanged represents that old entity exists in database and it needs update.
    DBChanged
)

// Persistence has time information for gorm package.
type Persistence struct {
    CreatedAt time.Time  `             json:"-"`
    UpdatedAt time.Time  `             json:"-"`
    DeletedAt *time.Time `gorm:"index" json:"-"`
    // Changed represents it need to update database
    DBStatus PersistentStatus `gorm:"-" json:"-"`
}

// NewPersistence create instance.
func NewPersistence() Persistence {
    return Persistence{
        CreatedAt: time.Now(),
        UpdatedAt: time.Now(),
        DBStatus:  DBNew,
    }
}

// IsNew represents this entity doesn't exist in database.
func (p *Persistence) IsNew() bool {
    return p.DBStatus == DBNew
}

// IsChanged returns true when it is changed after
func (p *Persistence) IsChanged() bool {
    return p.DBStatus != DBMerged
}

// Reset set status as not changed
func (p *Persistence) Reset() {
    p.DBStatus = DBMerged
}

// Change marks changeness.
func (p *Persistence) Change() {
    // keep DBNew
    if p.DBStatus != DBNew {
        p.DBStatus = DBChanged
    }
}