Commit 7bd57fb0 authored by rima anggraini's avatar rima anggraini

udah terstruktur ya

parent 617ac106
package main
//initial Connection ke DB
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
func connect() (*sql.DB, error) {
db, err := sql.Open("mysql", "root:@tcp(localhost:3306)/test")
if err != nil {
return nil, err
}
fmt.Println(db)
return db, nil
}
......@@ -10,53 +10,6 @@ import (
_ "github.com/go-sql-driver/mysql"
)
type student struct {
ID string
Name string
Grade int
}
type product struct {
ProductID uint64
ProductName string
Stock int
}
type Response struct {
Status int `json:"status"`
Message string `json:"message"`
Data []product
}
type productCategory struct {
ProductID int
ProductName string
Stock int
}
type category struct {
CategoryID int
CategoryName string
}
type CategoryArr struct {
CategoryName string
DataProduct []productCategory
}
type ResponseCategory struct {
Status string
Message string
data CategoryArr
}
var data = []student{
student{"E001", "ethan", 21},
student{"W001", "wick", 22},
student{"B001", "bourne", 23},
student{"B002", "bond", 23},
}
func users(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
......@@ -75,16 +28,6 @@ func users(w http.ResponseWriter, r *http.Request) {
http.Error(w, "", http.StatusBadRequest)
}
func connect() (*sql.DB, error) {
db, err := sql.Open("mysql", "root:@tcp(localhost:3306)/test")
if err != nil {
return nil, err
}
fmt.Println(db)
return db, nil
}
func user(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
......@@ -143,9 +86,11 @@ func products(w http.ResponseWriter, r *http.Request) {
log.Print(err)
}
for rows.Next() {
//buat model sesuai field yang diselect
if err := rows.Scan(&products.ProductID, &products.ProductName, &products.Stock); err != nil {
log.Fatal(err.Error())
} else {
//put product ke array
arr_product = append(arr_product, products)
}
}
......@@ -161,6 +106,122 @@ func products(w http.ResponseWriter, r *http.Request) {
http.Error(w, "", http.StatusBadRequest)
}
func insertProduct(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
if r.Method == "POST" {
var productName = r.FormValue("product_name")
var stock = r.FormValue("stock")
var category = r.FormValue("category_id")
var response Response
db, err := connect()
if err != nil {
fmt.Println(err.Error())
return
}
defer db.Close()
fmt.Println("OK")
fmt.Println("==============" + productName)
_, err = db.Exec("INSERT INTO Product (ProductName, Stock, CategoryID) values (?,?,?)",
productName,
stock,
category,
)
if err != nil {
log.Print(err)
}
response.Status = 1
response.Message = "Success Insert Data"
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(response)
}
http.Error(w, "", http.StatusBadRequest)
}
func checkCount(rows *sql.Rows) (count int) {
for rows.Next() {
err := rows.Scan(&count)
checkErr(err)
}
return count
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
func updateProduct(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
if r.Method == "POST" {
var productName = r.FormValue("product_name")
var stock = r.FormValue("stock")
var category = r.FormValue("category_id")
var productId = r.FormValue("product_id")
var ResponseCRUD ResponseCRUD
db, err := connect()
if err != nil {
fmt.Println(err.Error())
return
}
defer db.Close()
fmt.Println("OK")
rows, err := db.Query("select COUNT(ProductID) as count from Product WHERE ProductID = " + productId)
if err != nil {
fmt.Println(err.Error())
return
}
defer rows.Close()
if checkCount(rows) > 0 {
fmt.Println("==============" + productName)
_, err = db.Exec("UPDATE Product Set ProductName = ?, Stock = ?, CategoryID = ? Where ProductID = ? ",
productName,
stock,
category,
productId,
)
if err != nil {
log.Print(err)
} else {
ResponseCRUD.Status = 1
ResponseCRUD.Message = "Success Update Data"
ResponseCRUD.DataProduct = productId
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(ResponseCRUD)
}
} else {
ResponseCRUD.Status = 0
ResponseCRUD.Message = "Data Not Found"
ResponseCRUD.DataProduct = productId
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(ResponseCRUD)
}
}
http.Error(w, "", http.StatusBadRequest)
}
func categoryfunc(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
......@@ -175,23 +236,32 @@ func categoryfunc(w http.ResponseWriter, r *http.Request) {
defer db.Close()
fmt.Println("OK")
var productsresult productCategory
var arrayProduct []productCategory
//var productsresult Category
var products product
var arrayProduct []product
var response ResponseCategory
productCategory, err := db.Query("select ProductID, ProductName, Stock from Product WHERE CategoryID = 1")
rows, err := db.Query("select ProductID, ProductName, Stock from Product")
//rows, err := db.Query("select ProductID, ProductName, Stock from Product WHERE CategoryID = 1")
if err != nil {
fmt.Println(err.Error())
return
}
defer rows.Close()
//productCategory, err := db.Query("select ProductID, ProductName, Stock from Product WHERE CategoryID = 1")
fmt.Println("-----------------")
if err != nil {
log.Print(err)
}
for productCategory.Next() {
if err := productCategory.Scan(productsresult.ProductID, productsresult.ProductName, productsresult.Stock); err != nil {
for rows.Next() {
if err := rows.Scan(products.ProductID, products.ProductName, products.Stock); err != nil {
log.Fatal(err.Error())
} else {
arrayProduct = append(arrayProduct, productsresult)
arrayProduct = append(arrayProduct, products)
}
}
......@@ -213,56 +283,17 @@ func categoryfunc(w http.ResponseWriter, r *http.Request) {
http.Error(w, "", http.StatusBadRequest)
}
func sqlQuery() {
db, err := connect()
if err != nil {
fmt.Println(err.Error())
return
}
defer db.Close()
fmt.Println("OK")
rows, err := db.Query("select ProductID, ProductName, Stock from Product")
if err != nil {
fmt.Println(err.Error())
return
}
defer rows.Close()
var result []product
for rows.Next() {
var each = product{}
var err = rows.Scan(&each.ProductID, &each.ProductName, &each.Stock)
if err != nil {
fmt.Println(err.Error())
return
}
result = append(result, each)
}
if err = rows.Err(); err != nil {
fmt.Println(err.Error())
return
}
for _, each := range result {
fmt.Println(each.ProductName)
}
}
func main() {
//ini route yang di panggil di postman
http.HandleFunc("/users", users)
http.HandleFunc("/user", user)
http.HandleFunc("/product", products)
http.HandleFunc("/category", categoryfunc)
http.HandleFunc("/insertproduct", insertProduct)
http.HandleFunc("/updateproduct", updateProduct)
sqlQuery()
//initial url yang di panggil di postman
fmt.Println("starting web server at http://localhost:8080/")
http.ListenAndServe(":8080", nil)
......
package main
type Products struct {
Id int64 `form:"id" json:"ProductId"`
ProductName string `form:"firstname" json:"Productname"`
Stock int `form:"lastname" json:"Stock"`
//initial model yang di panggil di main api
type student struct {
ID string
Name string
Grade int
}
type product struct {
ProductID uint64 `json:"ProductID"`
ProductName string
Stock int
}
type Response struct {
Status int `json:"status"`
Message string `json:"message"`
Data []Products
Data []product
}
type ResponseCRUD struct {
Status int `json:"status"`
Message string `json:"message"`
DataProduct string
}
type Category struct {
ProductID string `json:"ProductID"`
ProductName string `json:"ProductName"`
Stock int `json:"Stock"`
}
type CategoryArr struct {
CategoryName string
DataProduct []product
}
type ResponseCategory struct {
Status string
Message string
data CategoryArr
}
var data = []student{
student{"E001", "ethan", 21},
student{"W001", "wick", 22},
student{"B001", "bourne", 23},
student{"B002", "bond", 23},
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment