123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- package api
- import (
- "errors"
- "fmt"
- "oilseal-train/db/model"
- "oilseal-train/db/repo"
- "strconv"
- "time"
- "github.com/gin-gonic/gin"
- "go.mongodb.org/mongo-driver/bson"
- "go.mongodb.org/mongo-driver/bson/primitive"
- )
- func Test(r *GinRouter) {
- r.POSTJWT("/test/create", TestAdd)
- r.GETJWT("/test/list", TestList)
- r.POSTJWT("/test/update", TestEdit)
- r.POSTJWT("/test/delete/:id", TestDelete)
- r.GETJWT("/test/randList", TestRandList)
- }
- // 新增
- func TestAdd(c *gin.Context, apictx *ApiSession) (interface{}, error) {
- err := IsAdmin(apictx)
- if err != nil {
- return nil, err
- }
- var form model.Test
- err = c.ShouldBindJSON(&form)
- if err != nil {
- fmt.Println(err)
- return nil, errors.New("参数错误")
- }
- if len(form.BankId) != 12 {
- return nil, errors.New("题库Id不正确")
- }
- if form.Question == "" {
- return nil, errors.New("题目不能为空")
- }
- if len(form.Answer) < 1 {
- return nil, errors.New("答案不能为空")
- }
- if form.State == 0 {
- form.State = 1
- }
- form.CreateTime = time.Now()
- form.UpdateTime = time.Now()
- return repo.RepoAddDoc(apictx.CreateRepoCtx(), repo.CollectionTest, &form)
- }
- // 列表
- func TestList(c *gin.Context, apictx *ApiSession) (interface{}, error) {
- // err := IsAdmin(apictx)
- // if err != nil {
- // return nil, err
- // }
- page, size, query := UtilQueryPageSize(c)
- if _question, ok := query["question"]; ok {
- query["question"] = bson.M{"$regex": _question.(string)}
- }
- if _bankId, ok := query["bankId"]; ok {
- query["bankId"], _ = primitive.ObjectIDFromHex(_bankId.(string))
- }
- result, err := repo.RepoPageSearch(apictx.CreateRepoCtx(), &repo.PageSearchOptions{
- CollectName: repo.CollectionTest,
- Page: page,
- Size: size,
- Query: query,
- })
- if len(result.List) == 0 {
- return result, err
- }
- // 获取bank信息
- ctx := apictx.CreateRepoCtx()
- for _, list := range result.List {
- bankId := list["bankId"].(primitive.ObjectID)
- bank := model.Bank{}
- repo.RepoSeachDoc(ctx, &repo.DocSearchOptions{
- CollectName: repo.CollectionBank,
- Query: repo.Map{"_id": bankId},
- }, &bank)
- list["bank"] = bank
- }
- return result, err
- }
- // 获取随机试题
- func TestRandList(c *gin.Context, apictx *ApiSession) (interface{}, error) {
- // bankId number type map
- _bankId := c.Query("bankId")
- _number := c.Query("number")
- _type := c.Query("type")
- bankId, err := primitive.ObjectIDFromHex(_bankId)
- if err != nil {
- return nil, errors.New("bankId错误")
- }
- number, err := strconv.Atoi(_number)
- // number 不存在时默认为10
- if err != nil {
- number = 10
- }
- fmt.Println(number)
- tsType, err := strconv.Atoi(_type)
- if err != nil {
- return nil, errors.New("题型错误")
- }
- tests := []*model.Test{}
- repo.RepoDocsSearch(apictx.CreateRepoCtx(), &repo.PageSearchOptions{
- CollectName: repo.CollectionTest,
- Query: repo.Map{"bankId": bankId, "type": tsType, "state": 1},
- }, &tests)
- if len(tests) <= number {
- return tests, nil
- }
- // 放入map中,利用map特性随机得到试题
- sets := make(map[primitive.ObjectID]*model.Test)
- for _, ts := range tests {
- sets[ts.Id] = ts
- }
- list := []*model.Test{}
- for _, ts := range sets {
- if len(list) < number {
- list = append(list, ts)
- } else {
- break
- }
- }
- return list, nil
- }
- // 更新
- func TestEdit(c *gin.Context, apictx *ApiSession) (interface{}, error) {
- // 操作用户为admin
- err := IsAdmin(apictx)
- if err != nil {
- return nil, err
- }
- var form model.Test
- err = c.ShouldBindJSON(&form)
- if err != nil {
- return nil, errors.New("参数错误")
- }
- if len(form.Id) != 12 {
- return nil, errors.New("id不正确")
- }
- return repo.RepoUpdateSetDoc(apictx.CreateRepoCtx(), repo.CollectionTest, form.Id.Hex(), &form)
- }
- // 删除
- func TestDelete(c *gin.Context, apictx *ApiSession) (interface{}, error) {
- // 操作用户为admin
- err := IsAdmin(apictx)
- if err != nil {
- return nil, err
- }
- _id := c.Param("id")
- _, err = primitive.ObjectIDFromHex(_id)
- if err != nil {
- return nil, errors.New("id错误")
- }
- return repo.RepoDeleteDoc(apictx.CreateRepoCtx(), repo.CollectionTest, _id)
- }
|