Last active
October 22, 2020 17:00
-
-
Save sh0seo/b83ebbcfee78eb6dd2d1dc6f347d8cbb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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