manager.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package tables
  2. import (
  3. "Wine-Server/utils"
  4. "database/sql"
  5. )
  6. type ManagerTable struct {
  7. Id string
  8. Super bool
  9. First utils.TimeType
  10. Last utils.TimeType
  11. Name string
  12. Account string
  13. Password string
  14. Order uint32
  15. Income uint64
  16. }
  17. func CreateManagerTable() error {
  18. SQL := "CREATE TABLE IF NOT EXISTS `manager`(" +
  19. "`id` VARCHAR(16) PRIMARY KEY," +
  20. "`super` BOOL DEFAULT FALSE," +
  21. "`first` DATETIME DEFAULT CURRENT_TIMESTAMP," +
  22. "`last` DATETIME DEFAULT CURRENT_TIMESTAMP," +
  23. "`name` VARCHAR(16) NOT NULL," +
  24. "`account` VARCHAR(32) NOT NULL," +
  25. "`password` CHAR(128) NOT NULL," +
  26. "`order` INT UNSIGNED DEFAULT 0," +
  27. "`income` BIGINT UNSIGNED DEFAULT 0);"
  28. _, err := utils.Mysql.Exec(SQL)
  29. return err
  30. }
  31. func (row *ManagerTable) Insert() error {
  32. SQL := "INSERT INTO `manager`(`id`,`name`,`account`,`password`) VALUES(?,?,?,?);"
  33. pre, err := utils.Mysql.Prepare(SQL)
  34. if err != nil {
  35. return err
  36. }
  37. _, err = pre.Exec(row.Id, row.Name, row.Account, row.Password)
  38. return err
  39. }
  40. func (row *ManagerTable) Delete() error {
  41. pre, err := utils.Mysql.Prepare("DELETE FROM `manager` WHERE `id`=?;")
  42. if err != nil {
  43. return err
  44. }
  45. _, err = pre.Exec(row.Id)
  46. return err
  47. }
  48. func (row *ManagerTable) Update(args utils.JsonType) error {
  49. keys, values := utils.UnZip(args)
  50. SQL := utils.Format("UPDATE `manager` SET %s WHERE `id`='%s';", 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 *ManagerTable) UpdateSelf() error {
  59. SQL := "UPDATE `manager` SET `super`=?,`last`=?,`name`=?,`account`=?,`password`=?,`order`=?,`income`=? WHERE `id`=?;"
  60. pre, err := utils.Mysql.Prepare(SQL)
  61. if err != nil {
  62. return err
  63. }
  64. row.Last = utils.TimeNow()
  65. _, err = pre.Exec(row.Super, row.Last, row.Name, row.Account, row.Password, row.Order, row.Income, row.Id)
  66. return err
  67. }
  68. func (row *ManagerTable) Get() error {
  69. SQL := "SELECT `super`,`first`,`last`,`name`,`account`,`password`,`order`,`income` FROM `manager` WHERE `id`=?;"
  70. pre, err := utils.Mysql.Prepare(SQL)
  71. if err != nil {
  72. return err
  73. }
  74. err = pre.QueryRow(row.Id).Scan(
  75. &row.Super, &row.First, &row.Last, &row.Name,
  76. &row.Account, &row.Password, &row.Order, &row.Income,
  77. )
  78. return err
  79. }
  80. // GetByAcc change to `Login(acc, pwd) error`
  81. func (row *ManagerTable) GetByAcc() error {
  82. SQL := "SELECT `id`,`super`,`first`,`last`,`name`,`password`,`order`,`income` FROM `manager` WHERE `account`=? LIMIT 1;"
  83. pre, err := utils.Mysql.Prepare(SQL)
  84. if err != nil {
  85. return err
  86. }
  87. err = pre.QueryRow(row.Account).Scan(
  88. &row.Id, &row.Super, &row.First, &row.Last,
  89. &row.Name, &row.Password, &row.Order, &row.Income,
  90. )
  91. return err
  92. }
  93. func (row *ManagerTable) Login() error {
  94. SQL := "SELECT `id`,`super`,`first`,`last`,`name`,`order`,`income` FROM `manager` WHERE `account`=? AND `password`=?;"
  95. return utils.Mysql.QueryRow(SQL, row.Account, row.Password).Scan(
  96. &row.Id, &row.Super, &row.First, &row.Last,
  97. &row.Name, &row.Order, &row.Income,
  98. )
  99. }
  100. func ManagerQuery(name string) ([]utils.JsonType, error) {
  101. like := utils.Format("%%%s%%", name)
  102. SQL := "SELECT `id`,`name` FROM `manager` WHERE `super`=0 AND `name` LIKE ? LIMIT 10;"
  103. pre, err := utils.Mysql.Prepare(SQL)
  104. if err != nil {
  105. return nil, err
  106. }
  107. rows, err := pre.Query(like)
  108. if err != nil {
  109. return nil, err
  110. }
  111. res := make([]utils.JsonType, 0)
  112. for rows.Next() {
  113. tid, tna := "", ""
  114. _ = rows.Scan(&tid, &tna)
  115. res = append(res, utils.JsonType{"id": tid, "name": tna})
  116. }
  117. _ = rows.Close()
  118. return res, nil
  119. }
  120. func ManagerQueryForAdmin(cond string, limit, page int) (int, []utils.JsonType, error) {
  121. SQL := utils.Format(
  122. "SELECT COUNT(`id`) AS `total` FROM `manager` WHERE `super`=0 AND (`name` LIKE '%%%s%%' OR `account` LIKE '%%%s%%');",
  123. cond, cond,
  124. )
  125. total := 0
  126. err := utils.Mysql.QueryRow(SQL).Scan(&total)
  127. if err != nil {
  128. return 0, nil, err
  129. }
  130. if total == 0 {
  131. return 0, []utils.JsonType{}, nil
  132. }
  133. SQL = utils.Format(
  134. "SELECT `id`,`first`,`last`,`name`,`account`,`order`,`income` FROM `manager` "+
  135. "WHERE `super`=0 AND (`name` LIKE '%%%s%%' OR `account` LIKE '%%%s%%') LIMIT %d OFFSET %d;",
  136. cond, cond, limit, (page-1)*limit,
  137. )
  138. var rows *sql.Rows
  139. res := make([]utils.JsonType, 0)
  140. rows, err = utils.Mysql.Query(SQL)
  141. if err != nil {
  142. return 0, nil, err
  143. }
  144. for rows.Next() {
  145. var one ManagerTable
  146. _ = rows.Scan(&one.Id, &one.First, &one.Last, &one.Name, &one.Account, &one.Order, &one.Income)
  147. res = append(res, utils.JsonType{
  148. "id": one.Id, "name": one.Name, "first": one.First, "last": one.Last,
  149. "account": one.Account, "order": one.Order, "income": one.Income,
  150. })
  151. }
  152. return total, res, nil
  153. }
  154. func ManagersDelete(ids []string) error {
  155. SQL := utils.Format("DELETE FROM `manager` WHERE `id` IN (%s);", utils.SqlStringListJoin(ids))
  156. _, err := utils.Mysql.Exec(SQL)
  157. return err
  158. }