| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- package models
- import (
- "errors"
- "fmt"
- "reflect"
- "strings"
- "github.com/beego/beego/v2/client/orm"
- )
- type AiceUsers struct {
- Userid string `orm:"column(userid);pk"`
- Email string `orm:"column(email);size(255);null"`
- Token string `orm:"column(token);size(255);null"`
- Username string `orm:"column(username);size(255);null"`
- Address string `orm:"column(address);size(255);null"`
- Password string `orm:"column(password);size(255);null"`
- }
- func (t *AiceUsers) TableName() string {
- return "aice_users"
- }
- func init() {
- orm.RegisterModel(new(AiceUsers))
- }
- <<<<<<< HEAD
- =======
- // isValidFieldName 验证字段名是否有效,防止SQL注入
- func isValidFieldName(fieldName string) bool {
- // AiceUsers结构体中的有效字段
- validFields := map[string]bool{
- "userid": true,
- "email": true,
- "token": true,
- "username": true,
- "address": true,
- "password": true,
- }
- // 处理带isnull的情况(如:email__isnull)
- baseField := strings.Replace(fieldName, "__isnull", "", -1)
- baseField = strings.Replace(baseField, ".", "__", -1)
- // 检查基础字段是否有效
- for field := range validFields {
- if strings.HasPrefix(baseField, field) || baseField == field {
- return true
- }
- }
- return false
- }
- >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
- // AddAiceUsers insert a new AiceUsers into database and returns
- // last inserted Id on success.
- func AddAiceUsers(m *AiceUsers) (id int64, err error) {
- o := orm.NewOrm()
- id, err = o.Insert(m)
- return
- }
- // GetAiceUsersById retrieves AiceUsers by Id. Returns error if
- // Id doesn't exist
- <<<<<<< HEAD
- func GetAiceUsersById(id int) (v *AiceUsers, err error) {
- o := orm.NewOrm()
- v = &AiceUsers{Id: id}
- =======
- func GetAiceUsersById(id string) (v *AiceUsers, err error) {
- o := orm.NewOrm()
- v = &AiceUsers{Userid: id}
- >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
- if err = o.Read(v); err == nil {
- return v, nil
- }
- return nil, err
- }
- // GetAllAiceUsers retrieves all AiceUsers matches certain condition. Returns empty list if
- // no records exist
- func GetAllAiceUsers(query map[string]string, fields []string, sortby []string, order []string,
- offset int64, limit int64) (ml []interface{}, err error) {
- o := orm.NewOrm()
- qs := o.QueryTable(new(AiceUsers))
- // query k=v
- for k, v := range query {
- <<<<<<< HEAD
- =======
- // 验证字段名有效性,防止SQL注入
- if !isValidFieldName(k) {
- return nil, fmt.Errorf("invalid field name: %s", k)
- }
- >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
- // rewrite dot-notation to Object__Attribute
- k = strings.Replace(k, ".", "__", -1)
- if strings.Contains(k, "isnull") {
- qs = qs.Filter(k, (v == "true" || v == "1"))
- } else {
- qs = qs.Filter(k, v)
- }
- }
- // order by:
- var sortFields []string
- if len(sortby) != 0 {
- <<<<<<< HEAD
- if len(sortby) == len(order) {
- // 1) for each sort field, there is an associated order
- for i, v := range sortby {
- orderby := ""
- if order[i] == "desc" {
- orderby = "-" + v
- } else if order[i] == "asc" {
- orderby = v
- } else {
- return nil, errors.New("Error: Invalid order. Must be either [asc|desc]")
- }
- sortFields = append(sortFields, orderby)
- }
- qs = qs.OrderBy(sortFields...)
- } else if len(sortby) != len(order) && len(order) == 1 {
- // 2) there is exactly one order, all the sorted fields will be sorted by this order
- for _, v := range sortby {
- orderby := ""
- if order[0] == "desc" {
- orderby = "-" + v
- } else if order[0] == "asc" {
- orderby = v
- } else {
- return nil, errors.New("Error: Invalid order. Must be either [asc|desc]")
- }
- sortFields = append(sortFields, orderby)
- }
- } else if len(sortby) != len(order) && len(order) != 1 {
- return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1")
- }
- =======
- // 验证order参数的有效性
- if len(order) != 0 && len(order) != 1 && len(order) != len(sortby) {
- return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1")
- }
- // 统一处理排序逻辑,消除重复代码
- for i, field := range sortby {
- orderDir := "asc"
- if len(order) == 1 {
- orderDir = order[0]
- } else if len(order) > 1 {
- orderDir = order[i]
- }
- orderby := ""
- if orderDir == "desc" {
- orderby = "-" + field
- } else if orderDir == "asc" {
- orderby = field
- } else {
- return nil, errors.New("Error: Invalid order. Must be either [asc|desc]")
- }
- sortFields = append(sortFields, orderby)
- }
- qs = qs.OrderBy(sortFields...)
- >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
- } else {
- if len(order) != 0 {
- return nil, errors.New("Error: unused 'order' fields")
- }
- }
- var l []AiceUsers
- <<<<<<< HEAD
- qs = qs.OrderBy(sortFields...)
- =======
- // 验证分页参数
- if limit <= 0 || limit > 1000 {
- return nil, errors.New("Error: limit must be between 1 and 1000")
- }
- if offset < 0 {
- return nil, errors.New("Error: offset must be non-negative")
- }
- >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
- if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil {
- if len(fields) == 0 {
- for _, v := range l {
- ml = append(ml, v)
- }
- } else {
- // trim unused fields
- for _, v := range l {
- m := make(map[string]interface{})
- val := reflect.ValueOf(v)
- for _, fname := range fields {
- <<<<<<< HEAD
- m[fname] = val.FieldByName(fname).Interface()
- =======
- field := val.FieldByName(fname)
- if !field.IsValid() {
- return nil, fmt.Errorf("invalid field name: %s", fname)
- }
- m[fname] = field.Interface()
- >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
- }
- ml = append(ml, m)
- }
- }
- return ml, nil
- }
- return nil, err
- }
- // UpdateAiceUsers updates AiceUsers by Id and returns error if
- // the record to be updated doesn't exist
- func UpdateAiceUsersById(m *AiceUsers) (err error) {
- o := orm.NewOrm()
- <<<<<<< HEAD
- v := AiceUsers{Id: m.Id}
- =======
- v := AiceUsers{Userid: m.Userid}
- >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
- // ascertain id exists in the database
- if err = o.Read(&v); err == nil {
- var num int64
- if num, err = o.Update(m); err == nil {
- fmt.Println("Number of records updated in database:", num)
- }
- }
- return
- }
- // DeleteAiceUsers deletes AiceUsers by Id and returns error if
- // the record to be deleted doesn't exist
- <<<<<<< HEAD
- func DeleteAiceUsers(id int) (err error) {
- o := orm.NewOrm()
- v := AiceUsers{Id: id}
- // ascertain id exists in the database
- if err = o.Read(&v); err == nil {
- var num int64
- if num, err = o.Delete(&AiceUsers{Id: id}); err == nil {
- =======
- func DeleteAiceUsers(id string) (err error) {
- o := orm.NewOrm()
- v := AiceUsers{Userid: id}
- // ascertain id exists in the database
- if err = o.Read(&v); err == nil {
- var num int64
- if num, err = o.Delete(&AiceUsers{Userid: id}); err == nil {
- >>>>>>> ef2ade33f194f09f80c8427ab3f922856e82ee45
- fmt.Println("Number of records deleted in database:", num)
- }
- }
- return
- }
|