manager.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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 ManagerQuery(name string) ([]utils.JsonType, error) {
  94. like := utils.Format("%%%s%%", name)
  95. SQL := "SELECT `id`,`name` FROM `manager` WHERE `super`=0 AND `name` LIKE ? LIMIT 10;"
  96. pre, err := utils.Mysql.Prepare(SQL)
  97. if err != nil {
  98. return nil, err
  99. }
  100. rows, err := pre.Query(like)
  101. if err != nil {
  102. return nil, err
  103. }
  104. res := make([]utils.JsonType, 0)
  105. for rows.Next() {
  106. tid, tna := "", ""
  107. _ = rows.Scan(&tid, &tna)
  108. res = append(res, utils.JsonType{"id": tid, "name": tna})
  109. }
  110. _ = rows.Close()
  111. return res, nil
  112. }
  113. func ManagerQueryForAdmin(cond string, limit, page int) (int, []utils.JsonType, error) {
  114. SQL := utils.Format(
  115. "SELECT COUNT(`id`) AS `total` FROM `manager` WHERE `super`=0 AND (`name` LIKE '%%%s%%' OR `account` LIKE '%%%s%%');",
  116. cond, cond,
  117. )
  118. total := 0
  119. err := utils.Mysql.QueryRow(SQL).Scan(&total)
  120. if err != nil {
  121. return 0, nil, err
  122. }
  123. if total == 0 {
  124. return 0, []utils.JsonType{}, nil
  125. }
  126. SQL = utils.Format(
  127. "SELECT `id`,`first`,`last`,`name`,`account`,`order`,`income` FROM `manager` "+
  128. "WHERE `super`=0 AND (`name` LIKE '%%%s%%' OR `account` LIKE '%%%s%%') LIMIT %d OFFSET %d;",
  129. cond, cond, limit, (page-1)*limit,
  130. )
  131. var rows *sql.Rows
  132. res := make([]utils.JsonType, 0)
  133. rows, err = utils.Mysql.Query(SQL)
  134. if err != nil {
  135. return 0, nil, err
  136. }
  137. for rows.Next() {
  138. var one ManagerTable
  139. _ = rows.Scan(&one.Id, &one.First, &one.Last, &one.Name, &one.Account, &one.Order, &one.Income)
  140. res = append(res, utils.JsonType{
  141. "id": one.Id, "name": one.Name, "first": one.First, "last": one.Last,
  142. "account": one.Account, "order": one.Order, "income": one.Income,
  143. })
  144. }
  145. return total, res, nil
  146. }
  147. func ManagersDelete(ids []string) error {
  148. SQL := utils.Format("DELETE FROM `manager` WHERE `id` IN (%s);", utils.SqlStringListJoin(ids))
  149. _, err := utils.Mysql.Exec(SQL)
  150. return err
  151. }