product

package
v0.0.0-...-6cce10f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 25, 2023 License: MIT Imports: 3 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Product

type Product struct {
	ID          uint    `json:"id" gorm:"primaryKey"`                                     // Identificador del producto. Es clave primaria en la tabla de la base de datos
	Name        string  `json:"name" gorm:"size:60" validate:"required,gte=2,lte=60"`     // Nombre del producto, obligatorio, mínimo 2 caracteres, máximo 60 caracteres
	Description string  `json:"description,omitempty" gorm:"size:250" validate:"lte=250"` // Descripción "larga" del producto, no obligatorio
	Unit        string  `json:"unit" gorm:"size=32" validate:"required"`                  // Unidad de medida del producto (unidad, metros, litros, etc), hasta 32 caracteres, obligatorio
	Price       float64 `json:"price" validate:"required"`                                // Precio, obligatorio
	Stock       float64 `json:"stock"`                                                    // Cantidad del producto en stock
	IsActive    bool    `json:"is_active"`                                                // Indica si el producto está activo. Sólo para utilizar algún atributo de tipo boolean ;-)
}

Product describe un producto en el sistema Se utiliza gorm (https://gorm.io/) para modelar la entidad Product en la base de datos. Es por ello que en la declaración de los atributos, además del nombre que recibe el atributo en json, también se declaran las características necesarias de gorm.

type Repository

type Repository interface {
	Create(product *Product) (*Product, error) // Create permite agregar un producto nuevo al repositorio
	GetByID(id uint) (*Product, error)         // GetByID permite recuperar un único producto, si existe, del repositorio
	GetByName(name string) (*Product, error)   // GetByName permite recuperar un único producto por nombre
	GetAll() ([]*Product, error)               // GetAll permite recuperar, en un slice, todos los productos existentes en el repositorio
	Update(product *Product) (*Product, error) // Update permite actualizar los datos de un producto
	Delete(product *Product) error             // Delete elmimina un producto del repositorio
}

Repository representa el repositorio permanente de los productos. Se utiliza el concepto de interface para desacoplar la implementación específica del repositorio. Los métodos son los básicos de un ABM. Luego, en los usecases, quizás aparezcan otros métodos que se agregan y "extienden" esta interface. En general, los métodos devuelven los datos del producto afectado, en los casos de alta, consulta y actualización exitosos. Y un error en caso de falla.

type Usecase

type Usecase interface {
	Repository
	// UpdateStock permite modificar el stock de un producto
	// Por supuesto, se podría lograr el mismo resultado llamando al método Update de la interface Repository
	// pero lo agregamos sólo para extender dicha interface.
	UpdateStock(id uint, stock float64) (*Product, error)
}

Usecase representa los casos de uso de productos Extiende la interface Product

func NewUsecase

func NewUsecase(repo Repository) Usecase

NewUsecase creates a new usecase. Implements the Usecase interface

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL