github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/db/access_token_lifecycle.go (about)

     1  package db
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	sq "github.com/Masterminds/squirrel"
     8  )
     9  
    10  //go:generate counterfeiter . AccessTokenLifecycle
    11  
    12  type AccessTokenLifecycle interface {
    13  	RemoveExpiredAccessTokens(leeway time.Duration) (int, error)
    14  }
    15  
    16  type accessTokenLifecycle struct {
    17  	conn Conn
    18  }
    19  
    20  func NewAccessTokenLifecycle(conn Conn) AccessTokenLifecycle {
    21  	return &accessTokenLifecycle{conn}
    22  }
    23  
    24  func (a accessTokenLifecycle) RemoveExpiredAccessTokens(leeway time.Duration) (int, error) {
    25  	res, err := sq.Delete("access_tokens").
    26  		Where(
    27  			sq.Expr(fmt.Sprintf("expires_at < now() - '%d seconds'::interval", int(leeway.Seconds()))),
    28  		).
    29  		RunWith(a.conn).
    30  		Exec()
    31  	if err != nil {
    32  		return 0, err
    33  	}
    34  	n, err := res.RowsAffected()
    35  	if err != nil {
    36  		return 0, err
    37  	}
    38  	return int(n), nil
    39  }