database

package
v0.0.0-...-b2c0be8 Latest Latest
Warning

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

Go to latest
Published: Apr 14, 2026 License: GPL-2.0 Imports: 11 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AtcoderProblemForQuery

type AtcoderProblemForQuery struct {
	ID    string  `json:"id"`
	Point float64 `json:"point"`
}

type AtcoderSubmission

type AtcoderSubmission struct {
	UserID       int64
	SubmissionID int64
	ProblemID    string
	Point        float64
	Status       string
	At           time.Time
}

type AtcoderSubmissionStatistics

type AtcoderSubmissionStatistics struct {
	TotalCount int `json:"total_count"`

	Ac []AtcoderProblemForQuery `json:"ac"`

	LastSubmissionAt time.Time `json:"last_submission_at"`
	UpdatedAt        time.Time `json:"updated_at"`
	Version          int       `json:"version"`
}

type AtcoderUserWithRecords

type AtcoderUserWithRecords struct {
	sqlc.AtcoderUser
	SubmissionStatistics *AtcoderSubmissionStatistics
}

type CodeforcesProblem

type CodeforcesProblem struct {
	ContestID      int      `json:"contestId"`
	ProblemSetName string   `json:"problemsetName"`
	Index          string   `json:"index"`
	Name           string   `json:"name"`
	Type           string   `json:"type"`
	Rating         int      `json:"rating"`
	Tags           []string `json:"tags"`
}

func (CodeforcesProblem) ID

func (p CodeforcesProblem) ID() string

type CodeforcesProblemForQuery

type CodeforcesProblemForQuery struct {
	ID     string   `json:"id"`
	Rating int      `json:"rating"`
	Tags   []string `json:"tags"`
}

type CodeforcesRatingRecord

type CodeforcesRatingRecord struct {
	Rating int       `json:"new_rating"`
	At     time.Time `json:"at"`
}

type CodeforcesRatingRecords

type CodeforcesRatingRecords struct {
	MaxRating  int                      `json:"max_rating"`
	CurrRating int                      `json:"rating"`
	Records    []CodeforcesRatingRecord `json:"rating_changes"`

	UpdatedAt time.Time `json:"updated_at"`
}

type CodeforcesSubmission

type CodeforcesSubmission struct {
	UserID  int64
	Problem CodeforcesProblem
	Status  string
	At      time.Time
}

type CodeforcesSubmissionStatistics

type CodeforcesSubmissionStatistics struct {
	TotalCount int `json:"total_count"` // 提交总数

	Ac []CodeforcesProblemForQuery `json:"ac"` // 通过的题目列表, 需要去重

	LastSubmissionAt time.Time `json:"last_id_of_submission_in_statistics"` // 统计信息中最晚的提交
	UpdatedAt        time.Time `json:"updated_at"`                          // 最后更新时间
	Version          int       `json:"version"`                             // 版本号, 如果后续提交统计结构变化, 据此进行自动化升级
}

type CodeforcesUserWithRecords

type CodeforcesUserWithRecords struct {
	sqlc.CodeforcesUser
	RatingRecords        *CodeforcesRatingRecords
	SubmissionStatistics *CodeforcesSubmissionStatistics
}

CodeforcesUserWithRecords 包含用户信息及解析后的rating记录和提交统计

type CreateAtcoderUserParams

type CreateAtcoderUserParams struct {
	Username         string `json:"username"`
	AvatarUrl        string `json:"avatar_url"`
	Rank             string `json:"rank"`
	Rating           int32  `json:"rating"`
	HighestRating    int32  `json:"highest_rating"`
	PromotionMessage string `json:"promotion_message"`
}

type CreateCodeforcesUserParams

type CreateCodeforcesUserParams struct {
	Username  string `json:"username"`
	AvatarUrl string `json:"avatar_url"`
	FriendNum int32  `json:"friend_num"`
}

type Race

type Race struct {
	Title    string    `json:"title"`
	Resource string    `json:"resource"`
	Start    time.Time `json:"start"`
	End      time.Time `json:"end"`
	Link     string    `json:"link"`
}

type Store

type Store interface {
	sqlc.Querier

	CreateRace(ctx context.Context, races []Race) error
	GetLastRace(ctx context.Context) ([]Race, error)

	// Codeforces相关
	CreateCodeforcesUser(ctx context.Context, params *CreateCodeforcesUserParams) (*CodeforcesUserWithRecords, error)
	GetCodeforcesUserByUsername(ctx context.Context, username string) (*CodeforcesUserWithRecords, error)
	GetCodeforcesUserByID(ctx context.Context, userID int64) (*CodeforcesUserWithRecords, error)
	UpdateCodeforcesRatingRecords(ctx context.Context, userId int, originRecords []CodeforcesRatingRecord) (*CodeforcesRatingRecords, error)
	UpdateCodeforcesSubmissionStatistics(ctx context.Context, userId int) (*CodeforcesSubmissionStatistics, error)
	CreateCodeforcesSubmissions(ctx context.Context, submissions []CodeforcesSubmission) error

	// Atcoder相关
	CreateAtcoderUser(ctx context.Context, params *CreateAtcoderUserParams) (*AtcoderUserWithRecords, error)
	GetAtcoderUserByUsername(ctx context.Context, username string) (*AtcoderUserWithRecords, error)
	GetAtcoderUserByID(ctx context.Context, userID int64) (*AtcoderUserWithRecords, error)
	UpdateAtcoderSubmissionStatistics(ctx context.Context, userId int) (*AtcoderSubmissionStatistics, error)
	CreateAtcoderSubmissions(ctx context.Context, submissions []AtcoderSubmission) error
}

func New

func New(ctx context.Context, dsn string) (Store, error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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