Skip to content

Commit

Permalink
2024 🔥 gorm
Browse files Browse the repository at this point in the history
  • Loading branch information
cuongnd9 committed Mar 17, 2024
1 parent 5da9c19 commit 0cd6e3c
Show file tree
Hide file tree
Showing 11 changed files with 121 additions and 226 deletions.
2 changes: 1 addition & 1 deletion .golangci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ linters:

linters-settings:
goimports:
local-prefixes: github.com/cuongnd9/go_template
local-prefixes: github.com/cuongnd9/go-grpc
govet:
check-shadowing: true
settings:
Expand Down
22 changes: 11 additions & 11 deletions config/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,30 +10,30 @@ import (
type DBConfig struct {
Host string `default:"0.0.0.0"`
Port string `default:"3036"`
User string `default:"root"`
User string `default:"cuongpo"`
DBName string `default:"cuongpo"`
Password string `default:"cuongpo"`
Password string `default:"cuongpo998"`
}

func BuildDBConfig() *DBConfig {
dbConfig := DBConfig{
Host: os.Getenv("PG_HOST"),
Port: os.Getenv("PG_PORT"),
User: os.Getenv("PG_USER"),
DBName: os.Getenv("PG_DBNAME"),
Password: os.Getenv("PG_PASSWORD"),
Host: os.Getenv("DB_HOST"),
Port: os.Getenv("DB_PORT"),
User: os.Getenv("DB_USER"),
DBName: os.Getenv("DB_DBNAME"),
Password: os.Getenv("DB_PASSWORD"),
}
defaults.SetDefaults(&dbConfig)
return &dbConfig
}

func BuildDBConn() string {
func BuildDSN() string {
dbConfig := BuildDBConfig()
return fmt.Sprintf("host=%s user=%s password=%s dbname=%s port=%s sslmode=disable",
dbConfig.Host,
return fmt.Sprintf("%s:%s@tcp(%s:%s)/%s",
dbConfig.User,
dbConfig.Password,
dbConfig.DBName,
dbConfig.Host,
dbConfig.Port,
dbConfig.DBName,
)
}
17 changes: 14 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,13 +1,24 @@
module github.com/cuongnd9/go-grpc

go 1.14
go 1.22

require (
github.com/go-sql-driver/mysql v1.5.0
github.com/mcuadros/go-defaults v1.2.0
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect
google.golang.org/grpc v1.32.0
google.golang.org/protobuf v1.33.0
gorm.io/driver/mysql v1.5.4
gorm.io/gorm v1.25.7
syreclabs.com/go/faker v1.2.2
)

require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/go-sql-driver/mysql v1.8.0 // indirect
github.com/golang/protobuf v1.5.0 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
golang.org/x/net v0.0.0-20190311183353-d8887717615a // indirect
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a // indirect
golang.org/x/text v0.3.0 // indirect
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect
)
10 changes: 8 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
Expand All @@ -7,8 +9,9 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/go-sql-driver/mysql v1.8.0 h1:UtktXaU2Nb64z/pLiGIxY4431SJ4/dR5cjMmlVHgnT4=
github.com/go-sql-driver/mysql v1.8.0/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
Expand Down Expand Up @@ -89,6 +92,9 @@ google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGm
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gorm.io/driver/mysql v1.5.4 h1:igQmHfKcbaTVyAIHNhhB888vvxh8EdQ2uSUT0LPcBso=
gorm.io/driver/mysql v1.5.4/go.mod h1:9rYxJph/u9SWkWc9yY4XJ1F/+xO0S/ChOmbk3+Z5Tvs=
gorm.io/gorm v1.25.7-0.20240204074919-46816ad31dde/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
gorm.io/gorm v1.25.7 h1:VsD6acwRjz2zFxGO50gPO6AkNs7KKnvfzUjHQhZDz/A=
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
Expand Down
7 changes: 3 additions & 4 deletions model/todo.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@ package model

import (
"gorm.io/gorm"
"time"
)

type Todo struct {
gorm.Model
Title string `gorm:"column:title"`
Description string `gorm:"column:description"`
Reminder *time.Time `gorm:"column:reminder"`
ID uint32 `gorm:"column:id"`
Title string `gorm:"column:title"`
Description string `gorm:"column:description"`
}

// TableName get table name
Expand Down
75 changes: 46 additions & 29 deletions module/todo/todo-service.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package module

import (
"context"
"errors"
"github.com/cuongnd9/go-grpc/api"
"github.com/cuongnd9/go-grpc/model"
"github.com/cuongnd9/go-grpc/store"
)

Expand All @@ -15,56 +17,71 @@ func NewToDoService(store *store.GlobalStore) *ToDoService {
}

func (s *ToDoService) Create(ctx context.Context, req *api.CreateRequest) (*api.CreateResponse, error) {
newTodo, err := s.store.TodoStore.Create(ctx, req)
if err != nil {
return nil, err
input := model.Todo{
Title: req.ToDo.Title,
Description: req.ToDo.Description,
}
result := s.store.TodoStore.Create(&input)
if result == nil {
return nil, errors.New("can not create todo")
}

return &api.CreateResponse{
Id: newTodo.Id,
Id: *result,
}, nil
}

func (s *ToDoService) Read(ctx context.Context, req *api.ReadRequest) (*api.ReadResponse, error) {
readResp, err := s.store.TodoStore.Read(ctx, req)
if err != nil {
return nil, err
}
func (s *ToDoService) Update(ctx context.Context, req *api.UpdateRequest) (*api.UpdateResponse, error) {
result := s.store.TodoStore.Update(req.ToDo.Id, req.ToDo.Title, req.ToDo.Description)

return &api.ReadResponse{
ToDo: readResp.ToDo,
return &api.UpdateResponse{
Updated: result,
}, nil
}

func (s *ToDoService) Update(ctx context.Context, req *api.UpdateRequest) (*api.UpdateResponse, error) {
updateResp, err := s.store.TodoStore.Update(ctx, req)
if err != nil {
return nil, err
}
func (s *ToDoService) Delete(ctx context.Context, req *api.DeleteRequest) (*api.DeleteResponse, error) {
result := s.store.TodoStore.Delete(req.Id)

return &api.UpdateResponse{
Updated: updateResp.Updated,
return &api.DeleteResponse{
Deleted: result,
}, nil
}

func (s *ToDoService) Delete(ctx context.Context, req *api.DeleteRequest) (*api.DeleteResponse, error) {
deleteResp, err := s.store.TodoStore.Delete(ctx, req)
if err != nil {
return nil, err
func (s *ToDoService) Read(ctx context.Context, req *api.ReadRequest) (*api.ReadResponse, error) {
result := s.store.TodoStore.Read(req.Id)
if result == nil {
return nil, errors.New("not found todo item")
}

return &api.DeleteResponse{
Deleted: deleteResp.Deleted,
return &api.ReadResponse{
ToDo: toTodoApi(result),
}, nil
}

func (s *ToDoService) ReadAll(ctx context.Context, req *api.ReadAllRequest) (*api.ReadAllResponse, error) {
readAllResp, err := s.store.TodoStore.ReadAll(ctx, req)
if err != nil {
return nil, err
}
result := s.store.TodoStore.ReadAll()

return &api.ReadAllResponse{
ToDos: readAllResp.ToDos,
ToDos: toTodosApi(result),
}, nil
}

func toTodoApi(todoModel *model.Todo) *api.ToDo {
return &api.ToDo{
Id: todoModel.ID,
Title: todoModel.Title,
Description: todoModel.Description,
}
}

func toTodosApi(todoModels []model.Todo) []*api.ToDo {
list := make([]*api.ToDo, len(todoModels))
for i, v := range todoModels {
list[i] = &api.ToDo{
Id: v.ID,
Title: v.Title,
Description: v.Description,
}
}
return list
}
4 changes: 2 additions & 2 deletions pkg/register-grpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@ package pkg

import (
"context"
"database/sql"
"github.com/cuongnd9/go-grpc/api"
"github.com/cuongnd9/go-grpc/module/todo"
"github.com/cuongnd9/go-grpc/store"
"google.golang.org/grpc"
"gorm.io/gorm"
"log"
"net"
"os"
"os/signal"
)

func RunGRPC(ctx context.Context, db *sql.DB, port string) error {
func RunGRPC(ctx context.Context, db *gorm.DB, port string) error {
listen, err := net.Listen("tcp", ":"+port)
if err != nil {
return err
Expand Down
13 changes: 7 additions & 6 deletions pkg/register-server.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,20 @@ package pkg

import (
"context"
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/cuongnd9/go-grpc/config"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)

func RunServer() error {
ctx := context.Background()

db, err := sql.Open("mysql", "root:cuongnguyenpo@/cuongnguyenpo?parseTime=true")
db, err := gorm.Open(mysql.New(mysql.Config{
DSN: config.BuildDSN(),
}), &gorm.Config{})
if err != nil {
return fmt.Errorf("opening database failed")
panic("failed to connect database")
}
defer db.Close()

return RunGRPC(ctx, db, "50000")
}
1 change: 0 additions & 1 deletion sql/release-101.sql
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ CREATE TABLE `todo` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`title` varchar(200) DEFAULT NULL,
`description` varchar(1024) DEFAULT NULL,
`reminder` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE (`id`)
);
6 changes: 4 additions & 2 deletions store/register-store.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package store

import "database/sql"
import (
"gorm.io/gorm"
)

type GlobalStore struct {
TodoStore *ToDoStore
}

func NewGlobalStore(db *sql.DB) *GlobalStore {
func NewGlobalStore(db *gorm.DB) *GlobalStore {
todoStore := NewToDoStore(db)

return &GlobalStore{TodoStore: todoStore}
Expand Down
Loading

0 comments on commit 0cd6e3c

Please sign in to comment.