Files
clean-architecture-go-v2/domain/entity/book/repository_mysql.go
T
2020-06-25 18:03:58 -03:00

114 lines
2.2 KiB
Go

package book
import (
"database/sql"
"time"
"github.com/eminetto/clean-architecture-go-v2/domain"
"github.com/eminetto/clean-architecture-go-v2/domain/entity"
)
//MySQLRepo mysql repo
type MySQLRepo struct {
db *sql.DB
}
//NewMySQLRepoRepository create new repository
func NewMySQLRepoRepository(db *sql.DB) *MySQLRepo {
return &MySQLRepo{
db: db,
}
}
//Create an user
func (r *MySQLRepo) Create(e *Book) (entity.ID, error) {
stmt, err := r.db.Prepare(`
insert into book (id, title, author, pages, quantity, created_at)
values(?,?,?,?,?,?)`)
if err != nil {
return e.ID, err
}
_, err = stmt.Exec(
e.ID,
e.Title,
e.Author,
e.Pages,
e.Quantity,
time.Now().Format("2006-01-02"),
)
if err != nil {
return e.ID, err
}
err = stmt.Close()
if err != nil {
return e.ID, err
}
return e.ID, nil
}
//Get an user
func (r *MySQLRepo) Get(id entity.ID) (*Book, error) {
return nil, nil
}
//Update an user
func (r *MySQLRepo) Update(e *Book) error {
return nil
}
//Search users
func (r *MySQLRepo) Search(query string) ([]*Book, error) {
stmt, err := r.db.Prepare(`select id, title, author, pages, quantity, created_at from book where title like ?`)
if err != nil {
return nil, err
}
var books []*Book
rows, err := stmt.Query("%" + query + "%")
if err != nil {
return nil, err
}
for rows.Next() {
var b Book
err = rows.Scan(&b.ID, &b.Title, &b.Author, &b.Pages, &b.Quantity, &b.CreatedAt)
if err != nil {
return nil, err
}
books = append(books, &b)
}
if len(books) == 0 {
return nil, domain.ErrNotFound
}
return books, nil
}
//List users
func (r *MySQLRepo) List() ([]*Book, error) {
stmt, err := r.db.Prepare(`select id, title, author, pages, quantity, created_at from book`)
if err != nil {
return nil, err
}
var books []*Book
rows, err := stmt.Query()
if err != nil {
return nil, err
}
for rows.Next() {
var b Book
err = rows.Scan(&b.ID, &b.Title, &b.Author, &b.Pages, &b.Quantity, &b.CreatedAt)
if err != nil {
return nil, err
}
books = append(books, &b)
}
if len(books) == 0 {
return nil, domain.ErrNotFound
}
return books, nil
}
//Delete an user
func (r *MySQLRepo) Delete(id entity.ID) error {
return nil
}