Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "database/sql"
  6. "fmt"
  7. "os"
  8. "strconv"
  9.  
  10. _ "github.com/lib/pq"
  11. )
  12.  
  13. type db interface {
  14. Create()
  15. Count()
  16. ListAll()
  17. }
  18.  
  19. type contact struct {
  20. id int `db:"id"`
  21. age int `db:"age"`
  22. firstName string `db:"first_name"`
  23. lastName string `db:"last_name"`
  24. email string `db:"email"`
  25. }
  26.  
  27. func main() {
  28. db := connectDB()
  29.  
  30. for opt := buildOptions(); opt != 0; {
  31.  
  32. switch opt {
  33. case 0:
  34. fmt.Println("Quitting")
  35. return
  36. case 1:
  37. c := buildContact()
  38. c.addNewUser(db)
  39. fmt.Println("User Added With ID ", c.id)
  40. break
  41. case 2:
  42. fmt.Println("List All Users")
  43. listAllUsers(db)
  44. case 3:
  45. fmt.Println("Edit a user")
  46. case 4:
  47. fmt.Println("Remove a user")
  48. case 5:
  49. fmt.Println("Find Contact")
  50. buildFindUser(db)
  51. }
  52.  
  53. opt = buildOptions()
  54. }
  55. }
  56.  
  57. func connectDB() *sql.DB {
  58. const (
  59. host = "localhost"
  60. port = 5432
  61. user = "golang"
  62. password = "golang_password"
  63. dbName = "storekeeper"
  64. )
  65.  
  66. dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", host, port, user, password, dbName)
  67. db, err := sql.Open("postgres", dsn)
  68. if err != nil {
  69. panic(err)
  70. }
  71.  
  72. err = db.Ping()
  73. if err != nil {
  74. panic(err)
  75. }
  76.  
  77. fmt.Println("Connection established")
  78. return db
  79. }
  80.  
  81. func buildOptions() int {
  82. defer recover()
  83. fmt.Printf("Welcome to Your Personal Organizer\n***Options***\nNew Contact (1)\tAll Contacts (2)\tEdit Contact (3)\tRemove Contact (4)\tFind User (5)\n")
  84. r := bufio.NewScanner(os.Stdin)
  85. opCode := 0
  86.  
  87. if r.Scan() {
  88. opt, err := strconv.Atoi(r.Text())
  89. if err != nil {
  90. panic(err)
  91. }
  92. opCode = opt
  93. }
  94. return opCode
  95. }
  96.  
  97. func buildContact() *contact {
  98. defer recover()
  99. var c contact
  100. r := bufio.NewScanner(os.Stdin)
  101. fmt.Println("Enter Firstname")
  102. if r.Scan() {
  103. c.firstName = r.Text()
  104. }
  105.  
  106. fmt.Println("Enter Lastname")
  107. if r.Scan() {
  108. c.lastName = r.Text()
  109. }
  110. fmt.Println("Enter Email")
  111. if r.Scan() {
  112. c.email = r.Text()
  113. }
  114.  
  115. fmt.Println("Enter Age:")
  116. if r.Scan() {
  117. age, err := strconv.Atoi(r.Text())
  118. if err != nil {
  119. panic(err)
  120. }
  121. c.age = age
  122. }
  123.  
  124. return &c
  125. }
  126.  
  127. func buildFindUser(db *sql.DB) {
  128. r := bufio.NewScanner(os.Stdin)
  129. fmt.Println("How do you want to find The User?")
  130. var id int
  131. if r.Scan() {
  132. i, err := strconv.Atoi(r.Text())
  133. if err != nil {
  134. panic(err)
  135. }
  136. id = i
  137. }
  138.  
  139. findAUser(id, db)
  140.  
  141. }
  142.  
  143. func (c *contact) addNewUser(db *sql.DB) {
  144. //create user at this point.
  145. stmt := "INSERT INTO users (first_name,last_name,email,age) VALUES($1,$2,$3,$4)"
  146. res, err := db.Exec(stmt, c.firstName, c.lastName, c.email, c.age)
  147. if err != nil {
  148. panic(err)
  149. }
  150. lastID, err := res.LastInsertId()
  151. if err != nil {
  152. panic(err)
  153. }
  154. c.id = int(lastID)
  155. fmt.Println("User Added Successfully.")
  156. }
  157.  
  158. func listAllUsers(db *sql.DB) {
  159. stmt := "SELECT id,first_name,last_name,email,age FROM users"
  160. res, err := db.Query(stmt)
  161. if err != nil {
  162. panic(err)
  163. }
  164.  
  165. for res.Next() {
  166. var c contact
  167. res.Scan(&c.id, &c.firstName, &c.lastName, &c.email, &c.age)
  168. fmt.Printf("Fullname: %s\t Email: %s\tAge: %d\n", c.firstName+" "+c.lastName, c.email, c.age)
  169. }
  170. }
  171.  
  172. func findAUser(id int, db *sql.DB) {
  173. var c contact
  174. stmt := "SELECT id,first_name,last_name,email,age FROM users WHERE ID=$1"
  175. row := db.QueryRow(stmt, id)
  176. switch err := row.Scan(&c.id, &c.firstName, &c.lastName, &c.email, &c.age); err {
  177. case sql.ErrNoRows:
  178. fmt.Println("No User found with the provided ID.")
  179. case nil:
  180. fmt.Printf("User Found Name: %s \tEmail: %s\tAge:%d\n", c.firstName+" "+c.lastName, c.email, c.age)
  181. default:
  182. panic(err)
  183. }
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement