正在显示
63 个修改的文件
包含
7800 行增加
和
0 行删除
.gitignore
0 → 100644
Dockerfile
0 → 100644
| 1 | +FROM golang:1.13 as build | ||
| 2 | + | ||
| 3 | +ENV GOPROXY https://goproxy.cn | ||
| 4 | +ENV GO111MODULE on | ||
| 5 | + | ||
| 6 | +WORKDIR /go/ability | ||
| 7 | + | ||
| 8 | +ADD go.mod . | ||
| 9 | +ADD go.sum . | ||
| 10 | +RUN go mod download | ||
| 11 | + | ||
| 12 | +RUN GOOS=linux CGO_ENABLED=0 go build -ldflags="-s -w" -installsuffix cgo -o examples_gocomm main.go | ||
| 13 | + | ||
| 14 | +CMD ["/ability"] |
conf/app.conf
0 → 100644
conf/dev.conf
0 → 100644
conf/prod.conf
0 → 100644
controllers/v1/default.go
0 → 100644
| 1 | +package v1 | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/mybeego" | ||
| 5 | +) | ||
| 6 | + | ||
| 7 | +type MainController struct { | ||
| 8 | + mybeego.BaseController | ||
| 9 | +} | ||
| 10 | + | ||
| 11 | +// URLMapping ... | ||
| 12 | +func (this *MainController) URLMapping() { | ||
| 13 | + //this.Mapping("Get", this.Get) | ||
| 14 | + //this.Mapping("Hello", this.Hello) | ||
| 15 | +} | ||
| 16 | + | ||
| 17 | +func (c *MainController) Get() { | ||
| 18 | + c.Data["Website"] = "beego.me" | ||
| 19 | + c.Data["Email"] = "astaxie@gmail.com" | ||
| 20 | + c.TplName = "index.tpl" | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | + |
controllers/v1/user.go
0 → 100644
| 1 | +package v1 | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/mybeego" | ||
| 5 | +) | ||
| 6 | + | ||
| 7 | +type UserController struct { | ||
| 8 | + mybeego.BaseController | ||
| 9 | +} | ||
| 10 | + | ||
| 11 | +//匹配的是路由 | ||
| 12 | +// 127.0.0.1:8080/user/login/* | ||
| 13 | +//127.0.0.1:8080/user/logout/* | ||
| 14 | + | ||
| 15 | +func(this *UserController)URLMapping(){ | ||
| 16 | + //this.Mapping("/v1/user/login",this.Login) | ||
| 17 | + //this.Mapping("/v1/user/select",this.SelectUser) | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +// Login | ||
| 21 | +// @Title Login | ||
| 22 | +// @Description 登录 | ||
| 23 | +// @Param body body string true "body" | ||
| 24 | +// @router /v1/user/login [post] | ||
| 25 | +func(this *UserController)Login(){ | ||
| 26 | + var msg *mybeego.Message | ||
| 27 | + defer func(){ | ||
| 28 | + this.Resp(msg) | ||
| 29 | + }() | ||
| 30 | + msg = mybeego.NewErrMessage(0,"login success") | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +func(this *UserController)Logout(){ | ||
| 34 | + var msg *mybeego.Message | ||
| 35 | + defer func(){ | ||
| 36 | + this.Resp(msg) | ||
| 37 | + }() | ||
| 38 | + msg = mybeego.NewErrMessage(0,"logout success") | ||
| 39 | +} |
docker-compose.yaml
0 → 100644
| 1 | +version: '3.1' #指定docker-compose 版本 | ||
| 2 | + | ||
| 3 | +services: | ||
| 4 | + redis: | ||
| 5 | + image: redis #使用 镜像 | ||
| 6 | + container_name: gocomm_redis | ||
| 7 | + command: redis-server /usr/local/etc/redis/redis.conf | ||
| 8 | + ports: # | ||
| 9 | + - 6379:6379 | ||
| 10 | + volumes: | ||
| 11 | + - ./data:/data | ||
| 12 | + - ./redis.conf:/usr/local/etc/redis/redis.conf | ||
| 13 | + db: | ||
| 14 | + #构建mysql镜像 | ||
| 15 | + image: mysql | ||
| 16 | + container_name: gocomm-mysql # 容器名 | ||
| 17 | + command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci #设置utf8字符集 | ||
| 18 | + restart: always | ||
| 19 | + environment: | ||
| 20 | + MYSQL_ROOT_PASSWORD: 123456 #root管理员用户密码 | ||
| 21 | + MYSQL_USER: test #创建test用户 | ||
| 22 | + MYSQL_PASSWORD: 123456 #设置test用户的密码 | ||
| 23 | + ports: | ||
| 24 | + - 3306:3306 #host物理直接映射端口为6606 | ||
| 25 | + volumes: | ||
| 26 | + #mysql数据库挂载到host物理机目录/e/docker/mysql/data/db | ||
| 27 | + - "/docker/mysql/data/db:/var/lib/mysql" | ||
| 28 | + #容器的配置目录挂载到host物理机目录/e/docker/mysql/data/conf | ||
| 29 | + - "/docker/mysql/data/conf:/etc/mysql/conf.d" | ||
| 30 | + ability: #定义服务名称 | ||
| 31 | + build: ./ #引入了 build 的路径,它指向一个存有 Dockerfile 的目录 | ||
| 32 | + ports: # | ||
| 33 | + - 8081:8081 | ||
| 34 | + environment: | ||
| 35 | + RUNMODULE: "PROD" |
go.mod
0 → 100644
| 1 | +module gitlab.fjmaimaimai.com/mmm-go/ability | ||
| 2 | + | ||
| 3 | +go 1.12 | ||
| 4 | + | ||
| 5 | +require ( | ||
| 6 | + github.com/astaxie/beego v1.10.0 | ||
| 7 | + github.com/go-sql-driver/mysql v1.4.1 | ||
| 8 | + github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 | ||
| 9 | + gitlab.fjmaimaimai.com/mmm-go/gocomm v0.0.1 | ||
| 10 | + google.golang.org/appengine v1.6.2 // indirect | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +replace gitlab.fjmaimaimai.com/mmm-go/gocomm => ../gocomm |
go.sum
0 → 100644
| 1 | +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= | ||
| 2 | +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | ||
| 3 | +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= | ||
| 4 | +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | ||
| 5 | +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | ||
| 6 | +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= | ||
| 7 | +github.com/astaxie/beego v1.10.0 h1:s0OZ1iUO0rl8+lwWZfPK/0GhQi1tFUcIClTevyz48Pg= | ||
| 8 | +github.com/astaxie/beego v1.10.0/go.mod h1:0R4++1tUqERR0WYFWdfkcrsyoVBCG4DgpDGokT3yb+U= | ||
| 9 | +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= | ||
| 10 | +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= | ||
| 11 | +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= | ||
| 12 | +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= | ||
| 13 | +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= | ||
| 14 | +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= | ||
| 15 | +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= | ||
| 16 | +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= | ||
| 17 | +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= | ||
| 18 | +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= | ||
| 19 | +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
| 20 | +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
| 21 | +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= | ||
| 22 | +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= | ||
| 23 | +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= | ||
| 24 | +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= | ||
| 25 | +github.com/garyburd/redigo v1.6.0 h1:0VruCpn7yAIIu7pWVClQC8wxCJEcG3nyzpMSHKi1PQc= | ||
| 26 | +github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= | ||
| 27 | +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= | ||
| 28 | +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3 h1:t8FVkw33L+wilf2QiWkw0UV77qRpcH/JHPKGpKa2E8g= | ||
| 29 | +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= | ||
| 30 | +github.com/gin-gonic/gin v1.4.0 h1:3tMoCCfM7ppqsR0ptz/wi1impNpT7/9wQtMZ8lr1mCQ= | ||
| 31 | +github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= | ||
| 32 | +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= | ||
| 33 | +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= | ||
| 34 | +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= | ||
| 35 | +github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= | ||
| 36 | +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= | ||
| 37 | +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= | ||
| 38 | +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= | ||
| 39 | +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= | ||
| 40 | +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= | ||
| 41 | +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= | ||
| 42 | +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= | ||
| 43 | +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||
| 44 | +github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= | ||
| 45 | +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= | ||
| 46 | +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= | ||
| 47 | +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= | ||
| 48 | +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= | ||
| 49 | +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= | ||
| 50 | +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= | ||
| 51 | +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= | ||
| 52 | +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= | ||
| 53 | +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= | ||
| 54 | +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= | ||
| 55 | +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= | ||
| 56 | +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= | ||
| 57 | +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= | ||
| 58 | +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= | ||
| 59 | +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= | ||
| 60 | +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= | ||
| 61 | +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= | ||
| 62 | +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= | ||
| 63 | +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= | ||
| 64 | +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= | ||
| 65 | +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= | ||
| 66 | +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= | ||
| 67 | +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= | ||
| 68 | +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= | ||
| 69 | +github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= | ||
| 70 | +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= | ||
| 71 | +github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDePerRcY= | ||
| 72 | +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= | ||
| 73 | +github.com/mattn/go-isatty v0.0.7 h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc= | ||
| 74 | +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= | ||
| 75 | +github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q= | ||
| 76 | +github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= | ||
| 77 | +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= | ||
| 78 | +github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= | ||
| 79 | +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= | ||
| 80 | +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= | ||
| 81 | +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= | ||
| 82 | +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= | ||
| 83 | +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= | ||
| 84 | +github.com/opentracing-contrib/go-stdlib v0.0.0-20190519235532-cf7a6c988dc9/go.mod h1:PLldrQSroqzH70Xl+1DQcGnefIbqsKR7UDaiux3zV+w= | ||
| 85 | +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= | ||
| 86 | +github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc= | ||
| 87 | +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= | ||
| 88 | +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||
| 89 | +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||
| 90 | +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= | ||
| 91 | +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= | ||
| 92 | +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= | ||
| 93 | +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= | ||
| 94 | +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= | ||
| 95 | +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= | ||
| 96 | +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= | ||
| 97 | +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= | ||
| 98 | +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= | ||
| 99 | +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= | ||
| 100 | +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= | ||
| 101 | +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= | ||
| 102 | +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= | ||
| 103 | +github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 h1:WN9BUFbdyOsSH/XohnWpXOlq9NBD5sGAB2FciQMUEe8= | ||
| 104 | +github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= | ||
| 105 | +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= | ||
| 106 | +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= | ||
| 107 | +github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= | ||
| 108 | +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= | ||
| 109 | +github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= | ||
| 110 | +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= | ||
| 111 | +github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= | ||
| 112 | +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= | ||
| 113 | +github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= | ||
| 114 | +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= | ||
| 115 | +github.com/spf13/viper v1.4.0 h1:yXHLWeravcrgGyFSyCgdYpXQ9dR9c/WED3pg1RhxqEU= | ||
| 116 | +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= | ||
| 117 | +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||
| 118 | +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||
| 119 | +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= | ||
| 120 | +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | ||
| 121 | +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= | ||
| 122 | +github.com/uber-go/atomic v1.4.0/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= | ||
| 123 | +github.com/uber/jaeger-client-go v2.16.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= | ||
| 124 | +github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= | ||
| 125 | +github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= | ||
| 126 | +github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= | ||
| 127 | +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= | ||
| 128 | +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= | ||
| 129 | +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= | ||
| 130 | +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= | ||
| 131 | +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= | ||
| 132 | +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= | ||
| 133 | +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= | ||
| 134 | +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= | ||
| 135 | +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= | ||
| 136 | +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= | ||
| 137 | +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | ||
| 138 | +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU= | ||
| 139 | +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= | ||
| 140 | +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= | ||
| 141 | +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= | ||
| 142 | +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||
| 143 | +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||
| 144 | +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= | ||
| 145 | +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||
| 146 | +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||
| 147 | +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= | ||
| 148 | +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= | ||
| 149 | +golang.org/x/net v0.0.0-20190603091049-60506f45cf65 h1:+rhAzEzT3f4JtomfC371qB+0Ola2caSKcY69NUBZrRQ= | ||
| 150 | +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= | ||
| 151 | +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= | ||
| 152 | +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||
| 153 | +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||
| 154 | +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||
| 155 | +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||
| 156 | +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||
| 157 | +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||
| 158 | +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||
| 159 | +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||
| 160 | +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||
| 161 | +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||
| 162 | +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
| 163 | +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
| 164 | +golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= | ||
| 165 | +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= | ||
| 166 | +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= | ||
| 167 | +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= | ||
| 168 | +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= | ||
| 169 | +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||
| 170 | +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||
| 171 | +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= | ||
| 172 | +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||
| 173 | +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= | ||
| 174 | +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= | ||
| 175 | +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= | ||
| 176 | +google.golang.org/appengine v1.6.2 h1:j8RI1yW0SkI+paT6uGwMlrMI/6zwYA6/CFil8rxOzGI= | ||
| 177 | +google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= | ||
| 178 | +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= | ||
| 179 | +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= | ||
| 180 | +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= | ||
| 181 | +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= | ||
| 182 | +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= | ||
| 183 | +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||
| 184 | +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||
| 185 | +gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= | ||
| 186 | +gopkg.in/go-playground/validator.v8 v8.18.2 h1:lFB4DoMU6B626w8ny76MV7VX6W2VHct2GVOI3xgiMrQ= | ||
| 187 | +gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= | ||
| 188 | +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= | ||
| 189 | +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= | ||
| 190 | +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||
| 191 | +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= | ||
| 192 | +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= | ||
| 193 | +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= |
main.go
0 → 100644
| 1 | +package main | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/astaxie/beego" | ||
| 5 | + _ "gitlab.fjmaimaimai.com/mmm-go/ability/routers" | ||
| 6 | + "gitlab.fjmaimaimai.com/mmm-go/gocomm/config" | ||
| 7 | + "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" | ||
| 8 | + "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/orm" | ||
| 9 | + "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/redis" | ||
| 10 | + _ "github.com/go-sql-driver/mysql" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +func init(){ | ||
| 14 | + log.InitLog(config.Logger{ | ||
| 15 | + Filename:"app.log", | ||
| 16 | + Level:"7", | ||
| 17 | + }) | ||
| 18 | + err:= redis.InitWithDb(100,beego.AppConfig.String("redis_add_port"),beego.AppConfig.String("redis_auth"),"0") | ||
| 19 | + if err!=nil{ | ||
| 20 | + log.Fatal(err) | ||
| 21 | + } | ||
| 22 | + orm.NewBeeormEngine(config.Mysql{ | ||
| 23 | + DataSource:beego.AppConfig.String("data_source"), | ||
| 24 | + MaxIdle: 100, | ||
| 25 | + MaxOpen:100, | ||
| 26 | + }) | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +func main() { | ||
| 30 | + defer func(){ | ||
| 31 | + log.Info("app on stop!") | ||
| 32 | + }() | ||
| 33 | + beego.Run() | ||
| 34 | +} | ||
| 35 | + |
models/announcement.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type Announcement struct { | ||
| 14 | + Id int `orm:"column(id);pk" description:"主键ID"` | ||
| 15 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add" description:"创建时间"` | ||
| 16 | + Content string `orm:"column(content);size(500)" description:"消息标题"` | ||
| 17 | + CompanyId int64 `orm:"column(company_id);null"` | ||
| 18 | + Day string `orm:"column(day);size(20)" description:"日期"` | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +func (t *Announcement) TableName() string { | ||
| 22 | + return "announcement" | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +func init() { | ||
| 26 | + orm.RegisterModel(new(Announcement)) | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +// AddAnnouncement insert a new Announcement into database and returns | ||
| 30 | +// last inserted Id on success. | ||
| 31 | +func AddAnnouncement(m *Announcement) (id int64, err error) { | ||
| 32 | + o := orm.NewOrm() | ||
| 33 | + id, err = o.Insert(m) | ||
| 34 | + return | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +// GetAnnouncementById retrieves Announcement by Id. Returns error if | ||
| 38 | +// Id doesn't exist | ||
| 39 | +func GetAnnouncementById(id int) (v *Announcement, err error) { | ||
| 40 | + o := orm.NewOrm() | ||
| 41 | + v = &Announcement{Id: id} | ||
| 42 | + if err = o.Read(v); err == nil { | ||
| 43 | + return v, nil | ||
| 44 | + } | ||
| 45 | + return nil, err | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +// GetAllAnnouncement retrieves all Announcement matches certain condition. Returns empty list if | ||
| 49 | +// no records exist | ||
| 50 | +func GetAllAnnouncement(query map[string]string, fields []string, sortby []string, order []string, | ||
| 51 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 52 | + o := orm.NewOrm() | ||
| 53 | + qs := o.QueryTable(new(Announcement)) | ||
| 54 | + // query k=v | ||
| 55 | + for k, v := range query { | ||
| 56 | + // rewrite dot-notation to Object__Attribute | ||
| 57 | + k = strings.Replace(k, ".", "__", -1) | ||
| 58 | + if strings.Contains(k, "isnull") { | ||
| 59 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 60 | + } else { | ||
| 61 | + qs = qs.Filter(k, v) | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + // order by: | ||
| 65 | + var sortFields []string | ||
| 66 | + if len(sortby) != 0 { | ||
| 67 | + if len(sortby) == len(order) { | ||
| 68 | + // 1) for each sort field, there is an associated order | ||
| 69 | + for i, v := range sortby { | ||
| 70 | + orderby := "" | ||
| 71 | + if order[i] == "desc" { | ||
| 72 | + orderby = "-" + v | ||
| 73 | + } else if order[i] == "asc" { | ||
| 74 | + orderby = v | ||
| 75 | + } else { | ||
| 76 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 77 | + } | ||
| 78 | + sortFields = append(sortFields, orderby) | ||
| 79 | + } | ||
| 80 | + qs = qs.OrderBy(sortFields...) | ||
| 81 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 82 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 83 | + for _, v := range sortby { | ||
| 84 | + orderby := "" | ||
| 85 | + if order[0] == "desc" { | ||
| 86 | + orderby = "-" + v | ||
| 87 | + } else if order[0] == "asc" { | ||
| 88 | + orderby = v | ||
| 89 | + } else { | ||
| 90 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 91 | + } | ||
| 92 | + sortFields = append(sortFields, orderby) | ||
| 93 | + } | ||
| 94 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 95 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 96 | + } | ||
| 97 | + } else { | ||
| 98 | + if len(order) != 0 { | ||
| 99 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + var l []Announcement | ||
| 104 | + qs = qs.OrderBy(sortFields...) | ||
| 105 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 106 | + if len(fields) == 0 { | ||
| 107 | + for _, v := range l { | ||
| 108 | + ml = append(ml, v) | ||
| 109 | + } | ||
| 110 | + } else { | ||
| 111 | + // trim unused fields | ||
| 112 | + for _, v := range l { | ||
| 113 | + m := make(map[string]interface{}) | ||
| 114 | + val := reflect.ValueOf(v) | ||
| 115 | + for _, fname := range fields { | ||
| 116 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 117 | + } | ||
| 118 | + ml = append(ml, m) | ||
| 119 | + } | ||
| 120 | + } | ||
| 121 | + return ml, nil | ||
| 122 | + } | ||
| 123 | + return nil, err | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | +// UpdateAnnouncement updates Announcement by Id and returns error if | ||
| 127 | +// the record to be updated doesn't exist | ||
| 128 | +func UpdateAnnouncementById(m *Announcement) (err error) { | ||
| 129 | + o := orm.NewOrm() | ||
| 130 | + v := Announcement{Id: m.Id} | ||
| 131 | + // ascertain id exists in the database | ||
| 132 | + if err = o.Read(&v); err == nil { | ||
| 133 | + var num int64 | ||
| 134 | + if num, err = o.Update(m); err == nil { | ||
| 135 | + fmt.Println("Number of records updated in database:", num) | ||
| 136 | + } | ||
| 137 | + } | ||
| 138 | + return | ||
| 139 | +} | ||
| 140 | + | ||
| 141 | +// DeleteAnnouncement deletes Announcement by Id and returns error if | ||
| 142 | +// the record to be deleted doesn't exist | ||
| 143 | +func DeleteAnnouncement(id int) (err error) { | ||
| 144 | + o := orm.NewOrm() | ||
| 145 | + v := Announcement{Id: id} | ||
| 146 | + // ascertain id exists in the database | ||
| 147 | + if err = o.Read(&v); err == nil { | ||
| 148 | + var num int64 | ||
| 149 | + if num, err = o.Delete(&Announcement{Id: id}); err == nil { | ||
| 150 | + fmt.Println("Number of records deleted in database:", num) | ||
| 151 | + } | ||
| 152 | + } | ||
| 153 | + return | ||
| 154 | +} |
models/bonus_point.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type BonusPoint struct { | ||
| 14 | + Id int `orm:"column(id);pk"` | ||
| 15 | + CompanyId int `orm:"column(company_id)" description:"公司ID"` | ||
| 16 | + Type int8 `orm:"column(type)" description:"加分类型 0发现 1分析 2解决"` | ||
| 17 | + Uid int64 `orm:"column(uid)" description:"被加分人"` | ||
| 18 | + Score int `orm:"column(score)" description:"加分数值"` | ||
| 19 | + JoinDate time.Time `orm:"column(join_date);type(date)" description:"加入年月"` | ||
| 20 | + OperatorId int64 `orm:"column(operator_id)" description:"加分人(操作者id)"` | ||
| 21 | + Reason string `orm:"column(reason);size(500);null" description:"加分理由"` | ||
| 22 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add"` | ||
| 23 | + UpdateTime time.Time `orm:"column(updateTime);type(timestamp);auto_now_add"` | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +func (t *BonusPoint) TableName() string { | ||
| 27 | + return "bonus_point" | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +func init() { | ||
| 31 | + orm.RegisterModel(new(BonusPoint)) | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | +// AddBonusPoint insert a new BonusPoint into database and returns | ||
| 35 | +// last inserted Id on success. | ||
| 36 | +func AddBonusPoint(m *BonusPoint) (id int64, err error) { | ||
| 37 | + o := orm.NewOrm() | ||
| 38 | + id, err = o.Insert(m) | ||
| 39 | + return | ||
| 40 | +} | ||
| 41 | + | ||
| 42 | +// GetBonusPointById retrieves BonusPoint by Id. Returns error if | ||
| 43 | +// Id doesn't exist | ||
| 44 | +func GetBonusPointById(id int) (v *BonusPoint, err error) { | ||
| 45 | + o := orm.NewOrm() | ||
| 46 | + v = &BonusPoint{Id: id} | ||
| 47 | + if err = o.Read(v); err == nil { | ||
| 48 | + return v, nil | ||
| 49 | + } | ||
| 50 | + return nil, err | ||
| 51 | +} | ||
| 52 | + | ||
| 53 | +// GetAllBonusPoint retrieves all BonusPoint matches certain condition. Returns empty list if | ||
| 54 | +// no records exist | ||
| 55 | +func GetAllBonusPoint(query map[string]string, fields []string, sortby []string, order []string, | ||
| 56 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 57 | + o := orm.NewOrm() | ||
| 58 | + qs := o.QueryTable(new(BonusPoint)) | ||
| 59 | + // query k=v | ||
| 60 | + for k, v := range query { | ||
| 61 | + // rewrite dot-notation to Object__Attribute | ||
| 62 | + k = strings.Replace(k, ".", "__", -1) | ||
| 63 | + if strings.Contains(k, "isnull") { | ||
| 64 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 65 | + } else { | ||
| 66 | + qs = qs.Filter(k, v) | ||
| 67 | + } | ||
| 68 | + } | ||
| 69 | + // order by: | ||
| 70 | + var sortFields []string | ||
| 71 | + if len(sortby) != 0 { | ||
| 72 | + if len(sortby) == len(order) { | ||
| 73 | + // 1) for each sort field, there is an associated order | ||
| 74 | + for i, v := range sortby { | ||
| 75 | + orderby := "" | ||
| 76 | + if order[i] == "desc" { | ||
| 77 | + orderby = "-" + v | ||
| 78 | + } else if order[i] == "asc" { | ||
| 79 | + orderby = v | ||
| 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 if len(sortby) != len(order) && len(order) == 1 { | ||
| 87 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 88 | + for _, v := range sortby { | ||
| 89 | + orderby := "" | ||
| 90 | + if order[0] == "desc" { | ||
| 91 | + orderby = "-" + v | ||
| 92 | + } else if order[0] == "asc" { | ||
| 93 | + orderby = v | ||
| 94 | + } else { | ||
| 95 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 96 | + } | ||
| 97 | + sortFields = append(sortFields, orderby) | ||
| 98 | + } | ||
| 99 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 100 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 101 | + } | ||
| 102 | + } else { | ||
| 103 | + if len(order) != 0 { | ||
| 104 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 105 | + } | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + var l []BonusPoint | ||
| 109 | + qs = qs.OrderBy(sortFields...) | ||
| 110 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 111 | + if len(fields) == 0 { | ||
| 112 | + for _, v := range l { | ||
| 113 | + ml = append(ml, v) | ||
| 114 | + } | ||
| 115 | + } else { | ||
| 116 | + // trim unused fields | ||
| 117 | + for _, v := range l { | ||
| 118 | + m := make(map[string]interface{}) | ||
| 119 | + val := reflect.ValueOf(v) | ||
| 120 | + for _, fname := range fields { | ||
| 121 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 122 | + } | ||
| 123 | + ml = append(ml, m) | ||
| 124 | + } | ||
| 125 | + } | ||
| 126 | + return ml, nil | ||
| 127 | + } | ||
| 128 | + return nil, err | ||
| 129 | +} | ||
| 130 | + | ||
| 131 | +// UpdateBonusPoint updates BonusPoint by Id and returns error if | ||
| 132 | +// the record to be updated doesn't exist | ||
| 133 | +func UpdateBonusPointById(m *BonusPoint) (err error) { | ||
| 134 | + o := orm.NewOrm() | ||
| 135 | + v := BonusPoint{Id: m.Id} | ||
| 136 | + // ascertain id exists in the database | ||
| 137 | + if err = o.Read(&v); err == nil { | ||
| 138 | + var num int64 | ||
| 139 | + if num, err = o.Update(m); err == nil { | ||
| 140 | + fmt.Println("Number of records updated in database:", num) | ||
| 141 | + } | ||
| 142 | + } | ||
| 143 | + return | ||
| 144 | +} | ||
| 145 | + | ||
| 146 | +// DeleteBonusPoint deletes BonusPoint by Id and returns error if | ||
| 147 | +// the record to be deleted doesn't exist | ||
| 148 | +func DeleteBonusPoint(id int) (err error) { | ||
| 149 | + o := orm.NewOrm() | ||
| 150 | + v := BonusPoint{Id: id} | ||
| 151 | + // ascertain id exists in the database | ||
| 152 | + if err = o.Read(&v); err == nil { | ||
| 153 | + var num int64 | ||
| 154 | + if num, err = o.Delete(&BonusPoint{Id: id}); err == nil { | ||
| 155 | + fmt.Println("Number of records deleted in database:", num) | ||
| 156 | + } | ||
| 157 | + } | ||
| 158 | + return | ||
| 159 | +} |
models/bulletin.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type Bulletin struct { | ||
| 14 | + Id int `orm:"column(id);auto"` | ||
| 15 | + Title string `orm:"column(title);size(2000);null" description:"标题"` | ||
| 16 | + Content string `orm:"column(content);null" description:"内容"` | ||
| 17 | + Cover string `orm:"column(cover);size(255);null" description:"封面地址"` | ||
| 18 | + W int `orm:"column(w);null" description:"宽"` | ||
| 19 | + H int `orm:"column(h);null" description:"高"` | ||
| 20 | + Type int8 `orm:"column(type);null" description:"公告类型(0图+跳转链接、1链接)"` | ||
| 21 | + Receiver string `orm:"column(receiver);null" description:"接收者"` | ||
| 22 | + QuestionSwitch int8 `orm:"column(question_switch);null" description:"设置问题开关"` | ||
| 23 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);null" description:"创建时间"` | ||
| 24 | + UpdateTime time.Time `orm:"column(updateTime);type(timestamp);null" description:"更新时间"` | ||
| 25 | + AllowClose int8 `orm:"column(allowClose);null" description:"允许关闭公告(0允许,1禁止)"` | ||
| 26 | + CompanyId int `orm:"column(company_id);null" description:"公司Id"` | ||
| 27 | + Status uint8 `orm:"column(status)" description:"状态 0-下架 1- 上架"` | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +func (t *Bulletin) TableName() string { | ||
| 31 | + return "bulletin" | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | +func init() { | ||
| 35 | + orm.RegisterModel(new(Bulletin)) | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +// AddBulletin insert a new Bulletin into database and returns | ||
| 39 | +// last inserted Id on success. | ||
| 40 | +func AddBulletin(m *Bulletin) (id int64, err error) { | ||
| 41 | + o := orm.NewOrm() | ||
| 42 | + id, err = o.Insert(m) | ||
| 43 | + return | ||
| 44 | +} | ||
| 45 | + | ||
| 46 | +// GetBulletinById retrieves Bulletin by Id. Returns error if | ||
| 47 | +// Id doesn't exist | ||
| 48 | +func GetBulletinById(id int) (v *Bulletin, err error) { | ||
| 49 | + o := orm.NewOrm() | ||
| 50 | + v = &Bulletin{Id: id} | ||
| 51 | + if err = o.Read(v); err == nil { | ||
| 52 | + return v, nil | ||
| 53 | + } | ||
| 54 | + return nil, err | ||
| 55 | +} | ||
| 56 | + | ||
| 57 | +// GetAllBulletin retrieves all Bulletin matches certain condition. Returns empty list if | ||
| 58 | +// no records exist | ||
| 59 | +func GetAllBulletin(query map[string]string, fields []string, sortby []string, order []string, | ||
| 60 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 61 | + o := orm.NewOrm() | ||
| 62 | + qs := o.QueryTable(new(Bulletin)) | ||
| 63 | + // query k=v | ||
| 64 | + for k, v := range query { | ||
| 65 | + // rewrite dot-notation to Object__Attribute | ||
| 66 | + k = strings.Replace(k, ".", "__", -1) | ||
| 67 | + if strings.Contains(k, "isnull") { | ||
| 68 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 69 | + } else { | ||
| 70 | + qs = qs.Filter(k, v) | ||
| 71 | + } | ||
| 72 | + } | ||
| 73 | + // order by: | ||
| 74 | + var sortFields []string | ||
| 75 | + if len(sortby) != 0 { | ||
| 76 | + if len(sortby) == len(order) { | ||
| 77 | + // 1) for each sort field, there is an associated order | ||
| 78 | + for i, v := range sortby { | ||
| 79 | + orderby := "" | ||
| 80 | + if order[i] == "desc" { | ||
| 81 | + orderby = "-" + v | ||
| 82 | + } else if order[i] == "asc" { | ||
| 83 | + orderby = v | ||
| 84 | + } else { | ||
| 85 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 86 | + } | ||
| 87 | + sortFields = append(sortFields, orderby) | ||
| 88 | + } | ||
| 89 | + qs = qs.OrderBy(sortFields...) | ||
| 90 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 91 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 92 | + for _, v := range sortby { | ||
| 93 | + orderby := "" | ||
| 94 | + if order[0] == "desc" { | ||
| 95 | + orderby = "-" + v | ||
| 96 | + } else if order[0] == "asc" { | ||
| 97 | + orderby = v | ||
| 98 | + } else { | ||
| 99 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 100 | + } | ||
| 101 | + sortFields = append(sortFields, orderby) | ||
| 102 | + } | ||
| 103 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 104 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 105 | + } | ||
| 106 | + } else { | ||
| 107 | + if len(order) != 0 { | ||
| 108 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 109 | + } | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + var l []Bulletin | ||
| 113 | + qs = qs.OrderBy(sortFields...) | ||
| 114 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 115 | + if len(fields) == 0 { | ||
| 116 | + for _, v := range l { | ||
| 117 | + ml = append(ml, v) | ||
| 118 | + } | ||
| 119 | + } else { | ||
| 120 | + // trim unused fields | ||
| 121 | + for _, v := range l { | ||
| 122 | + m := make(map[string]interface{}) | ||
| 123 | + val := reflect.ValueOf(v) | ||
| 124 | + for _, fname := range fields { | ||
| 125 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 126 | + } | ||
| 127 | + ml = append(ml, m) | ||
| 128 | + } | ||
| 129 | + } | ||
| 130 | + return ml, nil | ||
| 131 | + } | ||
| 132 | + return nil, err | ||
| 133 | +} | ||
| 134 | + | ||
| 135 | +// UpdateBulletin updates Bulletin by Id and returns error if | ||
| 136 | +// the record to be updated doesn't exist | ||
| 137 | +func UpdateBulletinById(m *Bulletin) (err error) { | ||
| 138 | + o := orm.NewOrm() | ||
| 139 | + v := Bulletin{Id: m.Id} | ||
| 140 | + // ascertain id exists in the database | ||
| 141 | + if err = o.Read(&v); err == nil { | ||
| 142 | + var num int64 | ||
| 143 | + if num, err = o.Update(m); err == nil { | ||
| 144 | + fmt.Println("Number of records updated in database:", num) | ||
| 145 | + } | ||
| 146 | + } | ||
| 147 | + return | ||
| 148 | +} | ||
| 149 | + | ||
| 150 | +// DeleteBulletin deletes Bulletin by Id and returns error if | ||
| 151 | +// the record to be deleted doesn't exist | ||
| 152 | +func DeleteBulletin(id int) (err error) { | ||
| 153 | + o := orm.NewOrm() | ||
| 154 | + v := Bulletin{Id: id} | ||
| 155 | + // ascertain id exists in the database | ||
| 156 | + if err = o.Read(&v); err == nil { | ||
| 157 | + var num int64 | ||
| 158 | + if num, err = o.Delete(&Bulletin{Id: id}); err == nil { | ||
| 159 | + fmt.Println("Number of records deleted in database:", num) | ||
| 160 | + } | ||
| 161 | + } | ||
| 162 | + return | ||
| 163 | +} |
models/bulletin_question.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type BulletinQuestion struct { | ||
| 14 | + Id int `orm:"column(id);auto"` | ||
| 15 | + BulletinId int `orm:"column(bulletin_id);null" description:"公告id"` | ||
| 16 | + Type int8 `orm:"column(type);null" description:"类型:0-单选,1-多选"` | ||
| 17 | + Title string `orm:"column(title);size(2000);null" description:"标题"` | ||
| 18 | + Content string `orm:"column(content);size(2000);null" description:"内容"` | ||
| 19 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);null" description:"创建时间"` | ||
| 20 | + UpdateTime time.Time `orm:"column(updateTime);type(timestamp);null" description:"更新时间"` | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func (t *BulletinQuestion) TableName() string { | ||
| 24 | + return "bulletin_question" | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +func init() { | ||
| 28 | + orm.RegisterModel(new(BulletinQuestion)) | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +// AddBulletinQuestion insert a new BulletinQuestion into database and returns | ||
| 32 | +// last inserted Id on success. | ||
| 33 | +func AddBulletinQuestion(m *BulletinQuestion) (id int64, err error) { | ||
| 34 | + o := orm.NewOrm() | ||
| 35 | + id, err = o.Insert(m) | ||
| 36 | + return | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +// GetBulletinQuestionById retrieves BulletinQuestion by Id. Returns error if | ||
| 40 | +// Id doesn't exist | ||
| 41 | +func GetBulletinQuestionById(id int) (v *BulletinQuestion, err error) { | ||
| 42 | + o := orm.NewOrm() | ||
| 43 | + v = &BulletinQuestion{Id: id} | ||
| 44 | + if err = o.Read(v); err == nil { | ||
| 45 | + return v, nil | ||
| 46 | + } | ||
| 47 | + return nil, err | ||
| 48 | +} | ||
| 49 | + | ||
| 50 | +// GetAllBulletinQuestion retrieves all BulletinQuestion matches certain condition. Returns empty list if | ||
| 51 | +// no records exist | ||
| 52 | +func GetAllBulletinQuestion(query map[string]string, fields []string, sortby []string, order []string, | ||
| 53 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 54 | + o := orm.NewOrm() | ||
| 55 | + qs := o.QueryTable(new(BulletinQuestion)) | ||
| 56 | + // query k=v | ||
| 57 | + for k, v := range query { | ||
| 58 | + // rewrite dot-notation to Object__Attribute | ||
| 59 | + k = strings.Replace(k, ".", "__", -1) | ||
| 60 | + if strings.Contains(k, "isnull") { | ||
| 61 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 62 | + } else { | ||
| 63 | + qs = qs.Filter(k, v) | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + // order by: | ||
| 67 | + var sortFields []string | ||
| 68 | + if len(sortby) != 0 { | ||
| 69 | + if len(sortby) == len(order) { | ||
| 70 | + // 1) for each sort field, there is an associated order | ||
| 71 | + for i, v := range sortby { | ||
| 72 | + orderby := "" | ||
| 73 | + if order[i] == "desc" { | ||
| 74 | + orderby = "-" + v | ||
| 75 | + } else if order[i] == "asc" { | ||
| 76 | + orderby = v | ||
| 77 | + } else { | ||
| 78 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 79 | + } | ||
| 80 | + sortFields = append(sortFields, orderby) | ||
| 81 | + } | ||
| 82 | + qs = qs.OrderBy(sortFields...) | ||
| 83 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 84 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 85 | + for _, v := range sortby { | ||
| 86 | + orderby := "" | ||
| 87 | + if order[0] == "desc" { | ||
| 88 | + orderby = "-" + v | ||
| 89 | + } else if order[0] == "asc" { | ||
| 90 | + orderby = v | ||
| 91 | + } else { | ||
| 92 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 93 | + } | ||
| 94 | + sortFields = append(sortFields, orderby) | ||
| 95 | + } | ||
| 96 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 97 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 98 | + } | ||
| 99 | + } else { | ||
| 100 | + if len(order) != 0 { | ||
| 101 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + var l []BulletinQuestion | ||
| 106 | + qs = qs.OrderBy(sortFields...) | ||
| 107 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 108 | + if len(fields) == 0 { | ||
| 109 | + for _, v := range l { | ||
| 110 | + ml = append(ml, v) | ||
| 111 | + } | ||
| 112 | + } else { | ||
| 113 | + // trim unused fields | ||
| 114 | + for _, v := range l { | ||
| 115 | + m := make(map[string]interface{}) | ||
| 116 | + val := reflect.ValueOf(v) | ||
| 117 | + for _, fname := range fields { | ||
| 118 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 119 | + } | ||
| 120 | + ml = append(ml, m) | ||
| 121 | + } | ||
| 122 | + } | ||
| 123 | + return ml, nil | ||
| 124 | + } | ||
| 125 | + return nil, err | ||
| 126 | +} | ||
| 127 | + | ||
| 128 | +// UpdateBulletinQuestion updates BulletinQuestion by Id and returns error if | ||
| 129 | +// the record to be updated doesn't exist | ||
| 130 | +func UpdateBulletinQuestionById(m *BulletinQuestion) (err error) { | ||
| 131 | + o := orm.NewOrm() | ||
| 132 | + v := BulletinQuestion{Id: m.Id} | ||
| 133 | + // ascertain id exists in the database | ||
| 134 | + if err = o.Read(&v); err == nil { | ||
| 135 | + var num int64 | ||
| 136 | + if num, err = o.Update(m); err == nil { | ||
| 137 | + fmt.Println("Number of records updated in database:", num) | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + return | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +// DeleteBulletinQuestion deletes BulletinQuestion by Id and returns error if | ||
| 144 | +// the record to be deleted doesn't exist | ||
| 145 | +func DeleteBulletinQuestion(id int) (err error) { | ||
| 146 | + o := orm.NewOrm() | ||
| 147 | + v := BulletinQuestion{Id: id} | ||
| 148 | + // ascertain id exists in the database | ||
| 149 | + if err = o.Read(&v); err == nil { | ||
| 150 | + var num int64 | ||
| 151 | + if num, err = o.Delete(&BulletinQuestion{Id: id}); err == nil { | ||
| 152 | + fmt.Println("Number of records deleted in database:", num) | ||
| 153 | + } | ||
| 154 | + } | ||
| 155 | + return | ||
| 156 | +} |
models/bulletin_question_answer.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type BulletinQuestionAnswer struct { | ||
| 14 | + Id int `orm:"column(id);auto"` | ||
| 15 | + Answer string `orm:"column(answer);null" description:"答案"` | ||
| 16 | + BulletinId int `orm:"column(bulletin_id);null" description:"公告id"` | ||
| 17 | + BulletinQuestionId int `orm:"column(bulletin_question_id);null" description:"公告问题id"` | ||
| 18 | + Uid int64 `orm:"column(uid);null" description:"用户id"` | ||
| 19 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);null" description:"创建时间"` | ||
| 20 | + UpdateTime time.Time `orm:"column(updateTime);type(timestamp);null" description:"更新时间"` | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func (t *BulletinQuestionAnswer) TableName() string { | ||
| 24 | + return "bulletin_question_answer" | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +func init() { | ||
| 28 | + orm.RegisterModel(new(BulletinQuestionAnswer)) | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +// AddBulletinQuestionAnswer insert a new BulletinQuestionAnswer into database and returns | ||
| 32 | +// last inserted Id on success. | ||
| 33 | +func AddBulletinQuestionAnswer(m *BulletinQuestionAnswer) (id int64, err error) { | ||
| 34 | + o := orm.NewOrm() | ||
| 35 | + id, err = o.Insert(m) | ||
| 36 | + return | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +// GetBulletinQuestionAnswerById retrieves BulletinQuestionAnswer by Id. Returns error if | ||
| 40 | +// Id doesn't exist | ||
| 41 | +func GetBulletinQuestionAnswerById(id int) (v *BulletinQuestionAnswer, err error) { | ||
| 42 | + o := orm.NewOrm() | ||
| 43 | + v = &BulletinQuestionAnswer{Id: id} | ||
| 44 | + if err = o.Read(v); err == nil { | ||
| 45 | + return v, nil | ||
| 46 | + } | ||
| 47 | + return nil, err | ||
| 48 | +} | ||
| 49 | + | ||
| 50 | +// GetAllBulletinQuestionAnswer retrieves all BulletinQuestionAnswer matches certain condition. Returns empty list if | ||
| 51 | +// no records exist | ||
| 52 | +func GetAllBulletinQuestionAnswer(query map[string]string, fields []string, sortby []string, order []string, | ||
| 53 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 54 | + o := orm.NewOrm() | ||
| 55 | + qs := o.QueryTable(new(BulletinQuestionAnswer)) | ||
| 56 | + // query k=v | ||
| 57 | + for k, v := range query { | ||
| 58 | + // rewrite dot-notation to Object__Attribute | ||
| 59 | + k = strings.Replace(k, ".", "__", -1) | ||
| 60 | + if strings.Contains(k, "isnull") { | ||
| 61 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 62 | + } else { | ||
| 63 | + qs = qs.Filter(k, v) | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + // order by: | ||
| 67 | + var sortFields []string | ||
| 68 | + if len(sortby) != 0 { | ||
| 69 | + if len(sortby) == len(order) { | ||
| 70 | + // 1) for each sort field, there is an associated order | ||
| 71 | + for i, v := range sortby { | ||
| 72 | + orderby := "" | ||
| 73 | + if order[i] == "desc" { | ||
| 74 | + orderby = "-" + v | ||
| 75 | + } else if order[i] == "asc" { | ||
| 76 | + orderby = v | ||
| 77 | + } else { | ||
| 78 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 79 | + } | ||
| 80 | + sortFields = append(sortFields, orderby) | ||
| 81 | + } | ||
| 82 | + qs = qs.OrderBy(sortFields...) | ||
| 83 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 84 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 85 | + for _, v := range sortby { | ||
| 86 | + orderby := "" | ||
| 87 | + if order[0] == "desc" { | ||
| 88 | + orderby = "-" + v | ||
| 89 | + } else if order[0] == "asc" { | ||
| 90 | + orderby = v | ||
| 91 | + } else { | ||
| 92 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 93 | + } | ||
| 94 | + sortFields = append(sortFields, orderby) | ||
| 95 | + } | ||
| 96 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 97 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 98 | + } | ||
| 99 | + } else { | ||
| 100 | + if len(order) != 0 { | ||
| 101 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + var l []BulletinQuestionAnswer | ||
| 106 | + qs = qs.OrderBy(sortFields...) | ||
| 107 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 108 | + if len(fields) == 0 { | ||
| 109 | + for _, v := range l { | ||
| 110 | + ml = append(ml, v) | ||
| 111 | + } | ||
| 112 | + } else { | ||
| 113 | + // trim unused fields | ||
| 114 | + for _, v := range l { | ||
| 115 | + m := make(map[string]interface{}) | ||
| 116 | + val := reflect.ValueOf(v) | ||
| 117 | + for _, fname := range fields { | ||
| 118 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 119 | + } | ||
| 120 | + ml = append(ml, m) | ||
| 121 | + } | ||
| 122 | + } | ||
| 123 | + return ml, nil | ||
| 124 | + } | ||
| 125 | + return nil, err | ||
| 126 | +} | ||
| 127 | + | ||
| 128 | +// UpdateBulletinQuestionAnswer updates BulletinQuestionAnswer by Id and returns error if | ||
| 129 | +// the record to be updated doesn't exist | ||
| 130 | +func UpdateBulletinQuestionAnswerById(m *BulletinQuestionAnswer) (err error) { | ||
| 131 | + o := orm.NewOrm() | ||
| 132 | + v := BulletinQuestionAnswer{Id: m.Id} | ||
| 133 | + // ascertain id exists in the database | ||
| 134 | + if err = o.Read(&v); err == nil { | ||
| 135 | + var num int64 | ||
| 136 | + if num, err = o.Update(m); err == nil { | ||
| 137 | + fmt.Println("Number of records updated in database:", num) | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + return | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +// DeleteBulletinQuestionAnswer deletes BulletinQuestionAnswer by Id and returns error if | ||
| 144 | +// the record to be deleted doesn't exist | ||
| 145 | +func DeleteBulletinQuestionAnswer(id int) (err error) { | ||
| 146 | + o := orm.NewOrm() | ||
| 147 | + v := BulletinQuestionAnswer{Id: id} | ||
| 148 | + // ascertain id exists in the database | ||
| 149 | + if err = o.Read(&v); err == nil { | ||
| 150 | + var num int64 | ||
| 151 | + if num, err = o.Delete(&BulletinQuestionAnswer{Id: id}); err == nil { | ||
| 152 | + fmt.Println("Number of records deleted in database:", num) | ||
| 153 | + } | ||
| 154 | + } | ||
| 155 | + return | ||
| 156 | +} |
models/cfg_app_version.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type CfgAppVersion struct { | ||
| 14 | + Id int `orm:"column(id);auto"` | ||
| 15 | + DeviceType int8 `orm:"column(device_type);null" description:"设备类型 (0 ios 1android)"` | ||
| 16 | + VersionName string `orm:"column(version_name);size(255)" description:"版本名"` | ||
| 17 | + VersionNo int `orm:"column(version_no)" description:"版本号"` | ||
| 18 | + VersionState int8 `orm:"column(version_state)" description:"版本状态(0正常 1危险)"` | ||
| 19 | + Title string `orm:"column(title);size(255)" description:"版本标题"` | ||
| 20 | + Content string `orm:"column(content);size(500)" description:"更新的内容"` | ||
| 21 | + DownloadPage string `orm:"column(download_page);size(255);null" description:"下载页"` | ||
| 22 | + DownloadFile string `orm:"column(download_file);size(255)" description:"文件下载页"` | ||
| 23 | + CreateTime time.Time `orm:"column(create_time);type(timestamp);null;auto_now"` | ||
| 24 | + Enabled int8 `orm:"column(enabled);null" description:"是否有效"` | ||
| 25 | + AdminId int `orm:"column(admin_id)" description:"操作人员"` | ||
| 26 | + UpdateTime time.Time `orm:"column(update_time);type(timestamp);auto_now_add" description:"更新时间"` | ||
| 27 | + Channel string `orm:"column(channel);size(255)" description:"当前渠道 0_AppStore、1_fir平台、2_华为、3_小米、4_魅族、5_oppo、6_vivo、7_360、8_百度、9_应用宝、10_其他(使用应用宝地址)"` | ||
| 28 | + Type int8 `orm:"column(type);null" description:"0为手机 1为平板 终端类型"` | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +func (t *CfgAppVersion) TableName() string { | ||
| 32 | + return "cfg_app_version" | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +func init() { | ||
| 36 | + orm.RegisterModel(new(CfgAppVersion)) | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +// AddCfgAppVersion insert a new CfgAppVersion into database and returns | ||
| 40 | +// last inserted Id on success. | ||
| 41 | +func AddCfgAppVersion(m *CfgAppVersion) (id int64, err error) { | ||
| 42 | + o := orm.NewOrm() | ||
| 43 | + id, err = o.Insert(m) | ||
| 44 | + return | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +// GetCfgAppVersionById retrieves CfgAppVersion by Id. Returns error if | ||
| 48 | +// Id doesn't exist | ||
| 49 | +func GetCfgAppVersionById(id int) (v *CfgAppVersion, err error) { | ||
| 50 | + o := orm.NewOrm() | ||
| 51 | + v = &CfgAppVersion{Id: id} | ||
| 52 | + if err = o.Read(v); err == nil { | ||
| 53 | + return v, nil | ||
| 54 | + } | ||
| 55 | + return nil, err | ||
| 56 | +} | ||
| 57 | + | ||
| 58 | +// GetAllCfgAppVersion retrieves all CfgAppVersion matches certain condition. Returns empty list if | ||
| 59 | +// no records exist | ||
| 60 | +func GetAllCfgAppVersion(query map[string]string, fields []string, sortby []string, order []string, | ||
| 61 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 62 | + o := orm.NewOrm() | ||
| 63 | + qs := o.QueryTable(new(CfgAppVersion)) | ||
| 64 | + // query k=v | ||
| 65 | + for k, v := range query { | ||
| 66 | + // rewrite dot-notation to Object__Attribute | ||
| 67 | + k = strings.Replace(k, ".", "__", -1) | ||
| 68 | + if strings.Contains(k, "isnull") { | ||
| 69 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 70 | + } else { | ||
| 71 | + qs = qs.Filter(k, v) | ||
| 72 | + } | ||
| 73 | + } | ||
| 74 | + // order by: | ||
| 75 | + var sortFields []string | ||
| 76 | + if len(sortby) != 0 { | ||
| 77 | + if len(sortby) == len(order) { | ||
| 78 | + // 1) for each sort field, there is an associated order | ||
| 79 | + for i, v := range sortby { | ||
| 80 | + orderby := "" | ||
| 81 | + if order[i] == "desc" { | ||
| 82 | + orderby = "-" + v | ||
| 83 | + } else if order[i] == "asc" { | ||
| 84 | + orderby = v | ||
| 85 | + } else { | ||
| 86 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 87 | + } | ||
| 88 | + sortFields = append(sortFields, orderby) | ||
| 89 | + } | ||
| 90 | + qs = qs.OrderBy(sortFields...) | ||
| 91 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 92 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 93 | + for _, v := range sortby { | ||
| 94 | + orderby := "" | ||
| 95 | + if order[0] == "desc" { | ||
| 96 | + orderby = "-" + v | ||
| 97 | + } else if order[0] == "asc" { | ||
| 98 | + orderby = v | ||
| 99 | + } else { | ||
| 100 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 101 | + } | ||
| 102 | + sortFields = append(sortFields, orderby) | ||
| 103 | + } | ||
| 104 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 105 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 106 | + } | ||
| 107 | + } else { | ||
| 108 | + if len(order) != 0 { | ||
| 109 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 110 | + } | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + var l []CfgAppVersion | ||
| 114 | + qs = qs.OrderBy(sortFields...) | ||
| 115 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 116 | + if len(fields) == 0 { | ||
| 117 | + for _, v := range l { | ||
| 118 | + ml = append(ml, v) | ||
| 119 | + } | ||
| 120 | + } else { | ||
| 121 | + // trim unused fields | ||
| 122 | + for _, v := range l { | ||
| 123 | + m := make(map[string]interface{}) | ||
| 124 | + val := reflect.ValueOf(v) | ||
| 125 | + for _, fname := range fields { | ||
| 126 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 127 | + } | ||
| 128 | + ml = append(ml, m) | ||
| 129 | + } | ||
| 130 | + } | ||
| 131 | + return ml, nil | ||
| 132 | + } | ||
| 133 | + return nil, err | ||
| 134 | +} | ||
| 135 | + | ||
| 136 | +// UpdateCfgAppVersion updates CfgAppVersion by Id and returns error if | ||
| 137 | +// the record to be updated doesn't exist | ||
| 138 | +func UpdateCfgAppVersionById(m *CfgAppVersion) (err error) { | ||
| 139 | + o := orm.NewOrm() | ||
| 140 | + v := CfgAppVersion{Id: m.Id} | ||
| 141 | + // ascertain id exists in the database | ||
| 142 | + if err = o.Read(&v); err == nil { | ||
| 143 | + var num int64 | ||
| 144 | + if num, err = o.Update(m); err == nil { | ||
| 145 | + fmt.Println("Number of records updated in database:", num) | ||
| 146 | + } | ||
| 147 | + } | ||
| 148 | + return | ||
| 149 | +} | ||
| 150 | + | ||
| 151 | +// DeleteCfgAppVersion deletes CfgAppVersion by Id and returns error if | ||
| 152 | +// the record to be deleted doesn't exist | ||
| 153 | +func DeleteCfgAppVersion(id int) (err error) { | ||
| 154 | + o := orm.NewOrm() | ||
| 155 | + v := CfgAppVersion{Id: id} | ||
| 156 | + // ascertain id exists in the database | ||
| 157 | + if err = o.Read(&v); err == nil { | ||
| 158 | + var num int64 | ||
| 159 | + if num, err = o.Delete(&CfgAppVersion{Id: id}); err == nil { | ||
| 160 | + fmt.Println("Number of records deleted in database:", num) | ||
| 161 | + } | ||
| 162 | + } | ||
| 163 | + return | ||
| 164 | +} |
models/cfg_attr.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type CfgAttr struct { | ||
| 14 | + Id int `orm:"column(id);auto" description:"主键ID"` | ||
| 15 | + CompanyId int `orm:"column(company_id)" description:"公司Id"` | ||
| 16 | + Name string `orm:"column(name);size(200)" description:"名称"` | ||
| 17 | + Sort uint `orm:"column(sort)" description:"排序"` | ||
| 18 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add" description:"创建时间"` | ||
| 19 | + Enabled int `orm:"column(enabled)"` | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +func (t *CfgAttr) TableName() string { | ||
| 23 | + return "cfg_attr" | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +func init() { | ||
| 27 | + orm.RegisterModel(new(CfgAttr)) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +// AddCfgAttr insert a new CfgAttr into database and returns | ||
| 31 | +// last inserted Id on success. | ||
| 32 | +func AddCfgAttr(m *CfgAttr) (id int64, err error) { | ||
| 33 | + o := orm.NewOrm() | ||
| 34 | + id, err = o.Insert(m) | ||
| 35 | + return | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +// GetCfgAttrById retrieves CfgAttr by Id. Returns error if | ||
| 39 | +// Id doesn't exist | ||
| 40 | +func GetCfgAttrById(id int) (v *CfgAttr, err error) { | ||
| 41 | + o := orm.NewOrm() | ||
| 42 | + v = &CfgAttr{Id: id} | ||
| 43 | + if err = o.Read(v); err == nil { | ||
| 44 | + return v, nil | ||
| 45 | + } | ||
| 46 | + return nil, err | ||
| 47 | +} | ||
| 48 | + | ||
| 49 | +// GetAllCfgAttr retrieves all CfgAttr matches certain condition. Returns empty list if | ||
| 50 | +// no records exist | ||
| 51 | +func GetAllCfgAttr(query map[string]string, fields []string, sortby []string, order []string, | ||
| 52 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 53 | + o := orm.NewOrm() | ||
| 54 | + qs := o.QueryTable(new(CfgAttr)) | ||
| 55 | + // query k=v | ||
| 56 | + for k, v := range query { | ||
| 57 | + // rewrite dot-notation to Object__Attribute | ||
| 58 | + k = strings.Replace(k, ".", "__", -1) | ||
| 59 | + if strings.Contains(k, "isnull") { | ||
| 60 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 61 | + } else { | ||
| 62 | + qs = qs.Filter(k, v) | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + // order by: | ||
| 66 | + var sortFields []string | ||
| 67 | + if len(sortby) != 0 { | ||
| 68 | + if len(sortby) == len(order) { | ||
| 69 | + // 1) for each sort field, there is an associated order | ||
| 70 | + for i, v := range sortby { | ||
| 71 | + orderby := "" | ||
| 72 | + if order[i] == "desc" { | ||
| 73 | + orderby = "-" + v | ||
| 74 | + } else if order[i] == "asc" { | ||
| 75 | + orderby = v | ||
| 76 | + } else { | ||
| 77 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 78 | + } | ||
| 79 | + sortFields = append(sortFields, orderby) | ||
| 80 | + } | ||
| 81 | + qs = qs.OrderBy(sortFields...) | ||
| 82 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 83 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 84 | + for _, v := range sortby { | ||
| 85 | + orderby := "" | ||
| 86 | + if order[0] == "desc" { | ||
| 87 | + orderby = "-" + v | ||
| 88 | + } else if order[0] == "asc" { | ||
| 89 | + orderby = v | ||
| 90 | + } else { | ||
| 91 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 92 | + } | ||
| 93 | + sortFields = append(sortFields, orderby) | ||
| 94 | + } | ||
| 95 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 96 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 97 | + } | ||
| 98 | + } else { | ||
| 99 | + if len(order) != 0 { | ||
| 100 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 101 | + } | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + var l []CfgAttr | ||
| 105 | + qs = qs.OrderBy(sortFields...) | ||
| 106 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 107 | + if len(fields) == 0 { | ||
| 108 | + for _, v := range l { | ||
| 109 | + ml = append(ml, v) | ||
| 110 | + } | ||
| 111 | + } else { | ||
| 112 | + // trim unused fields | ||
| 113 | + for _, v := range l { | ||
| 114 | + m := make(map[string]interface{}) | ||
| 115 | + val := reflect.ValueOf(v) | ||
| 116 | + for _, fname := range fields { | ||
| 117 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 118 | + } | ||
| 119 | + ml = append(ml, m) | ||
| 120 | + } | ||
| 121 | + } | ||
| 122 | + return ml, nil | ||
| 123 | + } | ||
| 124 | + return nil, err | ||
| 125 | +} | ||
| 126 | + | ||
| 127 | +// UpdateCfgAttr updates CfgAttr by Id and returns error if | ||
| 128 | +// the record to be updated doesn't exist | ||
| 129 | +func UpdateCfgAttrById(m *CfgAttr) (err error) { | ||
| 130 | + o := orm.NewOrm() | ||
| 131 | + v := CfgAttr{Id: m.Id} | ||
| 132 | + // ascertain id exists in the database | ||
| 133 | + if err = o.Read(&v); err == nil { | ||
| 134 | + var num int64 | ||
| 135 | + if num, err = o.Update(m); err == nil { | ||
| 136 | + fmt.Println("Number of records updated in database:", num) | ||
| 137 | + } | ||
| 138 | + } | ||
| 139 | + return | ||
| 140 | +} | ||
| 141 | + | ||
| 142 | +// DeleteCfgAttr deletes CfgAttr by Id and returns error if | ||
| 143 | +// the record to be deleted doesn't exist | ||
| 144 | +func DeleteCfgAttr(id int) (err error) { | ||
| 145 | + o := orm.NewOrm() | ||
| 146 | + v := CfgAttr{Id: id} | ||
| 147 | + // ascertain id exists in the database | ||
| 148 | + if err = o.Read(&v); err == nil { | ||
| 149 | + var num int64 | ||
| 150 | + if num, err = o.Delete(&CfgAttr{Id: id}); err == nil { | ||
| 151 | + fmt.Println("Number of records deleted in database:", num) | ||
| 152 | + } | ||
| 153 | + } | ||
| 154 | + return | ||
| 155 | +} |
models/cfg_client.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type CfgClient struct { | ||
| 14 | + Id int `orm:"column(id);auto" description:"主键ID"` | ||
| 15 | + ClientId string `orm:"column(client_id);size(32)" description:"客户端ID"` | ||
| 16 | + ClientSecret string `orm:"column(client_secret);size(128);null" description:"客户端密钥"` | ||
| 17 | + CreateTime time.Time `orm:"column(create_time);type(timestamp);auto_now" description:"创建时间"` | ||
| 18 | + Enabled int8 `orm:"column(enabled)" description:"是否有效"` | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +func (t *CfgClient) TableName() string { | ||
| 22 | + return "cfg_client" | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +func init() { | ||
| 26 | + orm.RegisterModel(new(CfgClient)) | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +// AddCfgClient insert a new CfgClient into database and returns | ||
| 30 | +// last inserted Id on success. | ||
| 31 | +func AddCfgClient(m *CfgClient) (id int64, err error) { | ||
| 32 | + o := orm.NewOrm() | ||
| 33 | + id, err = o.Insert(m) | ||
| 34 | + return | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +// GetCfgClientById retrieves CfgClient by Id. Returns error if | ||
| 38 | +// Id doesn't exist | ||
| 39 | +func GetCfgClientById(id int) (v *CfgClient, err error) { | ||
| 40 | + o := orm.NewOrm() | ||
| 41 | + v = &CfgClient{Id: id} | ||
| 42 | + if err = o.Read(v); err == nil { | ||
| 43 | + return v, nil | ||
| 44 | + } | ||
| 45 | + return nil, err | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +// GetAllCfgClient retrieves all CfgClient matches certain condition. Returns empty list if | ||
| 49 | +// no records exist | ||
| 50 | +func GetAllCfgClient(query map[string]string, fields []string, sortby []string, order []string, | ||
| 51 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 52 | + o := orm.NewOrm() | ||
| 53 | + qs := o.QueryTable(new(CfgClient)) | ||
| 54 | + // query k=v | ||
| 55 | + for k, v := range query { | ||
| 56 | + // rewrite dot-notation to Object__Attribute | ||
| 57 | + k = strings.Replace(k, ".", "__", -1) | ||
| 58 | + if strings.Contains(k, "isnull") { | ||
| 59 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 60 | + } else { | ||
| 61 | + qs = qs.Filter(k, v) | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + // order by: | ||
| 65 | + var sortFields []string | ||
| 66 | + if len(sortby) != 0 { | ||
| 67 | + if len(sortby) == len(order) { | ||
| 68 | + // 1) for each sort field, there is an associated order | ||
| 69 | + for i, v := range sortby { | ||
| 70 | + orderby := "" | ||
| 71 | + if order[i] == "desc" { | ||
| 72 | + orderby = "-" + v | ||
| 73 | + } else if order[i] == "asc" { | ||
| 74 | + orderby = v | ||
| 75 | + } else { | ||
| 76 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 77 | + } | ||
| 78 | + sortFields = append(sortFields, orderby) | ||
| 79 | + } | ||
| 80 | + qs = qs.OrderBy(sortFields...) | ||
| 81 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 82 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 83 | + for _, v := range sortby { | ||
| 84 | + orderby := "" | ||
| 85 | + if order[0] == "desc" { | ||
| 86 | + orderby = "-" + v | ||
| 87 | + } else if order[0] == "asc" { | ||
| 88 | + orderby = v | ||
| 89 | + } else { | ||
| 90 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 91 | + } | ||
| 92 | + sortFields = append(sortFields, orderby) | ||
| 93 | + } | ||
| 94 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 95 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 96 | + } | ||
| 97 | + } else { | ||
| 98 | + if len(order) != 0 { | ||
| 99 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + var l []CfgClient | ||
| 104 | + qs = qs.OrderBy(sortFields...) | ||
| 105 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 106 | + if len(fields) == 0 { | ||
| 107 | + for _, v := range l { | ||
| 108 | + ml = append(ml, v) | ||
| 109 | + } | ||
| 110 | + } else { | ||
| 111 | + // trim unused fields | ||
| 112 | + for _, v := range l { | ||
| 113 | + m := make(map[string]interface{}) | ||
| 114 | + val := reflect.ValueOf(v) | ||
| 115 | + for _, fname := range fields { | ||
| 116 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 117 | + } | ||
| 118 | + ml = append(ml, m) | ||
| 119 | + } | ||
| 120 | + } | ||
| 121 | + return ml, nil | ||
| 122 | + } | ||
| 123 | + return nil, err | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | +// UpdateCfgClient updates CfgClient by Id and returns error if | ||
| 127 | +// the record to be updated doesn't exist | ||
| 128 | +func UpdateCfgClientById(m *CfgClient) (err error) { | ||
| 129 | + o := orm.NewOrm() | ||
| 130 | + v := CfgClient{Id: m.Id} | ||
| 131 | + // ascertain id exists in the database | ||
| 132 | + if err = o.Read(&v); err == nil { | ||
| 133 | + var num int64 | ||
| 134 | + if num, err = o.Update(m); err == nil { | ||
| 135 | + fmt.Println("Number of records updated in database:", num) | ||
| 136 | + } | ||
| 137 | + } | ||
| 138 | + return | ||
| 139 | +} | ||
| 140 | + | ||
| 141 | +// DeleteCfgClient deletes CfgClient by Id and returns error if | ||
| 142 | +// the record to be deleted doesn't exist | ||
| 143 | +func DeleteCfgClient(id int) (err error) { | ||
| 144 | + o := orm.NewOrm() | ||
| 145 | + v := CfgClient{Id: id} | ||
| 146 | + // ascertain id exists in the database | ||
| 147 | + if err = o.Read(&v); err == nil { | ||
| 148 | + var num int64 | ||
| 149 | + if num, err = o.Delete(&CfgClient{Id: id}); err == nil { | ||
| 150 | + fmt.Println("Number of records deleted in database:", num) | ||
| 151 | + } | ||
| 152 | + } | ||
| 153 | + return | ||
| 154 | +} |
models/cfg_msg.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type CfgMsg struct { | ||
| 14 | + Id int `orm:"column(id);pk" description:"主键ID"` | ||
| 15 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add" description:"创建时间"` | ||
| 16 | + Title string `orm:"column(title);size(100)" description:"消息标题"` | ||
| 17 | + Type int `orm:"column(type)" description:"1为某某某代表解决 2为某某某提出 3为某某某申请解决"` | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func (t *CfgMsg) TableName() string { | ||
| 21 | + return "cfg_msg" | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func init() { | ||
| 25 | + orm.RegisterModel(new(CfgMsg)) | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +// AddCfgMsg insert a new CfgMsg into database and returns | ||
| 29 | +// last inserted Id on success. | ||
| 30 | +func AddCfgMsg(m *CfgMsg) (id int64, err error) { | ||
| 31 | + o := orm.NewOrm() | ||
| 32 | + id, err = o.Insert(m) | ||
| 33 | + return | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +// GetCfgMsgById retrieves CfgMsg by Id. Returns error if | ||
| 37 | +// Id doesn't exist | ||
| 38 | +func GetCfgMsgById(id int) (v *CfgMsg, err error) { | ||
| 39 | + o := orm.NewOrm() | ||
| 40 | + v = &CfgMsg{Id: id} | ||
| 41 | + if err = o.Read(v); err == nil { | ||
| 42 | + return v, nil | ||
| 43 | + } | ||
| 44 | + return nil, err | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +// GetAllCfgMsg retrieves all CfgMsg matches certain condition. Returns empty list if | ||
| 48 | +// no records exist | ||
| 49 | +func GetAllCfgMsg(query map[string]string, fields []string, sortby []string, order []string, | ||
| 50 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 51 | + o := orm.NewOrm() | ||
| 52 | + qs := o.QueryTable(new(CfgMsg)) | ||
| 53 | + // query k=v | ||
| 54 | + for k, v := range query { | ||
| 55 | + // rewrite dot-notation to Object__Attribute | ||
| 56 | + k = strings.Replace(k, ".", "__", -1) | ||
| 57 | + if strings.Contains(k, "isnull") { | ||
| 58 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 59 | + } else { | ||
| 60 | + qs = qs.Filter(k, v) | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | + // order by: | ||
| 64 | + var sortFields []string | ||
| 65 | + if len(sortby) != 0 { | ||
| 66 | + if len(sortby) == len(order) { | ||
| 67 | + // 1) for each sort field, there is an associated order | ||
| 68 | + for i, v := range sortby { | ||
| 69 | + orderby := "" | ||
| 70 | + if order[i] == "desc" { | ||
| 71 | + orderby = "-" + v | ||
| 72 | + } else if order[i] == "asc" { | ||
| 73 | + orderby = v | ||
| 74 | + } else { | ||
| 75 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 76 | + } | ||
| 77 | + sortFields = append(sortFields, orderby) | ||
| 78 | + } | ||
| 79 | + qs = qs.OrderBy(sortFields...) | ||
| 80 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 81 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 82 | + for _, v := range sortby { | ||
| 83 | + orderby := "" | ||
| 84 | + if order[0] == "desc" { | ||
| 85 | + orderby = "-" + v | ||
| 86 | + } else if order[0] == "asc" { | ||
| 87 | + orderby = v | ||
| 88 | + } else { | ||
| 89 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 90 | + } | ||
| 91 | + sortFields = append(sortFields, orderby) | ||
| 92 | + } | ||
| 93 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 94 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 95 | + } | ||
| 96 | + } else { | ||
| 97 | + if len(order) != 0 { | ||
| 98 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + var l []CfgMsg | ||
| 103 | + qs = qs.OrderBy(sortFields...) | ||
| 104 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 105 | + if len(fields) == 0 { | ||
| 106 | + for _, v := range l { | ||
| 107 | + ml = append(ml, v) | ||
| 108 | + } | ||
| 109 | + } else { | ||
| 110 | + // trim unused fields | ||
| 111 | + for _, v := range l { | ||
| 112 | + m := make(map[string]interface{}) | ||
| 113 | + val := reflect.ValueOf(v) | ||
| 114 | + for _, fname := range fields { | ||
| 115 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 116 | + } | ||
| 117 | + ml = append(ml, m) | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | + return ml, nil | ||
| 121 | + } | ||
| 122 | + return nil, err | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | +// UpdateCfgMsg updates CfgMsg by Id and returns error if | ||
| 126 | +// the record to be updated doesn't exist | ||
| 127 | +func UpdateCfgMsgById(m *CfgMsg) (err error) { | ||
| 128 | + o := orm.NewOrm() | ||
| 129 | + v := CfgMsg{Id: m.Id} | ||
| 130 | + // ascertain id exists in the database | ||
| 131 | + if err = o.Read(&v); err == nil { | ||
| 132 | + var num int64 | ||
| 133 | + if num, err = o.Update(m); err == nil { | ||
| 134 | + fmt.Println("Number of records updated in database:", num) | ||
| 135 | + } | ||
| 136 | + } | ||
| 137 | + return | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +// DeleteCfgMsg deletes CfgMsg by Id and returns error if | ||
| 141 | +// the record to be deleted doesn't exist | ||
| 142 | +func DeleteCfgMsg(id int) (err error) { | ||
| 143 | + o := orm.NewOrm() | ||
| 144 | + v := CfgMsg{Id: id} | ||
| 145 | + // ascertain id exists in the database | ||
| 146 | + if err = o.Read(&v); err == nil { | ||
| 147 | + var num int64 | ||
| 148 | + if num, err = o.Delete(&CfgMsg{Id: id}); err == nil { | ||
| 149 | + fmt.Println("Number of records deleted in database:", num) | ||
| 150 | + } | ||
| 151 | + } | ||
| 152 | + return | ||
| 153 | +} |
models/cfg_qtype.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type CfgQtype struct { | ||
| 14 | + Id int `orm:"column(id);auto" description:"主键ID"` | ||
| 15 | + CompanyId int `orm:"column(company_id)" description:"公司Id"` | ||
| 16 | + Name string `orm:"column(name);size(200)" description:"消息标题"` | ||
| 17 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add" description:"创建时间"` | ||
| 18 | + Enabled int `orm:"column(enabled)"` | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +func (t *CfgQtype) TableName() string { | ||
| 22 | + return "cfg_qtype" | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +func init() { | ||
| 26 | + orm.RegisterModel(new(CfgQtype)) | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +// AddCfgQtype insert a new CfgQtype into database and returns | ||
| 30 | +// last inserted Id on success. | ||
| 31 | +func AddCfgQtype(m *CfgQtype) (id int64, err error) { | ||
| 32 | + o := orm.NewOrm() | ||
| 33 | + id, err = o.Insert(m) | ||
| 34 | + return | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +// GetCfgQtypeById retrieves CfgQtype by Id. Returns error if | ||
| 38 | +// Id doesn't exist | ||
| 39 | +func GetCfgQtypeById(id int) (v *CfgQtype, err error) { | ||
| 40 | + o := orm.NewOrm() | ||
| 41 | + v = &CfgQtype{Id: id} | ||
| 42 | + if err = o.Read(v); err == nil { | ||
| 43 | + return v, nil | ||
| 44 | + } | ||
| 45 | + return nil, err | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +// GetAllCfgQtype retrieves all CfgQtype matches certain condition. Returns empty list if | ||
| 49 | +// no records exist | ||
| 50 | +func GetAllCfgQtype(query map[string]string, fields []string, sortby []string, order []string, | ||
| 51 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 52 | + o := orm.NewOrm() | ||
| 53 | + qs := o.QueryTable(new(CfgQtype)) | ||
| 54 | + // query k=v | ||
| 55 | + for k, v := range query { | ||
| 56 | + // rewrite dot-notation to Object__Attribute | ||
| 57 | + k = strings.Replace(k, ".", "__", -1) | ||
| 58 | + if strings.Contains(k, "isnull") { | ||
| 59 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 60 | + } else { | ||
| 61 | + qs = qs.Filter(k, v) | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + // order by: | ||
| 65 | + var sortFields []string | ||
| 66 | + if len(sortby) != 0 { | ||
| 67 | + if len(sortby) == len(order) { | ||
| 68 | + // 1) for each sort field, there is an associated order | ||
| 69 | + for i, v := range sortby { | ||
| 70 | + orderby := "" | ||
| 71 | + if order[i] == "desc" { | ||
| 72 | + orderby = "-" + v | ||
| 73 | + } else if order[i] == "asc" { | ||
| 74 | + orderby = v | ||
| 75 | + } else { | ||
| 76 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 77 | + } | ||
| 78 | + sortFields = append(sortFields, orderby) | ||
| 79 | + } | ||
| 80 | + qs = qs.OrderBy(sortFields...) | ||
| 81 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 82 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 83 | + for _, v := range sortby { | ||
| 84 | + orderby := "" | ||
| 85 | + if order[0] == "desc" { | ||
| 86 | + orderby = "-" + v | ||
| 87 | + } else if order[0] == "asc" { | ||
| 88 | + orderby = v | ||
| 89 | + } else { | ||
| 90 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 91 | + } | ||
| 92 | + sortFields = append(sortFields, orderby) | ||
| 93 | + } | ||
| 94 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 95 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 96 | + } | ||
| 97 | + } else { | ||
| 98 | + if len(order) != 0 { | ||
| 99 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + var l []CfgQtype | ||
| 104 | + qs = qs.OrderBy(sortFields...) | ||
| 105 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 106 | + if len(fields) == 0 { | ||
| 107 | + for _, v := range l { | ||
| 108 | + ml = append(ml, v) | ||
| 109 | + } | ||
| 110 | + } else { | ||
| 111 | + // trim unused fields | ||
| 112 | + for _, v := range l { | ||
| 113 | + m := make(map[string]interface{}) | ||
| 114 | + val := reflect.ValueOf(v) | ||
| 115 | + for _, fname := range fields { | ||
| 116 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 117 | + } | ||
| 118 | + ml = append(ml, m) | ||
| 119 | + } | ||
| 120 | + } | ||
| 121 | + return ml, nil | ||
| 122 | + } | ||
| 123 | + return nil, err | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | +// UpdateCfgQtype updates CfgQtype by Id and returns error if | ||
| 127 | +// the record to be updated doesn't exist | ||
| 128 | +func UpdateCfgQtypeById(m *CfgQtype) (err error) { | ||
| 129 | + o := orm.NewOrm() | ||
| 130 | + v := CfgQtype{Id: m.Id} | ||
| 131 | + // ascertain id exists in the database | ||
| 132 | + if err = o.Read(&v); err == nil { | ||
| 133 | + var num int64 | ||
| 134 | + if num, err = o.Update(m); err == nil { | ||
| 135 | + fmt.Println("Number of records updated in database:", num) | ||
| 136 | + } | ||
| 137 | + } | ||
| 138 | + return | ||
| 139 | +} | ||
| 140 | + | ||
| 141 | +// DeleteCfgQtype deletes CfgQtype by Id and returns error if | ||
| 142 | +// the record to be deleted doesn't exist | ||
| 143 | +func DeleteCfgQtype(id int) (err error) { | ||
| 144 | + o := orm.NewOrm() | ||
| 145 | + v := CfgQtype{Id: id} | ||
| 146 | + // ascertain id exists in the database | ||
| 147 | + if err = o.Read(&v); err == nil { | ||
| 148 | + var num int64 | ||
| 149 | + if num, err = o.Delete(&CfgQtype{Id: id}); err == nil { | ||
| 150 | + fmt.Println("Number of records deleted in database:", num) | ||
| 151 | + } | ||
| 152 | + } | ||
| 153 | + return | ||
| 154 | +} |
models/commend.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type Commend struct { | ||
| 14 | + Id int `orm:"column(cid);pk" description:"主键ID"` | ||
| 15 | + Uid int64 `orm:"column(uid)" description:"用户ID"` | ||
| 16 | + Username string `orm:"column(username);size(255)" description:"用户名"` | ||
| 17 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add" description:"创建时间"` | ||
| 18 | + QuestionTitle string `orm:"column(questionTitle);size(100)" description:"标题"` | ||
| 19 | + QuestionId int64 `orm:"column(questionId);null"` | ||
| 20 | + Way int `orm:"column(way)" description:"0提出问题、1参与解决问题"` | ||
| 21 | + Company string `orm:"column(company);size(50)" description:"是否已读 0未读,1已读"` | ||
| 22 | + CompanyId int `orm:"column(company_id)" description:"公司id"` | ||
| 23 | + Status int8 `orm:"column(status)" description:"状态 1可见 2不可见"` | ||
| 24 | + CommendationTime time.Time `orm:"column(commendation_time);type(date)" description:"表彰时间"` | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +func (t *Commend) TableName() string { | ||
| 28 | + return "commend" | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +func init() { | ||
| 32 | + orm.RegisterModel(new(Commend)) | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +// AddCommend insert a new Commend into database and returns | ||
| 36 | +// last inserted Id on success. | ||
| 37 | +func AddCommend(m *Commend) (id int64, err error) { | ||
| 38 | + o := orm.NewOrm() | ||
| 39 | + id, err = o.Insert(m) | ||
| 40 | + return | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | +// GetCommendById retrieves Commend by Id. Returns error if | ||
| 44 | +// Id doesn't exist | ||
| 45 | +func GetCommendById(id int) (v *Commend, err error) { | ||
| 46 | + o := orm.NewOrm() | ||
| 47 | + v = &Commend{Id: id} | ||
| 48 | + if err = o.Read(v); err == nil { | ||
| 49 | + return v, nil | ||
| 50 | + } | ||
| 51 | + return nil, err | ||
| 52 | +} | ||
| 53 | + | ||
| 54 | +// GetAllCommend retrieves all Commend matches certain condition. Returns empty list if | ||
| 55 | +// no records exist | ||
| 56 | +func GetAllCommend(query map[string]string, fields []string, sortby []string, order []string, | ||
| 57 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 58 | + o := orm.NewOrm() | ||
| 59 | + qs := o.QueryTable(new(Commend)) | ||
| 60 | + // query k=v | ||
| 61 | + for k, v := range query { | ||
| 62 | + // rewrite dot-notation to Object__Attribute | ||
| 63 | + k = strings.Replace(k, ".", "__", -1) | ||
| 64 | + if strings.Contains(k, "isnull") { | ||
| 65 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 66 | + } else { | ||
| 67 | + qs = qs.Filter(k, v) | ||
| 68 | + } | ||
| 69 | + } | ||
| 70 | + // order by: | ||
| 71 | + var sortFields []string | ||
| 72 | + if len(sortby) != 0 { | ||
| 73 | + if len(sortby) == len(order) { | ||
| 74 | + // 1) for each sort field, there is an associated order | ||
| 75 | + for i, v := range sortby { | ||
| 76 | + orderby := "" | ||
| 77 | + if order[i] == "desc" { | ||
| 78 | + orderby = "-" + v | ||
| 79 | + } else if order[i] == "asc" { | ||
| 80 | + orderby = v | ||
| 81 | + } else { | ||
| 82 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 83 | + } | ||
| 84 | + sortFields = append(sortFields, orderby) | ||
| 85 | + } | ||
| 86 | + qs = qs.OrderBy(sortFields...) | ||
| 87 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 88 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 89 | + for _, v := range sortby { | ||
| 90 | + orderby := "" | ||
| 91 | + if order[0] == "desc" { | ||
| 92 | + orderby = "-" + v | ||
| 93 | + } else if order[0] == "asc" { | ||
| 94 | + orderby = v | ||
| 95 | + } else { | ||
| 96 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 97 | + } | ||
| 98 | + sortFields = append(sortFields, orderby) | ||
| 99 | + } | ||
| 100 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 101 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 102 | + } | ||
| 103 | + } else { | ||
| 104 | + if len(order) != 0 { | ||
| 105 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 106 | + } | ||
| 107 | + } | ||
| 108 | + | ||
| 109 | + var l []Commend | ||
| 110 | + qs = qs.OrderBy(sortFields...) | ||
| 111 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 112 | + if len(fields) == 0 { | ||
| 113 | + for _, v := range l { | ||
| 114 | + ml = append(ml, v) | ||
| 115 | + } | ||
| 116 | + } else { | ||
| 117 | + // trim unused fields | ||
| 118 | + for _, v := range l { | ||
| 119 | + m := make(map[string]interface{}) | ||
| 120 | + val := reflect.ValueOf(v) | ||
| 121 | + for _, fname := range fields { | ||
| 122 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 123 | + } | ||
| 124 | + ml = append(ml, m) | ||
| 125 | + } | ||
| 126 | + } | ||
| 127 | + return ml, nil | ||
| 128 | + } | ||
| 129 | + return nil, err | ||
| 130 | +} | ||
| 131 | + | ||
| 132 | +// UpdateCommend updates Commend by Id and returns error if | ||
| 133 | +// the record to be updated doesn't exist | ||
| 134 | +func UpdateCommendById(m *Commend) (err error) { | ||
| 135 | + o := orm.NewOrm() | ||
| 136 | + v := Commend{Id: m.Id} | ||
| 137 | + // ascertain id exists in the database | ||
| 138 | + if err = o.Read(&v); err == nil { | ||
| 139 | + var num int64 | ||
| 140 | + if num, err = o.Update(m); err == nil { | ||
| 141 | + fmt.Println("Number of records updated in database:", num) | ||
| 142 | + } | ||
| 143 | + } | ||
| 144 | + return | ||
| 145 | +} | ||
| 146 | + | ||
| 147 | +// DeleteCommend deletes Commend by Id and returns error if | ||
| 148 | +// the record to be deleted doesn't exist | ||
| 149 | +func DeleteCommend(id int) (err error) { | ||
| 150 | + o := orm.NewOrm() | ||
| 151 | + v := Commend{Id: id} | ||
| 152 | + // ascertain id exists in the database | ||
| 153 | + if err = o.Read(&v); err == nil { | ||
| 154 | + var num int64 | ||
| 155 | + if num, err = o.Delete(&Commend{Id: id}); err == nil { | ||
| 156 | + fmt.Println("Number of records deleted in database:", num) | ||
| 157 | + } | ||
| 158 | + } | ||
| 159 | + return | ||
| 160 | +} |
models/comment.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type Comment struct { | ||
| 14 | + Id int `orm:"column(cid);pk"` | ||
| 15 | + Uid int64 `orm:"column(uid);null"` | ||
| 16 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add"` | ||
| 17 | + Content string `orm:"column(content)"` | ||
| 18 | + PageView int `orm:"column(pageView);null" description:"浏览总数"` | ||
| 19 | + CommentTotal int `orm:"column(commentTotal);null" description:"评论总数"` | ||
| 20 | + SympathyTotal int `orm:"column(sympathyTotal)" description:"同感总数"` | ||
| 21 | + Type int `orm:"column(type);null" description:"0问题、1评论、2方案"` | ||
| 22 | + Id_RENAME int64 `orm:"column(id);null" description:"对应的ID"` | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +func (t *Comment) TableName() string { | ||
| 26 | + return "comment" | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +func init() { | ||
| 30 | + orm.RegisterModel(new(Comment)) | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +// AddComment insert a new Comment into database and returns | ||
| 34 | +// last inserted Id on success. | ||
| 35 | +func AddComment(m *Comment) (id int64, err error) { | ||
| 36 | + o := orm.NewOrm() | ||
| 37 | + id, err = o.Insert(m) | ||
| 38 | + return | ||
| 39 | +} | ||
| 40 | + | ||
| 41 | +// GetCommentById retrieves Comment by Id. Returns error if | ||
| 42 | +// Id doesn't exist | ||
| 43 | +func GetCommentById(id int) (v *Comment, err error) { | ||
| 44 | + o := orm.NewOrm() | ||
| 45 | + v = &Comment{Id: id} | ||
| 46 | + if err = o.Read(v); err == nil { | ||
| 47 | + return v, nil | ||
| 48 | + } | ||
| 49 | + return nil, err | ||
| 50 | +} | ||
| 51 | + | ||
| 52 | +// GetAllComment retrieves all Comment matches certain condition. Returns empty list if | ||
| 53 | +// no records exist | ||
| 54 | +func GetAllComment(query map[string]string, fields []string, sortby []string, order []string, | ||
| 55 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 56 | + o := orm.NewOrm() | ||
| 57 | + qs := o.QueryTable(new(Comment)) | ||
| 58 | + // query k=v | ||
| 59 | + for k, v := range query { | ||
| 60 | + // rewrite dot-notation to Object__Attribute | ||
| 61 | + k = strings.Replace(k, ".", "__", -1) | ||
| 62 | + if strings.Contains(k, "isnull") { | ||
| 63 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 64 | + } else { | ||
| 65 | + qs = qs.Filter(k, v) | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | + // order by: | ||
| 69 | + var sortFields []string | ||
| 70 | + if len(sortby) != 0 { | ||
| 71 | + if len(sortby) == len(order) { | ||
| 72 | + // 1) for each sort field, there is an associated order | ||
| 73 | + for i, v := range sortby { | ||
| 74 | + orderby := "" | ||
| 75 | + if order[i] == "desc" { | ||
| 76 | + orderby = "-" + v | ||
| 77 | + } else if order[i] == "asc" { | ||
| 78 | + orderby = v | ||
| 79 | + } else { | ||
| 80 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 81 | + } | ||
| 82 | + sortFields = append(sortFields, orderby) | ||
| 83 | + } | ||
| 84 | + qs = qs.OrderBy(sortFields...) | ||
| 85 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 86 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 87 | + for _, v := range sortby { | ||
| 88 | + orderby := "" | ||
| 89 | + if order[0] == "desc" { | ||
| 90 | + orderby = "-" + v | ||
| 91 | + } else if order[0] == "asc" { | ||
| 92 | + orderby = v | ||
| 93 | + } else { | ||
| 94 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 95 | + } | ||
| 96 | + sortFields = append(sortFields, orderby) | ||
| 97 | + } | ||
| 98 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 99 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 100 | + } | ||
| 101 | + } else { | ||
| 102 | + if len(order) != 0 { | ||
| 103 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 104 | + } | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + var l []Comment | ||
| 108 | + qs = qs.OrderBy(sortFields...) | ||
| 109 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 110 | + if len(fields) == 0 { | ||
| 111 | + for _, v := range l { | ||
| 112 | + ml = append(ml, v) | ||
| 113 | + } | ||
| 114 | + } else { | ||
| 115 | + // trim unused fields | ||
| 116 | + for _, v := range l { | ||
| 117 | + m := make(map[string]interface{}) | ||
| 118 | + val := reflect.ValueOf(v) | ||
| 119 | + for _, fname := range fields { | ||
| 120 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 121 | + } | ||
| 122 | + ml = append(ml, m) | ||
| 123 | + } | ||
| 124 | + } | ||
| 125 | + return ml, nil | ||
| 126 | + } | ||
| 127 | + return nil, err | ||
| 128 | +} | ||
| 129 | + | ||
| 130 | +// UpdateComment updates Comment by Id and returns error if | ||
| 131 | +// the record to be updated doesn't exist | ||
| 132 | +func UpdateCommentById(m *Comment) (err error) { | ||
| 133 | + o := orm.NewOrm() | ||
| 134 | + v := Comment{Id: m.Id} | ||
| 135 | + // ascertain id exists in the database | ||
| 136 | + if err = o.Read(&v); err == nil { | ||
| 137 | + var num int64 | ||
| 138 | + if num, err = o.Update(m); err == nil { | ||
| 139 | + fmt.Println("Number of records updated in database:", num) | ||
| 140 | + } | ||
| 141 | + } | ||
| 142 | + return | ||
| 143 | +} | ||
| 144 | + | ||
| 145 | +// DeleteComment deletes Comment by Id and returns error if | ||
| 146 | +// the record to be deleted doesn't exist | ||
| 147 | +func DeleteComment(id int) (err error) { | ||
| 148 | + o := orm.NewOrm() | ||
| 149 | + v := Comment{Id: id} | ||
| 150 | + // ascertain id exists in the database | ||
| 151 | + if err = o.Read(&v); err == nil { | ||
| 152 | + var num int64 | ||
| 153 | + if num, err = o.Delete(&Comment{Id: id}); err == nil { | ||
| 154 | + fmt.Println("Number of records deleted in database:", num) | ||
| 155 | + } | ||
| 156 | + } | ||
| 157 | + return | ||
| 158 | +} |
models/companies.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type Companies struct { | ||
| 14 | + Id int `orm:"column(id);auto"` | ||
| 15 | + Name string `orm:"column(name);size(255)"` | ||
| 16 | + Username string `orm:"column(username);size(255)"` | ||
| 17 | + Phone string `orm:"column(phone);size(255)"` | ||
| 18 | + Status uint8 `orm:"column(status)" description:"状态 1启用 2禁用"` | ||
| 19 | + CreateTime time.Time `orm:"column(create_time);type(timestamp);auto_now"` | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +func (t *Companies) TableName() string { | ||
| 23 | + return "companies" | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +func init() { | ||
| 27 | + orm.RegisterModel(new(Companies)) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +// AddCompanies insert a new Companies into database and returns | ||
| 31 | +// last inserted Id on success. | ||
| 32 | +func AddCompanies(m *Companies) (id int64, err error) { | ||
| 33 | + o := orm.NewOrm() | ||
| 34 | + id, err = o.Insert(m) | ||
| 35 | + return | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +// GetCompaniesById retrieves Companies by Id. Returns error if | ||
| 39 | +// Id doesn't exist | ||
| 40 | +func GetCompaniesById(id int) (v *Companies, err error) { | ||
| 41 | + o := orm.NewOrm() | ||
| 42 | + v = &Companies{Id: id} | ||
| 43 | + if err = o.Read(v); err == nil { | ||
| 44 | + return v, nil | ||
| 45 | + } | ||
| 46 | + return nil, err | ||
| 47 | +} | ||
| 48 | + | ||
| 49 | +// GetAllCompanies retrieves all Companies matches certain condition. Returns empty list if | ||
| 50 | +// no records exist | ||
| 51 | +func GetAllCompanies(query map[string]string, fields []string, sortby []string, order []string, | ||
| 52 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 53 | + o := orm.NewOrm() | ||
| 54 | + qs := o.QueryTable(new(Companies)) | ||
| 55 | + // query k=v | ||
| 56 | + for k, v := range query { | ||
| 57 | + // rewrite dot-notation to Object__Attribute | ||
| 58 | + k = strings.Replace(k, ".", "__", -1) | ||
| 59 | + if strings.Contains(k, "isnull") { | ||
| 60 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 61 | + } else { | ||
| 62 | + qs = qs.Filter(k, v) | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + // order by: | ||
| 66 | + var sortFields []string | ||
| 67 | + if len(sortby) != 0 { | ||
| 68 | + if len(sortby) == len(order) { | ||
| 69 | + // 1) for each sort field, there is an associated order | ||
| 70 | + for i, v := range sortby { | ||
| 71 | + orderby := "" | ||
| 72 | + if order[i] == "desc" { | ||
| 73 | + orderby = "-" + v | ||
| 74 | + } else if order[i] == "asc" { | ||
| 75 | + orderby = v | ||
| 76 | + } else { | ||
| 77 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 78 | + } | ||
| 79 | + sortFields = append(sortFields, orderby) | ||
| 80 | + } | ||
| 81 | + qs = qs.OrderBy(sortFields...) | ||
| 82 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 83 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 84 | + for _, v := range sortby { | ||
| 85 | + orderby := "" | ||
| 86 | + if order[0] == "desc" { | ||
| 87 | + orderby = "-" + v | ||
| 88 | + } else if order[0] == "asc" { | ||
| 89 | + orderby = v | ||
| 90 | + } else { | ||
| 91 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 92 | + } | ||
| 93 | + sortFields = append(sortFields, orderby) | ||
| 94 | + } | ||
| 95 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 96 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 97 | + } | ||
| 98 | + } else { | ||
| 99 | + if len(order) != 0 { | ||
| 100 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 101 | + } | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + var l []Companies | ||
| 105 | + qs = qs.OrderBy(sortFields...) | ||
| 106 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 107 | + if len(fields) == 0 { | ||
| 108 | + for _, v := range l { | ||
| 109 | + ml = append(ml, v) | ||
| 110 | + } | ||
| 111 | + } else { | ||
| 112 | + // trim unused fields | ||
| 113 | + for _, v := range l { | ||
| 114 | + m := make(map[string]interface{}) | ||
| 115 | + val := reflect.ValueOf(v) | ||
| 116 | + for _, fname := range fields { | ||
| 117 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 118 | + } | ||
| 119 | + ml = append(ml, m) | ||
| 120 | + } | ||
| 121 | + } | ||
| 122 | + return ml, nil | ||
| 123 | + } | ||
| 124 | + return nil, err | ||
| 125 | +} | ||
| 126 | + | ||
| 127 | +// UpdateCompanies updates Companies by Id and returns error if | ||
| 128 | +// the record to be updated doesn't exist | ||
| 129 | +func UpdateCompaniesById(m *Companies) (err error) { | ||
| 130 | + o := orm.NewOrm() | ||
| 131 | + v := Companies{Id: m.Id} | ||
| 132 | + // ascertain id exists in the database | ||
| 133 | + if err = o.Read(&v); err == nil { | ||
| 134 | + var num int64 | ||
| 135 | + if num, err = o.Update(m); err == nil { | ||
| 136 | + fmt.Println("Number of records updated in database:", num) | ||
| 137 | + } | ||
| 138 | + } | ||
| 139 | + return | ||
| 140 | +} | ||
| 141 | + | ||
| 142 | +// DeleteCompanies deletes Companies by Id and returns error if | ||
| 143 | +// the record to be deleted doesn't exist | ||
| 144 | +func DeleteCompanies(id int) (err error) { | ||
| 145 | + o := orm.NewOrm() | ||
| 146 | + v := Companies{Id: id} | ||
| 147 | + // ascertain id exists in the database | ||
| 148 | + if err = o.Read(&v); err == nil { | ||
| 149 | + var num int64 | ||
| 150 | + if num, err = o.Delete(&Companies{Id: id}); err == nil { | ||
| 151 | + fmt.Println("Number of records deleted in database:", num) | ||
| 152 | + } | ||
| 153 | + } | ||
| 154 | + return | ||
| 155 | +} |
models/departments.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type Departments struct { | ||
| 14 | + Id int `orm:"column(id);auto"` | ||
| 15 | + CompanyId int `orm:"column(company_id)"` | ||
| 16 | + Name string `orm:"column(name);size(255)"` | ||
| 17 | + Username string `orm:"column(username);size(255)"` | ||
| 18 | + Number int `orm:"column(number)"` | ||
| 19 | + CreateTime time.Time `orm:"column(create_time);type(timestamp);auto_now"` | ||
| 20 | + Enabled uint8 `orm:"column(enabled)" description:"状态 1启用 0禁用"` | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func (t *Departments) TableName() string { | ||
| 24 | + return "departments" | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +func init() { | ||
| 28 | + orm.RegisterModel(new(Departments)) | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +// AddDepartments insert a new Departments into database and returns | ||
| 32 | +// last inserted Id on success. | ||
| 33 | +func AddDepartments(m *Departments) (id int64, err error) { | ||
| 34 | + o := orm.NewOrm() | ||
| 35 | + id, err = o.Insert(m) | ||
| 36 | + return | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +// GetDepartmentsById retrieves Departments by Id. Returns error if | ||
| 40 | +// Id doesn't exist | ||
| 41 | +func GetDepartmentsById(id int) (v *Departments, err error) { | ||
| 42 | + o := orm.NewOrm() | ||
| 43 | + v = &Departments{Id: id} | ||
| 44 | + if err = o.Read(v); err == nil { | ||
| 45 | + return v, nil | ||
| 46 | + } | ||
| 47 | + return nil, err | ||
| 48 | +} | ||
| 49 | + | ||
| 50 | +// GetAllDepartments retrieves all Departments matches certain condition. Returns empty list if | ||
| 51 | +// no records exist | ||
| 52 | +func GetAllDepartments(query map[string]string, fields []string, sortby []string, order []string, | ||
| 53 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 54 | + o := orm.NewOrm() | ||
| 55 | + qs := o.QueryTable(new(Departments)) | ||
| 56 | + // query k=v | ||
| 57 | + for k, v := range query { | ||
| 58 | + // rewrite dot-notation to Object__Attribute | ||
| 59 | + k = strings.Replace(k, ".", "__", -1) | ||
| 60 | + if strings.Contains(k, "isnull") { | ||
| 61 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 62 | + } else { | ||
| 63 | + qs = qs.Filter(k, v) | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + // order by: | ||
| 67 | + var sortFields []string | ||
| 68 | + if len(sortby) != 0 { | ||
| 69 | + if len(sortby) == len(order) { | ||
| 70 | + // 1) for each sort field, there is an associated order | ||
| 71 | + for i, v := range sortby { | ||
| 72 | + orderby := "" | ||
| 73 | + if order[i] == "desc" { | ||
| 74 | + orderby = "-" + v | ||
| 75 | + } else if order[i] == "asc" { | ||
| 76 | + orderby = v | ||
| 77 | + } else { | ||
| 78 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 79 | + } | ||
| 80 | + sortFields = append(sortFields, orderby) | ||
| 81 | + } | ||
| 82 | + qs = qs.OrderBy(sortFields...) | ||
| 83 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 84 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 85 | + for _, v := range sortby { | ||
| 86 | + orderby := "" | ||
| 87 | + if order[0] == "desc" { | ||
| 88 | + orderby = "-" + v | ||
| 89 | + } else if order[0] == "asc" { | ||
| 90 | + orderby = v | ||
| 91 | + } else { | ||
| 92 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 93 | + } | ||
| 94 | + sortFields = append(sortFields, orderby) | ||
| 95 | + } | ||
| 96 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 97 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 98 | + } | ||
| 99 | + } else { | ||
| 100 | + if len(order) != 0 { | ||
| 101 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + var l []Departments | ||
| 106 | + qs = qs.OrderBy(sortFields...) | ||
| 107 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 108 | + if len(fields) == 0 { | ||
| 109 | + for _, v := range l { | ||
| 110 | + ml = append(ml, v) | ||
| 111 | + } | ||
| 112 | + } else { | ||
| 113 | + // trim unused fields | ||
| 114 | + for _, v := range l { | ||
| 115 | + m := make(map[string]interface{}) | ||
| 116 | + val := reflect.ValueOf(v) | ||
| 117 | + for _, fname := range fields { | ||
| 118 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 119 | + } | ||
| 120 | + ml = append(ml, m) | ||
| 121 | + } | ||
| 122 | + } | ||
| 123 | + return ml, nil | ||
| 124 | + } | ||
| 125 | + return nil, err | ||
| 126 | +} | ||
| 127 | + | ||
| 128 | +// UpdateDepartments updates Departments by Id and returns error if | ||
| 129 | +// the record to be updated doesn't exist | ||
| 130 | +func UpdateDepartmentsById(m *Departments) (err error) { | ||
| 131 | + o := orm.NewOrm() | ||
| 132 | + v := Departments{Id: m.Id} | ||
| 133 | + // ascertain id exists in the database | ||
| 134 | + if err = o.Read(&v); err == nil { | ||
| 135 | + var num int64 | ||
| 136 | + if num, err = o.Update(m); err == nil { | ||
| 137 | + fmt.Println("Number of records updated in database:", num) | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + return | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +// DeleteDepartments deletes Departments by Id and returns error if | ||
| 144 | +// the record to be deleted doesn't exist | ||
| 145 | +func DeleteDepartments(id int) (err error) { | ||
| 146 | + o := orm.NewOrm() | ||
| 147 | + v := Departments{Id: id} | ||
| 148 | + // ascertain id exists in the database | ||
| 149 | + if err = o.Read(&v); err == nil { | ||
| 150 | + var num int64 | ||
| 151 | + if num, err = o.Delete(&Departments{Id: id}); err == nil { | ||
| 152 | + fmt.Println("Number of records deleted in database:", num) | ||
| 153 | + } | ||
| 154 | + } | ||
| 155 | + return | ||
| 156 | +} |
models/log_uuid.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + | ||
| 9 | + "github.com/astaxie/beego/orm" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +type LogUuid struct { | ||
| 13 | + Id int `orm:"column(id);auto" description:"主键ID"` | ||
| 14 | + Uuid string `orm:"column(uuid);size(128)"` | ||
| 15 | +} | ||
| 16 | + | ||
| 17 | +func (t *LogUuid) TableName() string { | ||
| 18 | + return "log_uuid" | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +func init() { | ||
| 22 | + orm.RegisterModel(new(LogUuid)) | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +// AddLogUuid insert a new LogUuid into database and returns | ||
| 26 | +// last inserted Id on success. | ||
| 27 | +func AddLogUuid(m *LogUuid) (id int64, err error) { | ||
| 28 | + o := orm.NewOrm() | ||
| 29 | + id, err = o.Insert(m) | ||
| 30 | + return | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +// GetLogUuidById retrieves LogUuid by Id. Returns error if | ||
| 34 | +// Id doesn't exist | ||
| 35 | +func GetLogUuidById(id int) (v *LogUuid, err error) { | ||
| 36 | + o := orm.NewOrm() | ||
| 37 | + v = &LogUuid{Id: id} | ||
| 38 | + if err = o.Read(v); err == nil { | ||
| 39 | + return v, nil | ||
| 40 | + } | ||
| 41 | + return nil, err | ||
| 42 | +} | ||
| 43 | + | ||
| 44 | +// GetAllLogUuid retrieves all LogUuid matches certain condition. Returns empty list if | ||
| 45 | +// no records exist | ||
| 46 | +func GetAllLogUuid(query map[string]string, fields []string, sortby []string, order []string, | ||
| 47 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 48 | + o := orm.NewOrm() | ||
| 49 | + qs := o.QueryTable(new(LogUuid)) | ||
| 50 | + // query k=v | ||
| 51 | + for k, v := range query { | ||
| 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 | + if len(sortby) == len(order) { | ||
| 64 | + // 1) for each sort field, there is an associated order | ||
| 65 | + for i, v := range sortby { | ||
| 66 | + orderby := "" | ||
| 67 | + if order[i] == "desc" { | ||
| 68 | + orderby = "-" + v | ||
| 69 | + } else if order[i] == "asc" { | ||
| 70 | + orderby = v | ||
| 71 | + } else { | ||
| 72 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 73 | + } | ||
| 74 | + sortFields = append(sortFields, orderby) | ||
| 75 | + } | ||
| 76 | + qs = qs.OrderBy(sortFields...) | ||
| 77 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 78 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 79 | + for _, v := range sortby { | ||
| 80 | + orderby := "" | ||
| 81 | + if order[0] == "desc" { | ||
| 82 | + orderby = "-" + v | ||
| 83 | + } else if order[0] == "asc" { | ||
| 84 | + orderby = v | ||
| 85 | + } else { | ||
| 86 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 87 | + } | ||
| 88 | + sortFields = append(sortFields, orderby) | ||
| 89 | + } | ||
| 90 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 91 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 92 | + } | ||
| 93 | + } else { | ||
| 94 | + if len(order) != 0 { | ||
| 95 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 96 | + } | ||
| 97 | + } | ||
| 98 | + | ||
| 99 | + var l []LogUuid | ||
| 100 | + qs = qs.OrderBy(sortFields...) | ||
| 101 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 102 | + if len(fields) == 0 { | ||
| 103 | + for _, v := range l { | ||
| 104 | + ml = append(ml, v) | ||
| 105 | + } | ||
| 106 | + } else { | ||
| 107 | + // trim unused fields | ||
| 108 | + for _, v := range l { | ||
| 109 | + m := make(map[string]interface{}) | ||
| 110 | + val := reflect.ValueOf(v) | ||
| 111 | + for _, fname := range fields { | ||
| 112 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 113 | + } | ||
| 114 | + ml = append(ml, m) | ||
| 115 | + } | ||
| 116 | + } | ||
| 117 | + return ml, nil | ||
| 118 | + } | ||
| 119 | + return nil, err | ||
| 120 | +} | ||
| 121 | + | ||
| 122 | +// UpdateLogUuid updates LogUuid by Id and returns error if | ||
| 123 | +// the record to be updated doesn't exist | ||
| 124 | +func UpdateLogUuidById(m *LogUuid) (err error) { | ||
| 125 | + o := orm.NewOrm() | ||
| 126 | + v := LogUuid{Id: m.Id} | ||
| 127 | + // ascertain id exists in the database | ||
| 128 | + if err = o.Read(&v); err == nil { | ||
| 129 | + var num int64 | ||
| 130 | + if num, err = o.Update(m); err == nil { | ||
| 131 | + fmt.Println("Number of records updated in database:", num) | ||
| 132 | + } | ||
| 133 | + } | ||
| 134 | + return | ||
| 135 | +} | ||
| 136 | + | ||
| 137 | +// DeleteLogUuid deletes LogUuid by Id and returns error if | ||
| 138 | +// the record to be deleted doesn't exist | ||
| 139 | +func DeleteLogUuid(id int) (err error) { | ||
| 140 | + o := orm.NewOrm() | ||
| 141 | + v := LogUuid{Id: 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(&LogUuid{Id: id}); err == nil { | ||
| 146 | + fmt.Println("Number of records deleted in database:", num) | ||
| 147 | + } | ||
| 148 | + } | ||
| 149 | + return | ||
| 150 | +} |
models/logic.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + | ||
| 9 | + "github.com/astaxie/beego/orm" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +type Logic struct { | ||
| 13 | + Id int `orm:"column(id);auto"` | ||
| 14 | + Data string `orm:"column(data);null"` | ||
| 15 | + Db string `orm:"column(db);size(50);null"` | ||
| 16 | + Datatype string `orm:"column(datatype);size(50);null"` | ||
| 17 | + Type string `orm:"column(type);size(100);null"` | ||
| 18 | + Defaultparam string `orm:"column(defaultparam);size(200);null"` | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +func (t *Logic) TableName() string { | ||
| 22 | + return "logic" | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +func init() { | ||
| 26 | + orm.RegisterModel(new(Logic)) | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +// AddLogic insert a new Logic into database and returns | ||
| 30 | +// last inserted Id on success. | ||
| 31 | +func AddLogic(m *Logic) (id int64, err error) { | ||
| 32 | + o := orm.NewOrm() | ||
| 33 | + id, err = o.Insert(m) | ||
| 34 | + return | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +// GetLogicById retrieves Logic by Id. Returns error if | ||
| 38 | +// Id doesn't exist | ||
| 39 | +func GetLogicById(id int) (v *Logic, err error) { | ||
| 40 | + o := orm.NewOrm() | ||
| 41 | + v = &Logic{Id: id} | ||
| 42 | + if err = o.Read(v); err == nil { | ||
| 43 | + return v, nil | ||
| 44 | + } | ||
| 45 | + return nil, err | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +// GetAllLogic retrieves all Logic matches certain condition. Returns empty list if | ||
| 49 | +// no records exist | ||
| 50 | +func GetAllLogic(query map[string]string, fields []string, sortby []string, order []string, | ||
| 51 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 52 | + o := orm.NewOrm() | ||
| 53 | + qs := o.QueryTable(new(Logic)) | ||
| 54 | + // query k=v | ||
| 55 | + for k, v := range query { | ||
| 56 | + // rewrite dot-notation to Object__Attribute | ||
| 57 | + k = strings.Replace(k, ".", "__", -1) | ||
| 58 | + if strings.Contains(k, "isnull") { | ||
| 59 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 60 | + } else { | ||
| 61 | + qs = qs.Filter(k, v) | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + // order by: | ||
| 65 | + var sortFields []string | ||
| 66 | + if len(sortby) != 0 { | ||
| 67 | + if len(sortby) == len(order) { | ||
| 68 | + // 1) for each sort field, there is an associated order | ||
| 69 | + for i, v := range sortby { | ||
| 70 | + orderby := "" | ||
| 71 | + if order[i] == "desc" { | ||
| 72 | + orderby = "-" + v | ||
| 73 | + } else if order[i] == "asc" { | ||
| 74 | + orderby = v | ||
| 75 | + } else { | ||
| 76 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 77 | + } | ||
| 78 | + sortFields = append(sortFields, orderby) | ||
| 79 | + } | ||
| 80 | + qs = qs.OrderBy(sortFields...) | ||
| 81 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 82 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 83 | + for _, v := range sortby { | ||
| 84 | + orderby := "" | ||
| 85 | + if order[0] == "desc" { | ||
| 86 | + orderby = "-" + v | ||
| 87 | + } else if order[0] == "asc" { | ||
| 88 | + orderby = v | ||
| 89 | + } else { | ||
| 90 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 91 | + } | ||
| 92 | + sortFields = append(sortFields, orderby) | ||
| 93 | + } | ||
| 94 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 95 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 96 | + } | ||
| 97 | + } else { | ||
| 98 | + if len(order) != 0 { | ||
| 99 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + var l []Logic | ||
| 104 | + qs = qs.OrderBy(sortFields...) | ||
| 105 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 106 | + if len(fields) == 0 { | ||
| 107 | + for _, v := range l { | ||
| 108 | + ml = append(ml, v) | ||
| 109 | + } | ||
| 110 | + } else { | ||
| 111 | + // trim unused fields | ||
| 112 | + for _, v := range l { | ||
| 113 | + m := make(map[string]interface{}) | ||
| 114 | + val := reflect.ValueOf(v) | ||
| 115 | + for _, fname := range fields { | ||
| 116 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 117 | + } | ||
| 118 | + ml = append(ml, m) | ||
| 119 | + } | ||
| 120 | + } | ||
| 121 | + return ml, nil | ||
| 122 | + } | ||
| 123 | + return nil, err | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | +// UpdateLogic updates Logic by Id and returns error if | ||
| 127 | +// the record to be updated doesn't exist | ||
| 128 | +func UpdateLogicById(m *Logic) (err error) { | ||
| 129 | + o := orm.NewOrm() | ||
| 130 | + v := Logic{Id: m.Id} | ||
| 131 | + // ascertain id exists in the database | ||
| 132 | + if err = o.Read(&v); err == nil { | ||
| 133 | + var num int64 | ||
| 134 | + if num, err = o.Update(m); err == nil { | ||
| 135 | + fmt.Println("Number of records updated in database:", num) | ||
| 136 | + } | ||
| 137 | + } | ||
| 138 | + return | ||
| 139 | +} | ||
| 140 | + | ||
| 141 | +// DeleteLogic deletes Logic by Id and returns error if | ||
| 142 | +// the record to be deleted doesn't exist | ||
| 143 | +func DeleteLogic(id int) (err error) { | ||
| 144 | + o := orm.NewOrm() | ||
| 145 | + v := Logic{Id: id} | ||
| 146 | + // ascertain id exists in the database | ||
| 147 | + if err = o.Read(&v); err == nil { | ||
| 148 | + var num int64 | ||
| 149 | + if num, err = o.Delete(&Logic{Id: id}); err == nil { | ||
| 150 | + fmt.Println("Number of records deleted in database:", num) | ||
| 151 | + } | ||
| 152 | + } | ||
| 153 | + return | ||
| 154 | +} |
models/permissions.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + | ||
| 9 | + "github.com/astaxie/beego/orm" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +type Permissions struct { | ||
| 13 | + Id int `orm:"column(id);auto"` | ||
| 14 | + Name string `orm:"column(name);size(255)"` | ||
| 15 | + Value int8 `orm:"column(value)"` | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +func (t *Permissions) TableName() string { | ||
| 19 | + return "permissions" | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +func init() { | ||
| 23 | + orm.RegisterModel(new(Permissions)) | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +// AddPermissions insert a new Permissions into database and returns | ||
| 27 | +// last inserted Id on success. | ||
| 28 | +func AddPermissions(m *Permissions) (id int64, err error) { | ||
| 29 | + o := orm.NewOrm() | ||
| 30 | + id, err = o.Insert(m) | ||
| 31 | + return | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | +// GetPermissionsById retrieves Permissions by Id. Returns error if | ||
| 35 | +// Id doesn't exist | ||
| 36 | +func GetPermissionsById(id int) (v *Permissions, err error) { | ||
| 37 | + o := orm.NewOrm() | ||
| 38 | + v = &Permissions{Id: id} | ||
| 39 | + if err = o.Read(v); err == nil { | ||
| 40 | + return v, nil | ||
| 41 | + } | ||
| 42 | + return nil, err | ||
| 43 | +} | ||
| 44 | + | ||
| 45 | +// GetAllPermissions retrieves all Permissions matches certain condition. Returns empty list if | ||
| 46 | +// no records exist | ||
| 47 | +func GetAllPermissions(query map[string]string, fields []string, sortby []string, order []string, | ||
| 48 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 49 | + o := orm.NewOrm() | ||
| 50 | + qs := o.QueryTable(new(Permissions)) | ||
| 51 | + // query k=v | ||
| 52 | + for k, v := range query { | ||
| 53 | + // rewrite dot-notation to Object__Attribute | ||
| 54 | + k = strings.Replace(k, ".", "__", -1) | ||
| 55 | + if strings.Contains(k, "isnull") { | ||
| 56 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 57 | + } else { | ||
| 58 | + qs = qs.Filter(k, v) | ||
| 59 | + } | ||
| 60 | + } | ||
| 61 | + // order by: | ||
| 62 | + var sortFields []string | ||
| 63 | + if len(sortby) != 0 { | ||
| 64 | + if len(sortby) == len(order) { | ||
| 65 | + // 1) for each sort field, there is an associated order | ||
| 66 | + for i, v := range sortby { | ||
| 67 | + orderby := "" | ||
| 68 | + if order[i] == "desc" { | ||
| 69 | + orderby = "-" + v | ||
| 70 | + } else if order[i] == "asc" { | ||
| 71 | + orderby = v | ||
| 72 | + } else { | ||
| 73 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 74 | + } | ||
| 75 | + sortFields = append(sortFields, orderby) | ||
| 76 | + } | ||
| 77 | + qs = qs.OrderBy(sortFields...) | ||
| 78 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 79 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 80 | + for _, v := range sortby { | ||
| 81 | + orderby := "" | ||
| 82 | + if order[0] == "desc" { | ||
| 83 | + orderby = "-" + v | ||
| 84 | + } else if order[0] == "asc" { | ||
| 85 | + orderby = v | ||
| 86 | + } else { | ||
| 87 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 88 | + } | ||
| 89 | + sortFields = append(sortFields, orderby) | ||
| 90 | + } | ||
| 91 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 92 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 93 | + } | ||
| 94 | + } else { | ||
| 95 | + if len(order) != 0 { | ||
| 96 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 97 | + } | ||
| 98 | + } | ||
| 99 | + | ||
| 100 | + var l []Permissions | ||
| 101 | + qs = qs.OrderBy(sortFields...) | ||
| 102 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 103 | + if len(fields) == 0 { | ||
| 104 | + for _, v := range l { | ||
| 105 | + ml = append(ml, v) | ||
| 106 | + } | ||
| 107 | + } else { | ||
| 108 | + // trim unused fields | ||
| 109 | + for _, v := range l { | ||
| 110 | + m := make(map[string]interface{}) | ||
| 111 | + val := reflect.ValueOf(v) | ||
| 112 | + for _, fname := range fields { | ||
| 113 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 114 | + } | ||
| 115 | + ml = append(ml, m) | ||
| 116 | + } | ||
| 117 | + } | ||
| 118 | + return ml, nil | ||
| 119 | + } | ||
| 120 | + return nil, err | ||
| 121 | +} | ||
| 122 | + | ||
| 123 | +// UpdatePermissions updates Permissions by Id and returns error if | ||
| 124 | +// the record to be updated doesn't exist | ||
| 125 | +func UpdatePermissionsById(m *Permissions) (err error) { | ||
| 126 | + o := orm.NewOrm() | ||
| 127 | + v := Permissions{Id: m.Id} | ||
| 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 | + | ||
| 138 | +// DeletePermissions deletes Permissions by Id and returns error if | ||
| 139 | +// the record to be deleted doesn't exist | ||
| 140 | +func DeletePermissions(id int) (err error) { | ||
| 141 | + o := orm.NewOrm() | ||
| 142 | + v := Permissions{Id: id} | ||
| 143 | + // ascertain id exists in the database | ||
| 144 | + if err = o.Read(&v); err == nil { | ||
| 145 | + var num int64 | ||
| 146 | + if num, err = o.Delete(&Permissions{Id: id}); err == nil { | ||
| 147 | + fmt.Println("Number of records deleted in database:", num) | ||
| 148 | + } | ||
| 149 | + } | ||
| 150 | + return | ||
| 151 | +} |
models/pics_log.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + | ||
| 9 | + "github.com/astaxie/beego/orm" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +type PicsLog struct { | ||
| 13 | + Id int `orm:"column(id);auto" description:"主键ID"` | ||
| 14 | + Url string `orm:"column(url);size(128)"` | ||
| 15 | + Thumbnail string `orm:"column(thumbnail);size(128)" description:"缩略图"` | ||
| 16 | + Width int `orm:"column(width)" description:"宽度"` | ||
| 17 | + Length int `orm:"column(length)" description:"长度"` | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func (t *PicsLog) TableName() string { | ||
| 21 | + return "pics_log" | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func init() { | ||
| 25 | + orm.RegisterModel(new(PicsLog)) | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +// AddPicsLog insert a new PicsLog into database and returns | ||
| 29 | +// last inserted Id on success. | ||
| 30 | +func AddPicsLog(m *PicsLog) (id int64, err error) { | ||
| 31 | + o := orm.NewOrm() | ||
| 32 | + id, err = o.Insert(m) | ||
| 33 | + return | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +// GetPicsLogById retrieves PicsLog by Id. Returns error if | ||
| 37 | +// Id doesn't exist | ||
| 38 | +func GetPicsLogById(id int) (v *PicsLog, err error) { | ||
| 39 | + o := orm.NewOrm() | ||
| 40 | + v = &PicsLog{Id: id} | ||
| 41 | + if err = o.Read(v); err == nil { | ||
| 42 | + return v, nil | ||
| 43 | + } | ||
| 44 | + return nil, err | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +// GetAllPicsLog retrieves all PicsLog matches certain condition. Returns empty list if | ||
| 48 | +// no records exist | ||
| 49 | +func GetAllPicsLog(query map[string]string, fields []string, sortby []string, order []string, | ||
| 50 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 51 | + o := orm.NewOrm() | ||
| 52 | + qs := o.QueryTable(new(PicsLog)) | ||
| 53 | + // query k=v | ||
| 54 | + for k, v := range query { | ||
| 55 | + // rewrite dot-notation to Object__Attribute | ||
| 56 | + k = strings.Replace(k, ".", "__", -1) | ||
| 57 | + if strings.Contains(k, "isnull") { | ||
| 58 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 59 | + } else { | ||
| 60 | + qs = qs.Filter(k, v) | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | + // order by: | ||
| 64 | + var sortFields []string | ||
| 65 | + if len(sortby) != 0 { | ||
| 66 | + if len(sortby) == len(order) { | ||
| 67 | + // 1) for each sort field, there is an associated order | ||
| 68 | + for i, v := range sortby { | ||
| 69 | + orderby := "" | ||
| 70 | + if order[i] == "desc" { | ||
| 71 | + orderby = "-" + v | ||
| 72 | + } else if order[i] == "asc" { | ||
| 73 | + orderby = v | ||
| 74 | + } else { | ||
| 75 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 76 | + } | ||
| 77 | + sortFields = append(sortFields, orderby) | ||
| 78 | + } | ||
| 79 | + qs = qs.OrderBy(sortFields...) | ||
| 80 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 81 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 82 | + for _, v := range sortby { | ||
| 83 | + orderby := "" | ||
| 84 | + if order[0] == "desc" { | ||
| 85 | + orderby = "-" + v | ||
| 86 | + } else if order[0] == "asc" { | ||
| 87 | + orderby = v | ||
| 88 | + } else { | ||
| 89 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 90 | + } | ||
| 91 | + sortFields = append(sortFields, orderby) | ||
| 92 | + } | ||
| 93 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 94 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 95 | + } | ||
| 96 | + } else { | ||
| 97 | + if len(order) != 0 { | ||
| 98 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + var l []PicsLog | ||
| 103 | + qs = qs.OrderBy(sortFields...) | ||
| 104 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 105 | + if len(fields) == 0 { | ||
| 106 | + for _, v := range l { | ||
| 107 | + ml = append(ml, v) | ||
| 108 | + } | ||
| 109 | + } else { | ||
| 110 | + // trim unused fields | ||
| 111 | + for _, v := range l { | ||
| 112 | + m := make(map[string]interface{}) | ||
| 113 | + val := reflect.ValueOf(v) | ||
| 114 | + for _, fname := range fields { | ||
| 115 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 116 | + } | ||
| 117 | + ml = append(ml, m) | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | + return ml, nil | ||
| 121 | + } | ||
| 122 | + return nil, err | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | +// UpdatePicsLog updates PicsLog by Id and returns error if | ||
| 126 | +// the record to be updated doesn't exist | ||
| 127 | +func UpdatePicsLogById(m *PicsLog) (err error) { | ||
| 128 | + o := orm.NewOrm() | ||
| 129 | + v := PicsLog{Id: m.Id} | ||
| 130 | + // ascertain id exists in the database | ||
| 131 | + if err = o.Read(&v); err == nil { | ||
| 132 | + var num int64 | ||
| 133 | + if num, err = o.Update(m); err == nil { | ||
| 134 | + fmt.Println("Number of records updated in database:", num) | ||
| 135 | + } | ||
| 136 | + } | ||
| 137 | + return | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +// DeletePicsLog deletes PicsLog by Id and returns error if | ||
| 141 | +// the record to be deleted doesn't exist | ||
| 142 | +func DeletePicsLog(id int) (err error) { | ||
| 143 | + o := orm.NewOrm() | ||
| 144 | + v := PicsLog{Id: id} | ||
| 145 | + // ascertain id exists in the database | ||
| 146 | + if err = o.Read(&v); err == nil { | ||
| 147 | + var num int64 | ||
| 148 | + if num, err = o.Delete(&PicsLog{Id: id}); err == nil { | ||
| 149 | + fmt.Println("Number of records deleted in database:", num) | ||
| 150 | + } | ||
| 151 | + } | ||
| 152 | + return | ||
| 153 | +} |
models/positions.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type Positions struct { | ||
| 14 | + Id int `orm:"column(id);auto"` | ||
| 15 | + CompanyId int `orm:"column(company_id)"` | ||
| 16 | + Name string `orm:"column(name);size(255)"` | ||
| 17 | + Pid string `orm:"column(pid);size(255)"` | ||
| 18 | + Path string `orm:"column(path);size(1000)"` | ||
| 19 | + Level int8 `orm:"column(level)" description:"级别"` | ||
| 20 | + CreateTime time.Time `orm:"column(create_time);type(timestamp);auto_now"` | ||
| 21 | + Enabled int8 `orm:"column(enabled)"` | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func (t *Positions) TableName() string { | ||
| 25 | + return "positions" | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +func init() { | ||
| 29 | + orm.RegisterModel(new(Positions)) | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +// AddPositions insert a new Positions into database and returns | ||
| 33 | +// last inserted Id on success. | ||
| 34 | +func AddPositions(m *Positions) (id int64, err error) { | ||
| 35 | + o := orm.NewOrm() | ||
| 36 | + id, err = o.Insert(m) | ||
| 37 | + return | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +// GetPositionsById retrieves Positions by Id. Returns error if | ||
| 41 | +// Id doesn't exist | ||
| 42 | +func GetPositionsById(id int) (v *Positions, err error) { | ||
| 43 | + o := orm.NewOrm() | ||
| 44 | + v = &Positions{Id: id} | ||
| 45 | + if err = o.Read(v); err == nil { | ||
| 46 | + return v, nil | ||
| 47 | + } | ||
| 48 | + return nil, err | ||
| 49 | +} | ||
| 50 | + | ||
| 51 | +// GetAllPositions retrieves all Positions matches certain condition. Returns empty list if | ||
| 52 | +// no records exist | ||
| 53 | +func GetAllPositions(query map[string]string, fields []string, sortby []string, order []string, | ||
| 54 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 55 | + o := orm.NewOrm() | ||
| 56 | + qs := o.QueryTable(new(Positions)) | ||
| 57 | + // query k=v | ||
| 58 | + for k, v := range query { | ||
| 59 | + // rewrite dot-notation to Object__Attribute | ||
| 60 | + k = strings.Replace(k, ".", "__", -1) | ||
| 61 | + if strings.Contains(k, "isnull") { | ||
| 62 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 63 | + } else { | ||
| 64 | + qs = qs.Filter(k, v) | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | + // order by: | ||
| 68 | + var sortFields []string | ||
| 69 | + if len(sortby) != 0 { | ||
| 70 | + if len(sortby) == len(order) { | ||
| 71 | + // 1) for each sort field, there is an associated order | ||
| 72 | + for i, v := range sortby { | ||
| 73 | + orderby := "" | ||
| 74 | + if order[i] == "desc" { | ||
| 75 | + orderby = "-" + v | ||
| 76 | + } else if order[i] == "asc" { | ||
| 77 | + orderby = v | ||
| 78 | + } else { | ||
| 79 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 80 | + } | ||
| 81 | + sortFields = append(sortFields, orderby) | ||
| 82 | + } | ||
| 83 | + qs = qs.OrderBy(sortFields...) | ||
| 84 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 85 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 86 | + for _, v := range sortby { | ||
| 87 | + orderby := "" | ||
| 88 | + if order[0] == "desc" { | ||
| 89 | + orderby = "-" + v | ||
| 90 | + } else if order[0] == "asc" { | ||
| 91 | + orderby = v | ||
| 92 | + } else { | ||
| 93 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 94 | + } | ||
| 95 | + sortFields = append(sortFields, orderby) | ||
| 96 | + } | ||
| 97 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 98 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 99 | + } | ||
| 100 | + } else { | ||
| 101 | + if len(order) != 0 { | ||
| 102 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 103 | + } | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + var l []Positions | ||
| 107 | + qs = qs.OrderBy(sortFields...) | ||
| 108 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 109 | + if len(fields) == 0 { | ||
| 110 | + for _, v := range l { | ||
| 111 | + ml = append(ml, v) | ||
| 112 | + } | ||
| 113 | + } else { | ||
| 114 | + // trim unused fields | ||
| 115 | + for _, v := range l { | ||
| 116 | + m := make(map[string]interface{}) | ||
| 117 | + val := reflect.ValueOf(v) | ||
| 118 | + for _, fname := range fields { | ||
| 119 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 120 | + } | ||
| 121 | + ml = append(ml, m) | ||
| 122 | + } | ||
| 123 | + } | ||
| 124 | + return ml, nil | ||
| 125 | + } | ||
| 126 | + return nil, err | ||
| 127 | +} | ||
| 128 | + | ||
| 129 | +// UpdatePositions updates Positions by Id and returns error if | ||
| 130 | +// the record to be updated doesn't exist | ||
| 131 | +func UpdatePositionsById(m *Positions) (err error) { | ||
| 132 | + o := orm.NewOrm() | ||
| 133 | + v := Positions{Id: m.Id} | ||
| 134 | + // ascertain id exists in the database | ||
| 135 | + if err = o.Read(&v); err == nil { | ||
| 136 | + var num int64 | ||
| 137 | + if num, err = o.Update(m); err == nil { | ||
| 138 | + fmt.Println("Number of records updated in database:", num) | ||
| 139 | + } | ||
| 140 | + } | ||
| 141 | + return | ||
| 142 | +} | ||
| 143 | + | ||
| 144 | +// DeletePositions deletes Positions by Id and returns error if | ||
| 145 | +// the record to be deleted doesn't exist | ||
| 146 | +func DeletePositions(id int) (err error) { | ||
| 147 | + o := orm.NewOrm() | ||
| 148 | + v := Positions{Id: id} | ||
| 149 | + // ascertain id exists in the database | ||
| 150 | + if err = o.Read(&v); err == nil { | ||
| 151 | + var num int64 | ||
| 152 | + if num, err = o.Delete(&Positions{Id: id}); err == nil { | ||
| 153 | + fmt.Println("Number of records deleted in database:", num) | ||
| 154 | + } | ||
| 155 | + } | ||
| 156 | + return | ||
| 157 | +} |
models/question.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type Question struct { | ||
| 14 | + Id int `orm:"column(id);pk"` | ||
| 15 | + Title string `orm:"column(title);size(30)" description:"标题"` | ||
| 16 | + Content string `orm:"column(content)" description:"内容"` | ||
| 17 | + Uid int64 `orm:"column(uid)" description:"用户ID"` | ||
| 18 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add"` | ||
| 19 | + Way int `orm:"column(way)" description:"提问方式(0语音,1图文)"` | ||
| 20 | + PageView int `orm:"column(pageView)" description:"浏览总数"` | ||
| 21 | + CommentTotal int `orm:"column(commentTotal)" description:"评论总数"` | ||
| 22 | + SympathyTotal int `orm:"column(sympathyTotal)" description:"同感总数"` | ||
| 23 | + Review int `orm:"column(review)" description:"0 待审核 1已审核"` | ||
| 24 | + Status int `orm:"column(status);null" description:"状态 0 未解决 1已解决"` | ||
| 25 | + UpdateTime time.Time `orm:"column(updateTime);type(timestamp);null"` | ||
| 26 | + ScoreAnalyze int `orm:"column(scoreAnalyze);null" description:"分析评分"` | ||
| 27 | + ScoreAsk int `orm:"column(scoreAsk);null" description:"提问评分"` | ||
| 28 | + ScoreScheme int `orm:"column(scoreScheme);null" description:"方案评分"` | ||
| 29 | + Published int `orm:"column(published);null" description:"公开状态 0未公开、1本部门公开、2本公司公开"` | ||
| 30 | + Level int `orm:"column(level)" description:"最后评分或审核人的级别"` | ||
| 31 | + CheckUid int64 `orm:"column(checkUid);null" description:"审核人ID"` | ||
| 32 | + Enabled int `orm:"column(enabled);null" description:"1有效 0删除"` | ||
| 33 | + Tlevel int `orm:"column(tlevel)" description:"公开操作权限"` | ||
| 34 | + PfUid int64 `orm:"column(pfUid)"` | ||
| 35 | + QType int `orm:"column(qType)"` | ||
| 36 | + SoluteTime time.Time `orm:"column(soluteTime);type(timestamp);auto_now_add"` | ||
| 37 | + ResolverTime time.Time `orm:"column(resolverTime);type(timestamp);auto_now_add"` | ||
| 38 | + Resolver int64 `orm:"column(resolver)"` | ||
| 39 | + RelevantDepartmentId int `orm:"column(relevantDepartmentId)" description:"相关部门id"` | ||
| 40 | + ReceiveStatus int8 `orm:"column(receiveStatus)" description:"领取状态 0未领取 1已领取"` | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | +func (t *Question) TableName() string { | ||
| 44 | + return "question" | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +func init() { | ||
| 48 | + orm.RegisterModel(new(Question)) | ||
| 49 | +} | ||
| 50 | + | ||
| 51 | +// AddQuestion insert a new Question into database and returns | ||
| 52 | +// last inserted Id on success. | ||
| 53 | +func AddQuestion(m *Question) (id int64, err error) { | ||
| 54 | + o := orm.NewOrm() | ||
| 55 | + id, err = o.Insert(m) | ||
| 56 | + return | ||
| 57 | +} | ||
| 58 | + | ||
| 59 | +// GetQuestionById retrieves Question by Id. Returns error if | ||
| 60 | +// Id doesn't exist | ||
| 61 | +func GetQuestionById(id int) (v *Question, err error) { | ||
| 62 | + o := orm.NewOrm() | ||
| 63 | + v = &Question{Id: id} | ||
| 64 | + if err = o.Read(v); err == nil { | ||
| 65 | + return v, nil | ||
| 66 | + } | ||
| 67 | + return nil, err | ||
| 68 | +} | ||
| 69 | + | ||
| 70 | +// GetAllQuestion retrieves all Question matches certain condition. Returns empty list if | ||
| 71 | +// no records exist | ||
| 72 | +func GetAllQuestion(query map[string]string, fields []string, sortby []string, order []string, | ||
| 73 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 74 | + o := orm.NewOrm() | ||
| 75 | + qs := o.QueryTable(new(Question)) | ||
| 76 | + // query k=v | ||
| 77 | + for k, v := range query { | ||
| 78 | + // rewrite dot-notation to Object__Attribute | ||
| 79 | + k = strings.Replace(k, ".", "__", -1) | ||
| 80 | + if strings.Contains(k, "isnull") { | ||
| 81 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 82 | + } else { | ||
| 83 | + qs = qs.Filter(k, v) | ||
| 84 | + } | ||
| 85 | + } | ||
| 86 | + // order by: | ||
| 87 | + var sortFields []string | ||
| 88 | + if len(sortby) != 0 { | ||
| 89 | + if len(sortby) == len(order) { | ||
| 90 | + // 1) for each sort field, there is an associated order | ||
| 91 | + for i, v := range sortby { | ||
| 92 | + orderby := "" | ||
| 93 | + if order[i] == "desc" { | ||
| 94 | + orderby = "-" + v | ||
| 95 | + } else if order[i] == "asc" { | ||
| 96 | + orderby = v | ||
| 97 | + } else { | ||
| 98 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 99 | + } | ||
| 100 | + sortFields = append(sortFields, orderby) | ||
| 101 | + } | ||
| 102 | + qs = qs.OrderBy(sortFields...) | ||
| 103 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 104 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 105 | + for _, v := range sortby { | ||
| 106 | + orderby := "" | ||
| 107 | + if order[0] == "desc" { | ||
| 108 | + orderby = "-" + v | ||
| 109 | + } else if order[0] == "asc" { | ||
| 110 | + orderby = v | ||
| 111 | + } else { | ||
| 112 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 113 | + } | ||
| 114 | + sortFields = append(sortFields, orderby) | ||
| 115 | + } | ||
| 116 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 117 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 118 | + } | ||
| 119 | + } else { | ||
| 120 | + if len(order) != 0 { | ||
| 121 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 122 | + } | ||
| 123 | + } | ||
| 124 | + | ||
| 125 | + var l []Question | ||
| 126 | + qs = qs.OrderBy(sortFields...) | ||
| 127 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 128 | + if len(fields) == 0 { | ||
| 129 | + for _, v := range l { | ||
| 130 | + ml = append(ml, v) | ||
| 131 | + } | ||
| 132 | + } else { | ||
| 133 | + // trim unused fields | ||
| 134 | + for _, v := range l { | ||
| 135 | + m := make(map[string]interface{}) | ||
| 136 | + val := reflect.ValueOf(v) | ||
| 137 | + for _, fname := range fields { | ||
| 138 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 139 | + } | ||
| 140 | + ml = append(ml, m) | ||
| 141 | + } | ||
| 142 | + } | ||
| 143 | + return ml, nil | ||
| 144 | + } | ||
| 145 | + return nil, err | ||
| 146 | +} | ||
| 147 | + | ||
| 148 | +// UpdateQuestion updates Question by Id and returns error if | ||
| 149 | +// the record to be updated doesn't exist | ||
| 150 | +func UpdateQuestionById(m *Question) (err error) { | ||
| 151 | + o := orm.NewOrm() | ||
| 152 | + v := Question{Id: m.Id} | ||
| 153 | + // ascertain id exists in the database | ||
| 154 | + if err = o.Read(&v); err == nil { | ||
| 155 | + var num int64 | ||
| 156 | + if num, err = o.Update(m); err == nil { | ||
| 157 | + fmt.Println("Number of records updated in database:", num) | ||
| 158 | + } | ||
| 159 | + } | ||
| 160 | + return | ||
| 161 | +} | ||
| 162 | + | ||
| 163 | +// DeleteQuestion deletes Question by Id and returns error if | ||
| 164 | +// the record to be deleted doesn't exist | ||
| 165 | +func DeleteQuestion(id int) (err error) { | ||
| 166 | + o := orm.NewOrm() | ||
| 167 | + v := Question{Id: id} | ||
| 168 | + // ascertain id exists in the database | ||
| 169 | + if err = o.Read(&v); err == nil { | ||
| 170 | + var num int64 | ||
| 171 | + if num, err = o.Delete(&Question{Id: id}); err == nil { | ||
| 172 | + fmt.Println("Number of records deleted in database:", num) | ||
| 173 | + } | ||
| 174 | + } | ||
| 175 | + return | ||
| 176 | +} |
models/question_department.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type QuestionDepartment struct { | ||
| 14 | + Id int `orm:"column(id);pk"` | ||
| 15 | + Qid int64 `orm:"column(qid)" description:"所属的问题ID"` | ||
| 16 | + DepartmentId int `orm:"column(department_id)" description:"语音路径"` | ||
| 17 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add"` | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func (t *QuestionDepartment) TableName() string { | ||
| 21 | + return "question_department" | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func init() { | ||
| 25 | + orm.RegisterModel(new(QuestionDepartment)) | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +// AddQuestionDepartment insert a new QuestionDepartment into database and returns | ||
| 29 | +// last inserted Id on success. | ||
| 30 | +func AddQuestionDepartment(m *QuestionDepartment) (id int64, err error) { | ||
| 31 | + o := orm.NewOrm() | ||
| 32 | + id, err = o.Insert(m) | ||
| 33 | + return | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +// GetQuestionDepartmentById retrieves QuestionDepartment by Id. Returns error if | ||
| 37 | +// Id doesn't exist | ||
| 38 | +func GetQuestionDepartmentById(id int) (v *QuestionDepartment, err error) { | ||
| 39 | + o := orm.NewOrm() | ||
| 40 | + v = &QuestionDepartment{Id: id} | ||
| 41 | + if err = o.Read(v); err == nil { | ||
| 42 | + return v, nil | ||
| 43 | + } | ||
| 44 | + return nil, err | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +// GetAllQuestionDepartment retrieves all QuestionDepartment matches certain condition. Returns empty list if | ||
| 48 | +// no records exist | ||
| 49 | +func GetAllQuestionDepartment(query map[string]string, fields []string, sortby []string, order []string, | ||
| 50 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 51 | + o := orm.NewOrm() | ||
| 52 | + qs := o.QueryTable(new(QuestionDepartment)) | ||
| 53 | + // query k=v | ||
| 54 | + for k, v := range query { | ||
| 55 | + // rewrite dot-notation to Object__Attribute | ||
| 56 | + k = strings.Replace(k, ".", "__", -1) | ||
| 57 | + if strings.Contains(k, "isnull") { | ||
| 58 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 59 | + } else { | ||
| 60 | + qs = qs.Filter(k, v) | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | + // order by: | ||
| 64 | + var sortFields []string | ||
| 65 | + if len(sortby) != 0 { | ||
| 66 | + if len(sortby) == len(order) { | ||
| 67 | + // 1) for each sort field, there is an associated order | ||
| 68 | + for i, v := range sortby { | ||
| 69 | + orderby := "" | ||
| 70 | + if order[i] == "desc" { | ||
| 71 | + orderby = "-" + v | ||
| 72 | + } else if order[i] == "asc" { | ||
| 73 | + orderby = v | ||
| 74 | + } else { | ||
| 75 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 76 | + } | ||
| 77 | + sortFields = append(sortFields, orderby) | ||
| 78 | + } | ||
| 79 | + qs = qs.OrderBy(sortFields...) | ||
| 80 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 81 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 82 | + for _, v := range sortby { | ||
| 83 | + orderby := "" | ||
| 84 | + if order[0] == "desc" { | ||
| 85 | + orderby = "-" + v | ||
| 86 | + } else if order[0] == "asc" { | ||
| 87 | + orderby = v | ||
| 88 | + } else { | ||
| 89 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 90 | + } | ||
| 91 | + sortFields = append(sortFields, orderby) | ||
| 92 | + } | ||
| 93 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 94 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 95 | + } | ||
| 96 | + } else { | ||
| 97 | + if len(order) != 0 { | ||
| 98 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + var l []QuestionDepartment | ||
| 103 | + qs = qs.OrderBy(sortFields...) | ||
| 104 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 105 | + if len(fields) == 0 { | ||
| 106 | + for _, v := range l { | ||
| 107 | + ml = append(ml, v) | ||
| 108 | + } | ||
| 109 | + } else { | ||
| 110 | + // trim unused fields | ||
| 111 | + for _, v := range l { | ||
| 112 | + m := make(map[string]interface{}) | ||
| 113 | + val := reflect.ValueOf(v) | ||
| 114 | + for _, fname := range fields { | ||
| 115 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 116 | + } | ||
| 117 | + ml = append(ml, m) | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | + return ml, nil | ||
| 121 | + } | ||
| 122 | + return nil, err | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | +// UpdateQuestionDepartment updates QuestionDepartment by Id and returns error if | ||
| 126 | +// the record to be updated doesn't exist | ||
| 127 | +func UpdateQuestionDepartmentById(m *QuestionDepartment) (err error) { | ||
| 128 | + o := orm.NewOrm() | ||
| 129 | + v := QuestionDepartment{Id: m.Id} | ||
| 130 | + // ascertain id exists in the database | ||
| 131 | + if err = o.Read(&v); err == nil { | ||
| 132 | + var num int64 | ||
| 133 | + if num, err = o.Update(m); err == nil { | ||
| 134 | + fmt.Println("Number of records updated in database:", num) | ||
| 135 | + } | ||
| 136 | + } | ||
| 137 | + return | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +// DeleteQuestionDepartment deletes QuestionDepartment by Id and returns error if | ||
| 141 | +// the record to be deleted doesn't exist | ||
| 142 | +func DeleteQuestionDepartment(id int) (err error) { | ||
| 143 | + o := orm.NewOrm() | ||
| 144 | + v := QuestionDepartment{Id: id} | ||
| 145 | + // ascertain id exists in the database | ||
| 146 | + if err = o.Read(&v); err == nil { | ||
| 147 | + var num int64 | ||
| 148 | + if num, err = o.Delete(&QuestionDepartment{Id: id}); err == nil { | ||
| 149 | + fmt.Println("Number of records deleted in database:", num) | ||
| 150 | + } | ||
| 151 | + } | ||
| 152 | + return | ||
| 153 | +} |
models/question_department_log.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type QuestionDepartmentLog struct { | ||
| 14 | + Id int `orm:"column(id);pk"` | ||
| 15 | + Qid int64 `orm:"column(qid)" description:"所属的问题ID"` | ||
| 16 | + DepartmentId int `orm:"column(department_id)" description:"相关部门id"` | ||
| 17 | + OperatorId int64 `orm:"column(operator_id)" description:"操作者id"` | ||
| 18 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add"` | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +func (t *QuestionDepartmentLog) TableName() string { | ||
| 22 | + return "question_department_log" | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +func init() { | ||
| 26 | + orm.RegisterModel(new(QuestionDepartmentLog)) | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +// AddQuestionDepartmentLog insert a new QuestionDepartmentLog into database and returns | ||
| 30 | +// last inserted Id on success. | ||
| 31 | +func AddQuestionDepartmentLog(m *QuestionDepartmentLog) (id int64, err error) { | ||
| 32 | + o := orm.NewOrm() | ||
| 33 | + id, err = o.Insert(m) | ||
| 34 | + return | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +// GetQuestionDepartmentLogById retrieves QuestionDepartmentLog by Id. Returns error if | ||
| 38 | +// Id doesn't exist | ||
| 39 | +func GetQuestionDepartmentLogById(id int) (v *QuestionDepartmentLog, err error) { | ||
| 40 | + o := orm.NewOrm() | ||
| 41 | + v = &QuestionDepartmentLog{Id: id} | ||
| 42 | + if err = o.Read(v); err == nil { | ||
| 43 | + return v, nil | ||
| 44 | + } | ||
| 45 | + return nil, err | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +// GetAllQuestionDepartmentLog retrieves all QuestionDepartmentLog matches certain condition. Returns empty list if | ||
| 49 | +// no records exist | ||
| 50 | +func GetAllQuestionDepartmentLog(query map[string]string, fields []string, sortby []string, order []string, | ||
| 51 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 52 | + o := orm.NewOrm() | ||
| 53 | + qs := o.QueryTable(new(QuestionDepartmentLog)) | ||
| 54 | + // query k=v | ||
| 55 | + for k, v := range query { | ||
| 56 | + // rewrite dot-notation to Object__Attribute | ||
| 57 | + k = strings.Replace(k, ".", "__", -1) | ||
| 58 | + if strings.Contains(k, "isnull") { | ||
| 59 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 60 | + } else { | ||
| 61 | + qs = qs.Filter(k, v) | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + // order by: | ||
| 65 | + var sortFields []string | ||
| 66 | + if len(sortby) != 0 { | ||
| 67 | + if len(sortby) == len(order) { | ||
| 68 | + // 1) for each sort field, there is an associated order | ||
| 69 | + for i, v := range sortby { | ||
| 70 | + orderby := "" | ||
| 71 | + if order[i] == "desc" { | ||
| 72 | + orderby = "-" + v | ||
| 73 | + } else if order[i] == "asc" { | ||
| 74 | + orderby = v | ||
| 75 | + } else { | ||
| 76 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 77 | + } | ||
| 78 | + sortFields = append(sortFields, orderby) | ||
| 79 | + } | ||
| 80 | + qs = qs.OrderBy(sortFields...) | ||
| 81 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 82 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 83 | + for _, v := range sortby { | ||
| 84 | + orderby := "" | ||
| 85 | + if order[0] == "desc" { | ||
| 86 | + orderby = "-" + v | ||
| 87 | + } else if order[0] == "asc" { | ||
| 88 | + orderby = v | ||
| 89 | + } else { | ||
| 90 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 91 | + } | ||
| 92 | + sortFields = append(sortFields, orderby) | ||
| 93 | + } | ||
| 94 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 95 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 96 | + } | ||
| 97 | + } else { | ||
| 98 | + if len(order) != 0 { | ||
| 99 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + var l []QuestionDepartmentLog | ||
| 104 | + qs = qs.OrderBy(sortFields...) | ||
| 105 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 106 | + if len(fields) == 0 { | ||
| 107 | + for _, v := range l { | ||
| 108 | + ml = append(ml, v) | ||
| 109 | + } | ||
| 110 | + } else { | ||
| 111 | + // trim unused fields | ||
| 112 | + for _, v := range l { | ||
| 113 | + m := make(map[string]interface{}) | ||
| 114 | + val := reflect.ValueOf(v) | ||
| 115 | + for _, fname := range fields { | ||
| 116 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 117 | + } | ||
| 118 | + ml = append(ml, m) | ||
| 119 | + } | ||
| 120 | + } | ||
| 121 | + return ml, nil | ||
| 122 | + } | ||
| 123 | + return nil, err | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | +// UpdateQuestionDepartmentLog updates QuestionDepartmentLog by Id and returns error if | ||
| 127 | +// the record to be updated doesn't exist | ||
| 128 | +func UpdateQuestionDepartmentLogById(m *QuestionDepartmentLog) (err error) { | ||
| 129 | + o := orm.NewOrm() | ||
| 130 | + v := QuestionDepartmentLog{Id: m.Id} | ||
| 131 | + // ascertain id exists in the database | ||
| 132 | + if err = o.Read(&v); err == nil { | ||
| 133 | + var num int64 | ||
| 134 | + if num, err = o.Update(m); err == nil { | ||
| 135 | + fmt.Println("Number of records updated in database:", num) | ||
| 136 | + } | ||
| 137 | + } | ||
| 138 | + return | ||
| 139 | +} | ||
| 140 | + | ||
| 141 | +// DeleteQuestionDepartmentLog deletes QuestionDepartmentLog by Id and returns error if | ||
| 142 | +// the record to be deleted doesn't exist | ||
| 143 | +func DeleteQuestionDepartmentLog(id int) (err error) { | ||
| 144 | + o := orm.NewOrm() | ||
| 145 | + v := QuestionDepartmentLog{Id: id} | ||
| 146 | + // ascertain id exists in the database | ||
| 147 | + if err = o.Read(&v); err == nil { | ||
| 148 | + var num int64 | ||
| 149 | + if num, err = o.Delete(&QuestionDepartmentLog{Id: id}); err == nil { | ||
| 150 | + fmt.Println("Number of records deleted in database:", num) | ||
| 151 | + } | ||
| 152 | + } | ||
| 153 | + return | ||
| 154 | +} |
models/question_image.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + | ||
| 9 | + "github.com/astaxie/beego/orm" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +type QuestionImage struct { | ||
| 13 | + Id int `orm:"column(id);pk"` | ||
| 14 | + Qid int64 `orm:"column(qid);null" description:"所属的问题ID"` | ||
| 15 | + Path string `orm:"column(path);size(500);null" description:"语音路径"` | ||
| 16 | + W int `orm:"column(w)"` | ||
| 17 | + H int `orm:"column(h)"` | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func (t *QuestionImage) TableName() string { | ||
| 21 | + return "question_image" | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func init() { | ||
| 25 | + orm.RegisterModel(new(QuestionImage)) | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +// AddQuestionImage insert a new QuestionImage into database and returns | ||
| 29 | +// last inserted Id on success. | ||
| 30 | +func AddQuestionImage(m *QuestionImage) (id int64, err error) { | ||
| 31 | + o := orm.NewOrm() | ||
| 32 | + id, err = o.Insert(m) | ||
| 33 | + return | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +// GetQuestionImageById retrieves QuestionImage by Id. Returns error if | ||
| 37 | +// Id doesn't exist | ||
| 38 | +func GetQuestionImageById(id int) (v *QuestionImage, err error) { | ||
| 39 | + o := orm.NewOrm() | ||
| 40 | + v = &QuestionImage{Id: id} | ||
| 41 | + if err = o.Read(v); err == nil { | ||
| 42 | + return v, nil | ||
| 43 | + } | ||
| 44 | + return nil, err | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +// GetAllQuestionImage retrieves all QuestionImage matches certain condition. Returns empty list if | ||
| 48 | +// no records exist | ||
| 49 | +func GetAllQuestionImage(query map[string]string, fields []string, sortby []string, order []string, | ||
| 50 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 51 | + o := orm.NewOrm() | ||
| 52 | + qs := o.QueryTable(new(QuestionImage)) | ||
| 53 | + // query k=v | ||
| 54 | + for k, v := range query { | ||
| 55 | + // rewrite dot-notation to Object__Attribute | ||
| 56 | + k = strings.Replace(k, ".", "__", -1) | ||
| 57 | + if strings.Contains(k, "isnull") { | ||
| 58 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 59 | + } else { | ||
| 60 | + qs = qs.Filter(k, v) | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | + // order by: | ||
| 64 | + var sortFields []string | ||
| 65 | + if len(sortby) != 0 { | ||
| 66 | + if len(sortby) == len(order) { | ||
| 67 | + // 1) for each sort field, there is an associated order | ||
| 68 | + for i, v := range sortby { | ||
| 69 | + orderby := "" | ||
| 70 | + if order[i] == "desc" { | ||
| 71 | + orderby = "-" + v | ||
| 72 | + } else if order[i] == "asc" { | ||
| 73 | + orderby = v | ||
| 74 | + } else { | ||
| 75 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 76 | + } | ||
| 77 | + sortFields = append(sortFields, orderby) | ||
| 78 | + } | ||
| 79 | + qs = qs.OrderBy(sortFields...) | ||
| 80 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 81 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 82 | + for _, v := range sortby { | ||
| 83 | + orderby := "" | ||
| 84 | + if order[0] == "desc" { | ||
| 85 | + orderby = "-" + v | ||
| 86 | + } else if order[0] == "asc" { | ||
| 87 | + orderby = v | ||
| 88 | + } else { | ||
| 89 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 90 | + } | ||
| 91 | + sortFields = append(sortFields, orderby) | ||
| 92 | + } | ||
| 93 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 94 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 95 | + } | ||
| 96 | + } else { | ||
| 97 | + if len(order) != 0 { | ||
| 98 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + var l []QuestionImage | ||
| 103 | + qs = qs.OrderBy(sortFields...) | ||
| 104 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 105 | + if len(fields) == 0 { | ||
| 106 | + for _, v := range l { | ||
| 107 | + ml = append(ml, v) | ||
| 108 | + } | ||
| 109 | + } else { | ||
| 110 | + // trim unused fields | ||
| 111 | + for _, v := range l { | ||
| 112 | + m := make(map[string]interface{}) | ||
| 113 | + val := reflect.ValueOf(v) | ||
| 114 | + for _, fname := range fields { | ||
| 115 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 116 | + } | ||
| 117 | + ml = append(ml, m) | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | + return ml, nil | ||
| 121 | + } | ||
| 122 | + return nil, err | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | +// UpdateQuestionImage updates QuestionImage by Id and returns error if | ||
| 126 | +// the record to be updated doesn't exist | ||
| 127 | +func UpdateQuestionImageById(m *QuestionImage) (err error) { | ||
| 128 | + o := orm.NewOrm() | ||
| 129 | + v := QuestionImage{Id: m.Id} | ||
| 130 | + // ascertain id exists in the database | ||
| 131 | + if err = o.Read(&v); err == nil { | ||
| 132 | + var num int64 | ||
| 133 | + if num, err = o.Update(m); err == nil { | ||
| 134 | + fmt.Println("Number of records updated in database:", num) | ||
| 135 | + } | ||
| 136 | + } | ||
| 137 | + return | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +// DeleteQuestionImage deletes QuestionImage by Id and returns error if | ||
| 141 | +// the record to be deleted doesn't exist | ||
| 142 | +func DeleteQuestionImage(id int) (err error) { | ||
| 143 | + o := orm.NewOrm() | ||
| 144 | + v := QuestionImage{Id: id} | ||
| 145 | + // ascertain id exists in the database | ||
| 146 | + if err = o.Read(&v); err == nil { | ||
| 147 | + var num int64 | ||
| 148 | + if num, err = o.Delete(&QuestionImage{Id: id}); err == nil { | ||
| 149 | + fmt.Println("Number of records deleted in database:", num) | ||
| 150 | + } | ||
| 151 | + } | ||
| 152 | + return | ||
| 153 | +} |
models/question_score.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type QuestionScore struct { | ||
| 14 | + Id int `orm:"column(id);pk"` | ||
| 15 | + Uid int64 `orm:"column(uid);null" description:"评分用户ID"` | ||
| 16 | + Qid int64 `orm:"column(qid);null" description:"所属的问题ID"` | ||
| 17 | + ScoreAnalyze int `orm:"column(scoreAnalyze);null"` | ||
| 18 | + ScoreAsk int `orm:"column(scoreAsk);null"` | ||
| 19 | + ScoreScheme int `orm:"column(scoreScheme);null"` | ||
| 20 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);null;auto_now_add" description:"评分时间"` | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func (t *QuestionScore) TableName() string { | ||
| 24 | + return "question_score" | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +func init() { | ||
| 28 | + orm.RegisterModel(new(QuestionScore)) | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +// AddQuestionScore insert a new QuestionScore into database and returns | ||
| 32 | +// last inserted Id on success. | ||
| 33 | +func AddQuestionScore(m *QuestionScore) (id int64, err error) { | ||
| 34 | + o := orm.NewOrm() | ||
| 35 | + id, err = o.Insert(m) | ||
| 36 | + return | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +// GetQuestionScoreById retrieves QuestionScore by Id. Returns error if | ||
| 40 | +// Id doesn't exist | ||
| 41 | +func GetQuestionScoreById(id int) (v *QuestionScore, err error) { | ||
| 42 | + o := orm.NewOrm() | ||
| 43 | + v = &QuestionScore{Id: id} | ||
| 44 | + if err = o.Read(v); err == nil { | ||
| 45 | + return v, nil | ||
| 46 | + } | ||
| 47 | + return nil, err | ||
| 48 | +} | ||
| 49 | + | ||
| 50 | +// GetAllQuestionScore retrieves all QuestionScore matches certain condition. Returns empty list if | ||
| 51 | +// no records exist | ||
| 52 | +func GetAllQuestionScore(query map[string]string, fields []string, sortby []string, order []string, | ||
| 53 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 54 | + o := orm.NewOrm() | ||
| 55 | + qs := o.QueryTable(new(QuestionScore)) | ||
| 56 | + // query k=v | ||
| 57 | + for k, v := range query { | ||
| 58 | + // rewrite dot-notation to Object__Attribute | ||
| 59 | + k = strings.Replace(k, ".", "__", -1) | ||
| 60 | + if strings.Contains(k, "isnull") { | ||
| 61 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 62 | + } else { | ||
| 63 | + qs = qs.Filter(k, v) | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + // order by: | ||
| 67 | + var sortFields []string | ||
| 68 | + if len(sortby) != 0 { | ||
| 69 | + if len(sortby) == len(order) { | ||
| 70 | + // 1) for each sort field, there is an associated order | ||
| 71 | + for i, v := range sortby { | ||
| 72 | + orderby := "" | ||
| 73 | + if order[i] == "desc" { | ||
| 74 | + orderby = "-" + v | ||
| 75 | + } else if order[i] == "asc" { | ||
| 76 | + orderby = v | ||
| 77 | + } else { | ||
| 78 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 79 | + } | ||
| 80 | + sortFields = append(sortFields, orderby) | ||
| 81 | + } | ||
| 82 | + qs = qs.OrderBy(sortFields...) | ||
| 83 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 84 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 85 | + for _, v := range sortby { | ||
| 86 | + orderby := "" | ||
| 87 | + if order[0] == "desc" { | ||
| 88 | + orderby = "-" + v | ||
| 89 | + } else if order[0] == "asc" { | ||
| 90 | + orderby = v | ||
| 91 | + } else { | ||
| 92 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 93 | + } | ||
| 94 | + sortFields = append(sortFields, orderby) | ||
| 95 | + } | ||
| 96 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 97 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 98 | + } | ||
| 99 | + } else { | ||
| 100 | + if len(order) != 0 { | ||
| 101 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + var l []QuestionScore | ||
| 106 | + qs = qs.OrderBy(sortFields...) | ||
| 107 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 108 | + if len(fields) == 0 { | ||
| 109 | + for _, v := range l { | ||
| 110 | + ml = append(ml, v) | ||
| 111 | + } | ||
| 112 | + } else { | ||
| 113 | + // trim unused fields | ||
| 114 | + for _, v := range l { | ||
| 115 | + m := make(map[string]interface{}) | ||
| 116 | + val := reflect.ValueOf(v) | ||
| 117 | + for _, fname := range fields { | ||
| 118 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 119 | + } | ||
| 120 | + ml = append(ml, m) | ||
| 121 | + } | ||
| 122 | + } | ||
| 123 | + return ml, nil | ||
| 124 | + } | ||
| 125 | + return nil, err | ||
| 126 | +} | ||
| 127 | + | ||
| 128 | +// UpdateQuestionScore updates QuestionScore by Id and returns error if | ||
| 129 | +// the record to be updated doesn't exist | ||
| 130 | +func UpdateQuestionScoreById(m *QuestionScore) (err error) { | ||
| 131 | + o := orm.NewOrm() | ||
| 132 | + v := QuestionScore{Id: m.Id} | ||
| 133 | + // ascertain id exists in the database | ||
| 134 | + if err = o.Read(&v); err == nil { | ||
| 135 | + var num int64 | ||
| 136 | + if num, err = o.Update(m); err == nil { | ||
| 137 | + fmt.Println("Number of records updated in database:", num) | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + return | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +// DeleteQuestionScore deletes QuestionScore by Id and returns error if | ||
| 144 | +// the record to be deleted doesn't exist | ||
| 145 | +func DeleteQuestionScore(id int) (err error) { | ||
| 146 | + o := orm.NewOrm() | ||
| 147 | + v := QuestionScore{Id: id} | ||
| 148 | + // ascertain id exists in the database | ||
| 149 | + if err = o.Read(&v); err == nil { | ||
| 150 | + var num int64 | ||
| 151 | + if num, err = o.Delete(&QuestionScore{Id: id}); err == nil { | ||
| 152 | + fmt.Println("Number of records deleted in database:", num) | ||
| 153 | + } | ||
| 154 | + } | ||
| 155 | + return | ||
| 156 | +} |
models/question_speech.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + | ||
| 9 | + "github.com/astaxie/beego/orm" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +type QuestionSpeech struct { | ||
| 13 | + Id int `orm:"column(id);pk"` | ||
| 14 | + Duration int `orm:"column(duration);null" description:"秒数"` | ||
| 15 | + Qid int64 `orm:"column(qid);null" description:"所属的问题ID"` | ||
| 16 | + Path string `orm:"column(path);size(500);null" description:"语音路径"` | ||
| 17 | +} | ||
| 18 | + | ||
| 19 | +func (t *QuestionSpeech) TableName() string { | ||
| 20 | + return "question_speech" | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func init() { | ||
| 24 | + orm.RegisterModel(new(QuestionSpeech)) | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +// AddQuestionSpeech insert a new QuestionSpeech into database and returns | ||
| 28 | +// last inserted Id on success. | ||
| 29 | +func AddQuestionSpeech(m *QuestionSpeech) (id int64, err error) { | ||
| 30 | + o := orm.NewOrm() | ||
| 31 | + id, err = o.Insert(m) | ||
| 32 | + return | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +// GetQuestionSpeechById retrieves QuestionSpeech by Id. Returns error if | ||
| 36 | +// Id doesn't exist | ||
| 37 | +func GetQuestionSpeechById(id int) (v *QuestionSpeech, err error) { | ||
| 38 | + o := orm.NewOrm() | ||
| 39 | + v = &QuestionSpeech{Id: id} | ||
| 40 | + if err = o.Read(v); err == nil { | ||
| 41 | + return v, nil | ||
| 42 | + } | ||
| 43 | + return nil, err | ||
| 44 | +} | ||
| 45 | + | ||
| 46 | +// GetAllQuestionSpeech retrieves all QuestionSpeech matches certain condition. Returns empty list if | ||
| 47 | +// no records exist | ||
| 48 | +func GetAllQuestionSpeech(query map[string]string, fields []string, sortby []string, order []string, | ||
| 49 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 50 | + o := orm.NewOrm() | ||
| 51 | + qs := o.QueryTable(new(QuestionSpeech)) | ||
| 52 | + // query k=v | ||
| 53 | + for k, v := range query { | ||
| 54 | + // rewrite dot-notation to Object__Attribute | ||
| 55 | + k = strings.Replace(k, ".", "__", -1) | ||
| 56 | + if strings.Contains(k, "isnull") { | ||
| 57 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 58 | + } else { | ||
| 59 | + qs = qs.Filter(k, v) | ||
| 60 | + } | ||
| 61 | + } | ||
| 62 | + // order by: | ||
| 63 | + var sortFields []string | ||
| 64 | + if len(sortby) != 0 { | ||
| 65 | + if len(sortby) == len(order) { | ||
| 66 | + // 1) for each sort field, there is an associated order | ||
| 67 | + for i, v := range sortby { | ||
| 68 | + orderby := "" | ||
| 69 | + if order[i] == "desc" { | ||
| 70 | + orderby = "-" + v | ||
| 71 | + } else if order[i] == "asc" { | ||
| 72 | + orderby = v | ||
| 73 | + } else { | ||
| 74 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 75 | + } | ||
| 76 | + sortFields = append(sortFields, orderby) | ||
| 77 | + } | ||
| 78 | + qs = qs.OrderBy(sortFields...) | ||
| 79 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 80 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 81 | + for _, v := range sortby { | ||
| 82 | + orderby := "" | ||
| 83 | + if order[0] == "desc" { | ||
| 84 | + orderby = "-" + v | ||
| 85 | + } else if order[0] == "asc" { | ||
| 86 | + orderby = v | ||
| 87 | + } else { | ||
| 88 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 89 | + } | ||
| 90 | + sortFields = append(sortFields, orderby) | ||
| 91 | + } | ||
| 92 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 93 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 94 | + } | ||
| 95 | + } else { | ||
| 96 | + if len(order) != 0 { | ||
| 97 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 98 | + } | ||
| 99 | + } | ||
| 100 | + | ||
| 101 | + var l []QuestionSpeech | ||
| 102 | + qs = qs.OrderBy(sortFields...) | ||
| 103 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 104 | + if len(fields) == 0 { | ||
| 105 | + for _, v := range l { | ||
| 106 | + ml = append(ml, v) | ||
| 107 | + } | ||
| 108 | + } else { | ||
| 109 | + // trim unused fields | ||
| 110 | + for _, v := range l { | ||
| 111 | + m := make(map[string]interface{}) | ||
| 112 | + val := reflect.ValueOf(v) | ||
| 113 | + for _, fname := range fields { | ||
| 114 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 115 | + } | ||
| 116 | + ml = append(ml, m) | ||
| 117 | + } | ||
| 118 | + } | ||
| 119 | + return ml, nil | ||
| 120 | + } | ||
| 121 | + return nil, err | ||
| 122 | +} | ||
| 123 | + | ||
| 124 | +// UpdateQuestionSpeech updates QuestionSpeech by Id and returns error if | ||
| 125 | +// the record to be updated doesn't exist | ||
| 126 | +func UpdateQuestionSpeechById(m *QuestionSpeech) (err error) { | ||
| 127 | + o := orm.NewOrm() | ||
| 128 | + v := QuestionSpeech{Id: m.Id} | ||
| 129 | + // ascertain id exists in the database | ||
| 130 | + if err = o.Read(&v); err == nil { | ||
| 131 | + var num int64 | ||
| 132 | + if num, err = o.Update(m); err == nil { | ||
| 133 | + fmt.Println("Number of records updated in database:", num) | ||
| 134 | + } | ||
| 135 | + } | ||
| 136 | + return | ||
| 137 | +} | ||
| 138 | + | ||
| 139 | +// DeleteQuestionSpeech deletes QuestionSpeech by Id and returns error if | ||
| 140 | +// the record to be deleted doesn't exist | ||
| 141 | +func DeleteQuestionSpeech(id int) (err error) { | ||
| 142 | + o := orm.NewOrm() | ||
| 143 | + v := QuestionSpeech{Id: id} | ||
| 144 | + // ascertain id exists in the database | ||
| 145 | + if err = o.Read(&v); err == nil { | ||
| 146 | + var num int64 | ||
| 147 | + if num, err = o.Delete(&QuestionSpeech{Id: id}); err == nil { | ||
| 148 | + fmt.Println("Number of records deleted in database:", num) | ||
| 149 | + } | ||
| 150 | + } | ||
| 151 | + return | ||
| 152 | +} |
models/roles.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type Roles struct { | ||
| 14 | + Id int `orm:"column(id);auto"` | ||
| 15 | + Name string `orm:"column(name);size(191)"` | ||
| 16 | + GuardName string `orm:"column(guard_name);size(191)"` | ||
| 17 | + CreatedAt time.Time `orm:"column(created_at);type(timestamp);null"` | ||
| 18 | + UpdatedAt time.Time `orm:"column(updated_at);type(timestamp);null"` | ||
| 19 | + ShowName string `orm:"column(show_name);size(191)"` | ||
| 20 | + Description string `orm:"column(description);size(191);null"` | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func (t *Roles) TableName() string { | ||
| 24 | + return "roles" | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +func init() { | ||
| 28 | + orm.RegisterModel(new(Roles)) | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +// AddRoles insert a new Roles into database and returns | ||
| 32 | +// last inserted Id on success. | ||
| 33 | +func AddRoles(m *Roles) (id int64, err error) { | ||
| 34 | + o := orm.NewOrm() | ||
| 35 | + id, err = o.Insert(m) | ||
| 36 | + return | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +// GetRolesById retrieves Roles by Id. Returns error if | ||
| 40 | +// Id doesn't exist | ||
| 41 | +func GetRolesById(id int) (v *Roles, err error) { | ||
| 42 | + o := orm.NewOrm() | ||
| 43 | + v = &Roles{Id: id} | ||
| 44 | + if err = o.Read(v); err == nil { | ||
| 45 | + return v, nil | ||
| 46 | + } | ||
| 47 | + return nil, err | ||
| 48 | +} | ||
| 49 | + | ||
| 50 | +// GetAllRoles retrieves all Roles matches certain condition. Returns empty list if | ||
| 51 | +// no records exist | ||
| 52 | +func GetAllRoles(query map[string]string, fields []string, sortby []string, order []string, | ||
| 53 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 54 | + o := orm.NewOrm() | ||
| 55 | + qs := o.QueryTable(new(Roles)) | ||
| 56 | + // query k=v | ||
| 57 | + for k, v := range query { | ||
| 58 | + // rewrite dot-notation to Object__Attribute | ||
| 59 | + k = strings.Replace(k, ".", "__", -1) | ||
| 60 | + if strings.Contains(k, "isnull") { | ||
| 61 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 62 | + } else { | ||
| 63 | + qs = qs.Filter(k, v) | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + // order by: | ||
| 67 | + var sortFields []string | ||
| 68 | + if len(sortby) != 0 { | ||
| 69 | + if len(sortby) == len(order) { | ||
| 70 | + // 1) for each sort field, there is an associated order | ||
| 71 | + for i, v := range sortby { | ||
| 72 | + orderby := "" | ||
| 73 | + if order[i] == "desc" { | ||
| 74 | + orderby = "-" + v | ||
| 75 | + } else if order[i] == "asc" { | ||
| 76 | + orderby = v | ||
| 77 | + } else { | ||
| 78 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 79 | + } | ||
| 80 | + sortFields = append(sortFields, orderby) | ||
| 81 | + } | ||
| 82 | + qs = qs.OrderBy(sortFields...) | ||
| 83 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 84 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 85 | + for _, v := range sortby { | ||
| 86 | + orderby := "" | ||
| 87 | + if order[0] == "desc" { | ||
| 88 | + orderby = "-" + v | ||
| 89 | + } else if order[0] == "asc" { | ||
| 90 | + orderby = v | ||
| 91 | + } else { | ||
| 92 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 93 | + } | ||
| 94 | + sortFields = append(sortFields, orderby) | ||
| 95 | + } | ||
| 96 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 97 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 98 | + } | ||
| 99 | + } else { | ||
| 100 | + if len(order) != 0 { | ||
| 101 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + var l []Roles | ||
| 106 | + qs = qs.OrderBy(sortFields...) | ||
| 107 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 108 | + if len(fields) == 0 { | ||
| 109 | + for _, v := range l { | ||
| 110 | + ml = append(ml, v) | ||
| 111 | + } | ||
| 112 | + } else { | ||
| 113 | + // trim unused fields | ||
| 114 | + for _, v := range l { | ||
| 115 | + m := make(map[string]interface{}) | ||
| 116 | + val := reflect.ValueOf(v) | ||
| 117 | + for _, fname := range fields { | ||
| 118 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 119 | + } | ||
| 120 | + ml = append(ml, m) | ||
| 121 | + } | ||
| 122 | + } | ||
| 123 | + return ml, nil | ||
| 124 | + } | ||
| 125 | + return nil, err | ||
| 126 | +} | ||
| 127 | + | ||
| 128 | +// UpdateRoles updates Roles by Id and returns error if | ||
| 129 | +// the record to be updated doesn't exist | ||
| 130 | +func UpdateRolesById(m *Roles) (err error) { | ||
| 131 | + o := orm.NewOrm() | ||
| 132 | + v := Roles{Id: m.Id} | ||
| 133 | + // ascertain id exists in the database | ||
| 134 | + if err = o.Read(&v); err == nil { | ||
| 135 | + var num int64 | ||
| 136 | + if num, err = o.Update(m); err == nil { | ||
| 137 | + fmt.Println("Number of records updated in database:", num) | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + return | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +// DeleteRoles deletes Roles by Id and returns error if | ||
| 144 | +// the record to be deleted doesn't exist | ||
| 145 | +func DeleteRoles(id int) (err error) { | ||
| 146 | + o := orm.NewOrm() | ||
| 147 | + v := Roles{Id: id} | ||
| 148 | + // ascertain id exists in the database | ||
| 149 | + if err = o.Read(&v); err == nil { | ||
| 150 | + var num int64 | ||
| 151 | + if num, err = o.Delete(&Roles{Id: id}); err == nil { | ||
| 152 | + fmt.Println("Number of records deleted in database:", num) | ||
| 153 | + } | ||
| 154 | + } | ||
| 155 | + return | ||
| 156 | +} |
models/solution.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import "time" | ||
| 4 | + | ||
| 5 | +type Solution struct { | ||
| 6 | + Id_RENAME int64 `orm:"column(id)" description:"方案ID"` | ||
| 7 | + QuestionTitle string `orm:"column(questionTitle);size(500);null" description:"问题标题"` | ||
| 8 | + Uid int64 `orm:"column(uid)" description:"方案提供者"` | ||
| 9 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);null" description:"方案创建时间"` | ||
| 10 | + Content string `orm:"column(content);null" description:"方案内容"` | ||
| 11 | + ScoreAnalyze int `orm:"column(scoreAnalyze);null" description:"分析评分(0-5对应分数)"` | ||
| 12 | + ScoreSolution int `orm:"column(scoreSolution);null" description:"解决评分(0-5对应分数)"` | ||
| 13 | + ScoreScheme int `orm:"column(scoreScheme);null" description:"方案评分(0-5对应分数)"` | ||
| 14 | + PageView int `orm:"column(pageView);null" description:"浏览总数"` | ||
| 15 | + CommentTotal int `orm:"column(commentTotal);null" description:"评论总数"` | ||
| 16 | + SympathyTotal int `orm:"column(sympathyTotal);null" description:"同感总数"` | ||
| 17 | + Qid int64 `orm:"column(qid);null" description:"问题ID"` | ||
| 18 | + Plevel int `orm:"column(plevel);null" description:"最新评分人等级"` | ||
| 19 | + Stype int `orm:"column(stype);null" description:"0备选方案 1解决方案"` | ||
| 20 | + SpfUid int64 `orm:"column(spfUid)"` | ||
| 21 | + UpdateTime time.Time `orm:"column(updateTime);type(timestamp);auto_now_add" description:"方案编辑更新时间"` | ||
| 22 | +} |
models/solution_image.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + | ||
| 9 | + "github.com/astaxie/beego/orm" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +type SolutionImage struct { | ||
| 13 | + Id int `orm:"column(id);auto" description:"方案ID"` | ||
| 14 | + SolutionId int64 `orm:"column(solution_id)" description:"解决方案ID"` | ||
| 15 | + Path string `orm:"column(path);size(255)" description:"图片路径"` | ||
| 16 | + H int `orm:"column(h)"` | ||
| 17 | + W int `orm:"column(w)"` | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func (t *SolutionImage) TableName() string { | ||
| 21 | + return "solution_image" | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func init() { | ||
| 25 | + orm.RegisterModel(new(SolutionImage)) | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +// AddSolutionImage insert a new SolutionImage into database and returns | ||
| 29 | +// last inserted Id on success. | ||
| 30 | +func AddSolutionImage(m *SolutionImage) (id int64, err error) { | ||
| 31 | + o := orm.NewOrm() | ||
| 32 | + id, err = o.Insert(m) | ||
| 33 | + return | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +// GetSolutionImageById retrieves SolutionImage by Id. Returns error if | ||
| 37 | +// Id doesn't exist | ||
| 38 | +func GetSolutionImageById(id int) (v *SolutionImage, err error) { | ||
| 39 | + o := orm.NewOrm() | ||
| 40 | + v = &SolutionImage{Id: id} | ||
| 41 | + if err = o.Read(v); err == nil { | ||
| 42 | + return v, nil | ||
| 43 | + } | ||
| 44 | + return nil, err | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +// GetAllSolutionImage retrieves all SolutionImage matches certain condition. Returns empty list if | ||
| 48 | +// no records exist | ||
| 49 | +func GetAllSolutionImage(query map[string]string, fields []string, sortby []string, order []string, | ||
| 50 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 51 | + o := orm.NewOrm() | ||
| 52 | + qs := o.QueryTable(new(SolutionImage)) | ||
| 53 | + // query k=v | ||
| 54 | + for k, v := range query { | ||
| 55 | + // rewrite dot-notation to Object__Attribute | ||
| 56 | + k = strings.Replace(k, ".", "__", -1) | ||
| 57 | + if strings.Contains(k, "isnull") { | ||
| 58 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 59 | + } else { | ||
| 60 | + qs = qs.Filter(k, v) | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | + // order by: | ||
| 64 | + var sortFields []string | ||
| 65 | + if len(sortby) != 0 { | ||
| 66 | + if len(sortby) == len(order) { | ||
| 67 | + // 1) for each sort field, there is an associated order | ||
| 68 | + for i, v := range sortby { | ||
| 69 | + orderby := "" | ||
| 70 | + if order[i] == "desc" { | ||
| 71 | + orderby = "-" + v | ||
| 72 | + } else if order[i] == "asc" { | ||
| 73 | + orderby = v | ||
| 74 | + } else { | ||
| 75 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 76 | + } | ||
| 77 | + sortFields = append(sortFields, orderby) | ||
| 78 | + } | ||
| 79 | + qs = qs.OrderBy(sortFields...) | ||
| 80 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 81 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 82 | + for _, v := range sortby { | ||
| 83 | + orderby := "" | ||
| 84 | + if order[0] == "desc" { | ||
| 85 | + orderby = "-" + v | ||
| 86 | + } else if order[0] == "asc" { | ||
| 87 | + orderby = v | ||
| 88 | + } else { | ||
| 89 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 90 | + } | ||
| 91 | + sortFields = append(sortFields, orderby) | ||
| 92 | + } | ||
| 93 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 94 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 95 | + } | ||
| 96 | + } else { | ||
| 97 | + if len(order) != 0 { | ||
| 98 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + var l []SolutionImage | ||
| 103 | + qs = qs.OrderBy(sortFields...) | ||
| 104 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 105 | + if len(fields) == 0 { | ||
| 106 | + for _, v := range l { | ||
| 107 | + ml = append(ml, v) | ||
| 108 | + } | ||
| 109 | + } else { | ||
| 110 | + // trim unused fields | ||
| 111 | + for _, v := range l { | ||
| 112 | + m := make(map[string]interface{}) | ||
| 113 | + val := reflect.ValueOf(v) | ||
| 114 | + for _, fname := range fields { | ||
| 115 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 116 | + } | ||
| 117 | + ml = append(ml, m) | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | + return ml, nil | ||
| 121 | + } | ||
| 122 | + return nil, err | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | +// UpdateSolutionImage updates SolutionImage by Id and returns error if | ||
| 126 | +// the record to be updated doesn't exist | ||
| 127 | +func UpdateSolutionImageById(m *SolutionImage) (err error) { | ||
| 128 | + o := orm.NewOrm() | ||
| 129 | + v := SolutionImage{Id: m.Id} | ||
| 130 | + // ascertain id exists in the database | ||
| 131 | + if err = o.Read(&v); err == nil { | ||
| 132 | + var num int64 | ||
| 133 | + if num, err = o.Update(m); err == nil { | ||
| 134 | + fmt.Println("Number of records updated in database:", num) | ||
| 135 | + } | ||
| 136 | + } | ||
| 137 | + return | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +// DeleteSolutionImage deletes SolutionImage by Id and returns error if | ||
| 141 | +// the record to be deleted doesn't exist | ||
| 142 | +func DeleteSolutionImage(id int) (err error) { | ||
| 143 | + o := orm.NewOrm() | ||
| 144 | + v := SolutionImage{Id: id} | ||
| 145 | + // ascertain id exists in the database | ||
| 146 | + if err = o.Read(&v); err == nil { | ||
| 147 | + var num int64 | ||
| 148 | + if num, err = o.Delete(&SolutionImage{Id: id}); err == nil { | ||
| 149 | + fmt.Println("Number of records deleted in database:", num) | ||
| 150 | + } | ||
| 151 | + } | ||
| 152 | + return | ||
| 153 | +} |
models/solution_partner.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type SolutionPartner struct { | ||
| 14 | + Id int `orm:"column(id);auto"` | ||
| 15 | + Uid int64 `orm:"column(uid);null" description:"参与者用户ID"` | ||
| 16 | + Sid int64 `orm:"column(sid);null" description:"解决方案ID"` | ||
| 17 | + ScoreSolution int `orm:"column(scoreSolution);null"` | ||
| 18 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add" description:"评分时间"` | ||
| 19 | + Puid int64 `orm:"column(puid);null" description:"评分人用户ID"` | ||
| 20 | + Enabled int `orm:"column(enabled);null" description:"有效1 失效0"` | ||
| 21 | + Sort int `orm:"column(sort)" description:"排序字段"` | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func (t *SolutionPartner) TableName() string { | ||
| 25 | + return "solution_partner" | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +func init() { | ||
| 29 | + orm.RegisterModel(new(SolutionPartner)) | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +// AddSolutionPartner insert a new SolutionPartner into database and returns | ||
| 33 | +// last inserted Id on success. | ||
| 34 | +func AddSolutionPartner(m *SolutionPartner) (id int64, err error) { | ||
| 35 | + o := orm.NewOrm() | ||
| 36 | + id, err = o.Insert(m) | ||
| 37 | + return | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +// GetSolutionPartnerById retrieves SolutionPartner by Id. Returns error if | ||
| 41 | +// Id doesn't exist | ||
| 42 | +func GetSolutionPartnerById(id int) (v *SolutionPartner, err error) { | ||
| 43 | + o := orm.NewOrm() | ||
| 44 | + v = &SolutionPartner{Id: id} | ||
| 45 | + if err = o.Read(v); err == nil { | ||
| 46 | + return v, nil | ||
| 47 | + } | ||
| 48 | + return nil, err | ||
| 49 | +} | ||
| 50 | + | ||
| 51 | +// GetAllSolutionPartner retrieves all SolutionPartner matches certain condition. Returns empty list if | ||
| 52 | +// no records exist | ||
| 53 | +func GetAllSolutionPartner(query map[string]string, fields []string, sortby []string, order []string, | ||
| 54 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 55 | + o := orm.NewOrm() | ||
| 56 | + qs := o.QueryTable(new(SolutionPartner)) | ||
| 57 | + // query k=v | ||
| 58 | + for k, v := range query { | ||
| 59 | + // rewrite dot-notation to Object__Attribute | ||
| 60 | + k = strings.Replace(k, ".", "__", -1) | ||
| 61 | + if strings.Contains(k, "isnull") { | ||
| 62 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 63 | + } else { | ||
| 64 | + qs = qs.Filter(k, v) | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | + // order by: | ||
| 68 | + var sortFields []string | ||
| 69 | + if len(sortby) != 0 { | ||
| 70 | + if len(sortby) == len(order) { | ||
| 71 | + // 1) for each sort field, there is an associated order | ||
| 72 | + for i, v := range sortby { | ||
| 73 | + orderby := "" | ||
| 74 | + if order[i] == "desc" { | ||
| 75 | + orderby = "-" + v | ||
| 76 | + } else if order[i] == "asc" { | ||
| 77 | + orderby = v | ||
| 78 | + } else { | ||
| 79 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 80 | + } | ||
| 81 | + sortFields = append(sortFields, orderby) | ||
| 82 | + } | ||
| 83 | + qs = qs.OrderBy(sortFields...) | ||
| 84 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 85 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 86 | + for _, v := range sortby { | ||
| 87 | + orderby := "" | ||
| 88 | + if order[0] == "desc" { | ||
| 89 | + orderby = "-" + v | ||
| 90 | + } else if order[0] == "asc" { | ||
| 91 | + orderby = v | ||
| 92 | + } else { | ||
| 93 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 94 | + } | ||
| 95 | + sortFields = append(sortFields, orderby) | ||
| 96 | + } | ||
| 97 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 98 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 99 | + } | ||
| 100 | + } else { | ||
| 101 | + if len(order) != 0 { | ||
| 102 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 103 | + } | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + var l []SolutionPartner | ||
| 107 | + qs = qs.OrderBy(sortFields...) | ||
| 108 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 109 | + if len(fields) == 0 { | ||
| 110 | + for _, v := range l { | ||
| 111 | + ml = append(ml, v) | ||
| 112 | + } | ||
| 113 | + } else { | ||
| 114 | + // trim unused fields | ||
| 115 | + for _, v := range l { | ||
| 116 | + m := make(map[string]interface{}) | ||
| 117 | + val := reflect.ValueOf(v) | ||
| 118 | + for _, fname := range fields { | ||
| 119 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 120 | + } | ||
| 121 | + ml = append(ml, m) | ||
| 122 | + } | ||
| 123 | + } | ||
| 124 | + return ml, nil | ||
| 125 | + } | ||
| 126 | + return nil, err | ||
| 127 | +} | ||
| 128 | + | ||
| 129 | +// UpdateSolutionPartner updates SolutionPartner by Id and returns error if | ||
| 130 | +// the record to be updated doesn't exist | ||
| 131 | +func UpdateSolutionPartnerById(m *SolutionPartner) (err error) { | ||
| 132 | + o := orm.NewOrm() | ||
| 133 | + v := SolutionPartner{Id: m.Id} | ||
| 134 | + // ascertain id exists in the database | ||
| 135 | + if err = o.Read(&v); err == nil { | ||
| 136 | + var num int64 | ||
| 137 | + if num, err = o.Update(m); err == nil { | ||
| 138 | + fmt.Println("Number of records updated in database:", num) | ||
| 139 | + } | ||
| 140 | + } | ||
| 141 | + return | ||
| 142 | +} | ||
| 143 | + | ||
| 144 | +// DeleteSolutionPartner deletes SolutionPartner by Id and returns error if | ||
| 145 | +// the record to be deleted doesn't exist | ||
| 146 | +func DeleteSolutionPartner(id int) (err error) { | ||
| 147 | + o := orm.NewOrm() | ||
| 148 | + v := SolutionPartner{Id: id} | ||
| 149 | + // ascertain id exists in the database | ||
| 150 | + if err = o.Read(&v); err == nil { | ||
| 151 | + var num int64 | ||
| 152 | + if num, err = o.Delete(&SolutionPartner{Id: id}); err == nil { | ||
| 153 | + fmt.Println("Number of records deleted in database:", num) | ||
| 154 | + } | ||
| 155 | + } | ||
| 156 | + return | ||
| 157 | +} |
models/solution_score.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type SolutionScore struct { | ||
| 14 | + Id int `orm:"column(id);pk"` | ||
| 15 | + Uid int64 `orm:"column(uid);null" description:"评分用户ID"` | ||
| 16 | + Sid int64 `orm:"column(sid);null" description:"所属的问题ID"` | ||
| 17 | + ScoreAnalyze int `orm:"column(scoreAnalyze);null"` | ||
| 18 | + ScoreScheme int `orm:"column(scoreScheme);null"` | ||
| 19 | + ScoreSolution int `orm:"column(scoreSolution);null"` | ||
| 20 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now" description:"评分时间"` | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func (t *SolutionScore) TableName() string { | ||
| 24 | + return "solution_score" | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +func init() { | ||
| 28 | + orm.RegisterModel(new(SolutionScore)) | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +// AddSolutionScore insert a new SolutionScore into database and returns | ||
| 32 | +// last inserted Id on success. | ||
| 33 | +func AddSolutionScore(m *SolutionScore) (id int64, err error) { | ||
| 34 | + o := orm.NewOrm() | ||
| 35 | + id, err = o.Insert(m) | ||
| 36 | + return | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +// GetSolutionScoreById retrieves SolutionScore by Id. Returns error if | ||
| 40 | +// Id doesn't exist | ||
| 41 | +func GetSolutionScoreById(id int) (v *SolutionScore, err error) { | ||
| 42 | + o := orm.NewOrm() | ||
| 43 | + v = &SolutionScore{Id: id} | ||
| 44 | + if err = o.Read(v); err == nil { | ||
| 45 | + return v, nil | ||
| 46 | + } | ||
| 47 | + return nil, err | ||
| 48 | +} | ||
| 49 | + | ||
| 50 | +// GetAllSolutionScore retrieves all SolutionScore matches certain condition. Returns empty list if | ||
| 51 | +// no records exist | ||
| 52 | +func GetAllSolutionScore(query map[string]string, fields []string, sortby []string, order []string, | ||
| 53 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 54 | + o := orm.NewOrm() | ||
| 55 | + qs := o.QueryTable(new(SolutionScore)) | ||
| 56 | + // query k=v | ||
| 57 | + for k, v := range query { | ||
| 58 | + // rewrite dot-notation to Object__Attribute | ||
| 59 | + k = strings.Replace(k, ".", "__", -1) | ||
| 60 | + if strings.Contains(k, "isnull") { | ||
| 61 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 62 | + } else { | ||
| 63 | + qs = qs.Filter(k, v) | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + // order by: | ||
| 67 | + var sortFields []string | ||
| 68 | + if len(sortby) != 0 { | ||
| 69 | + if len(sortby) == len(order) { | ||
| 70 | + // 1) for each sort field, there is an associated order | ||
| 71 | + for i, v := range sortby { | ||
| 72 | + orderby := "" | ||
| 73 | + if order[i] == "desc" { | ||
| 74 | + orderby = "-" + v | ||
| 75 | + } else if order[i] == "asc" { | ||
| 76 | + orderby = v | ||
| 77 | + } else { | ||
| 78 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 79 | + } | ||
| 80 | + sortFields = append(sortFields, orderby) | ||
| 81 | + } | ||
| 82 | + qs = qs.OrderBy(sortFields...) | ||
| 83 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 84 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 85 | + for _, v := range sortby { | ||
| 86 | + orderby := "" | ||
| 87 | + if order[0] == "desc" { | ||
| 88 | + orderby = "-" + v | ||
| 89 | + } else if order[0] == "asc" { | ||
| 90 | + orderby = v | ||
| 91 | + } else { | ||
| 92 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 93 | + } | ||
| 94 | + sortFields = append(sortFields, orderby) | ||
| 95 | + } | ||
| 96 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 97 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 98 | + } | ||
| 99 | + } else { | ||
| 100 | + if len(order) != 0 { | ||
| 101 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + var l []SolutionScore | ||
| 106 | + qs = qs.OrderBy(sortFields...) | ||
| 107 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 108 | + if len(fields) == 0 { | ||
| 109 | + for _, v := range l { | ||
| 110 | + ml = append(ml, v) | ||
| 111 | + } | ||
| 112 | + } else { | ||
| 113 | + // trim unused fields | ||
| 114 | + for _, v := range l { | ||
| 115 | + m := make(map[string]interface{}) | ||
| 116 | + val := reflect.ValueOf(v) | ||
| 117 | + for _, fname := range fields { | ||
| 118 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 119 | + } | ||
| 120 | + ml = append(ml, m) | ||
| 121 | + } | ||
| 122 | + } | ||
| 123 | + return ml, nil | ||
| 124 | + } | ||
| 125 | + return nil, err | ||
| 126 | +} | ||
| 127 | + | ||
| 128 | +// UpdateSolutionScore updates SolutionScore by Id and returns error if | ||
| 129 | +// the record to be updated doesn't exist | ||
| 130 | +func UpdateSolutionScoreById(m *SolutionScore) (err error) { | ||
| 131 | + o := orm.NewOrm() | ||
| 132 | + v := SolutionScore{Id: m.Id} | ||
| 133 | + // ascertain id exists in the database | ||
| 134 | + if err = o.Read(&v); err == nil { | ||
| 135 | + var num int64 | ||
| 136 | + if num, err = o.Update(m); err == nil { | ||
| 137 | + fmt.Println("Number of records updated in database:", num) | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + return | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +// DeleteSolutionScore deletes SolutionScore by Id and returns error if | ||
| 144 | +// the record to be deleted doesn't exist | ||
| 145 | +func DeleteSolutionScore(id int) (err error) { | ||
| 146 | + o := orm.NewOrm() | ||
| 147 | + v := SolutionScore{Id: id} | ||
| 148 | + // ascertain id exists in the database | ||
| 149 | + if err = o.Read(&v); err == nil { | ||
| 150 | + var num int64 | ||
| 151 | + if num, err = o.Delete(&SolutionScore{Id: id}); err == nil { | ||
| 152 | + fmt.Println("Number of records deleted in database:", num) | ||
| 153 | + } | ||
| 154 | + } | ||
| 155 | + return | ||
| 156 | +} |
models/solve_solution.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type SolveSolution struct { | ||
| 14 | + Id int `orm:"column(id);auto" description:"方案ID"` | ||
| 15 | + QuestionId int64 `orm:"column(question_id)" description:"问题ID"` | ||
| 16 | + UserId int64 `orm:"column(user_id)" description:"方案解决者"` | ||
| 17 | + Content string `orm:"column(content);null" description:"方案内容"` | ||
| 18 | + ScoreSolve int `orm:"column(scoreSolve);null" description:"解决评分(0-5对应分数)"` | ||
| 19 | + CreateTime time.Time `orm:"column(create_time);type(timestamp);null" description:"方案创建时间"` | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +func (t *SolveSolution) TableName() string { | ||
| 23 | + return "solve_solution" | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +func init() { | ||
| 27 | + orm.RegisterModel(new(SolveSolution)) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +// AddSolveSolution insert a new SolveSolution into database and returns | ||
| 31 | +// last inserted Id on success. | ||
| 32 | +func AddSolveSolution(m *SolveSolution) (id int64, err error) { | ||
| 33 | + o := orm.NewOrm() | ||
| 34 | + id, err = o.Insert(m) | ||
| 35 | + return | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +// GetSolveSolutionById retrieves SolveSolution by Id. Returns error if | ||
| 39 | +// Id doesn't exist | ||
| 40 | +func GetSolveSolutionById(id int) (v *SolveSolution, err error) { | ||
| 41 | + o := orm.NewOrm() | ||
| 42 | + v = &SolveSolution{Id: id} | ||
| 43 | + if err = o.Read(v); err == nil { | ||
| 44 | + return v, nil | ||
| 45 | + } | ||
| 46 | + return nil, err | ||
| 47 | +} | ||
| 48 | + | ||
| 49 | +// GetAllSolveSolution retrieves all SolveSolution matches certain condition. Returns empty list if | ||
| 50 | +// no records exist | ||
| 51 | +func GetAllSolveSolution(query map[string]string, fields []string, sortby []string, order []string, | ||
| 52 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 53 | + o := orm.NewOrm() | ||
| 54 | + qs := o.QueryTable(new(SolveSolution)) | ||
| 55 | + // query k=v | ||
| 56 | + for k, v := range query { | ||
| 57 | + // rewrite dot-notation to Object__Attribute | ||
| 58 | + k = strings.Replace(k, ".", "__", -1) | ||
| 59 | + if strings.Contains(k, "isnull") { | ||
| 60 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 61 | + } else { | ||
| 62 | + qs = qs.Filter(k, v) | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + // order by: | ||
| 66 | + var sortFields []string | ||
| 67 | + if len(sortby) != 0 { | ||
| 68 | + if len(sortby) == len(order) { | ||
| 69 | + // 1) for each sort field, there is an associated order | ||
| 70 | + for i, v := range sortby { | ||
| 71 | + orderby := "" | ||
| 72 | + if order[i] == "desc" { | ||
| 73 | + orderby = "-" + v | ||
| 74 | + } else if order[i] == "asc" { | ||
| 75 | + orderby = v | ||
| 76 | + } else { | ||
| 77 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 78 | + } | ||
| 79 | + sortFields = append(sortFields, orderby) | ||
| 80 | + } | ||
| 81 | + qs = qs.OrderBy(sortFields...) | ||
| 82 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 83 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 84 | + for _, v := range sortby { | ||
| 85 | + orderby := "" | ||
| 86 | + if order[0] == "desc" { | ||
| 87 | + orderby = "-" + v | ||
| 88 | + } else if order[0] == "asc" { | ||
| 89 | + orderby = v | ||
| 90 | + } else { | ||
| 91 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 92 | + } | ||
| 93 | + sortFields = append(sortFields, orderby) | ||
| 94 | + } | ||
| 95 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 96 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 97 | + } | ||
| 98 | + } else { | ||
| 99 | + if len(order) != 0 { | ||
| 100 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 101 | + } | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + var l []SolveSolution | ||
| 105 | + qs = qs.OrderBy(sortFields...) | ||
| 106 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 107 | + if len(fields) == 0 { | ||
| 108 | + for _, v := range l { | ||
| 109 | + ml = append(ml, v) | ||
| 110 | + } | ||
| 111 | + } else { | ||
| 112 | + // trim unused fields | ||
| 113 | + for _, v := range l { | ||
| 114 | + m := make(map[string]interface{}) | ||
| 115 | + val := reflect.ValueOf(v) | ||
| 116 | + for _, fname := range fields { | ||
| 117 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 118 | + } | ||
| 119 | + ml = append(ml, m) | ||
| 120 | + } | ||
| 121 | + } | ||
| 122 | + return ml, nil | ||
| 123 | + } | ||
| 124 | + return nil, err | ||
| 125 | +} | ||
| 126 | + | ||
| 127 | +// UpdateSolveSolution updates SolveSolution by Id and returns error if | ||
| 128 | +// the record to be updated doesn't exist | ||
| 129 | +func UpdateSolveSolutionById(m *SolveSolution) (err error) { | ||
| 130 | + o := orm.NewOrm() | ||
| 131 | + v := SolveSolution{Id: m.Id} | ||
| 132 | + // ascertain id exists in the database | ||
| 133 | + if err = o.Read(&v); err == nil { | ||
| 134 | + var num int64 | ||
| 135 | + if num, err = o.Update(m); err == nil { | ||
| 136 | + fmt.Println("Number of records updated in database:", num) | ||
| 137 | + } | ||
| 138 | + } | ||
| 139 | + return | ||
| 140 | +} | ||
| 141 | + | ||
| 142 | +// DeleteSolveSolution deletes SolveSolution by Id and returns error if | ||
| 143 | +// the record to be deleted doesn't exist | ||
| 144 | +func DeleteSolveSolution(id int) (err error) { | ||
| 145 | + o := orm.NewOrm() | ||
| 146 | + v := SolveSolution{Id: id} | ||
| 147 | + // ascertain id exists in the database | ||
| 148 | + if err = o.Read(&v); err == nil { | ||
| 149 | + var num int64 | ||
| 150 | + if num, err = o.Delete(&SolveSolution{Id: id}); err == nil { | ||
| 151 | + fmt.Println("Number of records deleted in database:", num) | ||
| 152 | + } | ||
| 153 | + } | ||
| 154 | + return | ||
| 155 | +} |
models/solve_solution_image.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + | ||
| 9 | + "github.com/astaxie/beego/orm" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +type SolveSolutionImage struct { | ||
| 13 | + Id int `orm:"column(id);auto" description:"方案ID"` | ||
| 14 | + SolveSolutionId int `orm:"column(solve_solution_id)" description:"解决方案ID"` | ||
| 15 | + Path string `orm:"column(path);size(255)" description:"图片路径"` | ||
| 16 | + W int `orm:"column(w)"` | ||
| 17 | + H int `orm:"column(h)"` | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func (t *SolveSolutionImage) TableName() string { | ||
| 21 | + return "solve_solution_image" | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func init() { | ||
| 25 | + orm.RegisterModel(new(SolveSolutionImage)) | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +// AddSolveSolutionImage insert a new SolveSolutionImage into database and returns | ||
| 29 | +// last inserted Id on success. | ||
| 30 | +func AddSolveSolutionImage(m *SolveSolutionImage) (id int64, err error) { | ||
| 31 | + o := orm.NewOrm() | ||
| 32 | + id, err = o.Insert(m) | ||
| 33 | + return | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +// GetSolveSolutionImageById retrieves SolveSolutionImage by Id. Returns error if | ||
| 37 | +// Id doesn't exist | ||
| 38 | +func GetSolveSolutionImageById(id int) (v *SolveSolutionImage, err error) { | ||
| 39 | + o := orm.NewOrm() | ||
| 40 | + v = &SolveSolutionImage{Id: id} | ||
| 41 | + if err = o.Read(v); err == nil { | ||
| 42 | + return v, nil | ||
| 43 | + } | ||
| 44 | + return nil, err | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +// GetAllSolveSolutionImage retrieves all SolveSolutionImage matches certain condition. Returns empty list if | ||
| 48 | +// no records exist | ||
| 49 | +func GetAllSolveSolutionImage(query map[string]string, fields []string, sortby []string, order []string, | ||
| 50 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 51 | + o := orm.NewOrm() | ||
| 52 | + qs := o.QueryTable(new(SolveSolutionImage)) | ||
| 53 | + // query k=v | ||
| 54 | + for k, v := range query { | ||
| 55 | + // rewrite dot-notation to Object__Attribute | ||
| 56 | + k = strings.Replace(k, ".", "__", -1) | ||
| 57 | + if strings.Contains(k, "isnull") { | ||
| 58 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 59 | + } else { | ||
| 60 | + qs = qs.Filter(k, v) | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | + // order by: | ||
| 64 | + var sortFields []string | ||
| 65 | + if len(sortby) != 0 { | ||
| 66 | + if len(sortby) == len(order) { | ||
| 67 | + // 1) for each sort field, there is an associated order | ||
| 68 | + for i, v := range sortby { | ||
| 69 | + orderby := "" | ||
| 70 | + if order[i] == "desc" { | ||
| 71 | + orderby = "-" + v | ||
| 72 | + } else if order[i] == "asc" { | ||
| 73 | + orderby = v | ||
| 74 | + } else { | ||
| 75 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 76 | + } | ||
| 77 | + sortFields = append(sortFields, orderby) | ||
| 78 | + } | ||
| 79 | + qs = qs.OrderBy(sortFields...) | ||
| 80 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 81 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 82 | + for _, v := range sortby { | ||
| 83 | + orderby := "" | ||
| 84 | + if order[0] == "desc" { | ||
| 85 | + orderby = "-" + v | ||
| 86 | + } else if order[0] == "asc" { | ||
| 87 | + orderby = v | ||
| 88 | + } else { | ||
| 89 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 90 | + } | ||
| 91 | + sortFields = append(sortFields, orderby) | ||
| 92 | + } | ||
| 93 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 94 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 95 | + } | ||
| 96 | + } else { | ||
| 97 | + if len(order) != 0 { | ||
| 98 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + var l []SolveSolutionImage | ||
| 103 | + qs = qs.OrderBy(sortFields...) | ||
| 104 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 105 | + if len(fields) == 0 { | ||
| 106 | + for _, v := range l { | ||
| 107 | + ml = append(ml, v) | ||
| 108 | + } | ||
| 109 | + } else { | ||
| 110 | + // trim unused fields | ||
| 111 | + for _, v := range l { | ||
| 112 | + m := make(map[string]interface{}) | ||
| 113 | + val := reflect.ValueOf(v) | ||
| 114 | + for _, fname := range fields { | ||
| 115 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 116 | + } | ||
| 117 | + ml = append(ml, m) | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | + return ml, nil | ||
| 121 | + } | ||
| 122 | + return nil, err | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | +// UpdateSolveSolutionImage updates SolveSolutionImage by Id and returns error if | ||
| 126 | +// the record to be updated doesn't exist | ||
| 127 | +func UpdateSolveSolutionImageById(m *SolveSolutionImage) (err error) { | ||
| 128 | + o := orm.NewOrm() | ||
| 129 | + v := SolveSolutionImage{Id: m.Id} | ||
| 130 | + // ascertain id exists in the database | ||
| 131 | + if err = o.Read(&v); err == nil { | ||
| 132 | + var num int64 | ||
| 133 | + if num, err = o.Update(m); err == nil { | ||
| 134 | + fmt.Println("Number of records updated in database:", num) | ||
| 135 | + } | ||
| 136 | + } | ||
| 137 | + return | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +// DeleteSolveSolutionImage deletes SolveSolutionImage by Id and returns error if | ||
| 141 | +// the record to be deleted doesn't exist | ||
| 142 | +func DeleteSolveSolutionImage(id int) (err error) { | ||
| 143 | + o := orm.NewOrm() | ||
| 144 | + v := SolveSolutionImage{Id: id} | ||
| 145 | + // ascertain id exists in the database | ||
| 146 | + if err = o.Read(&v); err == nil { | ||
| 147 | + var num int64 | ||
| 148 | + if num, err = o.Delete(&SolveSolutionImage{Id: id}); err == nil { | ||
| 149 | + fmt.Println("Number of records deleted in database:", num) | ||
| 150 | + } | ||
| 151 | + } | ||
| 152 | + return | ||
| 153 | +} |
models/user_announcement_rela.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserAnnouncementRela struct { | ||
| 14 | + Id int `orm:"column(id);pk" description:"主键ID"` | ||
| 15 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add" description:"创建时间"` | ||
| 16 | + Uid int64 `orm:"column(uid)" description:"消息标题"` | ||
| 17 | + Aid int64 `orm:"column(aid)"` | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func (t *UserAnnouncementRela) TableName() string { | ||
| 21 | + return "user_announcement_rela" | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func init() { | ||
| 25 | + orm.RegisterModel(new(UserAnnouncementRela)) | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +// AddUserAnnouncementRela insert a new UserAnnouncementRela into database and returns | ||
| 29 | +// last inserted Id on success. | ||
| 30 | +func AddUserAnnouncementRela(m *UserAnnouncementRela) (id int64, err error) { | ||
| 31 | + o := orm.NewOrm() | ||
| 32 | + id, err = o.Insert(m) | ||
| 33 | + return | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +// GetUserAnnouncementRelaById retrieves UserAnnouncementRela by Id. Returns error if | ||
| 37 | +// Id doesn't exist | ||
| 38 | +func GetUserAnnouncementRelaById(id int) (v *UserAnnouncementRela, err error) { | ||
| 39 | + o := orm.NewOrm() | ||
| 40 | + v = &UserAnnouncementRela{Id: id} | ||
| 41 | + if err = o.Read(v); err == nil { | ||
| 42 | + return v, nil | ||
| 43 | + } | ||
| 44 | + return nil, err | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +// GetAllUserAnnouncementRela retrieves all UserAnnouncementRela matches certain condition. Returns empty list if | ||
| 48 | +// no records exist | ||
| 49 | +func GetAllUserAnnouncementRela(query map[string]string, fields []string, sortby []string, order []string, | ||
| 50 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 51 | + o := orm.NewOrm() | ||
| 52 | + qs := o.QueryTable(new(UserAnnouncementRela)) | ||
| 53 | + // query k=v | ||
| 54 | + for k, v := range query { | ||
| 55 | + // rewrite dot-notation to Object__Attribute | ||
| 56 | + k = strings.Replace(k, ".", "__", -1) | ||
| 57 | + if strings.Contains(k, "isnull") { | ||
| 58 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 59 | + } else { | ||
| 60 | + qs = qs.Filter(k, v) | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | + // order by: | ||
| 64 | + var sortFields []string | ||
| 65 | + if len(sortby) != 0 { | ||
| 66 | + if len(sortby) == len(order) { | ||
| 67 | + // 1) for each sort field, there is an associated order | ||
| 68 | + for i, v := range sortby { | ||
| 69 | + orderby := "" | ||
| 70 | + if order[i] == "desc" { | ||
| 71 | + orderby = "-" + v | ||
| 72 | + } else if order[i] == "asc" { | ||
| 73 | + orderby = v | ||
| 74 | + } else { | ||
| 75 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 76 | + } | ||
| 77 | + sortFields = append(sortFields, orderby) | ||
| 78 | + } | ||
| 79 | + qs = qs.OrderBy(sortFields...) | ||
| 80 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 81 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 82 | + for _, v := range sortby { | ||
| 83 | + orderby := "" | ||
| 84 | + if order[0] == "desc" { | ||
| 85 | + orderby = "-" + v | ||
| 86 | + } else if order[0] == "asc" { | ||
| 87 | + orderby = v | ||
| 88 | + } else { | ||
| 89 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 90 | + } | ||
| 91 | + sortFields = append(sortFields, orderby) | ||
| 92 | + } | ||
| 93 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 94 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 95 | + } | ||
| 96 | + } else { | ||
| 97 | + if len(order) != 0 { | ||
| 98 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + var l []UserAnnouncementRela | ||
| 103 | + qs = qs.OrderBy(sortFields...) | ||
| 104 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 105 | + if len(fields) == 0 { | ||
| 106 | + for _, v := range l { | ||
| 107 | + ml = append(ml, v) | ||
| 108 | + } | ||
| 109 | + } else { | ||
| 110 | + // trim unused fields | ||
| 111 | + for _, v := range l { | ||
| 112 | + m := make(map[string]interface{}) | ||
| 113 | + val := reflect.ValueOf(v) | ||
| 114 | + for _, fname := range fields { | ||
| 115 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 116 | + } | ||
| 117 | + ml = append(ml, m) | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | + return ml, nil | ||
| 121 | + } | ||
| 122 | + return nil, err | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | +// UpdateUserAnnouncementRela updates UserAnnouncementRela by Id and returns error if | ||
| 126 | +// the record to be updated doesn't exist | ||
| 127 | +func UpdateUserAnnouncementRelaById(m *UserAnnouncementRela) (err error) { | ||
| 128 | + o := orm.NewOrm() | ||
| 129 | + v := UserAnnouncementRela{Id: m.Id} | ||
| 130 | + // ascertain id exists in the database | ||
| 131 | + if err = o.Read(&v); err == nil { | ||
| 132 | + var num int64 | ||
| 133 | + if num, err = o.Update(m); err == nil { | ||
| 134 | + fmt.Println("Number of records updated in database:", num) | ||
| 135 | + } | ||
| 136 | + } | ||
| 137 | + return | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +// DeleteUserAnnouncementRela deletes UserAnnouncementRela by Id and returns error if | ||
| 141 | +// the record to be deleted doesn't exist | ||
| 142 | +func DeleteUserAnnouncementRela(id int) (err error) { | ||
| 143 | + o := orm.NewOrm() | ||
| 144 | + v := UserAnnouncementRela{Id: id} | ||
| 145 | + // ascertain id exists in the database | ||
| 146 | + if err = o.Read(&v); err == nil { | ||
| 147 | + var num int64 | ||
| 148 | + if num, err = o.Delete(&UserAnnouncementRela{Id: id}); err == nil { | ||
| 149 | + fmt.Println("Number of records deleted in database:", num) | ||
| 150 | + } | ||
| 151 | + } | ||
| 152 | + return | ||
| 153 | +} |
models/user_bulletin_rela.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserBulletinRela struct { | ||
| 14 | + Id int `orm:"column(id);pk" description:"主键ID"` | ||
| 15 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add" description:"创建时间"` | ||
| 16 | + Uid int64 `orm:"column(uid)" description:"消息标题"` | ||
| 17 | + Aid int64 `orm:"column(aid)"` | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func (t *UserBulletinRela) TableName() string { | ||
| 21 | + return "user_bulletin_rela" | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func init() { | ||
| 25 | + orm.RegisterModel(new(UserBulletinRela)) | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +// AddUserBulletinRela insert a new UserBulletinRela into database and returns | ||
| 29 | +// last inserted Id on success. | ||
| 30 | +func AddUserBulletinRela(m *UserBulletinRela) (id int64, err error) { | ||
| 31 | + o := orm.NewOrm() | ||
| 32 | + id, err = o.Insert(m) | ||
| 33 | + return | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +// GetUserBulletinRelaById retrieves UserBulletinRela by Id. Returns error if | ||
| 37 | +// Id doesn't exist | ||
| 38 | +func GetUserBulletinRelaById(id int) (v *UserBulletinRela, err error) { | ||
| 39 | + o := orm.NewOrm() | ||
| 40 | + v = &UserBulletinRela{Id: id} | ||
| 41 | + if err = o.Read(v); err == nil { | ||
| 42 | + return v, nil | ||
| 43 | + } | ||
| 44 | + return nil, err | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +// GetAllUserBulletinRela retrieves all UserBulletinRela matches certain condition. Returns empty list if | ||
| 48 | +// no records exist | ||
| 49 | +func GetAllUserBulletinRela(query map[string]string, fields []string, sortby []string, order []string, | ||
| 50 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 51 | + o := orm.NewOrm() | ||
| 52 | + qs := o.QueryTable(new(UserBulletinRela)) | ||
| 53 | + // query k=v | ||
| 54 | + for k, v := range query { | ||
| 55 | + // rewrite dot-notation to Object__Attribute | ||
| 56 | + k = strings.Replace(k, ".", "__", -1) | ||
| 57 | + if strings.Contains(k, "isnull") { | ||
| 58 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 59 | + } else { | ||
| 60 | + qs = qs.Filter(k, v) | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | + // order by: | ||
| 64 | + var sortFields []string | ||
| 65 | + if len(sortby) != 0 { | ||
| 66 | + if len(sortby) == len(order) { | ||
| 67 | + // 1) for each sort field, there is an associated order | ||
| 68 | + for i, v := range sortby { | ||
| 69 | + orderby := "" | ||
| 70 | + if order[i] == "desc" { | ||
| 71 | + orderby = "-" + v | ||
| 72 | + } else if order[i] == "asc" { | ||
| 73 | + orderby = v | ||
| 74 | + } else { | ||
| 75 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 76 | + } | ||
| 77 | + sortFields = append(sortFields, orderby) | ||
| 78 | + } | ||
| 79 | + qs = qs.OrderBy(sortFields...) | ||
| 80 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 81 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 82 | + for _, v := range sortby { | ||
| 83 | + orderby := "" | ||
| 84 | + if order[0] == "desc" { | ||
| 85 | + orderby = "-" + v | ||
| 86 | + } else if order[0] == "asc" { | ||
| 87 | + orderby = v | ||
| 88 | + } else { | ||
| 89 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 90 | + } | ||
| 91 | + sortFields = append(sortFields, orderby) | ||
| 92 | + } | ||
| 93 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 94 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 95 | + } | ||
| 96 | + } else { | ||
| 97 | + if len(order) != 0 { | ||
| 98 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + var l []UserBulletinRela | ||
| 103 | + qs = qs.OrderBy(sortFields...) | ||
| 104 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 105 | + if len(fields) == 0 { | ||
| 106 | + for _, v := range l { | ||
| 107 | + ml = append(ml, v) | ||
| 108 | + } | ||
| 109 | + } else { | ||
| 110 | + // trim unused fields | ||
| 111 | + for _, v := range l { | ||
| 112 | + m := make(map[string]interface{}) | ||
| 113 | + val := reflect.ValueOf(v) | ||
| 114 | + for _, fname := range fields { | ||
| 115 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 116 | + } | ||
| 117 | + ml = append(ml, m) | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | + return ml, nil | ||
| 121 | + } | ||
| 122 | + return nil, err | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | +// UpdateUserBulletinRela updates UserBulletinRela by Id and returns error if | ||
| 126 | +// the record to be updated doesn't exist | ||
| 127 | +func UpdateUserBulletinRelaById(m *UserBulletinRela) (err error) { | ||
| 128 | + o := orm.NewOrm() | ||
| 129 | + v := UserBulletinRela{Id: m.Id} | ||
| 130 | + // ascertain id exists in the database | ||
| 131 | + if err = o.Read(&v); err == nil { | ||
| 132 | + var num int64 | ||
| 133 | + if num, err = o.Update(m); err == nil { | ||
| 134 | + fmt.Println("Number of records updated in database:", num) | ||
| 135 | + } | ||
| 136 | + } | ||
| 137 | + return | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +// DeleteUserBulletinRela deletes UserBulletinRela by Id and returns error if | ||
| 141 | +// the record to be deleted doesn't exist | ||
| 142 | +func DeleteUserBulletinRela(id int) (err error) { | ||
| 143 | + o := orm.NewOrm() | ||
| 144 | + v := UserBulletinRela{Id: id} | ||
| 145 | + // ascertain id exists in the database | ||
| 146 | + if err = o.Read(&v); err == nil { | ||
| 147 | + var num int64 | ||
| 148 | + if num, err = o.Delete(&UserBulletinRela{Id: id}); err == nil { | ||
| 149 | + fmt.Println("Number of records deleted in database:", num) | ||
| 150 | + } | ||
| 151 | + } | ||
| 152 | + return | ||
| 153 | +} |
models/user_click_logs.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserClickLogs struct { | ||
| 14 | + Id int `orm:"column(id);pk" description:"主键ID"` | ||
| 15 | + Uid int64 `orm:"column(uid)" description:"用户ID"` | ||
| 16 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add" description:"创建时间"` | ||
| 17 | + Type int64 `orm:"column(type)" description:"消息标题"` | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func (t *UserClickLogs) TableName() string { | ||
| 21 | + return "user_click_logs" | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func init() { | ||
| 25 | + orm.RegisterModel(new(UserClickLogs)) | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +// AddUserClickLogs insert a new UserClickLogs into database and returns | ||
| 29 | +// last inserted Id on success. | ||
| 30 | +func AddUserClickLogs(m *UserClickLogs) (id int64, err error) { | ||
| 31 | + o := orm.NewOrm() | ||
| 32 | + id, err = o.Insert(m) | ||
| 33 | + return | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +// GetUserClickLogsById retrieves UserClickLogs by Id. Returns error if | ||
| 37 | +// Id doesn't exist | ||
| 38 | +func GetUserClickLogsById(id int) (v *UserClickLogs, err error) { | ||
| 39 | + o := orm.NewOrm() | ||
| 40 | + v = &UserClickLogs{Id: id} | ||
| 41 | + if err = o.Read(v); err == nil { | ||
| 42 | + return v, nil | ||
| 43 | + } | ||
| 44 | + return nil, err | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +// GetAllUserClickLogs retrieves all UserClickLogs matches certain condition. Returns empty list if | ||
| 48 | +// no records exist | ||
| 49 | +func GetAllUserClickLogs(query map[string]string, fields []string, sortby []string, order []string, | ||
| 50 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 51 | + o := orm.NewOrm() | ||
| 52 | + qs := o.QueryTable(new(UserClickLogs)) | ||
| 53 | + // query k=v | ||
| 54 | + for k, v := range query { | ||
| 55 | + // rewrite dot-notation to Object__Attribute | ||
| 56 | + k = strings.Replace(k, ".", "__", -1) | ||
| 57 | + if strings.Contains(k, "isnull") { | ||
| 58 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 59 | + } else { | ||
| 60 | + qs = qs.Filter(k, v) | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | + // order by: | ||
| 64 | + var sortFields []string | ||
| 65 | + if len(sortby) != 0 { | ||
| 66 | + if len(sortby) == len(order) { | ||
| 67 | + // 1) for each sort field, there is an associated order | ||
| 68 | + for i, v := range sortby { | ||
| 69 | + orderby := "" | ||
| 70 | + if order[i] == "desc" { | ||
| 71 | + orderby = "-" + v | ||
| 72 | + } else if order[i] == "asc" { | ||
| 73 | + orderby = v | ||
| 74 | + } else { | ||
| 75 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 76 | + } | ||
| 77 | + sortFields = append(sortFields, orderby) | ||
| 78 | + } | ||
| 79 | + qs = qs.OrderBy(sortFields...) | ||
| 80 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 81 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 82 | + for _, v := range sortby { | ||
| 83 | + orderby := "" | ||
| 84 | + if order[0] == "desc" { | ||
| 85 | + orderby = "-" + v | ||
| 86 | + } else if order[0] == "asc" { | ||
| 87 | + orderby = v | ||
| 88 | + } else { | ||
| 89 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 90 | + } | ||
| 91 | + sortFields = append(sortFields, orderby) | ||
| 92 | + } | ||
| 93 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 94 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 95 | + } | ||
| 96 | + } else { | ||
| 97 | + if len(order) != 0 { | ||
| 98 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + var l []UserClickLogs | ||
| 103 | + qs = qs.OrderBy(sortFields...) | ||
| 104 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 105 | + if len(fields) == 0 { | ||
| 106 | + for _, v := range l { | ||
| 107 | + ml = append(ml, v) | ||
| 108 | + } | ||
| 109 | + } else { | ||
| 110 | + // trim unused fields | ||
| 111 | + for _, v := range l { | ||
| 112 | + m := make(map[string]interface{}) | ||
| 113 | + val := reflect.ValueOf(v) | ||
| 114 | + for _, fname := range fields { | ||
| 115 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 116 | + } | ||
| 117 | + ml = append(ml, m) | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | + return ml, nil | ||
| 121 | + } | ||
| 122 | + return nil, err | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | +// UpdateUserClickLogs updates UserClickLogs by Id and returns error if | ||
| 126 | +// the record to be updated doesn't exist | ||
| 127 | +func UpdateUserClickLogsById(m *UserClickLogs) (err error) { | ||
| 128 | + o := orm.NewOrm() | ||
| 129 | + v := UserClickLogs{Id: m.Id} | ||
| 130 | + // ascertain id exists in the database | ||
| 131 | + if err = o.Read(&v); err == nil { | ||
| 132 | + var num int64 | ||
| 133 | + if num, err = o.Update(m); err == nil { | ||
| 134 | + fmt.Println("Number of records updated in database:", num) | ||
| 135 | + } | ||
| 136 | + } | ||
| 137 | + return | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +// DeleteUserClickLogs deletes UserClickLogs by Id and returns error if | ||
| 141 | +// the record to be deleted doesn't exist | ||
| 142 | +func DeleteUserClickLogs(id int) (err error) { | ||
| 143 | + o := orm.NewOrm() | ||
| 144 | + v := UserClickLogs{Id: id} | ||
| 145 | + // ascertain id exists in the database | ||
| 146 | + if err = o.Read(&v); err == nil { | ||
| 147 | + var num int64 | ||
| 148 | + if num, err = o.Delete(&UserClickLogs{Id: id}); err == nil { | ||
| 149 | + fmt.Println("Number of records deleted in database:", num) | ||
| 150 | + } | ||
| 151 | + } | ||
| 152 | + return | ||
| 153 | +} |
models/user_commend.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserCommend struct { | ||
| 14 | + Id int `orm:"column(id);pk"` | ||
| 15 | + Uid int64 `orm:"column(uid);null" description:"接收消息的用户ID"` | ||
| 16 | + Cid int64 `orm:"column(cid)" description:"表彰ID"` | ||
| 17 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);null;auto_now_add" description:"显示的时间"` | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func (t *UserCommend) TableName() string { | ||
| 21 | + return "user_commend" | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func init() { | ||
| 25 | + orm.RegisterModel(new(UserCommend)) | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +// AddUserCommend insert a new UserCommend into database and returns | ||
| 29 | +// last inserted Id on success. | ||
| 30 | +func AddUserCommend(m *UserCommend) (id int64, err error) { | ||
| 31 | + o := orm.NewOrm() | ||
| 32 | + id, err = o.Insert(m) | ||
| 33 | + return | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +// GetUserCommendById retrieves UserCommend by Id. Returns error if | ||
| 37 | +// Id doesn't exist | ||
| 38 | +func GetUserCommendById(id int) (v *UserCommend, err error) { | ||
| 39 | + o := orm.NewOrm() | ||
| 40 | + v = &UserCommend{Id: id} | ||
| 41 | + if err = o.Read(v); err == nil { | ||
| 42 | + return v, nil | ||
| 43 | + } | ||
| 44 | + return nil, err | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +// GetAllUserCommend retrieves all UserCommend matches certain condition. Returns empty list if | ||
| 48 | +// no records exist | ||
| 49 | +func GetAllUserCommend(query map[string]string, fields []string, sortby []string, order []string, | ||
| 50 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 51 | + o := orm.NewOrm() | ||
| 52 | + qs := o.QueryTable(new(UserCommend)) | ||
| 53 | + // query k=v | ||
| 54 | + for k, v := range query { | ||
| 55 | + // rewrite dot-notation to Object__Attribute | ||
| 56 | + k = strings.Replace(k, ".", "__", -1) | ||
| 57 | + if strings.Contains(k, "isnull") { | ||
| 58 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 59 | + } else { | ||
| 60 | + qs = qs.Filter(k, v) | ||
| 61 | + } | ||
| 62 | + } | ||
| 63 | + // order by: | ||
| 64 | + var sortFields []string | ||
| 65 | + if len(sortby) != 0 { | ||
| 66 | + if len(sortby) == len(order) { | ||
| 67 | + // 1) for each sort field, there is an associated order | ||
| 68 | + for i, v := range sortby { | ||
| 69 | + orderby := "" | ||
| 70 | + if order[i] == "desc" { | ||
| 71 | + orderby = "-" + v | ||
| 72 | + } else if order[i] == "asc" { | ||
| 73 | + orderby = v | ||
| 74 | + } else { | ||
| 75 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 76 | + } | ||
| 77 | + sortFields = append(sortFields, orderby) | ||
| 78 | + } | ||
| 79 | + qs = qs.OrderBy(sortFields...) | ||
| 80 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 81 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 82 | + for _, v := range sortby { | ||
| 83 | + orderby := "" | ||
| 84 | + if order[0] == "desc" { | ||
| 85 | + orderby = "-" + v | ||
| 86 | + } else if order[0] == "asc" { | ||
| 87 | + orderby = v | ||
| 88 | + } else { | ||
| 89 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 90 | + } | ||
| 91 | + sortFields = append(sortFields, orderby) | ||
| 92 | + } | ||
| 93 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 94 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 95 | + } | ||
| 96 | + } else { | ||
| 97 | + if len(order) != 0 { | ||
| 98 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + var l []UserCommend | ||
| 103 | + qs = qs.OrderBy(sortFields...) | ||
| 104 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 105 | + if len(fields) == 0 { | ||
| 106 | + for _, v := range l { | ||
| 107 | + ml = append(ml, v) | ||
| 108 | + } | ||
| 109 | + } else { | ||
| 110 | + // trim unused fields | ||
| 111 | + for _, v := range l { | ||
| 112 | + m := make(map[string]interface{}) | ||
| 113 | + val := reflect.ValueOf(v) | ||
| 114 | + for _, fname := range fields { | ||
| 115 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 116 | + } | ||
| 117 | + ml = append(ml, m) | ||
| 118 | + } | ||
| 119 | + } | ||
| 120 | + return ml, nil | ||
| 121 | + } | ||
| 122 | + return nil, err | ||
| 123 | +} | ||
| 124 | + | ||
| 125 | +// UpdateUserCommend updates UserCommend by Id and returns error if | ||
| 126 | +// the record to be updated doesn't exist | ||
| 127 | +func UpdateUserCommendById(m *UserCommend) (err error) { | ||
| 128 | + o := orm.NewOrm() | ||
| 129 | + v := UserCommend{Id: m.Id} | ||
| 130 | + // ascertain id exists in the database | ||
| 131 | + if err = o.Read(&v); err == nil { | ||
| 132 | + var num int64 | ||
| 133 | + if num, err = o.Update(m); err == nil { | ||
| 134 | + fmt.Println("Number of records updated in database:", num) | ||
| 135 | + } | ||
| 136 | + } | ||
| 137 | + return | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +// DeleteUserCommend deletes UserCommend by Id and returns error if | ||
| 141 | +// the record to be deleted doesn't exist | ||
| 142 | +func DeleteUserCommend(id int) (err error) { | ||
| 143 | + o := orm.NewOrm() | ||
| 144 | + v := UserCommend{Id: id} | ||
| 145 | + // ascertain id exists in the database | ||
| 146 | + if err = o.Read(&v); err == nil { | ||
| 147 | + var num int64 | ||
| 148 | + if num, err = o.Delete(&UserCommend{Id: id}); err == nil { | ||
| 149 | + fmt.Println("Number of records deleted in database:", num) | ||
| 150 | + } | ||
| 151 | + } | ||
| 152 | + return | ||
| 153 | +} |
models/user_info.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserInfo struct { | ||
| 14 | + Id int `orm:"column(uid);pk" description:"用户ID"` | ||
| 15 | + Uname string `orm:"column(uname);size(100)" description:"名称"` | ||
| 16 | + Icon string `orm:"column(icon);size(128)" description:"头像"` | ||
| 17 | + Width int `orm:"column(width)" description:"宽度"` | ||
| 18 | + Height int `orm:"column(height)" description:"高度"` | ||
| 19 | + Thumbnail string `orm:"column(thumbnail);size(128)" description:"缩略图"` | ||
| 20 | + Phone string `orm:"column(phone);size(40)" description:"手机号码"` | ||
| 21 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add"` | ||
| 22 | + Passwd string `orm:"column(passwd);size(128)" description:"密码 sha1处理"` | ||
| 23 | + State int8 `orm:"column(state)" description:"是否已认证 0未认证 1已认证 "` | ||
| 24 | + Uuid string `orm:"column(uuid);size(128)" description:"用于接收消息推送的标识 设备码"` | ||
| 25 | + ThirdloginCode string `orm:"column(thirdlogin_code);size(200)" description:"第三方登录code"` | ||
| 26 | + Enabled int8 `orm:"column(enabled)" description:"是否有效"` | ||
| 27 | + ImToken string `orm:"column(im_token);size(128)" description:"网易云token"` | ||
| 28 | + CsAccount int64 `orm:"column(cs_account)" description:"客服有话说ID"` | ||
| 29 | + RefreshExp time.Time `orm:"column(refresh_exp);type(timestamp);auto_now_add" description:"refresh token 过期时间"` | ||
| 30 | + AccessExp time.Time `orm:"column(access_exp);type(timestamp);auto_now_add" description:"access token 过期时间"` | ||
| 31 | + AccessToken string `orm:"column(access_token);size(64)" description:"access_token"` | ||
| 32 | + RefreshToken string `orm:"column(refresh_token);size(64)"` | ||
| 33 | + AuthExp time.Time `orm:"column(auth_exp);type(timestamp);auto_now_add" description:"auth_code过期时间"` | ||
| 34 | + Auth string `orm:"column(auth);size(64)" description:"auth_code"` | ||
| 35 | + LastloginTime time.Time `orm:"column(lastlogin_time);type(timestamp);auto_now_add" description:"最后一次登录时间"` | ||
| 36 | + DeviceToken string `orm:"column(device_token);size(128);null" description:"推送标志位"` | ||
| 37 | + ClientId string `orm:"column(client_id);size(128);null" description:"推送标识"` | ||
| 38 | + CompanyId int `orm:"column(company_id)" description:"公司Id"` | ||
| 39 | + DepartmentId int `orm:"column(department_id)" description:"部门id"` | ||
| 40 | + PositionId int `orm:"column(position_id)" description:"职位id"` | ||
| 41 | + Type int8 `orm:"column(type)" description:"1超级管理员 2公司负责人 3普通成员"` | ||
| 42 | + Score int `orm:"column(score)" description:"评分星级"` | ||
| 43 | + Questions int `orm:"column(questions)" description:"提问数"` | ||
| 44 | + Answer int `orm:"column(answer)" description:"回答数"` | ||
| 45 | + RememberToken string `orm:"column(remember_token);size(100);null"` | ||
| 46 | + IsHighlight int8 `orm:"column(is_highlight)" description:"点赞是否高亮 0否 1是"` | ||
| 47 | + ScoreAnalyze int `orm:"column(scoreAnalyze)" description:"分析得分"` | ||
| 48 | + ScoreScheme int `orm:"column(scoreScheme)" description:"解决得分"` | ||
| 49 | + ScoreAsk int `orm:"column(scoreAsk)" description:"提问得分"` | ||
| 50 | + AttrId int `orm:"column(attr_id)" description:"属性id"` | ||
| 51 | + RemainScore int `orm:"column(remain_score)"` | ||
| 52 | + RemainAnalyze int `orm:"column(remain_Analyze)"` | ||
| 53 | + BonusScoreAsk int `orm:"column(bonusScoreAsk)" description:"额外发现得分"` | ||
| 54 | + BonusScoreAnalyze int `orm:"column(bonusScoreAnalyze)" description:"额外分析得分"` | ||
| 55 | + BonusScoreScheme int `orm:"column(bonusScoreScheme)" description:"额外解决得分"` | ||
| 56 | +} | ||
| 57 | + | ||
| 58 | +func (t *UserInfo) TableName() string { | ||
| 59 | + return "user_info" | ||
| 60 | +} | ||
| 61 | + | ||
| 62 | +func init() { | ||
| 63 | + orm.RegisterModel(new(UserInfo)) | ||
| 64 | +} | ||
| 65 | + | ||
| 66 | +// AddUserInfo insert a new UserInfo into database and returns | ||
| 67 | +// last inserted Id on success. | ||
| 68 | +func AddUserInfo(m *UserInfo) (id int64, err error) { | ||
| 69 | + o := orm.NewOrm() | ||
| 70 | + id, err = o.Insert(m) | ||
| 71 | + return | ||
| 72 | +} | ||
| 73 | + | ||
| 74 | +// GetUserInfoById retrieves UserInfo by Id. Returns error if | ||
| 75 | +// Id doesn't exist | ||
| 76 | +func GetUserInfoById(id int) (v *UserInfo, err error) { | ||
| 77 | + o := orm.NewOrm() | ||
| 78 | + v = &UserInfo{Id: id} | ||
| 79 | + if err = o.Read(v); err == nil { | ||
| 80 | + return v, nil | ||
| 81 | + } | ||
| 82 | + return nil, err | ||
| 83 | +} | ||
| 84 | + | ||
| 85 | +// GetAllUserInfo retrieves all UserInfo matches certain condition. Returns empty list if | ||
| 86 | +// no records exist | ||
| 87 | +func GetAllUserInfo(query map[string]string, fields []string, sortby []string, order []string, | ||
| 88 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 89 | + o := orm.NewOrm() | ||
| 90 | + qs := o.QueryTable(new(UserInfo)) | ||
| 91 | + // query k=v | ||
| 92 | + for k, v := range query { | ||
| 93 | + // rewrite dot-notation to Object__Attribute | ||
| 94 | + k = strings.Replace(k, ".", "__", -1) | ||
| 95 | + if strings.Contains(k, "isnull") { | ||
| 96 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 97 | + } else { | ||
| 98 | + qs = qs.Filter(k, v) | ||
| 99 | + } | ||
| 100 | + } | ||
| 101 | + // order by: | ||
| 102 | + var sortFields []string | ||
| 103 | + if len(sortby) != 0 { | ||
| 104 | + if len(sortby) == len(order) { | ||
| 105 | + // 1) for each sort field, there is an associated order | ||
| 106 | + for i, v := range sortby { | ||
| 107 | + orderby := "" | ||
| 108 | + if order[i] == "desc" { | ||
| 109 | + orderby = "-" + v | ||
| 110 | + } else if order[i] == "asc" { | ||
| 111 | + orderby = v | ||
| 112 | + } else { | ||
| 113 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 114 | + } | ||
| 115 | + sortFields = append(sortFields, orderby) | ||
| 116 | + } | ||
| 117 | + qs = qs.OrderBy(sortFields...) | ||
| 118 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 119 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 120 | + for _, v := range sortby { | ||
| 121 | + orderby := "" | ||
| 122 | + if order[0] == "desc" { | ||
| 123 | + orderby = "-" + v | ||
| 124 | + } else if order[0] == "asc" { | ||
| 125 | + orderby = v | ||
| 126 | + } else { | ||
| 127 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 128 | + } | ||
| 129 | + sortFields = append(sortFields, orderby) | ||
| 130 | + } | ||
| 131 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 132 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 133 | + } | ||
| 134 | + } else { | ||
| 135 | + if len(order) != 0 { | ||
| 136 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 137 | + } | ||
| 138 | + } | ||
| 139 | + | ||
| 140 | + var l []UserInfo | ||
| 141 | + qs = qs.OrderBy(sortFields...) | ||
| 142 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 143 | + if len(fields) == 0 { | ||
| 144 | + for _, v := range l { | ||
| 145 | + ml = append(ml, v) | ||
| 146 | + } | ||
| 147 | + } else { | ||
| 148 | + // trim unused fields | ||
| 149 | + for _, v := range l { | ||
| 150 | + m := make(map[string]interface{}) | ||
| 151 | + val := reflect.ValueOf(v) | ||
| 152 | + for _, fname := range fields { | ||
| 153 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 154 | + } | ||
| 155 | + ml = append(ml, m) | ||
| 156 | + } | ||
| 157 | + } | ||
| 158 | + return ml, nil | ||
| 159 | + } | ||
| 160 | + return nil, err | ||
| 161 | +} | ||
| 162 | + | ||
| 163 | +// UpdateUserInfo updates UserInfo by Id and returns error if | ||
| 164 | +// the record to be updated doesn't exist | ||
| 165 | +func UpdateUserInfoById(m *UserInfo) (err error) { | ||
| 166 | + o := orm.NewOrm() | ||
| 167 | + v := UserInfo{Id: m.Id} | ||
| 168 | + // ascertain id exists in the database | ||
| 169 | + if err = o.Read(&v); err == nil { | ||
| 170 | + var num int64 | ||
| 171 | + if num, err = o.Update(m); err == nil { | ||
| 172 | + fmt.Println("Number of records updated in database:", num) | ||
| 173 | + } | ||
| 174 | + } | ||
| 175 | + return | ||
| 176 | +} | ||
| 177 | + | ||
| 178 | +// DeleteUserInfo deletes UserInfo by Id and returns error if | ||
| 179 | +// the record to be deleted doesn't exist | ||
| 180 | +func DeleteUserInfo(id int) (err error) { | ||
| 181 | + o := orm.NewOrm() | ||
| 182 | + v := UserInfo{Id: id} | ||
| 183 | + // ascertain id exists in the database | ||
| 184 | + if err = o.Read(&v); err == nil { | ||
| 185 | + var num int64 | ||
| 186 | + if num, err = o.Delete(&UserInfo{Id: id}); err == nil { | ||
| 187 | + fmt.Println("Number of records deleted in database:", num) | ||
| 188 | + } | ||
| 189 | + } | ||
| 190 | + return | ||
| 191 | +} |
models/user_interact.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserInteract struct { | ||
| 14 | + Id int `orm:"column(id);pk"` | ||
| 15 | + Uid int64 `orm:"column(uid);null" description:"接收消息的用户ID"` | ||
| 16 | + Type int64 `orm:"column(type);null" description:"(0有人提交备选方案,对提问者、1提问被申请解决,对提问者、2提问申请解决被解除,对提问者、3提问申请解决解除,对解决者、4提问被解决,对提问者)"` | ||
| 17 | + Qid int64 `orm:"column(qid)" description:"问题ID"` | ||
| 18 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);null;auto_now_add" description:"显示的时间"` | ||
| 19 | + Sid int64 `orm:"column(sid)" description:"方案ID 无默认为0"` | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +func (t *UserInteract) TableName() string { | ||
| 23 | + return "user_interact" | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +func init() { | ||
| 27 | + orm.RegisterModel(new(UserInteract)) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +// AddUserInteract insert a new UserInteract into database and returns | ||
| 31 | +// last inserted Id on success. | ||
| 32 | +func AddUserInteract(m *UserInteract) (id int64, err error) { | ||
| 33 | + o := orm.NewOrm() | ||
| 34 | + id, err = o.Insert(m) | ||
| 35 | + return | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +// GetUserInteractById retrieves UserInteract by Id. Returns error if | ||
| 39 | +// Id doesn't exist | ||
| 40 | +func GetUserInteractById(id int) (v *UserInteract, err error) { | ||
| 41 | + o := orm.NewOrm() | ||
| 42 | + v = &UserInteract{Id: id} | ||
| 43 | + if err = o.Read(v); err == nil { | ||
| 44 | + return v, nil | ||
| 45 | + } | ||
| 46 | + return nil, err | ||
| 47 | +} | ||
| 48 | + | ||
| 49 | +// GetAllUserInteract retrieves all UserInteract matches certain condition. Returns empty list if | ||
| 50 | +// no records exist | ||
| 51 | +func GetAllUserInteract(query map[string]string, fields []string, sortby []string, order []string, | ||
| 52 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 53 | + o := orm.NewOrm() | ||
| 54 | + qs := o.QueryTable(new(UserInteract)) | ||
| 55 | + // query k=v | ||
| 56 | + for k, v := range query { | ||
| 57 | + // rewrite dot-notation to Object__Attribute | ||
| 58 | + k = strings.Replace(k, ".", "__", -1) | ||
| 59 | + if strings.Contains(k, "isnull") { | ||
| 60 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 61 | + } else { | ||
| 62 | + qs = qs.Filter(k, v) | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + // order by: | ||
| 66 | + var sortFields []string | ||
| 67 | + if len(sortby) != 0 { | ||
| 68 | + if len(sortby) == len(order) { | ||
| 69 | + // 1) for each sort field, there is an associated order | ||
| 70 | + for i, v := range sortby { | ||
| 71 | + orderby := "" | ||
| 72 | + if order[i] == "desc" { | ||
| 73 | + orderby = "-" + v | ||
| 74 | + } else if order[i] == "asc" { | ||
| 75 | + orderby = v | ||
| 76 | + } else { | ||
| 77 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 78 | + } | ||
| 79 | + sortFields = append(sortFields, orderby) | ||
| 80 | + } | ||
| 81 | + qs = qs.OrderBy(sortFields...) | ||
| 82 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 83 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 84 | + for _, v := range sortby { | ||
| 85 | + orderby := "" | ||
| 86 | + if order[0] == "desc" { | ||
| 87 | + orderby = "-" + v | ||
| 88 | + } else if order[0] == "asc" { | ||
| 89 | + orderby = v | ||
| 90 | + } else { | ||
| 91 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 92 | + } | ||
| 93 | + sortFields = append(sortFields, orderby) | ||
| 94 | + } | ||
| 95 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 96 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 97 | + } | ||
| 98 | + } else { | ||
| 99 | + if len(order) != 0 { | ||
| 100 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 101 | + } | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + var l []UserInteract | ||
| 105 | + qs = qs.OrderBy(sortFields...) | ||
| 106 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 107 | + if len(fields) == 0 { | ||
| 108 | + for _, v := range l { | ||
| 109 | + ml = append(ml, v) | ||
| 110 | + } | ||
| 111 | + } else { | ||
| 112 | + // trim unused fields | ||
| 113 | + for _, v := range l { | ||
| 114 | + m := make(map[string]interface{}) | ||
| 115 | + val := reflect.ValueOf(v) | ||
| 116 | + for _, fname := range fields { | ||
| 117 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 118 | + } | ||
| 119 | + ml = append(ml, m) | ||
| 120 | + } | ||
| 121 | + } | ||
| 122 | + return ml, nil | ||
| 123 | + } | ||
| 124 | + return nil, err | ||
| 125 | +} | ||
| 126 | + | ||
| 127 | +// UpdateUserInteract updates UserInteract by Id and returns error if | ||
| 128 | +// the record to be updated doesn't exist | ||
| 129 | +func UpdateUserInteractById(m *UserInteract) (err error) { | ||
| 130 | + o := orm.NewOrm() | ||
| 131 | + v := UserInteract{Id: m.Id} | ||
| 132 | + // ascertain id exists in the database | ||
| 133 | + if err = o.Read(&v); err == nil { | ||
| 134 | + var num int64 | ||
| 135 | + if num, err = o.Update(m); err == nil { | ||
| 136 | + fmt.Println("Number of records updated in database:", num) | ||
| 137 | + } | ||
| 138 | + } | ||
| 139 | + return | ||
| 140 | +} | ||
| 141 | + | ||
| 142 | +// DeleteUserInteract deletes UserInteract by Id and returns error if | ||
| 143 | +// the record to be deleted doesn't exist | ||
| 144 | +func DeleteUserInteract(id int) (err error) { | ||
| 145 | + o := orm.NewOrm() | ||
| 146 | + v := UserInteract{Id: id} | ||
| 147 | + // ascertain id exists in the database | ||
| 148 | + if err = o.Read(&v); err == nil { | ||
| 149 | + var num int64 | ||
| 150 | + if num, err = o.Delete(&UserInteract{Id: id}); err == nil { | ||
| 151 | + fmt.Println("Number of records deleted in database:", num) | ||
| 152 | + } | ||
| 153 | + } | ||
| 154 | + return | ||
| 155 | +} |
models/user_msg.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserMsg struct { | ||
| 14 | + Id int `orm:"column(msgId);pk" description:"主键ID"` | ||
| 15 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add" description:"创建时间"` | ||
| 16 | + MsgTitle string `orm:"column(msgTitle);null" description:"消息标题"` | ||
| 17 | + Uid int64 `orm:"column(uid)"` | ||
| 18 | + Ext int64 `orm:"column(ext);null" description:"对应ID"` | ||
| 19 | + Enabled int `orm:"column(enabled);null" description:"是否公开 1公开 0不公开"` | ||
| 20 | + MsgType int `orm:"column(msgType)" description:"公司公告 1、星数变动2、表彰通知4、互动消息8、待评分16"` | ||
| 21 | + IsRead int `orm:"column(isRead);null" description:"0未读 1已读"` | ||
| 22 | + CompanyId int64 `orm:"column(company_id);null"` | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +func (t *UserMsg) TableName() string { | ||
| 26 | + return "user_msg" | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +func init() { | ||
| 30 | + orm.RegisterModel(new(UserMsg)) | ||
| 31 | +} | ||
| 32 | + | ||
| 33 | +// AddUserMsg insert a new UserMsg into database and returns | ||
| 34 | +// last inserted Id on success. | ||
| 35 | +func AddUserMsg(m *UserMsg) (id int64, err error) { | ||
| 36 | + o := orm.NewOrm() | ||
| 37 | + id, err = o.Insert(m) | ||
| 38 | + return | ||
| 39 | +} | ||
| 40 | + | ||
| 41 | +// GetUserMsgById retrieves UserMsg by Id. Returns error if | ||
| 42 | +// Id doesn't exist | ||
| 43 | +func GetUserMsgById(id int) (v *UserMsg, err error) { | ||
| 44 | + o := orm.NewOrm() | ||
| 45 | + v = &UserMsg{Id: id} | ||
| 46 | + if err = o.Read(v); err == nil { | ||
| 47 | + return v, nil | ||
| 48 | + } | ||
| 49 | + return nil, err | ||
| 50 | +} | ||
| 51 | + | ||
| 52 | +// GetAllUserMsg retrieves all UserMsg matches certain condition. Returns empty list if | ||
| 53 | +// no records exist | ||
| 54 | +func GetAllUserMsg(query map[string]string, fields []string, sortby []string, order []string, | ||
| 55 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 56 | + o := orm.NewOrm() | ||
| 57 | + qs := o.QueryTable(new(UserMsg)) | ||
| 58 | + // query k=v | ||
| 59 | + for k, v := range query { | ||
| 60 | + // rewrite dot-notation to Object__Attribute | ||
| 61 | + k = strings.Replace(k, ".", "__", -1) | ||
| 62 | + if strings.Contains(k, "isnull") { | ||
| 63 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 64 | + } else { | ||
| 65 | + qs = qs.Filter(k, v) | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | + // order by: | ||
| 69 | + var sortFields []string | ||
| 70 | + if len(sortby) != 0 { | ||
| 71 | + if len(sortby) == len(order) { | ||
| 72 | + // 1) for each sort field, there is an associated order | ||
| 73 | + for i, v := range sortby { | ||
| 74 | + orderby := "" | ||
| 75 | + if order[i] == "desc" { | ||
| 76 | + orderby = "-" + v | ||
| 77 | + } else if order[i] == "asc" { | ||
| 78 | + orderby = v | ||
| 79 | + } else { | ||
| 80 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 81 | + } | ||
| 82 | + sortFields = append(sortFields, orderby) | ||
| 83 | + } | ||
| 84 | + qs = qs.OrderBy(sortFields...) | ||
| 85 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 86 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 87 | + for _, v := range sortby { | ||
| 88 | + orderby := "" | ||
| 89 | + if order[0] == "desc" { | ||
| 90 | + orderby = "-" + v | ||
| 91 | + } else if order[0] == "asc" { | ||
| 92 | + orderby = v | ||
| 93 | + } else { | ||
| 94 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 95 | + } | ||
| 96 | + sortFields = append(sortFields, orderby) | ||
| 97 | + } | ||
| 98 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 99 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 100 | + } | ||
| 101 | + } else { | ||
| 102 | + if len(order) != 0 { | ||
| 103 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 104 | + } | ||
| 105 | + } | ||
| 106 | + | ||
| 107 | + var l []UserMsg | ||
| 108 | + qs = qs.OrderBy(sortFields...) | ||
| 109 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 110 | + if len(fields) == 0 { | ||
| 111 | + for _, v := range l { | ||
| 112 | + ml = append(ml, v) | ||
| 113 | + } | ||
| 114 | + } else { | ||
| 115 | + // trim unused fields | ||
| 116 | + for _, v := range l { | ||
| 117 | + m := make(map[string]interface{}) | ||
| 118 | + val := reflect.ValueOf(v) | ||
| 119 | + for _, fname := range fields { | ||
| 120 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 121 | + } | ||
| 122 | + ml = append(ml, m) | ||
| 123 | + } | ||
| 124 | + } | ||
| 125 | + return ml, nil | ||
| 126 | + } | ||
| 127 | + return nil, err | ||
| 128 | +} | ||
| 129 | + | ||
| 130 | +// UpdateUserMsg updates UserMsg by Id and returns error if | ||
| 131 | +// the record to be updated doesn't exist | ||
| 132 | +func UpdateUserMsgById(m *UserMsg) (err error) { | ||
| 133 | + o := orm.NewOrm() | ||
| 134 | + v := UserMsg{Id: m.Id} | ||
| 135 | + // ascertain id exists in the database | ||
| 136 | + if err = o.Read(&v); err == nil { | ||
| 137 | + var num int64 | ||
| 138 | + if num, err = o.Update(m); err == nil { | ||
| 139 | + fmt.Println("Number of records updated in database:", num) | ||
| 140 | + } | ||
| 141 | + } | ||
| 142 | + return | ||
| 143 | +} | ||
| 144 | + | ||
| 145 | +// DeleteUserMsg deletes UserMsg by Id and returns error if | ||
| 146 | +// the record to be deleted doesn't exist | ||
| 147 | +func DeleteUserMsg(id int) (err error) { | ||
| 148 | + o := orm.NewOrm() | ||
| 149 | + v := UserMsg{Id: id} | ||
| 150 | + // ascertain id exists in the database | ||
| 151 | + if err = o.Read(&v); err == nil { | ||
| 152 | + var num int64 | ||
| 153 | + if num, err = o.Delete(&UserMsg{Id: id}); err == nil { | ||
| 154 | + fmt.Println("Number of records deleted in database:", num) | ||
| 155 | + } | ||
| 156 | + } | ||
| 157 | + return | ||
| 158 | +} |
models/user_permissions.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserPermissions struct { | ||
| 14 | + Id int `orm:"column(id);auto"` | ||
| 15 | + UserId int64 `orm:"column(user_id)" description:"用户id"` | ||
| 16 | + PermissionId int `orm:"column(permission_id)" description:"权限id (关联的部门id) 菜单权限(-1 成员管理,-2 职位管理,-3 部门管理,-4 表彰管理,-5 提问管理 -6 成员属性 -7 额外加分 -8 数据导出管理)"` | ||
| 17 | + Type int8 `orm:"column(type)" description:"权限类型 1菜单权限 2查看权限 3评分权限 4解决权限"` | ||
| 18 | + CreateTime time.Time `orm:"column(create_time);type(timestamp);null"` | ||
| 19 | + Enabled int8 `orm:"column(enabled)"` | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +func (t *UserPermissions) TableName() string { | ||
| 23 | + return "user_permissions" | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +func init() { | ||
| 27 | + orm.RegisterModel(new(UserPermissions)) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +// AddUserPermissions insert a new UserPermissions into database and returns | ||
| 31 | +// last inserted Id on success. | ||
| 32 | +func AddUserPermissions(m *UserPermissions) (id int64, err error) { | ||
| 33 | + o := orm.NewOrm() | ||
| 34 | + id, err = o.Insert(m) | ||
| 35 | + return | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +// GetUserPermissionsById retrieves UserPermissions by Id. Returns error if | ||
| 39 | +// Id doesn't exist | ||
| 40 | +func GetUserPermissionsById(id int) (v *UserPermissions, err error) { | ||
| 41 | + o := orm.NewOrm() | ||
| 42 | + v = &UserPermissions{Id: id} | ||
| 43 | + if err = o.Read(v); err == nil { | ||
| 44 | + return v, nil | ||
| 45 | + } | ||
| 46 | + return nil, err | ||
| 47 | +} | ||
| 48 | + | ||
| 49 | +// GetAllUserPermissions retrieves all UserPermissions matches certain condition. Returns empty list if | ||
| 50 | +// no records exist | ||
| 51 | +func GetAllUserPermissions(query map[string]string, fields []string, sortby []string, order []string, | ||
| 52 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 53 | + o := orm.NewOrm() | ||
| 54 | + qs := o.QueryTable(new(UserPermissions)) | ||
| 55 | + // query k=v | ||
| 56 | + for k, v := range query { | ||
| 57 | + // rewrite dot-notation to Object__Attribute | ||
| 58 | + k = strings.Replace(k, ".", "__", -1) | ||
| 59 | + if strings.Contains(k, "isnull") { | ||
| 60 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 61 | + } else { | ||
| 62 | + qs = qs.Filter(k, v) | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + // order by: | ||
| 66 | + var sortFields []string | ||
| 67 | + if len(sortby) != 0 { | ||
| 68 | + if len(sortby) == len(order) { | ||
| 69 | + // 1) for each sort field, there is an associated order | ||
| 70 | + for i, v := range sortby { | ||
| 71 | + orderby := "" | ||
| 72 | + if order[i] == "desc" { | ||
| 73 | + orderby = "-" + v | ||
| 74 | + } else if order[i] == "asc" { | ||
| 75 | + orderby = v | ||
| 76 | + } else { | ||
| 77 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 78 | + } | ||
| 79 | + sortFields = append(sortFields, orderby) | ||
| 80 | + } | ||
| 81 | + qs = qs.OrderBy(sortFields...) | ||
| 82 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 83 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 84 | + for _, v := range sortby { | ||
| 85 | + orderby := "" | ||
| 86 | + if order[0] == "desc" { | ||
| 87 | + orderby = "-" + v | ||
| 88 | + } else if order[0] == "asc" { | ||
| 89 | + orderby = v | ||
| 90 | + } else { | ||
| 91 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 92 | + } | ||
| 93 | + sortFields = append(sortFields, orderby) | ||
| 94 | + } | ||
| 95 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 96 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 97 | + } | ||
| 98 | + } else { | ||
| 99 | + if len(order) != 0 { | ||
| 100 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 101 | + } | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + var l []UserPermissions | ||
| 105 | + qs = qs.OrderBy(sortFields...) | ||
| 106 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 107 | + if len(fields) == 0 { | ||
| 108 | + for _, v := range l { | ||
| 109 | + ml = append(ml, v) | ||
| 110 | + } | ||
| 111 | + } else { | ||
| 112 | + // trim unused fields | ||
| 113 | + for _, v := range l { | ||
| 114 | + m := make(map[string]interface{}) | ||
| 115 | + val := reflect.ValueOf(v) | ||
| 116 | + for _, fname := range fields { | ||
| 117 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 118 | + } | ||
| 119 | + ml = append(ml, m) | ||
| 120 | + } | ||
| 121 | + } | ||
| 122 | + return ml, nil | ||
| 123 | + } | ||
| 124 | + return nil, err | ||
| 125 | +} | ||
| 126 | + | ||
| 127 | +// UpdateUserPermissions updates UserPermissions by Id and returns error if | ||
| 128 | +// the record to be updated doesn't exist | ||
| 129 | +func UpdateUserPermissionsById(m *UserPermissions) (err error) { | ||
| 130 | + o := orm.NewOrm() | ||
| 131 | + v := UserPermissions{Id: m.Id} | ||
| 132 | + // ascertain id exists in the database | ||
| 133 | + if err = o.Read(&v); err == nil { | ||
| 134 | + var num int64 | ||
| 135 | + if num, err = o.Update(m); err == nil { | ||
| 136 | + fmt.Println("Number of records updated in database:", num) | ||
| 137 | + } | ||
| 138 | + } | ||
| 139 | + return | ||
| 140 | +} | ||
| 141 | + | ||
| 142 | +// DeleteUserPermissions deletes UserPermissions by Id and returns error if | ||
| 143 | +// the record to be deleted doesn't exist | ||
| 144 | +func DeleteUserPermissions(id int) (err error) { | ||
| 145 | + o := orm.NewOrm() | ||
| 146 | + v := UserPermissions{Id: id} | ||
| 147 | + // ascertain id exists in the database | ||
| 148 | + if err = o.Read(&v); err == nil { | ||
| 149 | + var num int64 | ||
| 150 | + if num, err = o.Delete(&UserPermissions{Id: id}); err == nil { | ||
| 151 | + fmt.Println("Number of records deleted in database:", num) | ||
| 152 | + } | ||
| 153 | + } | ||
| 154 | + return | ||
| 155 | +} |
models/user_question_rela.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserQuestionRela struct { | ||
| 14 | + Id int `orm:"column(id);pk" description:"主键ID"` | ||
| 15 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add" description:"创建时间"` | ||
| 16 | + Uid int64 `orm:"column(uid)" description:"消息标题"` | ||
| 17 | + Qid int64 `orm:"column(qid)"` | ||
| 18 | + Type int `orm:"column(type);null" description:"0未同感,1同感 类型"` | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +func (t *UserQuestionRela) TableName() string { | ||
| 22 | + return "user_question_rela" | ||
| 23 | +} | ||
| 24 | + | ||
| 25 | +func init() { | ||
| 26 | + orm.RegisterModel(new(UserQuestionRela)) | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +// AddUserQuestionRela insert a new UserQuestionRela into database and returns | ||
| 30 | +// last inserted Id on success. | ||
| 31 | +func AddUserQuestionRela(m *UserQuestionRela) (id int64, err error) { | ||
| 32 | + o := orm.NewOrm() | ||
| 33 | + id, err = o.Insert(m) | ||
| 34 | + return | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +// GetUserQuestionRelaById retrieves UserQuestionRela by Id. Returns error if | ||
| 38 | +// Id doesn't exist | ||
| 39 | +func GetUserQuestionRelaById(id int) (v *UserQuestionRela, err error) { | ||
| 40 | + o := orm.NewOrm() | ||
| 41 | + v = &UserQuestionRela{Id: id} | ||
| 42 | + if err = o.Read(v); err == nil { | ||
| 43 | + return v, nil | ||
| 44 | + } | ||
| 45 | + return nil, err | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +// GetAllUserQuestionRela retrieves all UserQuestionRela matches certain condition. Returns empty list if | ||
| 49 | +// no records exist | ||
| 50 | +func GetAllUserQuestionRela(query map[string]string, fields []string, sortby []string, order []string, | ||
| 51 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 52 | + o := orm.NewOrm() | ||
| 53 | + qs := o.QueryTable(new(UserQuestionRela)) | ||
| 54 | + // query k=v | ||
| 55 | + for k, v := range query { | ||
| 56 | + // rewrite dot-notation to Object__Attribute | ||
| 57 | + k = strings.Replace(k, ".", "__", -1) | ||
| 58 | + if strings.Contains(k, "isnull") { | ||
| 59 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 60 | + } else { | ||
| 61 | + qs = qs.Filter(k, v) | ||
| 62 | + } | ||
| 63 | + } | ||
| 64 | + // order by: | ||
| 65 | + var sortFields []string | ||
| 66 | + if len(sortby) != 0 { | ||
| 67 | + if len(sortby) == len(order) { | ||
| 68 | + // 1) for each sort field, there is an associated order | ||
| 69 | + for i, v := range sortby { | ||
| 70 | + orderby := "" | ||
| 71 | + if order[i] == "desc" { | ||
| 72 | + orderby = "-" + v | ||
| 73 | + } else if order[i] == "asc" { | ||
| 74 | + orderby = v | ||
| 75 | + } else { | ||
| 76 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 77 | + } | ||
| 78 | + sortFields = append(sortFields, orderby) | ||
| 79 | + } | ||
| 80 | + qs = qs.OrderBy(sortFields...) | ||
| 81 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 82 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 83 | + for _, v := range sortby { | ||
| 84 | + orderby := "" | ||
| 85 | + if order[0] == "desc" { | ||
| 86 | + orderby = "-" + v | ||
| 87 | + } else if order[0] == "asc" { | ||
| 88 | + orderby = v | ||
| 89 | + } else { | ||
| 90 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 91 | + } | ||
| 92 | + sortFields = append(sortFields, orderby) | ||
| 93 | + } | ||
| 94 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 95 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 96 | + } | ||
| 97 | + } else { | ||
| 98 | + if len(order) != 0 { | ||
| 99 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 100 | + } | ||
| 101 | + } | ||
| 102 | + | ||
| 103 | + var l []UserQuestionRela | ||
| 104 | + qs = qs.OrderBy(sortFields...) | ||
| 105 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 106 | + if len(fields) == 0 { | ||
| 107 | + for _, v := range l { | ||
| 108 | + ml = append(ml, v) | ||
| 109 | + } | ||
| 110 | + } else { | ||
| 111 | + // trim unused fields | ||
| 112 | + for _, v := range l { | ||
| 113 | + m := make(map[string]interface{}) | ||
| 114 | + val := reflect.ValueOf(v) | ||
| 115 | + for _, fname := range fields { | ||
| 116 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 117 | + } | ||
| 118 | + ml = append(ml, m) | ||
| 119 | + } | ||
| 120 | + } | ||
| 121 | + return ml, nil | ||
| 122 | + } | ||
| 123 | + return nil, err | ||
| 124 | +} | ||
| 125 | + | ||
| 126 | +// UpdateUserQuestionRela updates UserQuestionRela by Id and returns error if | ||
| 127 | +// the record to be updated doesn't exist | ||
| 128 | +func UpdateUserQuestionRelaById(m *UserQuestionRela) (err error) { | ||
| 129 | + o := orm.NewOrm() | ||
| 130 | + v := UserQuestionRela{Id: m.Id} | ||
| 131 | + // ascertain id exists in the database | ||
| 132 | + if err = o.Read(&v); err == nil { | ||
| 133 | + var num int64 | ||
| 134 | + if num, err = o.Update(m); err == nil { | ||
| 135 | + fmt.Println("Number of records updated in database:", num) | ||
| 136 | + } | ||
| 137 | + } | ||
| 138 | + return | ||
| 139 | +} | ||
| 140 | + | ||
| 141 | +// DeleteUserQuestionRela deletes UserQuestionRela by Id and returns error if | ||
| 142 | +// the record to be deleted doesn't exist | ||
| 143 | +func DeleteUserQuestionRela(id int) (err error) { | ||
| 144 | + o := orm.NewOrm() | ||
| 145 | + v := UserQuestionRela{Id: id} | ||
| 146 | + // ascertain id exists in the database | ||
| 147 | + if err = o.Read(&v); err == nil { | ||
| 148 | + var num int64 | ||
| 149 | + if num, err = o.Delete(&UserQuestionRela{Id: id}); err == nil { | ||
| 150 | + fmt.Println("Number of records deleted in database:", num) | ||
| 151 | + } | ||
| 152 | + } | ||
| 153 | + return | ||
| 154 | +} |
models/user_question_solve.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserQuestionSolve struct { | ||
| 14 | + Id int `orm:"column(id);auto" description:"主键ID"` | ||
| 15 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add" description:"创建时间"` | ||
| 16 | + UpdateTime time.Time `orm:"column(updateTime);type(timestamp);null;auto_now_add" description:"更新时间"` | ||
| 17 | + Uid int64 `orm:"column(uid)" description:"消息标题"` | ||
| 18 | + Qid int64 `orm:"column(qid)"` | ||
| 19 | + StartTime time.Time `orm:"column(startTime);type(date);null" description:"解决开始时间"` | ||
| 20 | + EndTime time.Time `orm:"column(endTime);type(date);null" description:"解决结束时间"` | ||
| 21 | + Remark string `orm:"column(remark);null" description:"备注"` | ||
| 22 | + CompanyId int `orm:"column(company_id);null" description:"公司Id"` | ||
| 23 | + Flag int8 `orm:"column(flag);null" description:"标志位"` | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +func (t *UserQuestionSolve) TableName() string { | ||
| 27 | + return "user_question_solve" | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +func init() { | ||
| 31 | + orm.RegisterModel(new(UserQuestionSolve)) | ||
| 32 | +} | ||
| 33 | + | ||
| 34 | +// AddUserQuestionSolve insert a new UserQuestionSolve into database and returns | ||
| 35 | +// last inserted Id on success. | ||
| 36 | +func AddUserQuestionSolve(m *UserQuestionSolve) (id int64, err error) { | ||
| 37 | + o := orm.NewOrm() | ||
| 38 | + id, err = o.Insert(m) | ||
| 39 | + return | ||
| 40 | +} | ||
| 41 | + | ||
| 42 | +// GetUserQuestionSolveById retrieves UserQuestionSolve by Id. Returns error if | ||
| 43 | +// Id doesn't exist | ||
| 44 | +func GetUserQuestionSolveById(id int) (v *UserQuestionSolve, err error) { | ||
| 45 | + o := orm.NewOrm() | ||
| 46 | + v = &UserQuestionSolve{Id: id} | ||
| 47 | + if err = o.Read(v); err == nil { | ||
| 48 | + return v, nil | ||
| 49 | + } | ||
| 50 | + return nil, err | ||
| 51 | +} | ||
| 52 | + | ||
| 53 | +// GetAllUserQuestionSolve retrieves all UserQuestionSolve matches certain condition. Returns empty list if | ||
| 54 | +// no records exist | ||
| 55 | +func GetAllUserQuestionSolve(query map[string]string, fields []string, sortby []string, order []string, | ||
| 56 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 57 | + o := orm.NewOrm() | ||
| 58 | + qs := o.QueryTable(new(UserQuestionSolve)) | ||
| 59 | + // query k=v | ||
| 60 | + for k, v := range query { | ||
| 61 | + // rewrite dot-notation to Object__Attribute | ||
| 62 | + k = strings.Replace(k, ".", "__", -1) | ||
| 63 | + if strings.Contains(k, "isnull") { | ||
| 64 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 65 | + } else { | ||
| 66 | + qs = qs.Filter(k, v) | ||
| 67 | + } | ||
| 68 | + } | ||
| 69 | + // order by: | ||
| 70 | + var sortFields []string | ||
| 71 | + if len(sortby) != 0 { | ||
| 72 | + if len(sortby) == len(order) { | ||
| 73 | + // 1) for each sort field, there is an associated order | ||
| 74 | + for i, v := range sortby { | ||
| 75 | + orderby := "" | ||
| 76 | + if order[i] == "desc" { | ||
| 77 | + orderby = "-" + v | ||
| 78 | + } else if order[i] == "asc" { | ||
| 79 | + orderby = v | ||
| 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 if len(sortby) != len(order) && len(order) == 1 { | ||
| 87 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 88 | + for _, v := range sortby { | ||
| 89 | + orderby := "" | ||
| 90 | + if order[0] == "desc" { | ||
| 91 | + orderby = "-" + v | ||
| 92 | + } else if order[0] == "asc" { | ||
| 93 | + orderby = v | ||
| 94 | + } else { | ||
| 95 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 96 | + } | ||
| 97 | + sortFields = append(sortFields, orderby) | ||
| 98 | + } | ||
| 99 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 100 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 101 | + } | ||
| 102 | + } else { | ||
| 103 | + if len(order) != 0 { | ||
| 104 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 105 | + } | ||
| 106 | + } | ||
| 107 | + | ||
| 108 | + var l []UserQuestionSolve | ||
| 109 | + qs = qs.OrderBy(sortFields...) | ||
| 110 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 111 | + if len(fields) == 0 { | ||
| 112 | + for _, v := range l { | ||
| 113 | + ml = append(ml, v) | ||
| 114 | + } | ||
| 115 | + } else { | ||
| 116 | + // trim unused fields | ||
| 117 | + for _, v := range l { | ||
| 118 | + m := make(map[string]interface{}) | ||
| 119 | + val := reflect.ValueOf(v) | ||
| 120 | + for _, fname := range fields { | ||
| 121 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 122 | + } | ||
| 123 | + ml = append(ml, m) | ||
| 124 | + } | ||
| 125 | + } | ||
| 126 | + return ml, nil | ||
| 127 | + } | ||
| 128 | + return nil, err | ||
| 129 | +} | ||
| 130 | + | ||
| 131 | +// UpdateUserQuestionSolve updates UserQuestionSolve by Id and returns error if | ||
| 132 | +// the record to be updated doesn't exist | ||
| 133 | +func UpdateUserQuestionSolveById(m *UserQuestionSolve) (err error) { | ||
| 134 | + o := orm.NewOrm() | ||
| 135 | + v := UserQuestionSolve{Id: m.Id} | ||
| 136 | + // ascertain id exists in the database | ||
| 137 | + if err = o.Read(&v); err == nil { | ||
| 138 | + var num int64 | ||
| 139 | + if num, err = o.Update(m); err == nil { | ||
| 140 | + fmt.Println("Number of records updated in database:", num) | ||
| 141 | + } | ||
| 142 | + } | ||
| 143 | + return | ||
| 144 | +} | ||
| 145 | + | ||
| 146 | +// DeleteUserQuestionSolve deletes UserQuestionSolve by Id and returns error if | ||
| 147 | +// the record to be deleted doesn't exist | ||
| 148 | +func DeleteUserQuestionSolve(id int) (err error) { | ||
| 149 | + o := orm.NewOrm() | ||
| 150 | + v := UserQuestionSolve{Id: id} | ||
| 151 | + // ascertain id exists in the database | ||
| 152 | + if err = o.Read(&v); err == nil { | ||
| 153 | + var num int64 | ||
| 154 | + if num, err = o.Delete(&UserQuestionSolve{Id: id}); err == nil { | ||
| 155 | + fmt.Println("Number of records deleted in database:", num) | ||
| 156 | + } | ||
| 157 | + } | ||
| 158 | + return | ||
| 159 | +} |
models/user_score.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserScore struct { | ||
| 14 | + Id int `orm:"column(id);pk"` | ||
| 15 | + Uid int64 `orm:"column(uid);null" description:"接收用户ID"` | ||
| 16 | + Type int64 `orm:"column(type);null" description:"(0问题审核、1问题评分、2分析评分、3解决评分)"` | ||
| 17 | + Qid int64 `orm:"column(qid)" description:"提问ID"` | ||
| 18 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);null;auto_now_add" description:"评分时间"` | ||
| 19 | + Sid int64 `orm:"column(sid)" description:"方案ID"` | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +func (t *UserScore) TableName() string { | ||
| 23 | + return "user_score" | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +func init() { | ||
| 27 | + orm.RegisterModel(new(UserScore)) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +// AddUserScore insert a new UserScore into database and returns | ||
| 31 | +// last inserted Id on success. | ||
| 32 | +func AddUserScore(m *UserScore) (id int64, err error) { | ||
| 33 | + o := orm.NewOrm() | ||
| 34 | + id, err = o.Insert(m) | ||
| 35 | + return | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +// GetUserScoreById retrieves UserScore by Id. Returns error if | ||
| 39 | +// Id doesn't exist | ||
| 40 | +func GetUserScoreById(id int) (v *UserScore, err error) { | ||
| 41 | + o := orm.NewOrm() | ||
| 42 | + v = &UserScore{Id: id} | ||
| 43 | + if err = o.Read(v); err == nil { | ||
| 44 | + return v, nil | ||
| 45 | + } | ||
| 46 | + return nil, err | ||
| 47 | +} | ||
| 48 | + | ||
| 49 | +// GetAllUserScore retrieves all UserScore matches certain condition. Returns empty list if | ||
| 50 | +// no records exist | ||
| 51 | +func GetAllUserScore(query map[string]string, fields []string, sortby []string, order []string, | ||
| 52 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 53 | + o := orm.NewOrm() | ||
| 54 | + qs := o.QueryTable(new(UserScore)) | ||
| 55 | + // query k=v | ||
| 56 | + for k, v := range query { | ||
| 57 | + // rewrite dot-notation to Object__Attribute | ||
| 58 | + k = strings.Replace(k, ".", "__", -1) | ||
| 59 | + if strings.Contains(k, "isnull") { | ||
| 60 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 61 | + } else { | ||
| 62 | + qs = qs.Filter(k, v) | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + // order by: | ||
| 66 | + var sortFields []string | ||
| 67 | + if len(sortby) != 0 { | ||
| 68 | + if len(sortby) == len(order) { | ||
| 69 | + // 1) for each sort field, there is an associated order | ||
| 70 | + for i, v := range sortby { | ||
| 71 | + orderby := "" | ||
| 72 | + if order[i] == "desc" { | ||
| 73 | + orderby = "-" + v | ||
| 74 | + } else if order[i] == "asc" { | ||
| 75 | + orderby = v | ||
| 76 | + } else { | ||
| 77 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 78 | + } | ||
| 79 | + sortFields = append(sortFields, orderby) | ||
| 80 | + } | ||
| 81 | + qs = qs.OrderBy(sortFields...) | ||
| 82 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 83 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 84 | + for _, v := range sortby { | ||
| 85 | + orderby := "" | ||
| 86 | + if order[0] == "desc" { | ||
| 87 | + orderby = "-" + v | ||
| 88 | + } else if order[0] == "asc" { | ||
| 89 | + orderby = v | ||
| 90 | + } else { | ||
| 91 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 92 | + } | ||
| 93 | + sortFields = append(sortFields, orderby) | ||
| 94 | + } | ||
| 95 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 96 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 97 | + } | ||
| 98 | + } else { | ||
| 99 | + if len(order) != 0 { | ||
| 100 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 101 | + } | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + var l []UserScore | ||
| 105 | + qs = qs.OrderBy(sortFields...) | ||
| 106 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 107 | + if len(fields) == 0 { | ||
| 108 | + for _, v := range l { | ||
| 109 | + ml = append(ml, v) | ||
| 110 | + } | ||
| 111 | + } else { | ||
| 112 | + // trim unused fields | ||
| 113 | + for _, v := range l { | ||
| 114 | + m := make(map[string]interface{}) | ||
| 115 | + val := reflect.ValueOf(v) | ||
| 116 | + for _, fname := range fields { | ||
| 117 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 118 | + } | ||
| 119 | + ml = append(ml, m) | ||
| 120 | + } | ||
| 121 | + } | ||
| 122 | + return ml, nil | ||
| 123 | + } | ||
| 124 | + return nil, err | ||
| 125 | +} | ||
| 126 | + | ||
| 127 | +// UpdateUserScore updates UserScore by Id and returns error if | ||
| 128 | +// the record to be updated doesn't exist | ||
| 129 | +func UpdateUserScoreById(m *UserScore) (err error) { | ||
| 130 | + o := orm.NewOrm() | ||
| 131 | + v := UserScore{Id: m.Id} | ||
| 132 | + // ascertain id exists in the database | ||
| 133 | + if err = o.Read(&v); err == nil { | ||
| 134 | + var num int64 | ||
| 135 | + if num, err = o.Update(m); err == nil { | ||
| 136 | + fmt.Println("Number of records updated in database:", num) | ||
| 137 | + } | ||
| 138 | + } | ||
| 139 | + return | ||
| 140 | +} | ||
| 141 | + | ||
| 142 | +// DeleteUserScore deletes UserScore by Id and returns error if | ||
| 143 | +// the record to be deleted doesn't exist | ||
| 144 | +func DeleteUserScore(id int) (err error) { | ||
| 145 | + o := orm.NewOrm() | ||
| 146 | + v := UserScore{Id: id} | ||
| 147 | + // ascertain id exists in the database | ||
| 148 | + if err = o.Read(&v); err == nil { | ||
| 149 | + var num int64 | ||
| 150 | + if num, err = o.Delete(&UserScore{Id: id}); err == nil { | ||
| 151 | + fmt.Println("Number of records deleted in database:", num) | ||
| 152 | + } | ||
| 153 | + } | ||
| 154 | + return | ||
| 155 | +} |
models/user_score_change.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserScoreChange struct { | ||
| 14 | + Id int `orm:"column(id);pk"` | ||
| 15 | + Uid int64 `orm:"column(uid);null" description:"接收用户ID"` | ||
| 16 | + Type int64 `orm:"column(type);null" description:"(0发现问题、1分析问题、2解决问题)"` | ||
| 17 | + Score int `orm:"column(score);null" description:"评分"` | ||
| 18 | + Qid int64 `orm:"column(qid)" description:"问题ID"` | ||
| 19 | + ScoreUid int64 `orm:"column(scoreUid)" description:"评分用户ID"` | ||
| 20 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add" description:"时间"` | ||
| 21 | + Sid int64 `orm:"column(sid)" description:"方案ID"` | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func (t *UserScoreChange) TableName() string { | ||
| 25 | + return "user_score_change" | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +func init() { | ||
| 29 | + orm.RegisterModel(new(UserScoreChange)) | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +// AddUserScoreChange insert a new UserScoreChange into database and returns | ||
| 33 | +// last inserted Id on success. | ||
| 34 | +func AddUserScoreChange(m *UserScoreChange) (id int64, err error) { | ||
| 35 | + o := orm.NewOrm() | ||
| 36 | + id, err = o.Insert(m) | ||
| 37 | + return | ||
| 38 | +} | ||
| 39 | + | ||
| 40 | +// GetUserScoreChangeById retrieves UserScoreChange by Id. Returns error if | ||
| 41 | +// Id doesn't exist | ||
| 42 | +func GetUserScoreChangeById(id int) (v *UserScoreChange, err error) { | ||
| 43 | + o := orm.NewOrm() | ||
| 44 | + v = &UserScoreChange{Id: id} | ||
| 45 | + if err = o.Read(v); err == nil { | ||
| 46 | + return v, nil | ||
| 47 | + } | ||
| 48 | + return nil, err | ||
| 49 | +} | ||
| 50 | + | ||
| 51 | +// GetAllUserScoreChange retrieves all UserScoreChange matches certain condition. Returns empty list if | ||
| 52 | +// no records exist | ||
| 53 | +func GetAllUserScoreChange(query map[string]string, fields []string, sortby []string, order []string, | ||
| 54 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 55 | + o := orm.NewOrm() | ||
| 56 | + qs := o.QueryTable(new(UserScoreChange)) | ||
| 57 | + // query k=v | ||
| 58 | + for k, v := range query { | ||
| 59 | + // rewrite dot-notation to Object__Attribute | ||
| 60 | + k = strings.Replace(k, ".", "__", -1) | ||
| 61 | + if strings.Contains(k, "isnull") { | ||
| 62 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 63 | + } else { | ||
| 64 | + qs = qs.Filter(k, v) | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | + // order by: | ||
| 68 | + var sortFields []string | ||
| 69 | + if len(sortby) != 0 { | ||
| 70 | + if len(sortby) == len(order) { | ||
| 71 | + // 1) for each sort field, there is an associated order | ||
| 72 | + for i, v := range sortby { | ||
| 73 | + orderby := "" | ||
| 74 | + if order[i] == "desc" { | ||
| 75 | + orderby = "-" + v | ||
| 76 | + } else if order[i] == "asc" { | ||
| 77 | + orderby = v | ||
| 78 | + } else { | ||
| 79 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 80 | + } | ||
| 81 | + sortFields = append(sortFields, orderby) | ||
| 82 | + } | ||
| 83 | + qs = qs.OrderBy(sortFields...) | ||
| 84 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 85 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 86 | + for _, v := range sortby { | ||
| 87 | + orderby := "" | ||
| 88 | + if order[0] == "desc" { | ||
| 89 | + orderby = "-" + v | ||
| 90 | + } else if order[0] == "asc" { | ||
| 91 | + orderby = v | ||
| 92 | + } else { | ||
| 93 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 94 | + } | ||
| 95 | + sortFields = append(sortFields, orderby) | ||
| 96 | + } | ||
| 97 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 98 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 99 | + } | ||
| 100 | + } else { | ||
| 101 | + if len(order) != 0 { | ||
| 102 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 103 | + } | ||
| 104 | + } | ||
| 105 | + | ||
| 106 | + var l []UserScoreChange | ||
| 107 | + qs = qs.OrderBy(sortFields...) | ||
| 108 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 109 | + if len(fields) == 0 { | ||
| 110 | + for _, v := range l { | ||
| 111 | + ml = append(ml, v) | ||
| 112 | + } | ||
| 113 | + } else { | ||
| 114 | + // trim unused fields | ||
| 115 | + for _, v := range l { | ||
| 116 | + m := make(map[string]interface{}) | ||
| 117 | + val := reflect.ValueOf(v) | ||
| 118 | + for _, fname := range fields { | ||
| 119 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 120 | + } | ||
| 121 | + ml = append(ml, m) | ||
| 122 | + } | ||
| 123 | + } | ||
| 124 | + return ml, nil | ||
| 125 | + } | ||
| 126 | + return nil, err | ||
| 127 | +} | ||
| 128 | + | ||
| 129 | +// UpdateUserScoreChange updates UserScoreChange by Id and returns error if | ||
| 130 | +// the record to be updated doesn't exist | ||
| 131 | +func UpdateUserScoreChangeById(m *UserScoreChange) (err error) { | ||
| 132 | + o := orm.NewOrm() | ||
| 133 | + v := UserScoreChange{Id: m.Id} | ||
| 134 | + // ascertain id exists in the database | ||
| 135 | + if err = o.Read(&v); err == nil { | ||
| 136 | + var num int64 | ||
| 137 | + if num, err = o.Update(m); err == nil { | ||
| 138 | + fmt.Println("Number of records updated in database:", num) | ||
| 139 | + } | ||
| 140 | + } | ||
| 141 | + return | ||
| 142 | +} | ||
| 143 | + | ||
| 144 | +// DeleteUserScoreChange deletes UserScoreChange by Id and returns error if | ||
| 145 | +// the record to be deleted doesn't exist | ||
| 146 | +func DeleteUserScoreChange(id int) (err error) { | ||
| 147 | + o := orm.NewOrm() | ||
| 148 | + v := UserScoreChange{Id: id} | ||
| 149 | + // ascertain id exists in the database | ||
| 150 | + if err = o.Read(&v); err == nil { | ||
| 151 | + var num int64 | ||
| 152 | + if num, err = o.Delete(&UserScoreChange{Id: id}); err == nil { | ||
| 153 | + fmt.Println("Number of records deleted in database:", num) | ||
| 154 | + } | ||
| 155 | + } | ||
| 156 | + return | ||
| 157 | +} |
models/user_sms_code.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserSmsCode struct { | ||
| 14 | + Id int `orm:"column(id);auto" description:"主键ID"` | ||
| 15 | + Phone string `orm:"column(phone);size(20)" description:"手机号"` | ||
| 16 | + Code string `orm:"column(code);size(10)" description:"短信验证码"` | ||
| 17 | + UseTime time.Time `orm:"column(useTime);type(timestamp);auto_now" description:"用户使用该验证码时间"` | ||
| 18 | + StartTime time.Time `orm:"column(startTime);type(timestamp);auto_now_add" description:"开始时间"` | ||
| 19 | + EndTime time.Time `orm:"column(endTime);type(timestamp);auto_now_add" description:"结束时间"` | ||
| 20 | + Enabled int8 `orm:"column(enabled)" description:"是否有效"` | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func (t *UserSmsCode) TableName() string { | ||
| 24 | + return "user_sms_code" | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +func init() { | ||
| 28 | + orm.RegisterModel(new(UserSmsCode)) | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +// AddUserSmsCode insert a new UserSmsCode into database and returns | ||
| 32 | +// last inserted Id on success. | ||
| 33 | +func AddUserSmsCode(m *UserSmsCode) (id int64, err error) { | ||
| 34 | + o := orm.NewOrm() | ||
| 35 | + id, err = o.Insert(m) | ||
| 36 | + return | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +// GetUserSmsCodeById retrieves UserSmsCode by Id. Returns error if | ||
| 40 | +// Id doesn't exist | ||
| 41 | +func GetUserSmsCodeById(id int) (v *UserSmsCode, err error) { | ||
| 42 | + o := orm.NewOrm() | ||
| 43 | + v = &UserSmsCode{Id: id} | ||
| 44 | + if err = o.Read(v); err == nil { | ||
| 45 | + return v, nil | ||
| 46 | + } | ||
| 47 | + return nil, err | ||
| 48 | +} | ||
| 49 | + | ||
| 50 | +// GetAllUserSmsCode retrieves all UserSmsCode matches certain condition. Returns empty list if | ||
| 51 | +// no records exist | ||
| 52 | +func GetAllUserSmsCode(query map[string]string, fields []string, sortby []string, order []string, | ||
| 53 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 54 | + o := orm.NewOrm() | ||
| 55 | + qs := o.QueryTable(new(UserSmsCode)) | ||
| 56 | + // query k=v | ||
| 57 | + for k, v := range query { | ||
| 58 | + // rewrite dot-notation to Object__Attribute | ||
| 59 | + k = strings.Replace(k, ".", "__", -1) | ||
| 60 | + if strings.Contains(k, "isnull") { | ||
| 61 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 62 | + } else { | ||
| 63 | + qs = qs.Filter(k, v) | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + // order by: | ||
| 67 | + var sortFields []string | ||
| 68 | + if len(sortby) != 0 { | ||
| 69 | + if len(sortby) == len(order) { | ||
| 70 | + // 1) for each sort field, there is an associated order | ||
| 71 | + for i, v := range sortby { | ||
| 72 | + orderby := "" | ||
| 73 | + if order[i] == "desc" { | ||
| 74 | + orderby = "-" + v | ||
| 75 | + } else if order[i] == "asc" { | ||
| 76 | + orderby = v | ||
| 77 | + } else { | ||
| 78 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 79 | + } | ||
| 80 | + sortFields = append(sortFields, orderby) | ||
| 81 | + } | ||
| 82 | + qs = qs.OrderBy(sortFields...) | ||
| 83 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 84 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 85 | + for _, v := range sortby { | ||
| 86 | + orderby := "" | ||
| 87 | + if order[0] == "desc" { | ||
| 88 | + orderby = "-" + v | ||
| 89 | + } else if order[0] == "asc" { | ||
| 90 | + orderby = v | ||
| 91 | + } else { | ||
| 92 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 93 | + } | ||
| 94 | + sortFields = append(sortFields, orderby) | ||
| 95 | + } | ||
| 96 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 97 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 98 | + } | ||
| 99 | + } else { | ||
| 100 | + if len(order) != 0 { | ||
| 101 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 102 | + } | ||
| 103 | + } | ||
| 104 | + | ||
| 105 | + var l []UserSmsCode | ||
| 106 | + qs = qs.OrderBy(sortFields...) | ||
| 107 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 108 | + if len(fields) == 0 { | ||
| 109 | + for _, v := range l { | ||
| 110 | + ml = append(ml, v) | ||
| 111 | + } | ||
| 112 | + } else { | ||
| 113 | + // trim unused fields | ||
| 114 | + for _, v := range l { | ||
| 115 | + m := make(map[string]interface{}) | ||
| 116 | + val := reflect.ValueOf(v) | ||
| 117 | + for _, fname := range fields { | ||
| 118 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 119 | + } | ||
| 120 | + ml = append(ml, m) | ||
| 121 | + } | ||
| 122 | + } | ||
| 123 | + return ml, nil | ||
| 124 | + } | ||
| 125 | + return nil, err | ||
| 126 | +} | ||
| 127 | + | ||
| 128 | +// UpdateUserSmsCode updates UserSmsCode by Id and returns error if | ||
| 129 | +// the record to be updated doesn't exist | ||
| 130 | +func UpdateUserSmsCodeById(m *UserSmsCode) (err error) { | ||
| 131 | + o := orm.NewOrm() | ||
| 132 | + v := UserSmsCode{Id: m.Id} | ||
| 133 | + // ascertain id exists in the database | ||
| 134 | + if err = o.Read(&v); err == nil { | ||
| 135 | + var num int64 | ||
| 136 | + if num, err = o.Update(m); err == nil { | ||
| 137 | + fmt.Println("Number of records updated in database:", num) | ||
| 138 | + } | ||
| 139 | + } | ||
| 140 | + return | ||
| 141 | +} | ||
| 142 | + | ||
| 143 | +// DeleteUserSmsCode deletes UserSmsCode by Id and returns error if | ||
| 144 | +// the record to be deleted doesn't exist | ||
| 145 | +func DeleteUserSmsCode(id int) (err error) { | ||
| 146 | + o := orm.NewOrm() | ||
| 147 | + v := UserSmsCode{Id: id} | ||
| 148 | + // ascertain id exists in the database | ||
| 149 | + if err = o.Read(&v); err == nil { | ||
| 150 | + var num int64 | ||
| 151 | + if num, err = o.Delete(&UserSmsCode{Id: id}); err == nil { | ||
| 152 | + fmt.Println("Number of records deleted in database:", num) | ||
| 153 | + } | ||
| 154 | + } | ||
| 155 | + return | ||
| 156 | +} |
models/user_sympathy.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type UserSympathy struct { | ||
| 14 | + Id int `orm:"column(sid);pk"` | ||
| 15 | + Uid int64 `orm:"column(uid);null"` | ||
| 16 | + Id_RENAME string `orm:"column(id);size(100);null" description:"对应的ID"` | ||
| 17 | + Type int `orm:"column(type)" description:"0问题、1评论、2方案"` | ||
| 18 | + Status int `orm:"column(status);null" description:"0 有效 1无效"` | ||
| 19 | + CreateTime time.Time `orm:"column(createTime);type(timestamp);auto_now_add"` | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +func (t *UserSympathy) TableName() string { | ||
| 23 | + return "user_sympathy" | ||
| 24 | +} | ||
| 25 | + | ||
| 26 | +func init() { | ||
| 27 | + orm.RegisterModel(new(UserSympathy)) | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +// AddUserSympathy insert a new UserSympathy into database and returns | ||
| 31 | +// last inserted Id on success. | ||
| 32 | +func AddUserSympathy(m *UserSympathy) (id int64, err error) { | ||
| 33 | + o := orm.NewOrm() | ||
| 34 | + id, err = o.Insert(m) | ||
| 35 | + return | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +// GetUserSympathyById retrieves UserSympathy by Id. Returns error if | ||
| 39 | +// Id doesn't exist | ||
| 40 | +func GetUserSympathyById(id int) (v *UserSympathy, err error) { | ||
| 41 | + o := orm.NewOrm() | ||
| 42 | + v = &UserSympathy{Id: id} | ||
| 43 | + if err = o.Read(v); err == nil { | ||
| 44 | + return v, nil | ||
| 45 | + } | ||
| 46 | + return nil, err | ||
| 47 | +} | ||
| 48 | + | ||
| 49 | +// GetAllUserSympathy retrieves all UserSympathy matches certain condition. Returns empty list if | ||
| 50 | +// no records exist | ||
| 51 | +func GetAllUserSympathy(query map[string]string, fields []string, sortby []string, order []string, | ||
| 52 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 53 | + o := orm.NewOrm() | ||
| 54 | + qs := o.QueryTable(new(UserSympathy)) | ||
| 55 | + // query k=v | ||
| 56 | + for k, v := range query { | ||
| 57 | + // rewrite dot-notation to Object__Attribute | ||
| 58 | + k = strings.Replace(k, ".", "__", -1) | ||
| 59 | + if strings.Contains(k, "isnull") { | ||
| 60 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 61 | + } else { | ||
| 62 | + qs = qs.Filter(k, v) | ||
| 63 | + } | ||
| 64 | + } | ||
| 65 | + // order by: | ||
| 66 | + var sortFields []string | ||
| 67 | + if len(sortby) != 0 { | ||
| 68 | + if len(sortby) == len(order) { | ||
| 69 | + // 1) for each sort field, there is an associated order | ||
| 70 | + for i, v := range sortby { | ||
| 71 | + orderby := "" | ||
| 72 | + if order[i] == "desc" { | ||
| 73 | + orderby = "-" + v | ||
| 74 | + } else if order[i] == "asc" { | ||
| 75 | + orderby = v | ||
| 76 | + } else { | ||
| 77 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 78 | + } | ||
| 79 | + sortFields = append(sortFields, orderby) | ||
| 80 | + } | ||
| 81 | + qs = qs.OrderBy(sortFields...) | ||
| 82 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 83 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 84 | + for _, v := range sortby { | ||
| 85 | + orderby := "" | ||
| 86 | + if order[0] == "desc" { | ||
| 87 | + orderby = "-" + v | ||
| 88 | + } else if order[0] == "asc" { | ||
| 89 | + orderby = v | ||
| 90 | + } else { | ||
| 91 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 92 | + } | ||
| 93 | + sortFields = append(sortFields, orderby) | ||
| 94 | + } | ||
| 95 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 96 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 97 | + } | ||
| 98 | + } else { | ||
| 99 | + if len(order) != 0 { | ||
| 100 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 101 | + } | ||
| 102 | + } | ||
| 103 | + | ||
| 104 | + var l []UserSympathy | ||
| 105 | + qs = qs.OrderBy(sortFields...) | ||
| 106 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 107 | + if len(fields) == 0 { | ||
| 108 | + for _, v := range l { | ||
| 109 | + ml = append(ml, v) | ||
| 110 | + } | ||
| 111 | + } else { | ||
| 112 | + // trim unused fields | ||
| 113 | + for _, v := range l { | ||
| 114 | + m := make(map[string]interface{}) | ||
| 115 | + val := reflect.ValueOf(v) | ||
| 116 | + for _, fname := range fields { | ||
| 117 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 118 | + } | ||
| 119 | + ml = append(ml, m) | ||
| 120 | + } | ||
| 121 | + } | ||
| 122 | + return ml, nil | ||
| 123 | + } | ||
| 124 | + return nil, err | ||
| 125 | +} | ||
| 126 | + | ||
| 127 | +// UpdateUserSympathy updates UserSympathy by Id and returns error if | ||
| 128 | +// the record to be updated doesn't exist | ||
| 129 | +func UpdateUserSympathyById(m *UserSympathy) (err error) { | ||
| 130 | + o := orm.NewOrm() | ||
| 131 | + v := UserSympathy{Id: m.Id} | ||
| 132 | + // ascertain id exists in the database | ||
| 133 | + if err = o.Read(&v); err == nil { | ||
| 134 | + var num int64 | ||
| 135 | + if num, err = o.Update(m); err == nil { | ||
| 136 | + fmt.Println("Number of records updated in database:", num) | ||
| 137 | + } | ||
| 138 | + } | ||
| 139 | + return | ||
| 140 | +} | ||
| 141 | + | ||
| 142 | +// DeleteUserSympathy deletes UserSympathy by Id and returns error if | ||
| 143 | +// the record to be deleted doesn't exist | ||
| 144 | +func DeleteUserSympathy(id int) (err error) { | ||
| 145 | + o := orm.NewOrm() | ||
| 146 | + v := UserSympathy{Id: id} | ||
| 147 | + // ascertain id exists in the database | ||
| 148 | + if err = o.Read(&v); err == nil { | ||
| 149 | + var num int64 | ||
| 150 | + if num, err = o.Delete(&UserSympathy{Id: id}); err == nil { | ||
| 151 | + fmt.Println("Number of records deleted in database:", num) | ||
| 152 | + } | ||
| 153 | + } | ||
| 154 | + return | ||
| 155 | +} |
models/users.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "errors" | ||
| 5 | + "fmt" | ||
| 6 | + "reflect" | ||
| 7 | + "strings" | ||
| 8 | + "time" | ||
| 9 | + | ||
| 10 | + "github.com/astaxie/beego/orm" | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type Users struct { | ||
| 14 | + Id int `orm:"column(id);auto"` | ||
| 15 | + Name string `orm:"column(name);size(191)" description:"用户名"` | ||
| 16 | + Username string `orm:"column(username);size(191)" description:"登录用户名"` | ||
| 17 | + Password string `orm:"column(password);size(191)" description:"密码"` | ||
| 18 | + Photo string `orm:"column(photo);size(191);null" description:"头像"` | ||
| 19 | + Accid string `orm:"column(accid);size(191);null" description:"网易云id"` | ||
| 20 | + Token string `orm:"column(token);size(191);null" description:"网易云密码"` | ||
| 21 | + Thumbnail string `orm:"column(thumbnail);size(191);null" description:"缩略图"` | ||
| 22 | + Width int `orm:"column(width);null" description:"宽"` | ||
| 23 | + Length int `orm:"column(length);null" description:"高"` | ||
| 24 | + IsKefu int8 `orm:"column(is_kefu)" description:"是否是客服 0不是 1是"` | ||
| 25 | + Status int8 `orm:"column(status)" description:"账号使用状态 0禁用 1启用"` | ||
| 26 | + RememberToken string `orm:"column(remember_token);size(100);null" description:"记住我token"` | ||
| 27 | + CreatedAt time.Time `orm:"column(created_at);type(timestamp);null" description:"创建时间"` | ||
| 28 | + UpdatedAt time.Time `orm:"column(updated_at);type(timestamp);null" description:"更新时间"` | ||
| 29 | +} | ||
| 30 | + | ||
| 31 | +func (t *Users) TableName() string { | ||
| 32 | + return "users" | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +func init() { | ||
| 36 | + orm.RegisterModel(new(Users)) | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +// AddUsers insert a new Users into database and returns | ||
| 40 | +// last inserted Id on success. | ||
| 41 | +func AddUsers(m *Users) (id int64, err error) { | ||
| 42 | + o := orm.NewOrm() | ||
| 43 | + id, err = o.Insert(m) | ||
| 44 | + return | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +// GetUsersById retrieves Users by Id. Returns error if | ||
| 48 | +// Id doesn't exist | ||
| 49 | +func GetUsersById(id int) (v *Users, err error) { | ||
| 50 | + o := orm.NewOrm() | ||
| 51 | + v = &Users{Id: id} | ||
| 52 | + if err = o.Read(v); err == nil { | ||
| 53 | + return v, nil | ||
| 54 | + } | ||
| 55 | + return nil, err | ||
| 56 | +} | ||
| 57 | + | ||
| 58 | +// GetAllUsers retrieves all Users matches certain condition. Returns empty list if | ||
| 59 | +// no records exist | ||
| 60 | +func GetAllUsers(query map[string]string, fields []string, sortby []string, order []string, | ||
| 61 | + offset int64, limit int64) (ml []interface{}, err error) { | ||
| 62 | + o := orm.NewOrm() | ||
| 63 | + qs := o.QueryTable(new(Users)) | ||
| 64 | + // query k=v | ||
| 65 | + for k, v := range query { | ||
| 66 | + // rewrite dot-notation to Object__Attribute | ||
| 67 | + k = strings.Replace(k, ".", "__", -1) | ||
| 68 | + if strings.Contains(k, "isnull") { | ||
| 69 | + qs = qs.Filter(k, (v == "true" || v == "1")) | ||
| 70 | + } else { | ||
| 71 | + qs = qs.Filter(k, v) | ||
| 72 | + } | ||
| 73 | + } | ||
| 74 | + // order by: | ||
| 75 | + var sortFields []string | ||
| 76 | + if len(sortby) != 0 { | ||
| 77 | + if len(sortby) == len(order) { | ||
| 78 | + // 1) for each sort field, there is an associated order | ||
| 79 | + for i, v := range sortby { | ||
| 80 | + orderby := "" | ||
| 81 | + if order[i] == "desc" { | ||
| 82 | + orderby = "-" + v | ||
| 83 | + } else if order[i] == "asc" { | ||
| 84 | + orderby = v | ||
| 85 | + } else { | ||
| 86 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 87 | + } | ||
| 88 | + sortFields = append(sortFields, orderby) | ||
| 89 | + } | ||
| 90 | + qs = qs.OrderBy(sortFields...) | ||
| 91 | + } else if len(sortby) != len(order) && len(order) == 1 { | ||
| 92 | + // 2) there is exactly one order, all the sorted fields will be sorted by this order | ||
| 93 | + for _, v := range sortby { | ||
| 94 | + orderby := "" | ||
| 95 | + if order[0] == "desc" { | ||
| 96 | + orderby = "-" + v | ||
| 97 | + } else if order[0] == "asc" { | ||
| 98 | + orderby = v | ||
| 99 | + } else { | ||
| 100 | + return nil, errors.New("Error: Invalid order. Must be either [asc|desc]") | ||
| 101 | + } | ||
| 102 | + sortFields = append(sortFields, orderby) | ||
| 103 | + } | ||
| 104 | + } else if len(sortby) != len(order) && len(order) != 1 { | ||
| 105 | + return nil, errors.New("Error: 'sortby', 'order' sizes mismatch or 'order' size is not 1") | ||
| 106 | + } | ||
| 107 | + } else { | ||
| 108 | + if len(order) != 0 { | ||
| 109 | + return nil, errors.New("Error: unused 'order' fields") | ||
| 110 | + } | ||
| 111 | + } | ||
| 112 | + | ||
| 113 | + var l []Users | ||
| 114 | + qs = qs.OrderBy(sortFields...) | ||
| 115 | + if _, err = qs.Limit(limit, offset).All(&l, fields...); err == nil { | ||
| 116 | + if len(fields) == 0 { | ||
| 117 | + for _, v := range l { | ||
| 118 | + ml = append(ml, v) | ||
| 119 | + } | ||
| 120 | + } else { | ||
| 121 | + // trim unused fields | ||
| 122 | + for _, v := range l { | ||
| 123 | + m := make(map[string]interface{}) | ||
| 124 | + val := reflect.ValueOf(v) | ||
| 125 | + for _, fname := range fields { | ||
| 126 | + m[fname] = val.FieldByName(fname).Interface() | ||
| 127 | + } | ||
| 128 | + ml = append(ml, m) | ||
| 129 | + } | ||
| 130 | + } | ||
| 131 | + return ml, nil | ||
| 132 | + } | ||
| 133 | + return nil, err | ||
| 134 | +} | ||
| 135 | + | ||
| 136 | +// UpdateUsers updates Users by Id and returns error if | ||
| 137 | +// the record to be updated doesn't exist | ||
| 138 | +func UpdateUsersById(m *Users) (err error) { | ||
| 139 | + o := orm.NewOrm() | ||
| 140 | + v := Users{Id: m.Id} | ||
| 141 | + // ascertain id exists in the database | ||
| 142 | + if err = o.Read(&v); err == nil { | ||
| 143 | + var num int64 | ||
| 144 | + if num, err = o.Update(m); err == nil { | ||
| 145 | + fmt.Println("Number of records updated in database:", num) | ||
| 146 | + } | ||
| 147 | + } | ||
| 148 | + return | ||
| 149 | +} | ||
| 150 | + | ||
| 151 | +// DeleteUsers deletes Users by Id and returns error if | ||
| 152 | +// the record to be deleted doesn't exist | ||
| 153 | +func DeleteUsers(id int) (err error) { | ||
| 154 | + o := orm.NewOrm() | ||
| 155 | + v := Users{Id: id} | ||
| 156 | + // ascertain id exists in the database | ||
| 157 | + if err = o.Read(&v); err == nil { | ||
| 158 | + var num int64 | ||
| 159 | + if num, err = o.Delete(&Users{Id: id}); err == nil { | ||
| 160 | + fmt.Println("Number of records deleted in database:", num) | ||
| 161 | + } | ||
| 162 | + } | ||
| 163 | + return | ||
| 164 | +} |
routers/router.go
0 → 100644
| 1 | +package routers | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/astaxie/beego" | ||
| 5 | + "gitlab.fjmaimaimai.com/mmm-go/ability/controllers/v1" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +func init() { | ||
| 9 | + ns :=beego.NewNamespace("/v1") | ||
| 10 | + /*user controller*/ | ||
| 11 | + { | ||
| 12 | + user :=&v1.UserController{} | ||
| 13 | + ns.Router("/user/login",user,"post:Login") | ||
| 14 | + } | ||
| 15 | + beego.AddNamespace(ns) | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | + |
services/user/user.go
0 → 100644
| 1 | +package user | ||
| 2 | + | ||
| 3 | +//import | ||
| 4 | +//( | ||
| 5 | +// "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/mybeego" | ||
| 6 | +// "gitlab.fjmaimaimai.com/mmm-go/gocomm/pkg/log" | ||
| 7 | +// "gitlab.fjmaimaimai.com/mmm-go/ability/models" | ||
| 8 | +//) | ||
| 9 | +// | ||
| 10 | +//func GetUserList(mobile string)*mybeego.Message{ | ||
| 11 | +// u,err:=models.GetUserByMobile(mobile) | ||
| 12 | +// if err!=nil{ | ||
| 13 | +// log.Error(err) | ||
| 14 | +// log.Error(mobile) | ||
| 15 | +// return mybeego.NewErrMessage(1) | ||
| 16 | +// } | ||
| 17 | +// msg :=mybeego.NewMessage(0) | ||
| 18 | +// msg.Data = u | ||
| 19 | +// return msg | ||
| 20 | +//} |
static/js/reload.min.js
0 → 100644
| 1 | +function b(a){var c=new WebSocket(a);c.onclose=function(){setTimeout(function(){b(a)},2E3)};c.onmessage=function(){location.reload()}}try{if(window.WebSocket)try{b("ws://localhost:12450/reload")}catch(a){console.error(a)}else console.log("Your browser does not support WebSockets.")}catch(a){console.error("Exception during connecting to Reload:",a)}; |
tests/default_test.go
0 → 100644
| 1 | +package test | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "net/http" | ||
| 5 | + "net/http/httptest" | ||
| 6 | + "testing" | ||
| 7 | + "runtime" | ||
| 8 | + "path/filepath" | ||
| 9 | + _ "gitlab.fjmaimaimai.com/mmm-go/ability/routers" | ||
| 10 | + | ||
| 11 | + "github.com/astaxie/beego" | ||
| 12 | + . "github.com/smartystreets/goconvey/convey" | ||
| 13 | +) | ||
| 14 | + | ||
| 15 | +func init() { | ||
| 16 | + _, file, _, _ := runtime.Caller(0) | ||
| 17 | + apppath, _ := filepath.Abs(filepath.Dir(filepath.Join(file, ".." + string(filepath.Separator)))) | ||
| 18 | + beego.TestBeegoInit(apppath) | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | + | ||
| 22 | +// TestBeego is a sample to run an endpoint test | ||
| 23 | +func TestBeego(t *testing.T) { | ||
| 24 | + r, _ := http.NewRequest("GET", "/", nil) | ||
| 25 | + w := httptest.NewRecorder() | ||
| 26 | + beego.BeeApp.Handlers.ServeHTTP(w, r) | ||
| 27 | + | ||
| 28 | + beego.Trace("testing", "TestBeego", "Code[%d]\n%s", w.Code, w.Body.String()) | ||
| 29 | + | ||
| 30 | + Convey("Subject: Test Station Endpoint\n", t, func() { | ||
| 31 | + Convey("Status Code Should Be 200", func() { | ||
| 32 | + So(w.Code, ShouldEqual, 200) | ||
| 33 | + }) | ||
| 34 | + Convey("The Result Should Not Be Empty", func() { | ||
| 35 | + So(w.Body.Len(), ShouldBeGreaterThan, 0) | ||
| 36 | + }) | ||
| 37 | + }) | ||
| 38 | +} | ||
| 39 | + |
views/index.tpl
0 → 100644
| 1 | +<!DOCTYPE html> | ||
| 2 | + | ||
| 3 | +<html> | ||
| 4 | +<head> | ||
| 5 | + <title>Beego</title> | ||
| 6 | + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | ||
| 7 | + <link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpFNTdGOTA3OTczQTgxMUU0QTlEQUM0NEYyRkI1NEQxQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpFNTdGOTA3QTczQTgxMUU0QTlEQUM0NEYyRkI1NEQxQiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkU1N0Y5MDc3NzNBODExRTRBOURBQzQ0RjJGQjU0RDFCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkU1N0Y5MDc4NzNBODExRTRBOURBQzQ0RjJGQjU0RDFCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+lsWdMwAAIvtJREFUeNrke3d8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" type="image/x-icon" /> | ||
| 8 | + | ||
| 9 | + <style type="text/css"> | ||
| 10 | + *,body { | ||
| 11 | + margin: 0px; | ||
| 12 | + padding: 0px; | ||
| 13 | + } | ||
| 14 | + | ||
| 15 | + body { | ||
| 16 | + margin: 0px; | ||
| 17 | + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; | ||
| 18 | + font-size: 14px; | ||
| 19 | + line-height: 20px; | ||
| 20 | + background-color: #fff; | ||
| 21 | + } | ||
| 22 | + | ||
| 23 | + header, | ||
| 24 | + footer { | ||
| 25 | + width: 960px; | ||
| 26 | + margin-left: auto; | ||
| 27 | + margin-right: auto; | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + .logo { | ||
| 31 | + background-image: url('data:image/png;base64,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'); | ||
| 32 | + background-repeat: no-repeat; | ||
| 33 | + -webkit-background-size: 100px 100px; | ||
| 34 | + background-size: 100px 100px; | ||
| 35 | + background-position: center center; | ||
| 36 | + text-align: center; | ||
| 37 | + font-size: 42px; | ||
| 38 | + padding: 250px 0 70px; | ||
| 39 | + font-weight: normal; | ||
| 40 | + text-shadow: 0px 1px 2px #ddd; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | + header { | ||
| 44 | + padding: 100px 0; | ||
| 45 | + } | ||
| 46 | + | ||
| 47 | + footer { | ||
| 48 | + line-height: 1.8; | ||
| 49 | + text-align: center; | ||
| 50 | + padding: 50px 0; | ||
| 51 | + color: #999; | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | + .description { | ||
| 55 | + text-align: center; | ||
| 56 | + font-size: 16px; | ||
| 57 | + } | ||
| 58 | + | ||
| 59 | + a { | ||
| 60 | + color: #444; | ||
| 61 | + text-decoration: none; | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + .backdrop { | ||
| 65 | + position: absolute; | ||
| 66 | + width: 100%; | ||
| 67 | + height: 100%; | ||
| 68 | + box-shadow: inset 0px 0px 100px #ddd; | ||
| 69 | + z-index: -1; | ||
| 70 | + top: 0px; | ||
| 71 | + left: 0px; | ||
| 72 | + } | ||
| 73 | + </style> | ||
| 74 | +</head> | ||
| 75 | + | ||
| 76 | +<body> | ||
| 77 | + <header> | ||
| 78 | + <h1 class="logo">Welcome to Beego</h1> | ||
| 79 | + <div class="description"> | ||
| 80 | + Beego is a simple & powerful Go web framework which is inspired by tornado and sinatra. | ||
| 81 | + </div> | ||
| 82 | + </header> | ||
| 83 | + <footer> | ||
| 84 | + <div class="author"> | ||
| 85 | + Official website: | ||
| 86 | + <a href="http://{{.Website}}">{{.Website}}</a> / | ||
| 87 | + Contact me: | ||
| 88 | + <a class="email" href="mailto:{{.Email}}">{{.Email}}</a> | ||
| 89 | + </div> | ||
| 90 | + </footer> | ||
| 91 | + <div class="backdrop"></div> | ||
| 92 | + | ||
| 93 | + <script src="/static/js/reload.min.js"></script> | ||
| 94 | +</body> | ||
| 95 | +</html> |
-
请 注册 或 登录 后发表评论