Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,8 @@

# Go workspace file
go.work


# goland ide

/.idea
20 changes: 11 additions & 9 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
# docker file for building Go application
FROM ubuntu:latest

# Install dependencies
RUN sudo apt install -y git go wget

COPY . /app
FROM golang:1.20 AS builder

WORKDIR /app

# Build the application
RUN go build -o main .
COPY . .

CMD [ "main" ]
RUN CGO_ENABLED=0 GOOS=linux go build -o main .

# Install dependenciesFROM alpine:3.9 as base
FROM alpine:3.9 as base
RUN apk --no-cache add ca-certificates
RUN apk --no-cache add tzdata
WORKDIR /app
COPY --from=builder /app/main .
CMD [ "./main" ]
40 changes: 29 additions & 11 deletions api.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,43 @@ import (
"net/http"
)

func setupJsonApi() {
func setupJsonApi(d DAO) {
http.HandleFunc("/createUser", func(w http.ResponseWriter, r *http.Request) {
// create mysql connection
conn := createConnection()
name := r.FormValue("name")
email := r.FormValue("email")
query := "INSERT INTO users (name, email) VALUES (" + name + ", " + email + ")"
result, err := conn.Exec(query)
fmt.Println("result ", result, " err ", err.Error())
if name == "" || email == "" {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte("Bad Request"))
return
}
err := d.CreateUser(name, email)
if err != nil {
fmt.Println("Error creating user:", err)
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte("Error creating user"))
return
}
w.WriteHeader(http.StatusCreated)
w.Write([]byte("Created user successfully!"))
})
http.HandleFunc("/updateUser", func(w http.ResponseWriter, r *http.Request) {
// create mysql connection
conn := createConnection()

name := r.FormValue("name")
email := r.FormValue("email")
query := "Update users set name=" + name + ", email=" + email + " where id=" + r.FormValue("id")
result, err := conn.Exec(query)
fmt.Println("result ", result, " err ", err.Error())
id := r.FormValue("id")
if id == "" || name == "" || email == "" {
w.WriteHeader(http.StatusBadRequest)
w.Write([]byte("Bad Request"))
return
}
err := d.UpdateUser(id, name, email)
if err != nil {
fmt.Println("Error updating user:", err)
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte("Error updating user"))
return
}
w.WriteHeader(http.StatusOK)
w.Write([]byte("User updated successfully!"))
})
}
36 changes: 36 additions & 0 deletions db.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package main

import (
"database/sql"
"fmt"
)

type dao struct {
db *sql.DB
}

func NewDAO(db *sql.DB) DAO {
return &dao{db: db}
}

func (d *dao) CreateUser(name, email string) error {
query := "INSERT INTO users (name, email) VALUES (" + name + ", " + email + ")"
result, err := d.db.Exec(query)
if err != nil {
fmt.Println("error in creating user : ", err)
return err
}
fmt.Println("result ", result, " err ", err.Error())
return nil
}

func (d *dao) UpdateUser(id, name, email string) error {
query := "Update users set name=" + name + ", email=" + email + " where id=" + id + ")"
result, err := d.db.Exec(query)
if err != nil {
fmt.Println("error in creating user : ", err)
return err
}
fmt.Println("result ", result, " err ", err.Error())
return nil
}
6 changes: 6 additions & 0 deletions facade.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package main

type DAO interface {
CreateUser(name, email string) error
UpdateUser(id, name, email string) error
}
9 changes: 8 additions & 1 deletion main.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
package main

import (
"fmt"
"net/http"
)

func main() {
setupJsonApi()
db, err := createConnection()
if err != nil {
fmt.Println("error in connecting db : ", err)
return
}
mysqlDAO := NewDAO(db)
setupJsonApi(mysqlDAO)
http.ListenAndServe(":80", nil)
}
10 changes: 7 additions & 3 deletions utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,12 @@ import (
)

// createConnection creates a connection to mysql database
func createConnection() *sql.DB {
func createConnection() (*sql.DB, error) {
db, err := sql.Open("mysql", "root:password@tcp(127.0.0.1:3306)/test")
fmt.Println("sql open " + err.Error())
return db
if err != nil {
fmt.Println("sql open " + err.Error())
return nil, err
}

return db, nil
}