mirror of
https://github.com/simon987/task_tracker.git
synced 2025-04-10 05:56:42 +00:00
39 lines
789 B
Go
39 lines
789 B
Go
package api
|
|
|
|
import (
|
|
"golang.org/x/time/rate"
|
|
"time"
|
|
)
|
|
|
|
func (api *WebAPI) ReserveSubmit(pid int64, count int) *rate.Reservation {
|
|
|
|
limiter, ok := api.SubmitLimiters.Load(pid)
|
|
if !ok {
|
|
project := api.Database.GetProject(pid)
|
|
if project == nil {
|
|
return nil
|
|
}
|
|
|
|
limiter = rate.NewLimiter(project.SubmitRate, 1)
|
|
api.SubmitLimiters.Store(pid, limiter)
|
|
}
|
|
|
|
return limiter.(*rate.Limiter).ReserveN(time.Now(), count)
|
|
}
|
|
|
|
func (api *WebAPI) ReserveAssign(pid int64) *rate.Reservation {
|
|
|
|
limiter, ok := api.AssignLimiters.Load(pid)
|
|
if !ok {
|
|
project := api.Database.GetProject(pid)
|
|
if project == nil {
|
|
return nil
|
|
}
|
|
|
|
limiter = rate.NewLimiter(project.AssignRate, 1)
|
|
api.AssignLimiters.Store(pid, limiter)
|
|
}
|
|
|
|
return limiter.(*rate.Limiter).ReserveN(time.Now(), 1)
|
|
}
|