aice_users.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. package models
  2. import (
  3. "errors"
  4. "fmt"
  5. "reflect"
  6. "strings"
  7. "github.com/beego/beego/v2/client/orm"
  8. )
  9. type AiceUsers struct {
  10. Userid string `orm:"column(userid);pk"`
  11. Email string `orm:"column(email);size(255);null"`
  12. Token string `orm:"column(token);size(255);null"`
  13. Username string `orm:"column(username);size(255);null"`
  14. Address string `orm:"column(address);size(255);null"`
  15. Password string `orm:"column(password);size(255);null"`
  16. }
  17. func (t *AiceUsers) TableName() string {
  18. return "aice_users"
  19. }
  20. func init() {
  21. orm.RegisterModel(new(AiceUsers))
  22. }
  23. // AddAiceUsers insert a new AiceUsers into database and returns
  24. // last inserted Id on success.
  25. func AddAiceUsers(m *AiceUsers) (id int64, err error) {
  26. o := orm.NewOrm()
  27. id, err = o.Insert(m)
  28. return
  29. }
  30. // GetAiceUsersById retrieves AiceUsers by Id. Returns error if
  31. // Id doesn't exist
  32. func GetAiceUsersById(id string) (v *AiceUsers, err error) {
  33. o := orm.NewOrm()
  34. v = &AiceUsers{Userid: id}
  35. if err = o.Read(v); err == nil {
  36. return v, nil
  37. }
  38. return nil, err
  39. }
  40. // GetAllAiceUsers retrieves all AiceUsers matches certain condition. Returns empty list if
  41. // no records exist
  42. func GetAllAiceUsers(query map[string]string, fields []string, sortby []string, order []string,
  43. offset int64, limit int64) (ml []interface{}, err error) {
  44. o := orm.NewOrm()
  45. qs := o.QueryTable(new(AiceUsers))
  46. // query k=v
  47. for k, v := range query {
  48. // 验证字段名有效性,防止SQL注入
  49. if !isValidFieldName(k) {
  50. return nil, fmt.Errorf("invalid field name: %s", k)
  51. }
  52. // rewrite dot-notation to Object__Attribute
  53. k = strings.Replace(k, ".", "__", -1)
  54. if strings.Contains(k, "isnull") {
  55. qs = qs.Filter(k, (v == "true" || v == "1"))
  56. } else {
  57. qs = qs.Filter(k, v)
  58. }
  59. }
  60. // order by:
  61. var sortFields []string
  62. if len(sortby) != 0 {
  63. // 验证order参数的有效性
  64. if len(order) != 0 && len(order) != 1 && len(order) != len(sortby) {
  65. return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1")
  66. }
  67. // 统一处理排序逻辑,消除重复代码
  68. for i, field := range sortby {
  69. orderDir := "asc"
  70. if len(order) == 1 {
  71. orderDir = order[0]
  72. } else if len(order) > 1 {
  73. orderDir = order[i]
  74. }
  75. orderby := ""
  76. if orderDir == "desc" {
  77. orderby = "-" + field
  78. } else if orderDir == "asc" {
  79. orderby = field
  80. } else {
  81. return nil, errors.New("Error: Invalid order. Must be either [asc|desc]")
  82. }
  83. sortFields = append(sortFields, orderby)
  84. }
  85. qs = qs.OrderBy(sortFields...)
  86. } else {
  87. if len(order) != 0 {
  88. return nil, errors.New("Error: unused 'order' fields")
  89. }
  90. }
  91. var l []AiceUsers
  92. // 验证分页参数
  93. if limit <= 0 || limit > 1000 {
  94. return nil, errors.New("Error: limit must be between 1 and 1000")
  95. }
  96. if offset < 0 {
  97. return nil, errors.New("Error: offset must be non-negative")
  98. }
  99. if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil {
  100. if len(fields) == 0 {
  101. for _, v := range l {
  102. ml = append(ml, v)
  103. }
  104. } else {
  105. // trim unused fields
  106. for _, v := range l {
  107. m := make(map[string]interface{})
  108. val := reflect.ValueOf(v)
  109. for _, fname := range fields {
  110. field := val.FieldByName(fname)
  111. if !field.IsValid() {
  112. return nil, fmt.Errorf("invalid field name: %s", fname)
  113. }
  114. m[fname] = field.Interface()
  115. }
  116. ml = append(ml, m)
  117. }
  118. }
  119. return ml, nil
  120. }
  121. return nil, err
  122. }
  123. // UpdateAiceUsers updates AiceUsers by Id and returns error if
  124. // the record to be updated doesn't exist
  125. func UpdateAiceUsersById(m *AiceUsers) (err error) {
  126. o := orm.NewOrm()
  127. v := AiceUsers{Userid: m.Userid}
  128. // ascertain id exists in the database
  129. if err = o.Read(&v); err == nil {
  130. var num int64
  131. if num, err = o.Update(m); err == nil {
  132. fmt.Println("Number of records updated in database:", num)
  133. }
  134. }
  135. return
  136. }
  137. // DeleteAiceUsers deletes AiceUsers by Id and returns error if
  138. // the record to be deleted doesn't exist
  139. func DeleteAiceUsers(id string) (err error) {
  140. o := orm.NewOrm()
  141. v := AiceUsers{Userid: id}
  142. // ascertain id exists in the database
  143. if err = o.Read(&v); err == nil {
  144. var num int64
  145. if num, err = o.Delete(&AiceUsers{Userid: id}); err == nil {
  146. fmt.Println("Number of records deleted in database:", num)
  147. }
  148. }
  149. return
  150. }