Skip to content

Commit

Permalink
feat(repository): add mysql repository (gorm)
Browse files Browse the repository at this point in the history
  • Loading branch information
mcauto committed Nov 30, 2021
1 parent 4d3e5a5 commit c43ac38
Show file tree
Hide file tree
Showing 13 changed files with 98 additions and 2 deletions.
2 changes: 1 addition & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
DATABASE_DSN="mysql://root:imdeo@localhost:23306/imdeo"
DATABASE_DSN="mysql://root:imdeo@tcp(127.0.0.1:3306)/todolist?charset=utf8mb4&parseTime=True&loc=Local"
PORT=5000
15 changes: 15 additions & 0 deletions deploy/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
version: '3.7'
services:
database:
image: mysql:8.0
ports:
- "23306:3306"
env_file:
- ./mysql/.env
api:
image: ghcr.io/mcauto/todolist-api:latest
build:
context: ..
dockerfile: ./deploy/todolist-api/Dockerfile
env_file:
- ./todolist-api/.env
4 changes: 4 additions & 0 deletions deploy/mysql/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
MYSQL_USER=deokim
MYSQL_PASSWORD=imdeo
MYSQL_ROOT_PASSWORD=imdeo
MYSQL_DATABASE=todolist
13 changes: 13 additions & 0 deletions deploy/mysql/my.cnf
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
default-authentication-plugin=mysql_native_password
init-connect='SET collation_connection = utf8mb4_unicode_ci'
init-connect='SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci'
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
!includedir /etc/mysql/conf.d/
2 changes: 2 additions & 0 deletions deploy/todolist-api/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
DATABASE_DSN="mysql://root:imdeo@tcp(127.0.0.1:3306)/todolist?charset=utf8mb4&parseTime=True&loc=Local"
PORT=5000
2 changes: 1 addition & 1 deletion deploy/todolist-api/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ WORKDIR /go/src/todolist-api

COPY ../.. .

RUN make lint vet sast test build
RUN make build

FROM scratch

Expand Down
5 changes: 5 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ require (
github.com/spf13/cobra v1.2.1
github.com/swaggo/swag v1.7.6
go.uber.org/fx v1.15.0
gorm.io/driver/mysql v1.2.1
gorm.io/gorm v1.22.4
)

require (
Expand All @@ -17,7 +19,10 @@ require (
github.com/go-openapi/jsonreference v0.19.5 // indirect
github.com/go-openapi/spec v0.20.3 // indirect
github.com/go-openapi/swag v0.19.14 // indirect
github.com/go-sql-driver/mysql v1.6.0 // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.3 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/mailru/easyjson v0.7.6 // indirect
github.com/spf13/pflag v1.0.5 // indirect
Expand Down
10 changes: 10 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ github.com/go-openapi/spec v0.20.3/go.mod h1:gG4F8wdEDN+YPBMVnzE85Rbhf+Th2DTvA9n
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng=
github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
Expand Down Expand Up @@ -183,6 +185,10 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.3 h1:PlHq1bSCSZL9K0wUhbm2pGLoTWs2GwVhsP6emvGV/ZI=
github.com/jinzhu/now v1.1.3/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
Expand Down Expand Up @@ -630,6 +636,10 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gorm.io/driver/mysql v1.2.1 h1:h+3f1l9Ng2C072Y2tIiLgPpWN78r1KXL7bHJ0nTjlhU=
gorm.io/driver/mysql v1.2.1/go.mod h1:qsiz+XcAyMrS6QY+X3M9R6b/lKM1imKmcuK9kac5LTo=
gorm.io/gorm v1.22.4 h1:8aPcyEJhY0MAt8aY6Dc524Pn+pO29K+ydu+e/cXSpQM=
gorm.io/gorm v1.22.4/go.mod h1:1aeVC+pe9ZmvKZban/gW4QPra7PRoTEssyc922qCAkk=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
Expand Down
6 changes: 6 additions & 0 deletions modules/config/settings_database.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package config

// DatabaseCmd represents the database command
func (s Settings) DatabaseDSN() string {
return s.Database.DSN
}
2 changes: 2 additions & 0 deletions modules/inject.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ package modules

import (
"todolist-api/modules/config"
"todolist-api/modules/repository"

"go.uber.org/fx"
)

// ToBeInjected 최종 주입될 모듈
var ToBeInjected = fx.Options(
config.Modules,
repository.Modules,
)
3 changes: 3 additions & 0 deletions modules/repository/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# repository

외부 저장소
26 changes: 26 additions & 0 deletions modules/repository/_mysql/database.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package _mysql

import (
"log"
"todolist-api/modules/config"

"gorm.io/driver/mysql"
"gorm.io/gorm"
)

// Repository is an interface for the repository
type Repository interface{}

// RepositoryImpl is an implementation of Repository
type RepositoryImpl struct {
*gorm.DB
}

// NewRepository returns a new instance of Repository
func NewRepository(settings *config.Settings) Repository {
db, err := gorm.Open(mysql.Open(settings.DatabaseDSN()), &gorm.Config{})
if err != nil {
log.Fatal(err)
}
return &RepositoryImpl{db}
}
10 changes: 10 additions & 0 deletions modules/repository/modules.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package repository

import (
"todolist-api/modules/repository/_mysql"

"go.uber.org/fx"
)

// Modules is a list of all modules
var Modules = fx.Options(fx.Provide(_mysql.NewRepository))

0 comments on commit c43ac38

Please sign in to comment.