exam

package
v0.0.0-...-0bd2313 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 23, 2021 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Answer

type Answer struct {
	ID              uint64            `xorm:"pk 'id'" json:"id"`
	QuestionID      uint64            `xorm:"not null 'question_id'" json:"question_id"`
	ResultID        uint64            `xorm:"not null 'result_id'" json:"result_id"`
	Text            string            `xorm:"not null varchar(250)" json:"text"`
	SelectedOptions []*SelectedOption `xorm:"json null" json:"selected_options"`

	CreatedAt time.Time `xorm:"created" json:"created_at,omitempty" field:"created_at"`
	UpdatedAt time.Time `xorm:"updated" json:"updated_at,omitempty" field:"updated_at"`
	DeletedAt time.Time `xorm:"deleted" json:"-" field:"-"`

	Active   bool               `xorm:"-" json:"active"`
	Question *question.Question `xorm:"-" json:"question"`
}

type CreateExamRequest

type CreateExamRequest struct {
	Title    string     `json:"title,omitempty"`
	StartAt  time.Time  `json:"start_at,omitempty"`
	Once     bool       `json:"once,omitempty"`
	Deadline *time.Time `json:"deadline,omitempty"`
}

func (CreateExamRequest) Validate

func (r CreateExamRequest) Validate() error

type Exam

type Exam struct {
	ID           uint64        `xorm:"pk 'id'" json:"id,omitempty" field:"id"`
	Examiner     uint64        `xorm:"not null" json:"examiner,omitempty" field:"examiner"`
	Title        string        `xorm:"varchar(50) not null" json:"title,omitempty" field:"title"`
	State        State         `xorm:"not null" json:"state,omitempty" field:"state"`
	Duration     time.Duration `xorm:"not null" json:"duration,omitempty" field:"duration"`
	StartAt      time.Time     `xorm:"not null" json:"start_at,omitempty" field:"start_at"`
	Deadline     *time.Time    `xorm:"null" json:"deadline,omitempty" field:"deadline"`
	FreeMovement bool          `xorm:"not null" json:"free_movement,omitempty" field:"free_movement"`

	CreatedAt time.Time `xorm:"created" json:"created_at,omitempty" field:"created_at"`
	UpdatedAt time.Time `xorm:"updated" json:"updated_at,omitempty" field:"updated_at"`
	DeletedAt time.Time `xorm:"deleted" json:"-" field:"-"`

	Questions []*question.Question `xorm:"-" json:"questions,omitempty"`
	// contains filtered or unexported fields
}

func NewDraftExam

func NewDraftExam(examiner uint64) *Exam

func (*Exam) Cover

func (e *Exam) Cover() string

func (*Exam) Fs

func (e *Exam) Fs() afero.Fs

func (*Exam) Map

func (e *Exam) Map(excludes ...string) map[string]interface{}

func (*Exam) SetDeadline

func (e *Exam) SetDeadline(d *time.Time) *Exam

func (*Exam) SetFreeMovement

func (e *Exam) SetFreeMovement(fm bool) *Exam

func (*Exam) SetStartAt

func (e *Exam) SetStartAt(sa time.Time) *Exam

func (*Exam) SetState

func (e *Exam) SetState(s State) *Exam

func (*Exam) SetTitle

func (e *Exam) SetTitle(t string) *Exam

type ExamStatsResponse

type ExamStatsResponse struct {
	TotalDuration       int64 `json:"total_duration"`
	TotalQuestions      int64 `json:"total_questions"`
	TotalScores         int64 `json:"total_scores"`
	TotalNegativeScores int64 `json:"total_negative_scores"`
}

type PersistenceProvider

type PersistenceProvider interface {
	ExamPersister() Persister
}

type Persister

type Persister interface {
	FindExam(context.Context, uint64) (*Exam, error)
	CreateExam(context.Context, *Exam) error
	UpdateExam(context.Context, *Exam, ...string) error
	SearchExam(_ context.Context, q string, page, pageSize int) (int64, []*Exam, error)
	ExamStats(context.Context, uint64) (*ExamStatsResponse, error)
	CreateResult(context.Context, *Result) error
	FindResult(_ context.Context, id uint64) (*Result, error)
	FindResultByExam(_ context.Context, uid, eid uint64) (*Result, error)
	FindResultAnswers(_ context.Context, rid uint64) ([]*Answer, error)
	UpdateAnswer(context.Context, *Answer, ...string) error
}

type Result

type Result struct {
	ID       uint64 `xorm:"pk 'id'" json:"id"`
	Examinee uint64 `xorm:"not null" json:"examinee"`
	ExamID   uint64 `xorm:"not null 'exam_id'" json:"exam_id"`

	CreatedAt time.Time `xorm:"created" json:"created_at,omitempty" field:"created_at"`
	UpdatedAt time.Time `xorm:"updated" json:"updated_at,omitempty" field:"updated_at"`
	DeletedAt time.Time `xorm:"deleted" json:"-" field:"-"`

	Answers []*Answer `xorm:"-" json:"answers"`
}

type SearchExamRequest

type SearchExamRequest struct {
	shared.PaginatedRequest
}

type SearchExamResponse

type SearchExamResponse struct {
	shared.PaginatedResponse
	Exams []*Exam
}

type SelectedOption

type SelectedOption struct {
	OptionID uint64 `json:"option_id"`
	Answer   bool   `json:"answer"`
}

type Service

type Service interface {
	GetExam(context.Context, uint64) (*Exam, error)
	GetExamStats(context.Context, uint64) (*ExamStatsResponse, error)
	CreateExam(context.Context, *CreateExamRequest) (*Exam, error)
	UpdateExam(context.Context, *UpdateExamRequest) error
	PublishExam(context.Context, *Exam) error
	SearchExam(context.Context, *SearchExamRequest) (*SearchExamResponse, error)
	Participate(context.Context, *user.User, *Exam) (*Result, error)
	GetResult(context.Context, uint64) (*Result, error)
	SubmitAnswer(context.Context, *SubmitAnswerRequest) error
}

type ServiceProvider

type ServiceProvider interface {
	ExamService() Service
}

type State

type State int
const (
	Draft State = iota
	Published
)

func (State) String

func (s State) String() string

type SubmitAnswerRequest

type SubmitAnswerRequest struct {
	ID              uint64            `json:"-"`
	Text            string            `json:"text,omitempty"`
	SelectedOptions []*SelectedOption `json:"selected_options,omitempty"`
}

type UpdateExamRequest

type UpdateExamRequest struct {
	Title        string     `json:"title,omitempty"`
	StartAt      time.Time  `json:"start_at,omitempty"`
	Once         bool       `json:"once,omitempty"`
	Deadline     *time.Time `json:"deadline,omitempty"`
	FreeMovement bool       `json:"free_movement,omitempty"`
}

func (UpdateExamRequest) Validate

func (r UpdateExamRequest) Validate() error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL