177 lines
5.8 KiB
Go
177 lines
5.8 KiB
Go
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*/
|
|
|
|
package schema
|
|
|
|
import (
|
|
"github.com/apache/answer/internal/base/reason"
|
|
"github.com/apache/answer/internal/base/validator"
|
|
"github.com/apache/answer/pkg/converter"
|
|
"github.com/segmentfault/pacman/errors"
|
|
)
|
|
|
|
// RemoveAnswerReq delete answer request
|
|
type RemoveAnswerReq struct {
|
|
ID string `validate:"required" json:"id"`
|
|
UserID string `json:"-"`
|
|
CanDelete bool `json:"-"`
|
|
CaptchaID string `json:"captcha_id"`
|
|
CaptchaCode string `json:"captcha_code"`
|
|
}
|
|
|
|
// RecoverAnswerReq recover answer request
|
|
type RecoverAnswerReq struct {
|
|
AnswerID string `validate:"required" json:"answer_id"`
|
|
UserID string `json:"-"`
|
|
}
|
|
|
|
const (
|
|
AnswerAcceptedFailed = 1
|
|
AnswerAcceptedEnable = 2
|
|
)
|
|
|
|
type AnswerAddReq struct {
|
|
QuestionID string `json:"question_id"`
|
|
Content string `validate:"required,notblank,gte=6,lte=65535" json:"content"`
|
|
HTML string `json:"-"`
|
|
UserID string `json:"-"`
|
|
CanEdit bool `json:"-"`
|
|
CanDelete bool `json:"-"`
|
|
CanRecover bool `json:"-"`
|
|
CaptchaID string `json:"captcha_id"`
|
|
CaptchaCode string `json:"captcha_code"`
|
|
IP string `json:"-"`
|
|
UserAgent string `json:"-"`
|
|
}
|
|
|
|
func (req *AnswerAddReq) Check() (errFields []*validator.FormErrorField, err error) {
|
|
req.HTML = converter.Markdown2HTML(req.Content)
|
|
if req.HTML == "" {
|
|
return append(errFields, &validator.FormErrorField{
|
|
ErrorField: "content",
|
|
ErrorMsg: reason.AnswerContentCannotEmpty,
|
|
}), errors.BadRequest(reason.AnswerContentCannotEmpty)
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
type GetAnswerInfoResp struct {
|
|
Info *AnswerInfo `json:"info"`
|
|
Question *QuestionInfoResp `json:"question"`
|
|
}
|
|
|
|
type AnswerUpdateReq struct {
|
|
ID string `json:"id"`
|
|
Title string `json:"title"`
|
|
Content string `validate:"required,notblank,gte=6,lte=65535" json:"content"`
|
|
EditSummary string `validate:"omitempty" json:"edit_summary"`
|
|
HTML string `json:"-"`
|
|
UserID string `json:"-"`
|
|
NoNeedReview bool `json:"-"`
|
|
CanEdit bool `json:"-"`
|
|
CaptchaID string `json:"captcha_id"`
|
|
CaptchaCode string `json:"captcha_code"`
|
|
}
|
|
|
|
func (req *AnswerUpdateReq) Check() (errFields []*validator.FormErrorField, err error) {
|
|
req.HTML = converter.Markdown2HTML(req.Content)
|
|
if req.HTML == "" {
|
|
return append(errFields, &validator.FormErrorField{
|
|
ErrorField: "content",
|
|
ErrorMsg: reason.AnswerContentCannotEmpty,
|
|
}), errors.BadRequest(reason.AnswerContentCannotEmpty)
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
// AnswerUpdateResp answer update resp
|
|
type AnswerUpdateResp struct {
|
|
WaitForReview bool `json:"wait_for_review"`
|
|
}
|
|
|
|
type AnswerListReq struct {
|
|
QuestionID string `json:"question_id" form:"question_id"`
|
|
Order string `json:"order" form:"order"`
|
|
Page int `json:"page" form:"page"`
|
|
PageSize int `json:"page_size" form:"page_size"`
|
|
UserID string `json:"-"`
|
|
IsAdmin bool `json:"-"`
|
|
IsAdminModerator bool `json:"-"`
|
|
CanEdit bool `json:"-"`
|
|
CanDelete bool `json:"-"`
|
|
CanRecover bool `json:"-"`
|
|
}
|
|
|
|
type AnswerInfo struct {
|
|
ID string `json:"id"`
|
|
QuestionID string `json:"question_id"`
|
|
Content string `json:"content"`
|
|
HTML string `json:"html"`
|
|
CreateTime int64 `json:"create_time"`
|
|
UpdateTime int64 `json:"update_time"`
|
|
Accepted int `json:"accepted"`
|
|
UserID string `json:"-"`
|
|
UpdateUserID string `json:"-"`
|
|
UserInfo *UserBasicInfo `json:"user_info,omitempty"`
|
|
UpdateUserInfo *UserBasicInfo `json:"update_user_info,omitempty"`
|
|
Collected bool `json:"collected"`
|
|
VoteStatus string `json:"vote_status"`
|
|
VoteCount int `json:"vote_count"`
|
|
QuestionInfo *QuestionInfoResp `json:"question_info,omitempty"`
|
|
Status int `json:"status"`
|
|
|
|
// MemberActions
|
|
MemberActions []*PermissionMemberAction `json:"member_actions"`
|
|
}
|
|
|
|
type AdminAnswerInfo struct {
|
|
ID string `json:"id"`
|
|
QuestionID string `json:"question_id"`
|
|
Description string `json:"description"`
|
|
CreateTime int64 `json:"create_time"`
|
|
UpdateTime int64 `json:"update_time"`
|
|
Accepted int `json:"accepted"`
|
|
UserID string `json:"-"`
|
|
UpdateUserID string `json:"-"`
|
|
UserInfo *UserBasicInfo `json:"user_info"`
|
|
VoteCount int `json:"vote_count"`
|
|
QuestionInfo struct {
|
|
Title string `json:"title"`
|
|
} `json:"question_info"`
|
|
}
|
|
|
|
type AcceptAnswerReq struct {
|
|
QuestionID string `validate:"required,gt=0,lte=30" json:"question_id"`
|
|
AnswerID string `validate:"omitempty" json:"answer_id"`
|
|
UserID string `json:"-"`
|
|
}
|
|
|
|
func (req *AcceptAnswerReq) Check() (errFields []*validator.FormErrorField, err error) {
|
|
if len(req.AnswerID) == 0 {
|
|
req.AnswerID = "0"
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
type AdminUpdateAnswerStatusReq struct {
|
|
AnswerID string `validate:"required" json:"answer_id"`
|
|
Status string `validate:"required,oneof=available deleted" json:"status"`
|
|
UserID string `json:"-"`
|
|
}
|