wine.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package tables
  2. import (
  3. "Wine-Server/utils"
  4. "database/sql"
  5. )
  6. type WineTable struct {
  7. Id uint16
  8. Name string
  9. Price uint16
  10. Degree uint16
  11. Density uint16
  12. Picture string
  13. Time utils.TimeType
  14. Describe string
  15. Deleted bool
  16. Order uint32
  17. Income uint64
  18. }
  19. func CreateWineTable() error {
  20. SQL := "CREATE TABLE IF NOT EXISTS `wine`(" +
  21. "`id` SMALLINT UNSIGNED PRIMARY KEY," +
  22. "`name` VARCHAR(16) NOT NULL," +
  23. "`price` SMALLINT UNSIGNED DEFAULT 9999," +
  24. "`degree` SMALLINT UNSIGNED DEFAULT 0," +
  25. "`density` SMALLINT UNSIGNED DEFAULT 1000," +
  26. "`picture` VARCHAR(128) NOT NULL," +
  27. "`time` DATETIME DEFAULT CURRENT_TIMESTAMP," +
  28. "`describe` VARCHAR(256) DEFAULT ''," +
  29. "`order` INT UNSIGNED DEFAULT 0," +
  30. "`income` BIGINT UNSIGNED DEFAULT 0," +
  31. "`deleted` TINYINT(1) DEFAULT 0);"
  32. _, err := utils.Mysql.Exec(SQL)
  33. return err
  34. }
  35. func (row *WineTable) Insert() error {
  36. SQL := "INSERT INTO `wine` (`id`,`name`,`price`,`degree`,`density`,`picture`,`describe`) VALUES (?,?,?,?,?,?,?);"
  37. pre, err := utils.Mysql.Prepare(SQL)
  38. if err != nil {
  39. return err
  40. }
  41. _, err = pre.Exec(row.Id, row.Name, row.Price, row.Degree, row.Density, row.Picture, row.Describe)
  42. return err
  43. }
  44. func (row *WineTable) Delete() error {
  45. row.Deleted = true
  46. return row.UpdateSelf()
  47. }
  48. func (row *WineTable) Update(args utils.JsonType) error {
  49. keys, values := utils.UnZip(args)
  50. SQL := utils.Format("UPDATE `wine` SET %s WHERE `id`=%d;", utils.SqlFields(keys), row.Id)
  51. pre, err := utils.Mysql.Prepare(SQL)
  52. if err != nil {
  53. return err
  54. }
  55. _, err = pre.Exec(values...)
  56. return err
  57. }
  58. func (row *WineTable) UpdateSelf() error {
  59. SQL := "UPDATE `wine` SET `name`=?,`price`=?,`degree`=?,`density`=?,`picture`=?,`describe`=?,`order`=?,`income`=?,`deleted`=? WHERE `id`=?;"
  60. pre, err := utils.Mysql.Prepare(SQL)
  61. if err != nil {
  62. return err
  63. }
  64. _, err = pre.Exec(row.Name, row.Price, row.Degree, row.Density, row.Picture, row.Describe, row.Order, row.Income, row.Deleted, row.Id)
  65. return err
  66. }
  67. func (row *WineTable) Get() error {
  68. SQL := "SELECT `name`,`price`,`degree`,`density`,`picture`,`describe`,`time`,`order`,`income`,`deleted` FROM `wine` WHERE `id`=?;"
  69. pre, err := utils.Mysql.Prepare(SQL)
  70. if err != nil {
  71. return err
  72. }
  73. err = pre.QueryRow(row.Id).Scan(
  74. &row.Name, &row.Price, &row.Degree, &row.Density, &row.Picture,
  75. &row.Describe, &row.Time, &row.Order, &row.Income, &row.Deleted,
  76. )
  77. return err
  78. }
  79. func extractJson(wine WineTable) utils.JsonType {
  80. return utils.JsonType{
  81. "id": wine.Id, "name": wine.Name, "time": wine.Time, "price": wine.Price,
  82. "degree": wine.Degree, "density": wine.Density, "picture": wine.Picture, "describe": wine.Describe,
  83. }
  84. }
  85. func WinesQuery(cond string, limit, page int) (int, []utils.JsonType, error) {
  86. SQL, like := "none", utils.Format("%%%s%%", cond)
  87. if page == 1 {
  88. SQL = "SELECT COUNT(`id`) AS `total` FROM `wine` " +
  89. "WHERE (`id`=10100 OR `deleted`=FALSE) AND (`name` LIKE ? OR `describe` LIKE ?);"
  90. } else {
  91. SQL = "SELECT COUNT(`id`) AS `total` FROM `wine` WHERE `deleted`=FALSE AND (`name` LIKE ? OR `describe` LIKE ?);"
  92. }
  93. pre, err := utils.Mysql.Prepare(SQL)
  94. if err != nil {
  95. return 0, nil, err
  96. }
  97. total := 0
  98. err = pre.QueryRow(like, like).Scan(&total)
  99. if err != nil {
  100. return 0, nil, err
  101. }
  102. if page == 1 {
  103. SQL = "SELECT `id`,`name`,`time`,`price`,`degree`,`density`,`picture`,`describe` FROM `wine` " +
  104. "WHERE (`id`=10100 OR `deleted`=FALSE) AND (`name` LIKE ? OR `describe` LIKE ?) LIMIT ? OFFSET ?;"
  105. } else {
  106. SQL = "SELECT `id`,`name`,`time`,`price`,`degree`,`density`,`picture`,`describe` FROM `wine` " +
  107. "WHERE `deleted`=FALSE AND (`name` LIKE ? OR `describe` LIKE ?) LIMIT ? OFFSET ?;"
  108. }
  109. pre, err = utils.Mysql.Prepare(SQL)
  110. if err != nil {
  111. return 0, nil, err
  112. }
  113. var rows *sql.Rows
  114. res := make([]utils.JsonType, 0)
  115. rows, err = pre.Query(like, like, limit, (page-1)*limit)
  116. if err != nil {
  117. return 0, nil, err
  118. }
  119. for rows.Next() {
  120. tmp := WineTable{}
  121. _ = rows.Scan(&tmp.Id, &tmp.Name, &tmp.Time, &tmp.Price, &tmp.Degree, &tmp.Density, &tmp.Picture, &tmp.Describe)
  122. res = append(res, extractJson(tmp))
  123. }
  124. _ = rows.Close()
  125. return total, res, nil
  126. }
  127. func WinesDelete(ids []uint16) error {
  128. SQL := utils.Format("UPDATE `wine` SET `deleted`=TRUE WHERE `id` IN (%s);", utils.SqlUint16ListJoin(ids))
  129. _, err := utils.Mysql.Exec(SQL)
  130. return err
  131. }
  132. func WineQueryMaxId() (uint16, error) {
  133. SQL := "SELECT MAX(`id`) FROM `wine`;"
  134. var max uint16
  135. err := utils.Mysql.QueryRow(SQL).Scan(&max)
  136. if err != nil {
  137. return 0, err
  138. }
  139. return max, nil
  140. }
  141. func WinesQueryByIdOrName(cond string) ([]utils.JsonType, error) {
  142. like := utils.Format("%%%s%%", cond)
  143. SQL := "SELECT `id`,`name` FROM `wine` WHERE `id`!=10100 AND (`id` LIKE ? OR `name` LIKE ?) LIMIT 10;"
  144. rows, err := utils.Mysql.Query(SQL, like, like)
  145. if err != nil {
  146. return nil, err
  147. }
  148. res := make([]utils.JsonType, 0)
  149. for rows.Next() {
  150. tid, tna := "", ""
  151. _ = rows.Scan(&tid, &tna)
  152. res = append(res, utils.JsonType{"id": tid, "name": tna})
  153. }
  154. _ = rows.Close()
  155. return res, nil
  156. }