model

package
v0.6.9 Latest Latest
Warning

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

Go to latest
Published: Apr 7, 2024 License: AGPL-3.0 Imports: 3 Imported by: 7

Documentation

Index

Constants

View Source
const (
	OnLine = "online"

	OfficialOffline = "official"
)
View Source
const (
	ProjectClassWCA        = "WCA项目"
	ProjectClassWCABF      = "WCA盲拧"
	ProjectClassWCAAlien   = "WCA异型"
	ProjectClassWCACube    = "WCA正阶"
	ProjectClassXCube      = "趣味项目"
	ProjectClassXCubeBF    = "趣味盲拧"
	ProjectClassXCubeOH    = "单手"
	ProjectClassXCubeFm    = "最少步"
	ProjectClassXCubeRelay = "趣味连拧"
	ProjectClassNotCube    = "趣味非魔方"
	ProjectClassDigit      = "记字"
	ProjectClassSuperHigh  = "超高阶"
	ProjectClassBFGroup    = "盲拧群系列"
)
View Source
const (
	SorWCA             = "wca"
	SorXCube           = "xcube"
	SorWCACubeLowLevel = "wca2345"
	SorWCACubeAllLevel = "wca234567"
	SorWCAAlien        = "wca_alien"
	SorWCA333          = "wca333"
	SorWCABf           = "wca_bf"
)
View Source
const (
	RecordByAvg    = 1
	RecordBySingle = 2
)
View Source
const (
	DNF = -10000 - iota // 未还原成功
	DNS                 // 未开始还原
)
View Source
const (
	FinishDetailRecord  = "record"  // 记录
	FinishDetailNeglect = "neglect" // 忽略
	FinishDetailDelete  = "delete"  // 删除
)

Variables

View Source
var Models = []interface{}{
	&Contest{},
	&Round{},
	&Player{},
	&Score{},
	&PreScore{},
	&Record{},
	&PlayerUser{},
}

Functions

func AllProjectItem

func AllProjectItem() []projectItem

func SorKeyMap

func SorKeyMap() map[SorStatisticsKey][]Project

func SortByAvg

func SortByAvg(in []Score)

func SortByBest

func SortByBest(in []Score)

func SortScores

func SortScores(in []Score)

SortScores sort scores by WCA.

Types

type Contest

type Contest struct {
	Model

	Name        string    `json:"Name,omitempty" gorm:"unique;not null;column:name"`        // 比赛名
	Type        string    `json:"Type,omitempty" gorm:"column:c_type"`                      // 类型 正式 | 线上 | 线下
	GroupID     string    `json:"GroupID,omitempty" gorm:"column:group_id"`                 // 线上群赛ID
	Description string    `json:"Description,omitempty" gorm:"not null;column:description"` // 描述
	IsEnd       bool      `json:"IsEnd,omitempty" gorm:"null;column:is_end"`                // 是否已结束
	RoundIds    string    `json:"RoundIds,omitempty" gorm:"column:round_ids"`               // 轮次ID
	Rounds      []Round   `json:"Rounds" gorm:"-"`                                          // 预留
	StartTime   time.Time `json:"StartTime,omitempty" gorm:"column:start_time"`             // 开始时间
	EndTime     time.Time `json:"EndTime,omitempty" gorm:"column:end_time"`                 // 结束时间
}

Contest 比赛表,记录某场比赛

func (*Contest) GetRoundIds

func (c *Contest) GetRoundIds() []uint

func (*Contest) SetRoundIds

func (c *Contest) SetRoundIds(in []Round) *Contest

type Model

type Model struct {
	ID        uint      `json:"ID" gorm:"primaryKey;column:id"`
	CreatedAt time.Time `json:"-" gorm:"autoCreateTime;column:created_at"`
}

type Player

type Player struct {
	Model

	Name       string `json:"Name" gorm:"unique;not null;column:name"` // 选手名
	WcaID      string `json:"WcaID,omitempty" gorm:"column:wca_id"`    // 选手WcaID,用于查询选手WCA的成绩
	ActualName string `json:"ActualName,omitempty" gorm:"actual_name"` // 真实姓名

	Titles    string   `json:"-" gorm:"titles"` // 头衔
	TitlesVal []string `json:"TitlesVal,omitempty" gorm:"-"`
}

Player 选手表

func (*Player) GetTitles

func (c *Player) GetTitles() []string

func (*Player) SetTitles

func (c *Player) SetTitles(in []string) *Player

type PlayerUser added in v0.1.8

type PlayerUser struct {
	Model
	IsAdmin      bool `json:"isAdmin"`      // 是否为普通管理员
	IsSuperAdmin bool `json:"isSuperAdmin"` // 是否为超级管理员

	LoginID  string `gorm:"column:login_id"`                  // 登录自定义ID
	PlayerID uint   `gorm:"unique;not null;column:player_id"` // 选手ID
	Password string `json:"-" gorm:""`                        // 密码 md5加密校验

	QQ         string `json:"-" gorm:"column:qq"`            // qq号
	QQBotUniID string `json:"-" gorm:"column:qq_bot_uni_id"` // qq 机器人ID
	WeChat     string `json:"-" gorm:"column:wechat"`        // 微信号
	Phone      string `json:"-" gorm:"column:phone"`         // 手机号
}

PlayerUser 选手用户表

func (PlayerUser) Valid added in v0.1.24

func (p PlayerUser) Valid() bool

type PreScore added in v0.1.9

type PreScore struct {
	Score

	ContestName string `json:"ContestName" gorm:"column:contest_name"` // 比赛名称
	RoundName   string `json:"RoundName" gorm:"column:round_name"`     // 轮次名

	Recorder     string `json:"Recorder" gorm:"column:recorder"`          // 记录人
	Processor    string `json:"Processor" gorm:"column:processor"`        // 处理人
	Finish       bool   `json:"Finish" gorm:"column:finish"`              // 是否处理
	FinishDetail string `json:"FinishDetail" gorm:"column:finish_detail"` // 处理结果
	Source       string `json:"Source" gorm:"column:source"`              // 来源 QQ web ...
}

type Project

type Project string
const (
	// 特殊
	JuBaoHaoHao Project = "jhh"
	OtherCola   Project = "o_cola"

	// wca
	Cube222    Project = "222"
	Cube333    Project = "333"
	Cube444    Project = "444"
	Cube555    Project = "555"
	Cube666    Project = "666"
	Cube777    Project = "777"
	CubeSk     Project = "skewb"
	CubePy     Project = "pyram"
	CubeSq1    Project = "sq1"
	CubeMinx   Project = "minx"
	CubeClock  Project = "clock"
	Cube333OH  Project = "333oh"
	Cube333FM  Project = "333fm"
	Cube333BF  Project = "333bf"
	Cube444BF  Project = "444bf"
	Cube555BF  Project = "555bf"
	Cube333MBF Project = "333mbf"
	Cube333Ft  Project = "333ft"

	// 趣味最少步
	XCubePyFm    Project = "pyram_fm"
	XCubeSkFm    Project = "skewb_fm"
	XCubeClockFm Project = "clock_fm"
	XCube222Fm   Project = "222fm"

	// 盲
	XCube333MBFUnlimited Project = "333mbf_unlimited"
	XCube222BF           Project = "222bf"
	XCube666BF           Project = "666bf"
	XCube777BF           Project = "777bf"
	XCubePyBF            Project = "pyram_bf"
	XCubeSkBF            Project = "skewb_bf"
	XCubeMinxBf          Project = "minx_bf"
	XCubeClockBf         Project = "clock_bf"
	XCubeSQ1Bf           Project = "sq1_bf"

	// 单手
	XCube333BfOH   Project = "333bf_oh" // 三单盲
	XCube444BfOH   Project = "444bf_oh"
	XCube555BfOH   Project = "555bf_oh"
	XCube222OH     Project = "222oh"
	XCube333MiniOH Project = "333mini_oh"
	XCube444OH     Project = "444oh"
	XCube555OH     Project = "555oh"
	XCube666OH     Project = "666oh"
	XCube777OH     Project = "777oh"
	XCubeSkOH      Project = "skewb_oh"
	XCubePyOH      Project = "pyram_oh"
	XCubeSq1OH     Project = "sq1_oh"
	XCubeMinxOH    Project = "minx_oh"
	XCubeClockOH   Project = "clock_oh"

	// 连
	XCube333Multiple5      Project = "333multiple5"
	XCube333OHMultiple5    Project = "333oh_multiple5"
	XCube333Multiple10     Project = "333multiple10"
	XCube333OHMultiple10   Project = "333oh_multiple10"
	XCube333Multiple15     Project = "333multiple15"
	XCube333OHMultiple15   Project = "333oh_multiple15"
	XCube333Multiple20     Project = "333multiple20"
	XCube333OHMultiple20   Project = "333oh_multiple20"
	XCube2345Relay         Project = "2345relay"
	XCube2345OHRelay       Project = "2345oh_relay"
	XCube27Relay           Project = "2_7relay"
	XCube27OHRelay         Project = "2_7oh_relay"
	XCube345RelayBF        Project = "345relay_bf"
	XCube345OHRelayBF      Project = "345oh_relay_bf"
	XCubeAlienRelay        Project = "alien_relay" // 塔斜表五Q
	XCubeAlienOHRelay      Project = "alien_oh_relay"
	XCube27AlienRelayAll   Project = "27alien_relay"
	XCube27AlienOHRelayAll Project = "27alien_oh_relay"

	// 特殊魔方
	XCube333Mirror    Project = "333mirror"
	XCube333Mirroring Project = "333mirroring"
	XCube333Ghost     Project = "333ghost"
	XCube333ZongZi    Project = "333Zongzi"
	XCubeHotWheels    Project = "hot_wheels"
	XCubeFisher       Project = "fisher"
	XCubeGear         Project = "gear"
	Xcube333Clone     Project = "333clone"
	XCubeMapleLeaf    Project = "maple_leaf"
	XCube222Minx      Project = "222minx"
	XCube444Minx      Project = "444minx"
	XCube555Minx      Project = "555minx"
	XCube333Mini      Project = "333mini"
	XCube444Py        Project = "444pyram"
	XCube888          Project = "888"
	XCube999          Project = "999"
	XCube10L          Project = "10level"
	XCube11L          Project = "11level"
	XCube12L          Project = "12level"
	XCube13L          Project = "13level"
	XCube14L          Project = "14level"
	XCube15L          Project = "15level"
	XCube16L          Project = "16level"
	XCube17L          Project = "17level"
	XCube21L          Project = "21level"
	XCube133          Project = "133"
	XCube223          Project = "223"
	XCube233          Project = "233"
	XCube334          Project = "334"
	XCube335          Project = "335"
	XCube336          Project = "336"
	XCube337          Project = "337"
	XCubeHelicopter   Project = "helicopter"
	XCubeRedi         Project = "redi"

	// 数独系列
	NotCubeSuDoKuVeryEasy Project = "sudoku_very_easy"
	NotCubeSuDoKuEasy     Project = "sudoku_easy"
	NotCubeSuDoKuModerate Project = "sudoku_moderate"
	NotCubeSuDoKuAdvanced Project = "sudoku_advanced"
	NotCubeSuDoKuHard     Project = "sudoku_hard"
	NotCubeSuDoKuMaster   Project = "sudoku_master"

	// 数字华容道系列
	NotCube8Puzzle  Project = "8puzzle"
	NotCube15Puzzle Project = "15puzzle"
	NotCube24Puzzle Project = "24puzzle"
	NotCube35Puzzle Project = "35puzzle"
	NotCube48Puzzle Project = "48puzzle"
	NotCube63Puzzle Project = "63puzzle"
	NotCube80Puzzle Project = "80puzzle"

	// 记字
	NotCubeDigit                   Project = "digit"               // 任意字符: 数字 + 大小写字母 + 其他字符
	NotCubeDigitOnlyNumber         Project = "digit_num"           // 纯数字
	NotCubeDigitOnlyUppercase      Project = "digit_uppercase"     // 大写字母
	NotCubeDigitNumberAndUppercase Project = "digit_num_uppercase" // 数字 + 大写字母
	NotCubePuke                    Project = "puke"                // 扑克记忆

	// 盲拧群周系列赛
	BFGroup333BF1 Project = "3bf1"
	BFGroup333BF2 Project = "3bf2"
	BFGroup333BF3 Project = "3bf3"
	BFGroup333BF4 Project = "3bf4"
	BFGroup333BF5 Project = "3bf5"
	BFGroup333BF6 Project = "3bf6"
	BFGroup333BF7 Project = "3bf7"

	BFGroup444BF1 Project = "4bf1"
	BFGroup444BF2 Project = "4bf2"
	BFGroup444BF3 Project = "4bf3"
	BFGroup444BF4 Project = "4bf4"

	BFGroup555BF1 Project = "5bf1"
	BFGroup555BF2 Project = "5bf2"
	BFGroup555BF3 Project = "5bf3"
	BFGroup555BF4 Project = "5bf4"

	BFGroup333MBF1 Project = "3mbf1"
	BFGroup333MBF2 Project = "3mbf2"
	BFGroup333MBF3 Project = "3mbf3"
	BFGroup333MBF4 Project = "3mbf4"
)

func AllProjectRoute

func AllProjectRoute() []Project

func WCAProjectRoute

func WCAProjectRoute() []Project

func XCubeProjectRoute

func XCubeProjectRoute() []Project

func (Project) Class added in v0.4.2

func (p Project) Class() []string

func (Project) Cn

func (p Project) Cn() string

func (Project) IsWca added in v0.2.0

func (p Project) IsWca() bool

func (Project) RouteType

func (p Project) RouteType() RouteType

func (Project) String added in v0.3.0

func (p Project) String() string

type ProjectClass added in v0.4.2

type ProjectClass string

type Record

type Record struct {
	Model

	Project      Project `json:"Project,omitempty" gorm:"column:project"`   // 项目
	RType        uint    `json:"RType,omitempty" gorm:"column:rtype"`       // 记录类型
	ScoreId      uint    `json:"score_id,omitempty" gorm:"column:score_id"` // 成绩记录位置
	ScoreValue   Score   `json:"ScoreValue,omitempty" gorm:"-"`
	PlayerID     uint    `json:"PlayerID,omitempty" gorm:"index;not null;column:player_id"`   // 选手的ID
	PlayerName   string  `json:"PlayerName,omitempty" gorm:"column:player_name"`              // 玩家名
	ContestID    uint    `json:"ContestID,omitempty" gorm:"index;not null;column:contest_id"` // 比赛的ID
	ContestValue Contest `json:"ContestValue,omitempty" gorm:"-"`
}

type Round

type Round struct {
	Model
	Name      string   `json:"Name,omitempty" gorm:"column:name"`
	ContestID uint     `json:"ContestID,omitempty" gorm:"column:contest_id"` // 所属比赛
	Project   Project  `json:"Project,omitempty" gorm:"column:project"`      // 项目
	Number    int      `json:"Number,omitempty" gorm:"column:number"`        // 项目轮次
	Part      int      `json:"Part,omitempty" gorm:"column:part"`            // 该轮次第几份打乱
	Final     bool     `json:"Final,omitempty" gorm:"column:final"`          // 是否是最后一轮
	IsStart   bool     `json:"IsStart,omitempty" gorm:"column:is_start"`     // 是否已开始
	Upsets    string   `json:"-" gorm:"column:upsets"`                       // 打乱 UpsetDetail
	UpsetsVal []string `json:"UpsetsVal,omitempty" gorm:"-"`                 // 打乱 UpsetDetail 实际内容
}

Round 轮次及打乱

func (*Round) GetUpsets

func (r *Round) GetUpsets() []string

func (*Round) SetUpsets

func (r *Round) SetUpsets(in []string) *Round

type RouteType

type RouteType string
const (
	RouteType1rounds      RouteType = "1_r"      // 单轮项目
	RouteType3roundsBest  RouteType = "3_r_b"    // 三轮取最佳
	RouteType3roundsAvg   RouteType = "3_r_a"    // 三轮取平均
	RouteType5roundsBest  RouteType = "5_r_b"    // 五轮取最佳
	RouteType5roundsAvg   RouteType = "5_r_a"    // 五轮取平均
	RouteType5RoundsAvgHT RouteType = "5_r_a_ht" // 五轮去头尾取平均
	RouteTypeRepeatedly   RouteType = "ry"       // 单轮多次还原项目, 成绩1:还原数; 成绩2:尝试数; 成绩3:时间;
)

func (RouteType) String added in v0.1.8

func (r RouteType) String() string

type Score

type Score struct {
	Model

	// 数据库字段
	PlayerID     uint    `json:"PlayerID,omitempty" gorm:"index;not null;column:player_id"`   // 选手的ID
	PlayerName   string  `json:"PlayerName,omitempty" gorm:"column:player_name"`              // 玩家名
	ContestID    uint    `json:"ContestID,omitempty" gorm:"index;not null;column:contest_id"` // 比赛的ID
	RouteID      uint    `json:"RouteID,omitempty" gorm:"index;column:route_id"`              // 轮次
	Project      Project `json:"Project,omitempty" gorm:"not null;column:project"`            // 分项目 333/222/444等
	Result1      float64 `json:"R1,omitempty" gorm:"column:r1;NULL"`                          // 成绩1 多盲时这个成绩是实际还原数
	Result2      float64 `json:"R2,omitempty" gorm:"column:r2;NULL"`                          // 成绩2 多盲时这个成绩是尝试复原数
	Result3      float64 `json:"R3,omitempty" gorm:"column:r3;NULL"`                          // 成绩3 多盲时这个成绩是计时
	Result4      float64 `json:"R4,omitempty" gorm:"column:r4;NULL"`                          // 成绩4
	Result5      float64 `json:"R5,omitempty" gorm:"column:r5;NULL"`                          // 成绩5
	Best         float64 `json:"Best,omitempty" gorm:"column:best;NULL"`                      // 五把最好成绩
	Avg          float64 `json:"Avg,omitempty" gorm:"column:avg;NULL"`                        // 五把平均成绩
	IsBestSingle bool    `json:"IsBestSingle,omitempty" gorm:"column:is_best_single"`         // 这是玩家比往期最佳的还好的成绩
	IsBestAvg    bool    `json:"IsBestAvg,omitempty" gorm:"column:is_best_avg"`               // 这是这个玩家比往期最佳的成绩还好的平均成绩
	Penalty      string  `json:"Penalty,omitempty" gorm:"column:penalty"`                     // 判罚 ScorePenalty
	Rank         int     `json:"Rank,omitempty" gorm:"column:rank"`                           // 排名
	RouteValue   Round   `json:"RouteValue,omitempty" gorm:"-"`                               // 轮次实际内容
}

Score 成绩表

func (*Score) D

func (s *Score) D() int

func (*Score) DAvg

func (s *Score) DAvg() bool

func (*Score) DBest

func (s *Score) DBest() bool

func (*Score) GetResult

func (s *Score) GetResult() []float64

func (*Score) IsBestAvgScore

func (s *Score) IsBestAvgScore(other Score) bool

func (*Score) IsBestScore

func (s *Score) IsBestScore(other Score) bool

func (*Score) SetResult

func (s *Score) SetResult(in []float64, penalty ScorePenalty)

type ScorePenalty

type ScorePenalty struct {
	R1 []int `json:"R1,omitempty"`
	R2 []int `json:"R2,omitempty"`
	R3 []int `json:"R3,omitempty"`
	R4 []int `json:"R4,omitempty"`
	R5 []int `json:"R5,omitempty"`
}

type SorStatisticsKey

type SorStatisticsKey = string

Jump to

Keyboard shortcuts

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