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)); }