diff --git a/.gitignore b/.gitignore index 3b735ec..56639a7 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,8 @@ # Go workspace file go.work + + +# goland ide + +/.idea diff --git a/Dockerfile b/Dockerfile index d1438c5..a5b69f8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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" ] \ No newline at end of file +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" ] \ No newline at end of file diff --git a/api.go b/api.go index cbef2ef..dbffe07 100644 --- a/api.go +++ b/api.go @@ -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!")) }) } diff --git a/db.go b/db.go new file mode 100644 index 0000000..609fef6 --- /dev/null +++ b/db.go @@ -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 +} diff --git a/facade.go b/facade.go new file mode 100644 index 0000000..122131f --- /dev/null +++ b/facade.go @@ -0,0 +1,6 @@ +package main + +type DAO interface { + CreateUser(name, email string) error + UpdateUser(id, name, email string) error +} diff --git a/main.go b/main.go index 18805dd..1502310 100644 --- a/main.go +++ b/main.go @@ -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) } diff --git a/utils.go b/utils.go index e65cd87..8c9d61d 100644 --- a/utils.go +++ b/utils.go @@ -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 }