Skip to content

Commit

Permalink
添加 question 处理 #18
Browse files Browse the repository at this point in the history
  • Loading branch information
yangchenglong11 committed Oct 21, 2017
1 parent 9d09544 commit e1d17b2
Show file tree
Hide file tree
Showing 5 changed files with 151 additions and 15 deletions.
101 changes: 101 additions & 0 deletions backend/controllers/question.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
package controllers

import (
"encoding/json"

"github.com/Jsharkc/TechTree/backend/general"
"github.com/Jsharkc/TechTree/backend/models"
"github.com/Jsharkc/TechTree/backend/utils"
"github.com/Jsharkc/TechTree/lib/log"
)

type QuestionController struct {
BaseController
}

func (qc *QuestionController) GetQuestion() {
var (
err error
q []models.Question
flag bool
num = 3
)
flag = false
user := qc.GetSession(general.SessionUserID).(string)
if flag {
num = 1
}
q, err = models.QuestionService.GetQuestionByUser(user, num)
if err != nil {
log.Logger.Error("get question err:", err)
qc.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrMysql}
goto finish
}

qc.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrSucceed, general.RespKeyData: q}
finish:
qc.ServeJSON(true)
}

func (qc *QuestionController) AdminAddQuestion() {
var (
err error
q models.Question
flag bool
)

err = json.Unmarshal(qc.Ctx.Input.RequestBody, &q)
if err != nil {
log.Logger.Error("AdminAddQuestion question json unmarshal err:", err)
qc.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrInvalidParams}
goto finish
}

flag, err = utils.GlobalValid.Valid(&q)
if !flag {
for _, err := range utils.GlobalValid.Errors {
log.Logger.Error("The question key "+err.Key+" has err:", err)
}

qc.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrInvalidParams}
goto finish
}

err = models.QuestionService.AdminAddQuestion(&q)
if err != nil {
log.Logger.Error("Add question mysql err:", err)
qc.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrMysql}
goto finish
}

qc.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrSucceed}
log.Logger.Info("Add question success")
finish:
qc.ServeJSON(true)
}

func (qc *QuestionController) Delete() {
var (
err error
id string
)

err = json.Unmarshal(qc.Ctx.Input.RequestBody, &id)
if err != nil {
log.Logger.Error("Delete question json unmarshal err:", err)
qc.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrInvalidParams}
goto finish
}

err = models.QuestionService.DeleteQuestion(id)
if err != nil {
log.Logger.Error("Delete question mysql err:", err)
qc.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrMysql}
goto finish
}

qc.Data["json"] = map[string]interface{}{general.RespKeyStatus: general.ErrSucceed}
log.Logger.Info("Delete question success")
finish:
qc.ServeJSON(true)
}
6 changes: 2 additions & 4 deletions backend/general/constant.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,15 @@ const (
RespKeyType = "type"
RespKeyData = "data"

UserActive = 0x10
UserInactive = 0x11
Active = 0x10
Inactive = 0x11

ErrSucceed = 0x0
ErrInvalidParams = 0x1
ErrUserExists = 0x2
ErrMysql = 0x3
ErrNotFound = 0x4

NodeNoActive = 0x10
NodeActive = 0x11
NodePassed = 0x12
NoseUserAdd = 0x13

Expand Down
4 changes: 2 additions & 2 deletions backend/models/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func (u PassNode) TableName() string {
}

func (node *NodeServiceProvider) Add(n *Node) error {
n.Status = general.NodeNoActive
n.Status = general.Inactive
return tidb.Conn.Create(n).Error
}

Expand Down Expand Up @@ -75,7 +75,7 @@ func (node *NodeServiceProvider) ListAll(uid string) ([]Node, error) {

for index, node := range notPassNodes {
if _, ok := nodeMap[node.PID]; ok {
notPassNodes[index].Status = general.NodeActive
notPassNodes[index].Status = general.Active
}
}

Expand Down
53 changes: 45 additions & 8 deletions backend/models/question.go
Original file line number Diff line number Diff line change
@@ -1,20 +1,57 @@
package models

import (
"github.com/satori/go.uuid"

"github.com/Jsharkc/TechTree/backend/general"
"github.com/Jsharkc/TechTree/backend/tidb"
)

type QuestionServiceProvider struct {
}

var QuestionService *QuestionServiceProvider = &QuestionServiceProvider{}

type Question struct {
ID string `json:"id" gorm:"column:id" valid:"Required"`
NID string `json:"nid" gorm:"column:nid" valid:"Required"`
Description string `json:"desci" gorm:"column:desc" valid:"Required"`
TestPath string `json:"testpath" gorm:"column:testpath" valid:"Required"`
PrepCode string `json:"prepcode gorm:"cllumn:"prepcode" valid:"Required"`
ID string `json:"id" gorm:"column:id" valid:"Required"`
NID string `json:"nid" gorm:"column:nid" valid:"Required"`
Description string `json:"desci" gorm:"column:desc" valid:"Required"`
TestPath string `json:"testpath" gorm:"column:testpath" valid:"Required"`
PrepCode string `json:"prepcode" gorm:"column:prepcode" valid:"Required"`
Status int `json:"status" gorm:"column:status"`
}

type UserAddQues struct {
ID string `json:"id" gorm:"column:id" valid:"Required"`
NID string `json:"nid" gorm:"column:nid" valid:"Required"`
Description string `json:"desci" gorm:"column:desc" valid:"Required"`
Status int `json:"status" gorm:"column:status"`
}

type PassedQuestion struct {
UID string `json:"uid" gorm:"column:uid" valid:"Required"`
QID string `json:"qid" gorm:"column:qid" valid:"Required"`
NID string `json:"nid" gorm:"column:nid" valid:"Required"`
UID string `json:"uid" gorm:"column:uid" valid:"Required"`
QID string `json:"qid" gorm:"column:qid" valid:"Required"`
NID string `json:"nid" gorm:"column:nid" valid:"Required"`
}

type QuestionVote struct {
UID string `json:"uid" gorm:"column:uid" valid:"Required"`
QID string `json:"qid" gorm:"column:qid" valid:"Required"`
Kind int `json:"kind" gorm:"column:kind"`
}

func (qu *QuestionServiceProvider) GetQuestionByUser(user string, num int) ([]Question, error) {
var q []Question
err := tidb.Conn.Raw("SELECT * FROM question WHERE status = 17 AND id NOT IN (SELECT uid FROM passquestion WHERE uid = ? AND status = 17)", user).Scan(&q)
return q[0:num], err.Error
}

func (qu *QuestionServiceProvider) AdminAddQuestion(question *Question) error {
question.ID = uuid.NewV4().String()
question.Status = general.Active
return tidb.Conn.Model(&Question{}).Create(question).Error
}

func (qu *QuestionServiceProvider) DeleteQuestion(qid string) error {
return tidb.Conn.Model(&Question{}).Where("id = ?", qid).Update("status", general.Inactive).Error
}
2 changes: 1 addition & 1 deletion backend/models/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ func (us *UserServiceProvider) Register(u *User) error {
}

u.Password = string(hashcode)
u.Status = general.UserActive
u.Status = general.Active
u.Created = time.Now()

return err
Expand Down

0 comments on commit e1d17b2

Please sign in to comment.