package repository import ( "context" "time" "backend/pkg/permission/domain/entity" ) // TokenRepository 定義了與 Redis 相關的 Token 操作方法 //nolint:interfacebloat type TokenRepository interface { // Create 建立新的 Token 並存儲至 Redis Create(ctx context.Context, token entity.Token) error // CreateOneTimeToken 建立臨時(一次性)Token,並指定有效期限 CreateOneTimeToken(ctx context.Context, key string, ticket entity.Ticket, dt time.Duration) error // GetAccessTokenByOneTimeToken 根據一次性 Token 獲取對應的存取 Token GetAccessTokenByOneTimeToken(ctx context.Context, oneTimeToken string) (entity.Token, error) // GetAccessTokenByID 根據 Token ID 獲取對應的存取 Token GetAccessTokenByID(ctx context.Context, id string) (entity.Token, error) // GetAccessTokensByUID 根據用戶 ID 獲取該用戶的所有存取 Token GetAccessTokensByUID(ctx context.Context, uid string) ([]entity.Token, error) // GetAccessTokenCountByUID 根據用戶 ID 獲取該用戶的存取 Token 數量 GetAccessTokenCountByUID(ctx context.Context, uid string) (int, error) // GetAccessTokensByDeviceID 根據裝置 ID 獲取該裝置的所有存取 Token GetAccessTokensByDeviceID(ctx context.Context, deviceID string) ([]entity.Token, error) // GetAccessTokenCountByDeviceID 根據裝置 ID 獲取該裝置的存取 Token 數量 GetAccessTokenCountByDeviceID(ctx context.Context, deviceID string) (int, error) // Delete 刪除指定的 Token Delete(ctx context.Context, token entity.Token) error // DeleteOneTimeToken 批量刪除一次性 Token DeleteOneTimeToken(ctx context.Context, ids []string, tokens []entity.Token) error // DeleteAccessTokenByID 根據 Token ID 批量刪除存取 Token DeleteAccessTokenByID(ctx context.Context, ids []string) error // DeleteAccessTokensByUID 根據用戶 ID 刪除該用戶的所有存取 Token DeleteAccessTokensByUID(ctx context.Context, uid string) error // DeleteAccessTokensByDeviceID 根據裝置 ID 刪除該裝置的所有存取 Token DeleteAccessTokensByDeviceID(ctx context.Context, deviceID string) error // Blacklist operations // AddToBlacklist 將 JWT token 加入黑名單 AddToBlacklist(ctx context.Context, entry *entity.BlacklistEntry, ttl time.Duration) error // IsBlacklisted 檢查 JWT token 是否在黑名單中 IsBlacklisted(ctx context.Context, jti string) (bool, error) // RemoveFromBlacklist 從黑名單中移除 JWT token RemoveFromBlacklist(ctx context.Context, jti string) error // GetBlacklistedTokensByUID 獲取用戶的所有黑名單 token GetBlacklistedTokensByUID(ctx context.Context, uid string) ([]*entity.BlacklistEntry, error) }