├── controllers └── hello_world.go ├── main.go ├── models └── user.go ├── repositories └── user_repo.go └── sqldb └── db.go /controllers/hello_world.go: -------------------------------------------------------------------------------- 1 | package controllers 2 | 3 | import ( 4 | "fmt" 5 | "net/http" 6 | 7 | "github.com/techinscribed/repository-db/models" 8 | ) 9 | 10 | // BaseHandler will hold everything that controller needs 11 | type BaseHandler struct { 12 | userRepo models.UserRepository 13 | } 14 | 15 | // NewBaseHandler returns a new BaseHandler 16 | func NewBaseHandler(userRepo models.UserRepository) *BaseHandler { 17 | return &BaseHandler{ 18 | userRepo: userRepo, 19 | } 20 | } 21 | 22 | // HelloWorld returns Hello, World 23 | func (h *BaseHandler) HelloWorld(w http.ResponseWriter, r *http.Request) { 24 | if user, err := h.userRepo.FindByID(1); err != nil { 25 | fmt.Println("Error", user) 26 | } 27 | 28 | w.Write([]byte("Hello, World")) 29 | } 30 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "net/http" 6 | 7 | "github.com/techinscribed/repository-db/controllers" 8 | "github.com/techinscribed/repository-db/repositories" 9 | "github.com/techinscribed/repository-db/sqldb" 10 | ) 11 | 12 | func main() { 13 | db := sqldb.ConnectDB() 14 | 15 | // Create repos 16 | userRepo := repositories.NewUserRepo(db) 17 | 18 | h := controllers.NewBaseHandler(userRepo) 19 | 20 | http.HandleFunc("/", h.HelloWorld) 21 | 22 | s := &http.Server{ 23 | Addr: fmt.Sprintf("%s:%s", "localhost", "5000"), 24 | } 25 | 26 | s.ListenAndServe() 27 | 28 | } 29 | -------------------------------------------------------------------------------- /models/user.go: -------------------------------------------------------------------------------- 1 | package models 2 | 3 | // User .. 4 | type User struct { 5 | Name string 6 | } 7 | 8 | // UserRepository .. 9 | type UserRepository interface { 10 | FindByID(ID int) (*User, error) 11 | Save(user *User) error 12 | } 13 | -------------------------------------------------------------------------------- /repositories/user_repo.go: -------------------------------------------------------------------------------- 1 | package repositories 2 | 3 | import ( 4 | "database/sql" 5 | 6 | "github.com/techinscribed/repository-db/models" 7 | ) 8 | 9 | // UserRepo implements models.UserRepository 10 | type UserRepo struct { 11 | db *sql.DB 12 | } 13 | 14 | // NewUserRepo .. 15 | func NewUserRepo(db *sql.DB) *UserRepo { 16 | return &UserRepo{ 17 | db: db, 18 | } 19 | } 20 | 21 | // FindByID .. 22 | func (r *UserRepo) FindByID(ID int) (*models.User, error) { 23 | return &models.User{}, nil 24 | } 25 | 26 | // Save .. 27 | func (r *UserRepo) Save(user *models.User) error { 28 | return nil 29 | } 30 | -------------------------------------------------------------------------------- /sqldb/db.go: -------------------------------------------------------------------------------- 1 | package sqldb 2 | 3 | import "database/sql" 4 | 5 | // ConnectDB opens a connection to the database 6 | func ConnectDB() *sql.DB { 7 | db, err := sql.Open("mysql", "username:password@/dbname") 8 | if err != nil { 9 | panic(err.Error()) 10 | } 11 | 12 | return db 13 | } 14 | --------------------------------------------------------------------------------