Skip to content

Instantly share code, notes, and snippets.

@sh0seo
Last active October 22, 2020 17:00
Show Gist options
  • Save sh0seo/b83ebbcfee78eb6dd2d1dc6f347d8cbb to your computer and use it in GitHub Desktop.
Save sh0seo/b83ebbcfee78eb6dd2d1dc6f347d8cbb to your computer and use it in GitHub Desktop.
package main
import (
"crypto/sha256"
"database/sql"
"fmt"
"os"
"time"
_ "github.com/lib/pq"
)
func main() {
fmt.Println("DCCafe User RFID Update")
// input
name := "홍길동"
// input
cardNumber := "3255213734"
dbHost := os.Getenv("DB_HOST") // 로컬에서 개발 시에는 환경변수 DB_HOST에 등록
dbPassword := os.Getenv("DB_PW") // 로컬에서 개발 시에는 환경변수 DB_PW에 패스워드 등록
conn := "user=dcadmin password=%s host=%s dbname=dcadmin sslmode=disable"
if len(name) == 0 {
fmt.Printf("[Error] user empty\n")
return
}
if len(cardNumber) == 0 {
fmt.Printf("[Error] Card Number empty\n")
return
}
if len(dbHost) == 0 {
fmt.Printf("[Error] Not find DB HOST\n")
return
}
if len(dbPassword) == 0 {
fmt.Printf("[Error] Not find DB Password\n")
return
}
db, err := sql.Open("postgres", fmt.Sprintf(conn, dbPassword, dbHost))
if err != nil {
panic(err)
}
defer db.Close()
var status int
err = db.QueryRow("SELECT 1").Scan(&status)
if err != nil {
panic(err)
}
if status != 1 {
panic(fmt.Sprintf("SELECT 1 is not %d\n", status))
}
// get User
var user Users
err = db.QueryRow(`SELECT email, rfid, company, index, name, leave, regdate, updatedate FROM users WHERE name = $1`, name).Scan(&user.email, &user.rfid, &user.company, &user.index, &user.name, &user.leave, &user.regdate, &user.updatedate)
if err != nil {
panic(err)
}
fmt.Printf("find user %s\n", user.name)
rfid := hash(cardNumber)
status = 0
err = db.QueryRow(`SELECT 1 FROM users WHERE rfid = $1`, rfid).Scan(&status)
if err == nil {
fmt.Printf("[Error] Exist Card Number:%s\n", cardNumber)
return
}
fmt.Printf("Get new RFID %s\n", rfid)
_, err = db.Exec(`UPDATE users SET rfid = $1, updatedate = now() WHERE index = $2`, rfid, user.index)
if err != nil {
panic(err)
}
fmt.Printf("Update User: %s, CardNumber: %s\n", user.name, cardNumber)
}
func hash(cardNumber string) string {
sum := sha256.Sum256([]byte(cardNumber))
return fmt.Sprintf("%x", sum)
}
// Users DB
type Users struct {
email string // PK
rfid string // PK
company string
index int
name string
leave bool
regdate time.Time
updatedate time.Time
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment