niki/productapp/repository/database/db.go

58 lines
1.1 KiB
Go

package database
import (
"context"
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
"git.gocasts.ir/ebhomengo/niki/productapp/service/product"
"git.gocasts.ir/ebhomengo/niki/repository/mysql"
)
type DB struct {
conn *mysql.DB
}
func New(conn *mysql.DB) *DB {
return &DB{
conn: conn,
}
}
func (db *DB) GetProducts(ctx context.Context, page, pageSize uint) ([]product.Product, error) {
const Op = "domain.repository.mysql.order.get-shipping"
query := "SELECT * FROM products ORDER BY id DESC limit ? offset ?"
rows, err := db.conn.Conn().Query(query, page, pageSize)
if rows.Err() != nil {
return []product.Product{}, richerror.New(Op).WithErr(err)
}
defer rows.Close()
var products []product.Product
for rows.Next() {
var s product.Product
err := rows.Scan(
&s.ID,
&s.Name,
&s.Slug,
&s.Description,
&s.Price,
&s.Stock,
&s.IsActive,
&s.Features,
&s.CreatedAt,
&s.DeletedAt,
)
if err != nil {
return nil, richerror.New(Op).WithErr(err)
}
products = append(products, s)
}
return products, nil
}