aice_users.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  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. <<<<<<< HEAD
  24. =======
  25. // isValidFieldName 验证字段名是否有效,防止SQL注入
  26. func isValidFieldName(fieldName string) bool {
  27. // AiceUsers结构体中的有效字段
  28. validFields := map[string]bool{
  29. "userid": true,
  30. "email": true,
  31. "token": true,
  32. "username": true,
  33. "address": true,
  34. "password": true,
  35. }
  36. // 处理带isnull的情况(如:email__isnull)
  37. baseField := strings.Replace(fieldName, "__isnull", "", -1)
  38. baseField = strings.Replace(baseField, ".", "__", -1)
  39. // 检查基础字段是否有效
  40. for field := range validFields {
  41. if strings.HasPrefix(baseField, field) || baseField == field {
  42. return true
  43. }
  44. }
  45. return false
  46. }
  47. >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
  48. // AddAiceUsers insert a new AiceUsers into database and returns
  49. // last inserted Id on success.
  50. func AddAiceUsers(m *AiceUsers) (id int64, err error) {
  51. o := orm.NewOrm()
  52. id, err = o.Insert(m)
  53. return
  54. }
  55. // GetAiceUsersById retrieves AiceUsers by Id. Returns error if
  56. // Id doesn't exist
  57. <<<<<<< HEAD
  58. func GetAiceUsersById(id int) (v *AiceUsers, err error) {
  59. o := orm.NewOrm()
  60. v = &AiceUsers{Id: id}
  61. =======
  62. func GetAiceUsersById(id string) (v *AiceUsers, err error) {
  63. o := orm.NewOrm()
  64. v = &AiceUsers{Userid: id}
  65. >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
  66. if err = o.Read(v); err == nil {
  67. return v, nil
  68. }
  69. return nil, err
  70. }
  71. // GetAllAiceUsers retrieves all AiceUsers matches certain condition. Returns empty list if
  72. // no records exist
  73. func GetAllAiceUsers(query map[string]string, fields []string, sortby []string, order []string,
  74. offset int64, limit int64) (ml []interface{}, err error) {
  75. o := orm.NewOrm()
  76. qs := o.QueryTable(new(AiceUsers))
  77. // query k=v
  78. for k, v := range query {
  79. <<<<<<< HEAD
  80. =======
  81. // 验证字段名有效性,防止SQL注入
  82. if !isValidFieldName(k) {
  83. return nil, fmt.Errorf("invalid field name: %s", k)
  84. }
  85. >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
  86. // rewrite dot-notation to Object__Attribute
  87. k = strings.Replace(k, ".", "__", -1)
  88. if strings.Contains(k, "isnull") {
  89. qs = qs.Filter(k, (v == "true" || v == "1"))
  90. } else {
  91. qs = qs.Filter(k, v)
  92. }
  93. }
  94. // order by:
  95. var sortFields []string
  96. if len(sortby) != 0 {
  97. <<<<<<< HEAD
  98. if len(sortby) == len(order) {
  99. // 1) for each sort field, there is an associated order
  100. for i, v := range sortby {
  101. orderby := ""
  102. if order[i] == "desc" {
  103. orderby = "-" + v
  104. } else if order[i] == "asc" {
  105. orderby = v
  106. } else {
  107. return nil, errors.New("Error: Invalid order. Must be either [asc|desc]")
  108. }
  109. sortFields = append(sortFields, orderby)
  110. }
  111. qs = qs.OrderBy(sortFields...)
  112. } else if len(sortby) != len(order) && len(order) == 1 {
  113. // 2) there is exactly one order, all the sorted fields will be sorted by this order
  114. for _, v := range sortby {
  115. orderby := ""
  116. if order[0] == "desc" {
  117. orderby = "-" + v
  118. } else if order[0] == "asc" {
  119. orderby = v
  120. } else {
  121. return nil, errors.New("Error: Invalid order. Must be either [asc|desc]")
  122. }
  123. sortFields = append(sortFields, orderby)
  124. }
  125. } else if len(sortby) != len(order) && len(order) != 1 {
  126. return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1")
  127. }
  128. =======
  129. // 验证order参数的有效性
  130. if len(order) != 0 && len(order) != 1 && len(order) != len(sortby) {
  131. return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1")
  132. }
  133. // 统一处理排序逻辑,消除重复代码
  134. for i, field := range sortby {
  135. orderDir := "asc"
  136. if len(order) == 1 {
  137. orderDir = order[0]
  138. } else if len(order) > 1 {
  139. orderDir = order[i]
  140. }
  141. orderby := ""
  142. if orderDir == "desc" {
  143. orderby = "-" + field
  144. } else if orderDir == "asc" {
  145. orderby = field
  146. } else {
  147. return nil, errors.New("Error: Invalid order. Must be either [asc|desc]")
  148. }
  149. sortFields = append(sortFields, orderby)
  150. }
  151. qs = qs.OrderBy(sortFields...)
  152. >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
  153. } else {
  154. if len(order) != 0 {
  155. return nil, errors.New("Error: unused 'order' fields")
  156. }
  157. }
  158. var l []AiceUsers
  159. <<<<<<< HEAD
  160. qs = qs.OrderBy(sortFields...)
  161. =======
  162. // 验证分页参数
  163. if limit <= 0 || limit > 1000 {
  164. return nil, errors.New("Error: limit must be between 1 and 1000")
  165. }
  166. if offset < 0 {
  167. return nil, errors.New("Error: offset must be non-negative")
  168. }
  169. >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
  170. if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil {
  171. if len(fields) == 0 {
  172. for _, v := range l {
  173. ml = append(ml, v)
  174. }
  175. } else {
  176. // trim unused fields
  177. for _, v := range l {
  178. m := make(map[string]interface{})
  179. val := reflect.ValueOf(v)
  180. for _, fname := range fields {
  181. <<<<<<< HEAD
  182. m[fname] = val.FieldByName(fname).Interface()
  183. =======
  184. field := val.FieldByName(fname)
  185. if !field.IsValid() {
  186. return nil, fmt.Errorf("invalid field name: %s", fname)
  187. }
  188. m[fname] = field.Interface()
  189. >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
  190. }
  191. ml = append(ml, m)
  192. }
  193. }
  194. return ml, nil
  195. }
  196. return nil, err
  197. }
  198. // UpdateAiceUsers updates AiceUsers by Id and returns error if
  199. // the record to be updated doesn't exist
  200. func UpdateAiceUsersById(m *AiceUsers) (err error) {
  201. o := orm.NewOrm()
  202. <<<<<<< HEAD
  203. v := AiceUsers{Id: m.Id}
  204. =======
  205. v := AiceUsers{Userid: m.Userid}
  206. >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
  207. // ascertain id exists in the database
  208. if err = o.Read(&v); err == nil {
  209. var num int64
  210. if num, err = o.Update(m); err == nil {
  211. fmt.Println("Number of records updated in database:", num)
  212. }
  213. }
  214. return
  215. }
  216. // DeleteAiceUsers deletes AiceUsers by Id and returns error if
  217. // the record to be deleted doesn't exist
  218. <<<<<<< HEAD
  219. func DeleteAiceUsers(id int) (err error) {
  220. o := orm.NewOrm()
  221. v := AiceUsers{Id: id}
  222. // ascertain id exists in the database
  223. if err = o.Read(&v); err == nil {
  224. var num int64
  225. if num, err = o.Delete(&AiceUsers{Id: id}); err == nil {
  226. =======
  227. func DeleteAiceUsers(id string) (err error) {
  228. o := orm.NewOrm()
  229. v := AiceUsers{Userid: id}
  230. // ascertain id exists in the database
  231. if err = o.Read(&v); err == nil {
  232. var num int64
  233. if num, err = o.Delete(&AiceUsers{Userid: id}); err == nil {
  234. >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
  235. fmt.Println("Number of records deleted in database:", num)
  236. }
  237. }
  238. return
  239. }