Skip to content

Commit

Permalink
feat: add review.modify_count; struct style updates
Browse files Browse the repository at this point in the history
  • Loading branch information
JingYiJun committed Sep 27, 2023
1 parent 1ab7d0a commit 03bb639
Show file tree
Hide file tree
Showing 5 changed files with 143 additions and 285 deletions.
3 changes: 2 additions & 1 deletion cmd/migrate/danke_v3.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,8 @@ set upvote_count = (select count(*) from review_vote where review_vote.review_id
rank_overall = JSON_EXTRACT(review.rank, '$.overall'),
rank_content = JSON_EXTRACT(review.rank, '$.content'),
rank_assessment = JSON_EXTRACT(review.rank, '$.assessment'),
rank_workload = JSON_EXTRACT(review.rank, '$.workload')
rank_workload = JSON_EXTRACT(review.rank, '$.workload'),
modify_count = (select count(*) from review_history where review_history.review_id = review.id)
where true`).Error
if err != nil {
return err
Expand Down
67 changes: 17 additions & 50 deletions internal/model/course.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,54 +6,21 @@ import (

// Course 课程
type Course struct {
// 课程 ID , primary key
ID int `json:"id"`

// 创建时间
CreatedAt time.Time `json:"created_at"`

// 更新时间
UpdatedAt time.Time `json:"updated_at"`

// 课程名称
Name string `json:"name" gorm:"not null"`

// 课程编号
Code string `json:"code" gorm:"not null"`

// 选课序号。用于区分同一课程编号的不同平行班
CodeID string `json:"code_id" gorm:"not null"`

// 学分
Credit float64 `json:"credit" gorm:"not null"`

// 开课学院
Department string `json:"department" gorm:"not null"`

// 开课校区
CampusName string `json:"campus_name" gorm:"not null"`

// 老师:多个老师用逗号分隔
Teachers string `json:"teachers" gorm:"not null"`

// 最大选课人数
MaxStudent int `json:"max_student" gorm:"not null"`

// 周学时
WeekHour int `json:"week_hour" gorm:"not null"`

// 学年
Year int `json:"year" gorm:"not null"`

// 学期
Semester int `json:"semester" gorm:"not null"`

// 课程组类型
CourseGroupID int `json:"course_group_id" gorm:"not null;index"`

// 评教数量
ReviewCount int `json:"review_count" gorm:"not null;default:0"`

// 所有评教
Reviews []*Review `json:"reviews"`
ID int `json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
Name string `json:"name" gorm:"not null"` // 课程名称
Code string `json:"code" gorm:"not null"` // 课程编号
CodeID string `json:"code_id" gorm:"not null"` // 选课序号。用于区分同一课程编号的不同平行班
Credit float64 `json:"credit" gorm:"not null"` // 学分
Department string `json:"department" gorm:"not null"` // 开课学院
CampusName string `json:"campus_name" gorm:"not null"` // 开课校区
Teachers string `json:"teachers" gorm:"not null"` // 老师:多个老师用逗号分隔
MaxStudent int `json:"max_student" gorm:"not null"` // 最大选课人数
WeekHour int `json:"week_hour" gorm:"not null"` // 周学时
Year int `json:"year" gorm:"not null"` // 学年
Semester int `json:"semester" gorm:"not null"` // 学期
CourseGroupID int `json:"course_group_id" gorm:"not null;index"` // 课程组类型
ReviewCount int `json:"review_count" gorm:"not null;default:0"` // 评教数量
Reviews []*Review `json:"reviews"` // 所有评教
}
105 changes: 29 additions & 76 deletions internal/model/review.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,94 +4,47 @@ import (
"time"
)

// ReviewRank 评教分数
type ReviewRank struct {
Overall int `json:"overall"`

// 内容、风格方面
Content int `json:"content"`

// 工作量方面
Workload int `json:"workload"`

// 考核方面
Assessment int `json:"assessment"`
Overall int `json:"overall"`
Content int `json:"content"` // 内容、风格方面
Workload int `json:"workload"` // 工作量方面
Assessment int `json:"assessment"` // 考核方面
}

// Review 评教
type Review struct {
// 评教 ID , primary key
ID int `json:"id"`

// 创建时间
CreatedAt time.Time `json:"created_at" gorm:"not null"`

// 更新时间
UpdatedAt time.Time `json:"updated_at" gorm:"not null"`

// 课程 ID
CourseID int `json:"course_id" gorm:"not null;index"`
Course *Course `json:"course"`

// 标题
Title string `json:"title" gorm:"not null"`

// 内容
Content string `json:"content" gorm:"not null"`

// 评教者
ReviewerID int `json:"reviewer_id" gorm:"not null;index"`

// 评分
Rank *ReviewRank `json:"rank" gorm:"embedded;embeddedPrefix:rank_"`

// 点赞数
UpvoteCount int `json:"upvote_count"`

// 点踩数
DownvoteCount int `json:"downvote_count"`

// 评教修改历史
History []*ReviewHistory `json:"history"`

// 评教点赞/点踩详情
Vote []*ReviewVote `json:"vote"`

// 用户成就
ID int `json:"id"`
CreatedAt time.Time `json:"created_at" gorm:"not null"`
UpdatedAt time.Time `json:"updated_at" gorm:"not null"`
CourseID int `json:"course_id" gorm:"not null;index"`
Course *Course `json:"course"`
Title string `json:"title" gorm:"not null"`
Content string `json:"content" gorm:"not null"`
ReviewerID int `json:"reviewer_id" gorm:"not null;index"`
Rank *ReviewRank `json:"rank" gorm:"embedded;embeddedPrefix:rank_"`
UpvoteCount int `json:"upvote_count"`
DownvoteCount int `json:"downvote_count"`
ModifyCount int `json:"modify_count" gorm:"not null;default:0"`
History []*ReviewHistory `json:"history"`
Vote []*ReviewVote `json:"vote"`
UserAchievements []*UserAchievement `json:"achievements" gorm:"foreignKey:UserID;references:ReviewerID"`
}

// ReviewHistory 评教修改历史
type ReviewHistory struct {
// 评教修改历史 ID , primary key
ID int `json:"id"`

// 创建时间,原本是 time_created
CreatedAt time.Time `json:"created_at"`

// 更新时间,原本是 time_updated
UpdatedAt time.Time `json:"updated_at"`

// 评教 ID
ReviewID int `json:"review_id" gorm:"not null;index"`

// 修改人 ID
AlterBy int `json:"alter_by" gorm:"not null"`

// 修改前的标题
Title string `json:"title" gorm:"not null"`

// 修改前的内容
Content string `json:"content" gorm:"not null"`
ID int `json:"id"`
CreatedAt time.Time `json:"created_at"` // 创建时间,原本是 time_created
UpdatedAt time.Time `json:"updated_at"` // 更新时间,原本是 time_updated
ReviewID int `json:"review_id" gorm:"not null;index"`
AlterBy int `json:"alter_by" gorm:"not null"` // 修改人 ID
Title string `json:"title" gorm:"not null"` // 修改前的标题
Content string `json:"content" gorm:"not null"` // 修改前的内容
}

// ReviewVote 评教点赞/点踩详情
type ReviewVote struct {
// 点赞或点踩人的 ID
UserID int `json:"user_id" gorm:"primaryKey"`

// 评教 ID
ReviewID int `json:"review_id" gorm:"primaryKey"`

// 1 为点赞,-1 为点踩
Data int `json:"data"`
UserID int `json:"user_id" gorm:"primaryKey"` // 点赞或点踩人的 ID
ReviewID int `json:"review_id" gorm:"primaryKey"` // 评教 ID
Data int `json:"data"` // 1 为点赞,-1 为点踩
}
71 changes: 33 additions & 38 deletions internal/schema/course.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,45 +6,22 @@ import (
"github.com/opentreehole/backend/internal/model"
)

type CourseV1Response struct {
// 课程 ID
ID int `json:"id"`

// 课程名称
Name string `json:"name"`

// 课程编号
Code string `json:"code"`

// 选课序号。用于区分同一课程编号的不同平行班
CodeID string `json:"code_id"`

// 学分
Credit float64 `json:"credit"`

// 开课学院
Department string `json:"department"`

// 开课校区
CampusName string `json:"campus_name"`

// 老师:多个老师用逗号分隔
Teachers string `json:"teachers"`
/* V1 */

// 最大选课人数
MaxStudent int `json:"max_student"`

// 周学时
WeekHour int `json:"week_hour"`

// 学年
Year int `json:"year"`

// 学期
Semester int `json:"semester"`

// 评教列表
ReviewList []*ReviewV1Response `json:"review_list,omitempty"`
type CourseV1Response struct {
ID int `json:"id"`
Name string `json:"name"` // 名称
Code string `json:"code"` // 编号
CodeID string `json:"code_id"` // 选课序号。用于区分同一课程编号的不同平行班
Credit float64 `json:"credit"` // 学分
Department string `json:"department"` // 开课学院
CampusName string `json:"campus_name"` // 开课校区
Teachers string `json:"teachers"` // 老师:多个老师用逗号分隔
MaxStudent int `json:"max_student"` // 最大选课人数
WeekHour int `json:"week_hour"` // 周学时
Year int `json:"year"` // 学年
Semester int `json:"semester"` // 学期
ReviewList []*ReviewV1Response `json:"review_list,omitempty"` // 评教列表
}

func (r *CourseV1Response) FromModel(
Expand Down Expand Up @@ -100,3 +77,21 @@ func (r *CreateCourseV1Request) ToCourseGroupModel() *model.CourseGroup {
}
return &courseGroup
}

/* V3 */

type CourseV3Response struct {
ID int `json:"id"`
Name string `json:"name"` // 名称
Code string `json:"code"` // 编号
CodeID string `json:"code_id"` // 选课序号。用于区分同一课程编号的不同平行班
Credit float64 `json:"credit"` // 学分
Department string `json:"department"` // 开课学院
CampusName string `json:"campus_name"` // 开课校区
Teachers string `json:"teachers"` // 老师:多个老师用逗号分隔
MaxStudent int `json:"max_student"` // 最大选课人数
WeekHour int `json:"week_hour"` // 周学时
Year int `json:"year"` // 学年
Semester int `json:"semester"` // 学期
ReviewList []*ReviewV1Response `json:"review_list,omitempty"` // 评教列表
}
Loading

0 comments on commit 03bb639

Please sign in to comment.