public async Task <Guid?> TryExternalSignIn(IOperation operation, ExternalClientSignInEntity entity)
        {
            return(await operation.QuerySingleOrDefaultAsync <Guid?>(entity, @"
                DECLARE @UserId TABLE ([Id] INT, [IsActivated] BIT);

                INSERT INTO @UserId (
                    [Id],
                    [IsActivated]
                )
                SELECT
                    au.[Id],
                    au.[IsActivated]
                FROM [client].[Client] cc
                INNER JOIN [authentication].[User] au ON cc.[UserId] = au.[Id]
                INNER JOIN [authentication].[ExternalUser] aeu ON au.[ExternalUserId] = aeu.[Id]
                WHERE aeu.[SchemaId] = @Schema AND aeu.[ExternalId] = @ExternalId;

                IF NOT EXISTS (SELECT TOP 1 1 FROM @UserId)
                BEGIN

                    DECLARE @ExternalUserId TABLE ([Id] INT);

                    INSERT INTO [authentication].[ExternalUser] (
                        [ExternalId],
                        [SchemaId],
                        [Email]
                    )
                    OUTPUT INSERTED.[Id] INTO @ExternalUserId
                    VALUES (
                        @ExternalId,
                        @Schema,
                        @Email
                    );

                    INSERT INTO [authentication].[User] ([ExternalUserId])
                    OUTPUT INSERTED.[Id], 1 INTO @UserId
                    SELECT [Id]
                    FROM @ExternalUserId;

                    INSERT INTO [client].[Client] (
                        [UserId],
                        [FirstName],
                        [LastName]
                    )
                    SELECT
                        [Id],
                        @FirstName,
                        @LastName
                    FROM @UserId;

                END;

                DECLARE @ExternalClientAuthenticationToken TABLE ([AuthenticationToken] UNIQUEIDENTIFIER);

                UPDATE aeu
                SET aeu.[AuthenticationToken] = NEWID()
                OUTPUT INSERTED.[AuthenticationToken] INTO @ExternalClientAuthenticationToken
                FROM [authentication].[User] au
                INNER JOIN @UserId ui ON au.[Id] = ui.[Id]
                INNER JOIN [authentication].[ExternalUser] aeu ON au.[ExternalUserId] = aeu.[Id]
                WHERE ui.[IsActivated] = 1;

                SELECT [AuthenticationToken] FROM @ExternalClientAuthenticationToken;
            "));
        }
 public async Task <Guid> TryExternalSignIn(IOperation operation, ExternalClientSignInEntity entity)
 {
     return(await userAuthenticationStore.TryExternalSignIn(operation, entity) ??
            throw new Exception(ExceptionMessage.ExternalClientSignUpFailedDueToInactiveUserOrUnsuitableData));
 }