namespace EntitlementDAL.QueryBuilders; // Required indexes: // MENTITLEMENTCLIENTREFRESHTOKEN: UX (TOKENHASH), IX (CLIENTUSERID) public static class ClientRefreshTokenQB { private const string COLUMNS = @" CLIENTREFRESHTOKENID AS ClientRefreshTokenId, CLIENTUSERID AS ClientUserId, TOKENHASH AS TokenHash, ISSUEDON AS IssuedOn, EXPIRESON AS ExpiresOn, REVOKEDON AS RevokedOn, REPLACEDBYTOKENID AS ReplacedByTokenId, CREATEDBYID AS CreatedById, CREATEDON AS CreatedOn"; public const string GET_BY_ID = "SELECT" + COLUMNS + @" FROM MENTITLEMENTCLIENTREFRESHTOKEN WHERE CLIENTREFRESHTOKENID = @ClientRefreshTokenId"; public const string GET_BY_TOKEN_HASH = "SELECT" + COLUMNS + @" FROM MENTITLEMENTCLIENTREFRESHTOKEN WHERE TOKENHASH = @TokenHash"; public const string INSERT = @" INSERT INTO MENTITLEMENTCLIENTREFRESHTOKEN (CLIENTREFRESHTOKENID, CLIENTUSERID, TOKENHASH, ISSUEDON, EXPIRESON, REVOKEDON, REPLACEDBYTOKENID, CREATEDBYID, CREATEDON) VALUES (@ClientRefreshTokenId, @ClientUserId, @TokenHash, @IssuedOn, @ExpiresOn, @RevokedOn, @ReplacedByTokenId, @CreatedById, @CreatedOn)"; // Sets RevokedOn and (when this is a legitimate rotation, not a cascade-kill) ReplacedByTokenId // in one call — pass @ReplacedByTokenId = NULL for a cascade-revoke of a chain descendant that // was never itself exchanged for anything. public const string REVOKE = @" UPDATE MENTITLEMENTCLIENTREFRESHTOKEN SET REVOKEDON = @RevokedOn, REPLACEDBYTOKENID = @ReplacedByTokenId WHERE CLIENTREFRESHTOKENID = @ClientRefreshTokenId"; }