private async Task DeleteRegistration(SqlConnection conn) { // Capture the data from the database var registrationRecord = await conn.QueryDatatable( "SELECT * FROM PackageRegistrations WHERE id = @Id", new SqlParameter("@Id", Id)); // Create a delete audit record var auditRecord = new PackageRegistrationAuditRecord( Id, registrationRecord, PackageRegistrationAuditAction.Deleted, Reason); await Console.WriteInfoLine(Strings.Package_DeleteCommand_WritingRegistrationAuditRecord, auditRecord.GetPath()); if (!WhatIf) { await auditRecord.WriteAuditRecord("packageregistrations", StorageAccount); } // Delete all data var result = conn.Query(@" BEGIN TRAN DECLARE @actions TABLE( TableName nvarchar(50), Value nvarchar(MAX) ) DELETE por OUTPUT 'PackageOwnerRequests' AS TableName, u.Username AS Value INTO @actions FROM PackageOwnerRequests por JOIN PackageRegistrations pr ON pr.[Key] = por.PackageRegistrationKey JOIN Users u ON por.NewOwnerKey = u.[Key] WHERE pr.Id = @Id DELETE por OUTPUT 'PackageRegistrationOwners' AS TableName, u.Username AS Value INTO @actions FROM PackageRegistrationOwners por JOIN PackageRegistrations pr ON pr.[Key] = por.PackageRegistrationKey JOIN Users u ON por.UserKey = u.[Key] WHERE pr.Id = @Id DELETE pr OUTPUT 'PackageRegistrations' AS TableName, deleted.Id AS Value INTO @actions FROM PackageRegistrations pr WHERE pr.Id = @Id SELECT * FROM @actions " + (WhatIf ? "ROLLBACK TRAN" : "COMMIT TRAN"), new { Id = Id }); await Console.WriteInfoLine(Strings.Package_DeleteCommand_DatabaseActions); await Console.WriteTable(result, d => new { Action = "DELETE", Table = (string)d.TableName, Value = (string)d.Value }); }
private async Task DeleteUser(dynamic user, SqlConnection conn) { var userRecord = await conn.QueryDatatable( "SELECT * FROM [Users] WHERE [Key] = @key", new SqlParameter("@key", user.Key)); var auditRecord = new UserAuditRecord( user.Username, user.EmailAddress ?? user.UnconfirmedEmailAddress + " (unconfirmed)", userRecord, UserAuditAction.Deleted, Reason); await Console.WriteInfoLine(Strings.User_WritingAuditRecord, auditRecord.GetPath()); if (!WhatIf) { await auditRecord.WriteAuditRecord("user", StorageAccount); } await DeleteUserData(user, conn); await Console.WriteInfoLine(Strings.User_DeleteCommand_DeletionCompleted); }
private async Task DeletePackage(dynamic package, SqlConnection conn) { // Capture the data from the database var packageRecord = await conn.QueryDatatable( "SELECT * FROM Packages WHERE [Key] = @key", new SqlParameter("@key", package.Key)); var registrationRecord = await conn.QueryDatatable( "SELECT * FROM PackageRegistrations WHERE [Key] = @key", new SqlParameter("@key", package.PackageRegistrationKey)); // Create a delete audit record var auditRecord = new PackageAuditRecord( package.Id, package.Version, package.Hash, packageRecord, registrationRecord, PackageAuditAction.Deleted, Reason); await Console.WriteInfoLine(Strings.Package_DeleteCommand_WritingAuditRecord, auditRecord.GetPath()); if (!WhatIf) { await auditRecord.WriteAuditRecord("package", StorageAccount); } await DeletePackageData(package, conn); await DeletePackageBlob(package); await Console.WriteInfoLine(Strings.Package_DeleteCommand_DeletionCompleted); }