61 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
| // Package with the mostly static content (models) of this microservice
 | |
| package models
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/jinzhu/gorm"
 | |
| 
 | |
| 	"github.com/genofire/hs_master-kss-monolith/lib/database"
 | |
| )
 | |
| 
 | |
| // Goods managemd in this stock microservice
 | |
| type Good struct {
 | |
| 	ID        int64
 | |
| 	ProductID int64
 | |
| 	Position  string
 | |
| 	Comment   string
 | |
| 	FouledAt  *time.Time
 | |
| 
 | |
| 	RecievedAt *time.Time `sql:"default:current_timestamp"`
 | |
| 	// Make it temporary unusable
 | |
| 	LockedAt     *time.Time
 | |
| 	LockedSecret string `json:"-"`
 | |
| 	// Make it unusable
 | |
| 	DeletedAt *time.Time
 | |
| 	Sended    bool
 | |
| }
 | |
| 
 | |
| // Function to enerate a database and select locked goods with a filter
 | |
| func (g *Good) FilterAvailable(db *gorm.DB) *gorm.DB {
 | |
| 	return db.Model(g).Where("locked_secret == '' OR locked_secret is NULL")
 | |
| }
 | |
| 
 | |
| // Function to lock a good, so that it cannot be locked or bought by other users
 | |
| func (g *Good) Lock(secret string) {
 | |
| 	now := time.Now()
 | |
| 	g.LockedSecret = secret
 | |
| 	g.LockedAt = &now
 | |
| }
 | |
| 
 | |
| // Function to check if a good is locked
 | |
| func (g *Good) IsLock() bool {
 | |
| 	return len(g.LockedSecret) > 0
 | |
| }
 | |
| 
 | |
| // Function to unlock a good
 | |
| func (g *Good) Unlock(secret string) error {
 | |
| 	if g.LockedSecret == secret {
 | |
| 		g.LockedSecret = ""
 | |
| 		g.LockedAt = nil
 | |
| 		return nil
 | |
| 	}
 | |
| 	return errors.New("wrong secret")
 | |
| }
 | |
| 
 | |
| // Function to initialize the database
 | |
| func init() {
 | |
| 	database.AddModel(&Good{})
 | |
| }
 |