mirror of
https://github.com/scroll-tech/scroll.git
synced 2026-01-13 16:08:04 -05:00
Co-authored-by: georgehao <georgehao@users.noreply.github.com> Co-authored-by: HAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com>
69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
package orm
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// Challenge store the challenge string from prover client
|
|
type Challenge struct {
|
|
db *gorm.DB `gorm:"column:-"`
|
|
|
|
ID int64 `json:"id" gorm:"column:id"`
|
|
Challenge string `json:"challenge" gorm:"column:challenge"`
|
|
// metadata
|
|
CreatedAt time.Time `json:"created_at" gorm:"column:created_at"`
|
|
UpdatedAt time.Time `json:"updated_at" gorm:"column:updated_at"`
|
|
DeletedAt gorm.DeletedAt `json:"deleted_at" gorm:"column:deleted_at"`
|
|
}
|
|
|
|
// NewChallenge creates a new change instance.
|
|
func NewChallenge(db *gorm.DB) *Challenge {
|
|
return &Challenge{db: db}
|
|
}
|
|
|
|
// TableName returns the name of the "prover_task" table.
|
|
func (r *Challenge) TableName() string {
|
|
return "challenge"
|
|
}
|
|
|
|
// InsertChallenge check the challenge string exist, if the challenge string is existed
|
|
// return error, if not, just insert it
|
|
func (r *Challenge) InsertChallenge(ctx context.Context, challengeString string) error {
|
|
challenge := Challenge{
|
|
Challenge: challengeString,
|
|
}
|
|
|
|
db := r.db.WithContext(ctx)
|
|
db = db.Model(&Challenge{})
|
|
db = db.Where("challenge = ?", challengeString)
|
|
result := db.FirstOrCreate(&challenge)
|
|
if result.Error != nil {
|
|
return result.Error
|
|
}
|
|
|
|
if result.RowsAffected == 1 {
|
|
return nil
|
|
}
|
|
|
|
if result.RowsAffected == 0 {
|
|
return fmt.Errorf("the challenge string:%s have been used", challengeString)
|
|
}
|
|
|
|
return fmt.Errorf("insert challenge string affected rows more than 1")
|
|
}
|
|
|
|
// DeleteExpireChallenge delete the expire challenge
|
|
func (r *Challenge) DeleteExpireChallenge(ctx context.Context, expiredTime time.Time) error {
|
|
db := r.db.WithContext(ctx)
|
|
db = db.Model(&Challenge{})
|
|
db = db.Where("created_at < ?", expiredTime)
|
|
if err := db.Unscoped().Delete(&Challenge{}).Error; err != nil {
|
|
return fmt.Errorf("Challenge.DeleteExpireChallenge err: %w", err)
|
|
}
|
|
return nil
|
|
}
|