package db

import (
	"time"
)

type Token struct {
	ID        uint64    `json:"id"`
	User      string    `json:"user"`
	Token     string    `json:"token"`
	Quota     uint64    `json:"quota"`
	Remaining uint64    `json:"remaining"`
	ResetAt   time.Time `json:"reset_at" db:"reset_at"`
	CreatedAt time.Time `json:"created_at" db:"created_at"`
}

const saveTokenQuery = `
insert into tokens (user, token, quota, remaining, reset_at, created_at)
values (:user, :token, :quota, :remaining, :reset_at, now())
on duplicate key update
quota = values(quota), remaining = values(remaining), reset_at = values(reset_at)`

func (t *Token) Save() {
	defer measure("SaveToken", time.Now())
	mustExecN(saveTokenQuery, t)
}