feat: add mysql partial repository

This commit is contained in:
Elton Minetto
2020-06-25 14:29:02 -03:00
parent 03c554e277
commit b9205999f1
16 changed files with 411 additions and 121 deletions
+93
View File
@@ -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
}
+2 -1
View File
@@ -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"
)
+9 -7
View File
@@ -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(),
}
}
}
+72
View File
@@ -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
}