feat: init repo

This commit is contained in:
Rogee
2025-01-09 19:11:01 +08:00
parent b9cc63fe8a
commit 1c7b603769
149 changed files with 20066 additions and 10 deletions

View File

@@ -0,0 +1,50 @@
package jobs
import (
"time"
_ "git.ipao.vip/rogeecn/atom"
"git.ipao.vip/rogeecn/atom/contracts"
"github.com/riverqueue/river"
"github.com/sirupsen/logrus"
)
var _ contracts.CronJob = (*CronJob)(nil)
// @provider contracts.CronJob atom.GroupCronJob
type CronJob struct {
log *logrus.Entry `inject:"false"`
}
func (cron *CronJob) Prepare() error {
cron.log = logrus.WithField("module", "cron")
return nil
}
func (cron *CronJob) Description() string {
return "hello world cron job"
}
// InsertOpts implements contracts.CronJob.
func (cron *CronJob) InsertOpts() *river.InsertOpts {
return nil
}
// JobArgs implements contracts.CronJob.
func (cron *CronJob) JobArgs() []river.JobArgs {
return []river.JobArgs{
SortArgs{
Strings: []string{"a", "c", "b", "d"},
},
}
}
// Periodic implements contracts.CronJob.
func (cron *CronJob) Periodic() time.Duration {
return time.Second * 10
}
// RunOnStart implements contracts.CronJob.
func (cron *CronJob) RunOnStart() bool {
return true
}

View File

@@ -0,0 +1,53 @@
package jobs
import (
"context"
"sort"
"time"
_ "git.ipao.vip/rogeecn/atom"
_ "git.ipao.vip/rogeecn/atom/contracts"
. "github.com/riverqueue/river"
log "github.com/sirupsen/logrus"
)
// provider:[except|only] [returnType] [group]
var (
_ JobArgs = SortArgs{}
_ JobArgsWithInsertOpts = SortArgs{}
)
type SortArgs struct {
Strings []string `json:"strings"`
}
// InsertOpts implements JobArgsWithInsertOpts.
func (s SortArgs) InsertOpts() InsertOpts {
return InsertOpts{
Queue: QueueDefault,
Priority: PriorityDefault,
}
}
func (SortArgs) Kind() string {
return "sort"
}
var _ Worker[SortArgs] = (*SortWorker)(nil)
// @provider(job)
type SortWorker struct {
WorkerDefaults[SortArgs]
}
func (w *SortWorker) Work(ctx context.Context, job *Job[SortArgs]) error {
sort.Strings(job.Args.Strings)
log.Infof("[%s] Sorted strings: %v\n", time.Now().Format(time.TimeOnly), job.Args.Strings)
return nil
}
func (w *SortWorker) NextRetry(job *Job[SortArgs]) time.Time {
return time.Now().Add(5 * time.Second)
}

View File

@@ -0,0 +1,37 @@
package jobs
import (
"backend/providers/job"
"git.ipao.vip/rogeecn/atom"
"git.ipao.vip/rogeecn/atom/container"
"git.ipao.vip/rogeecn/atom/contracts"
"git.ipao.vip/rogeecn/atom/utils/opt"
"github.com/riverqueue/river"
)
func Provide(opts ...opt.Option) error {
if err := container.Container.Provide(func() (contracts.CronJob, error) {
obj := &CronJob{}
if err := obj.Prepare(); err != nil {
return nil, err
}
return obj, nil
}, atom.GroupCronJob); err != nil {
return err
}
if err := container.Container.Provide(func(
__job *job.Job,
) (contracts.Initial, error) {
obj := &SortWorker{}
if err := river.AddWorkerSafely(__job.Workers, obj); err != nil {
return nil, err
}
return obj, nil
}, atom.GroupInitial); err != nil {
return err
}
return nil
}