From 34b252f708109c87a5ad95becf770687193d0fa9 Mon Sep 17 00:00:00 2001 From: Elton Minetto Date: Mon, 12 Oct 2020 08:02:35 -0300 Subject: [PATCH] feat: move infra to driver --- api/main.go | 2 +- cmd/main.go | 2 +- docker-compose.yml | 4 ++-- {infra => driver}/repository/book_mysql.go | 0 {infra => driver}/repository/user_mysql.go | 0 {infra => ops}/db/init.sql | 0 {infra => ops}/prometheus/prometheus.yml | 0 .../book_inmem.go => usecase/book/inmem.go | 24 +++++++++---------- usecase/book/service_test.go | 9 ++++--- .../user_inmem.go => usecase/user/inmem.go | 24 +++++++++---------- usecase/user/service_test.go | 10 ++++---- 11 files changed, 36 insertions(+), 39 deletions(-) rename {infra => driver}/repository/book_mysql.go (100%) rename {infra => driver}/repository/user_mysql.go (100%) rename {infra => ops}/db/init.sql (100%) rename {infra => ops}/prometheus/prometheus.yml (100%) rename infra/repository/book_inmem.go => usecase/book/inmem.go (60%) rename infra/repository/user_inmem.go => usecase/user/inmem.go (62%) diff --git a/api/main.go b/api/main.go index 3c49d9c..20ab983 100644 --- a/api/main.go +++ b/api/main.go @@ -9,7 +9,7 @@ import ( "strconv" "time" - "github.com/eminetto/clean-architecture-go-v2/infra/repository" + "github.com/eminetto/clean-architecture-go-v2/driver/repository" "github.com/eminetto/clean-architecture-go-v2/usecase/book" "github.com/eminetto/clean-architecture-go-v2/usecase/user" diff --git a/cmd/main.go b/cmd/main.go index dfa9c23..f1041d7 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -7,7 +7,7 @@ import ( "log" "os" - "github.com/eminetto/clean-architecture-go-v2/infra/repository" + "github.com/eminetto/clean-architecture-go-v2/driver/repository" "github.com/eminetto/clean-architecture-go-v2/usecase/book" "github.com/eminetto/clean-architecture-go-v2/config" diff --git a/docker-compose.yml b/docker-compose.yml index 6894b3b..82d0aab 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: image: mysql:5.7 command: --default-authentication-plugin=mysql_native_password --init-file /data/application/init.sql volumes: - - ./infra/init.sql:/data/application/init.sql + - ./ops/init.sql:/data/application/init.sql environment: MYSQL_ROOT_PASSWORD: clean_architecture_go_v2 MYSQL_DATABASE: clean_architecture_go_v2 @@ -30,7 +30,7 @@ services: command: - --config.file=/etc/prometheus/prometheus.yml volumes: - - ./infra/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro + - ./ops/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro container_name: clean-architecture-go-v2-prometheus network_mode: "bridge" prometheus-pushgateway: diff --git a/infra/repository/book_mysql.go b/driver/repository/book_mysql.go similarity index 100% rename from infra/repository/book_mysql.go rename to driver/repository/book_mysql.go diff --git a/infra/repository/user_mysql.go b/driver/repository/user_mysql.go similarity index 100% rename from infra/repository/user_mysql.go rename to driver/repository/user_mysql.go diff --git a/infra/db/init.sql b/ops/db/init.sql similarity index 100% rename from infra/db/init.sql rename to ops/db/init.sql diff --git a/infra/prometheus/prometheus.yml b/ops/prometheus/prometheus.yml similarity index 100% rename from infra/prometheus/prometheus.yml rename to ops/prometheus/prometheus.yml diff --git a/infra/repository/book_inmem.go b/usecase/book/inmem.go similarity index 60% rename from infra/repository/book_inmem.go rename to usecase/book/inmem.go index 6dc393f..c9c9e5e 100644 --- a/infra/repository/book_inmem.go +++ b/usecase/book/inmem.go @@ -1,4 +1,4 @@ -package repository +package book import ( "strings" @@ -6,27 +6,27 @@ import ( "github.com/eminetto/clean-architecture-go-v2/entity" ) -//BookInmem in memory repo -type BookInmem struct { +//inmem in memory repo +type inmem struct { m map[entity.ID]*entity.Book } -//NewBookInmem create new repository -func NewBookInmem() *BookInmem { +//newInmem create new repository +func newInmem() *inmem { var m = map[entity.ID]*entity.Book{} - return &BookInmem{ + return &inmem{ m: m, } } //Create a book -func (r *BookInmem) Create(e *entity.Book) (entity.ID, error) { +func (r *inmem) Create(e *entity.Book) (entity.ID, error) { r.m[e.ID] = e return e.ID, nil } //Get a book -func (r *BookInmem) Get(id entity.ID) (*entity.Book, error) { +func (r *inmem) Get(id entity.ID) (*entity.Book, error) { if r.m[id] == nil { return nil, entity.ErrNotFound } @@ -34,7 +34,7 @@ func (r *BookInmem) Get(id entity.ID) (*entity.Book, error) { } //Update a book -func (r *BookInmem) Update(e *entity.Book) error { +func (r *inmem) Update(e *entity.Book) error { _, err := r.Get(e.ID) if err != nil { return err @@ -44,7 +44,7 @@ func (r *BookInmem) Update(e *entity.Book) error { } //Search books -func (r *BookInmem) Search(query string) ([]*entity.Book, error) { +func (r *inmem) Search(query string) ([]*entity.Book, error) { var d []*entity.Book for _, j := range r.m { if strings.Contains(strings.ToLower(j.Title), query) { @@ -55,7 +55,7 @@ func (r *BookInmem) Search(query string) ([]*entity.Book, error) { } //List books -func (r *BookInmem) List() ([]*entity.Book, error) { +func (r *inmem) List() ([]*entity.Book, error) { var d []*entity.Book for _, j := range r.m { d = append(d, j) @@ -64,7 +64,7 @@ func (r *BookInmem) List() ([]*entity.Book, error) { } //Delete a book -func (r *BookInmem) Delete(id entity.ID) error { +func (r *inmem) Delete(id entity.ID) error { if r.m[id] == nil { return entity.ErrNotFound } diff --git a/usecase/book/service_test.go b/usecase/book/service_test.go index 47ffbe8..999b5b6 100644 --- a/usecase/book/service_test.go +++ b/usecase/book/service_test.go @@ -5,7 +5,6 @@ import ( "time" "github.com/eminetto/clean-architecture-go-v2/entity" - "github.com/eminetto/clean-architecture-go-v2/infra/repository" "github.com/stretchr/testify/assert" ) @@ -21,7 +20,7 @@ func newFixtureBook() *entity.Book { } func Test_Create(t *testing.T) { - repo := repository.NewBookInmem() + repo := newInmem() m := NewService(repo) u := newFixtureBook() _, err := m.CreateBook(u.Title, u.Author, u.Pages, u.Quantity) @@ -30,7 +29,7 @@ func Test_Create(t *testing.T) { } func Test_SearchAndFind(t *testing.T) { - repo := repository.NewBookInmem() + repo := newInmem() m := NewService(repo) u1 := newFixtureBook() u2 := newFixtureBook() @@ -63,7 +62,7 @@ func Test_SearchAndFind(t *testing.T) { } func Test_Update(t *testing.T) { - repo := repository.NewBookInmem() + repo := newInmem() m := NewService(repo) u := newFixtureBook() id, err := m.CreateBook(u.Title, u.Author, u.Pages, u.Quantity) @@ -77,7 +76,7 @@ func Test_Update(t *testing.T) { } func TestDelete(t *testing.T) { - repo := repository.NewBookInmem() + repo := newInmem() m := NewService(repo) u1 := newFixtureBook() u2 := newFixtureBook() diff --git a/infra/repository/user_inmem.go b/usecase/user/inmem.go similarity index 62% rename from infra/repository/user_inmem.go rename to usecase/user/inmem.go index 0ffd08d..651c6d4 100644 --- a/infra/repository/user_inmem.go +++ b/usecase/user/inmem.go @@ -1,4 +1,4 @@ -package repository +package user import ( "fmt" @@ -7,27 +7,27 @@ import ( "github.com/eminetto/clean-architecture-go-v2/entity" ) -//UserInmem in memory repo -type UserInmem struct { +//inmem in memory repo +type inmem struct { m map[entity.ID]*entity.User } -//NewUserInmem create new repository -func NewUserInmem() *UserInmem { +//newInmem create new repository +func newInmem() *inmem { var m = map[entity.ID]*entity.User{} - return &UserInmem{ + return &inmem{ m: m, } } //Create an user -func (r *UserInmem) Create(e *entity.User) (entity.ID, error) { +func (r *inmem) Create(e *entity.User) (entity.ID, error) { r.m[e.ID] = e return e.ID, nil } //Get an user -func (r *UserInmem) Get(id entity.ID) (*entity.User, error) { +func (r *inmem) Get(id entity.ID) (*entity.User, error) { if r.m[id] == nil { return nil, entity.ErrNotFound } @@ -35,7 +35,7 @@ func (r *UserInmem) Get(id entity.ID) (*entity.User, error) { } //Update an user -func (r *UserInmem) Update(e *entity.User) error { +func (r *inmem) Update(e *entity.User) error { _, err := r.Get(e.ID) if err != nil { return err @@ -45,7 +45,7 @@ func (r *UserInmem) Update(e *entity.User) error { } //Search users -func (r *UserInmem) Search(query string) ([]*entity.User, error) { +func (r *inmem) Search(query string) ([]*entity.User, error) { var d []*entity.User for _, j := range r.m { if strings.Contains(strings.ToLower(j.FirstName), query) { @@ -60,7 +60,7 @@ func (r *UserInmem) Search(query string) ([]*entity.User, error) { } //List users -func (r *UserInmem) List() ([]*entity.User, error) { +func (r *inmem) List() ([]*entity.User, error) { var d []*entity.User for _, j := range r.m { d = append(d, j) @@ -69,7 +69,7 @@ func (r *UserInmem) List() ([]*entity.User, error) { } //Delete an user -func (r *UserInmem) Delete(id entity.ID) error { +func (r *inmem) Delete(id entity.ID) error { if r.m[id] == nil { return fmt.Errorf("not found") } diff --git a/usecase/user/service_test.go b/usecase/user/service_test.go index 086d8ac..99fafc4 100644 --- a/usecase/user/service_test.go +++ b/usecase/user/service_test.go @@ -4,8 +4,6 @@ import ( "testing" "time" - "github.com/eminetto/clean-architecture-go-v2/infra/repository" - "github.com/eminetto/clean-architecture-go-v2/entity" "github.com/stretchr/testify/assert" @@ -23,7 +21,7 @@ func newFixtureUser() *entity.User { } func Test_Create(t *testing.T) { - repo := repository.NewUserInmem() + repo := newInmem() m := NewService(repo) u := newFixtureUser() _, err := m.CreateUser(u.Email, u.Password, u.FirstName, u.LastName) @@ -33,7 +31,7 @@ func Test_Create(t *testing.T) { } func Test_SearchAndFind(t *testing.T) { - repo := repository.NewUserInmem() + repo := newInmem() m := NewService(repo) u1 := newFixtureUser() u2 := newFixtureUser() @@ -66,7 +64,7 @@ func Test_SearchAndFind(t *testing.T) { } func Test_Update(t *testing.T) { - repo := repository.NewUserInmem() + repo := newInmem() m := NewService(repo) u := newFixtureUser() id, err := m.CreateUser(u.Email, u.Password, u.FirstName, u.LastName) @@ -83,7 +81,7 @@ func Test_Update(t *testing.T) { } func TestDelete(t *testing.T) { - repo := repository.NewUserInmem() + repo := newInmem() m := NewService(repo) u1 := newFixtureUser() u2 := newFixtureUser()