feat: add mysql partial repository
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
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) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
//Delete an user
|
||||
func (r *MySQLRepo) Delete(id entity.ID) error {
|
||||
return nil
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
package book
|
||||
|
||||
import (
|
||||
"github.com/eminetto/clean-architecture-go-v2/domain"
|
||||
"testing"
|
||||
|
||||
"github.com/eminetto/clean-architecture-go-v2/domain"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"github.com/eminetto/clean-architecture-go-v2/domain/entity"
|
||||
"time"
|
||||
|
||||
"github.com/eminetto/clean-architecture-go-v2/domain/entity"
|
||||
)
|
||||
|
||||
func NewFixtureUser() *User {
|
||||
return &User{
|
||||
ID: entity.NewID(),
|
||||
Email:"[email protected]",
|
||||
FirstName:"Ozzy",
|
||||
LastName: "Osbourne",
|
||||
return &User{
|
||||
ID: entity.NewID(),
|
||||
Email: "[email protected]",
|
||||
Password: "123456",
|
||||
FirstName: "Ozzy",
|
||||
LastName: "Osbourne",
|
||||
CreatedAt: time.Now(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"time"
|
||||
|
||||
"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 *User) (entity.ID, error) {
|
||||
stmt, err := r.db.Prepare(`
|
||||
insert into user (id, email, password, first_name, last_name, created_at)
|
||||
values(?,?,?,?,?,?)`)
|
||||
if err != nil {
|
||||
return e.ID, err
|
||||
}
|
||||
_, err = stmt.Exec(
|
||||
e.ID,
|
||||
e.Email,
|
||||
e.Password,
|
||||
e.FirstName,
|
||||
e.LastName,
|
||||
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) (*User, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
//Update an user
|
||||
func (r *MySQLRepo) Update(e *User) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
//Search users
|
||||
func (r *MySQLRepo) Search(query string) ([]*User, error) {
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
//List users
|
||||
func (r *MySQLRepo) List() ([]*User, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
//Delete an user
|
||||
func (r *MySQLRepo) Delete(id entity.ID) error {
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user