/// <summary> /// Transfers ownership of the given entity to the specified user. /// </summary> /// <param name="db">The database where the entities are stored.</param> /// <param name="newOwner">The new owner.</param> /// <param name="newOwnerEntities">The entities that the user already owns.</param> /// <param name="entity">The entity to transfer.</param> /// <typeparam name="TContext">The database context to use.</typeparam> /// <returns>An entity modification result, which may or may not have succeeded.</returns> public async Task <ModifyEntityResult> TransferEntityOwnershipAsync <TContext> ( TContext db, User newOwner, IQueryable <IOwnedNamedEntity> newOwnerEntities, IOwnedNamedEntity entity ) where TContext : DbContext { if (entity.IsOwner(newOwner)) { return(ModifyEntityResult.FromError ( $"That person already owns the {entity.EntityTypeDisplayName}." .Humanize().Transform(To.SentenceCase) )); } if (newOwnerEntities.Any(e => string.Equals(e.Name.ToLower(), entity.Name.ToLower()))) { return(ModifyEntityResult.FromError ( $"That user already owns a {entity.EntityTypeDisplayName} named {entity.Name}. Please rename it first." .Humanize().Transform(To.SentenceCase) )); } entity.Owner = newOwner; await db.SaveChangesAsync(); return(ModifyEntityResult.FromSuccess()); }
/// <summary> /// Transfers ownership of the given entity to the specified user. /// </summary> /// <param name="newOwner">The new owner.</param> /// <param name="newOwnerEntities">The entities that the user already owns.</param> /// <param name="entity">The entity to transfer.</param> /// <returns>An entity modification result, which may or may not have succeeded.</returns> public ModifyEntityResult TransferEntityOwnership ( User newOwner, IReadOnlyCollection <IOwnedNamedEntity> newOwnerEntities, IOwnedNamedEntity entity ) { if (entity.IsOwner(newOwner)) { return(ModifyEntityResult.FromError ( $"That person already owns the {entity.EntityTypeDisplayName}." .Humanize().Transform(To.SentenceCase) )); } if (newOwnerEntities.Any(e => string.Equals(e.Name.ToLower(), entity.Name.ToLower()))) { return(ModifyEntityResult.FromError ( $"That user already owns a {entity.EntityTypeDisplayName} named {entity.Name}. Please rename it first." .Humanize().Transform(To.SentenceCase) )); } entity.Owner = newOwner; return(ModifyEntityResult.FromSuccess()); }
/// <summary> /// Transfers ownership of the given entity to the specified user. /// </summary> /// <param name="newOwnerID">The ID of the new owner.</param> /// <param name="newOwnerEntities">The entities that the user already owns.</param> /// <param name="entity">The entity to transfer.</param> /// <returns>An entity modification result, which may or may not have succeeded.</returns> public async Task <Result> TransferEntityOwnershipAsync ( Snowflake newOwnerID, IEnumerable <IOwnedNamedEntity> newOwnerEntities, IOwnedNamedEntity entity ) { var getNewOwner = await _users.GetOrRegisterUserAsync(newOwnerID); if (!getNewOwner.IsSuccess) { return(Result.FromError(getNewOwner)); } var newOwner = getNewOwner.Entity; if (entity.IsOwner(newOwner)) { return(new UserError ( $"That person already owns the {entity.EntityTypeDisplayName}." .Humanize().Transform(To.SentenceCase) )); } if (newOwnerEntities.Any(e => string.Equals(e.Name.ToLower(), entity.Name.ToLower()))) { return(new UserError ( $"That user already owns a {entity.EntityTypeDisplayName} named {entity.Name}. Please rename it first." .Humanize().Transform(To.SentenceCase) )); } entity.Owner = newOwner; return(Result.FromSuccess()); }
/// <summary> /// Transfers ownership of the given entity to the specified user. /// </summary> /// <param name="db">The database where the entities are stored.</param> /// <param name="newOwner">The new owner.</param> /// <param name="newOwnerEntities">The entities that the user already owns.</param> /// <param name="entity">The entity to transfer.</param> /// <returns>An entity modification result, which may or may not have succeeded.</returns> public async Task <ModifyEntityResult> TransferEntityOwnershipAsync ( [NotNull] GlobalInfoContext db, [NotNull] IUser newOwner, [NotNull] IQueryable <IOwnedNamedEntity> newOwnerEntities, [NotNull] IOwnedNamedEntity entity ) { if (entity.IsOwner(newOwner)) { return(ModifyEntityResult.FromError ( CommandError.Unsuccessful, $"That person already owns the {entity.EntityTypeDisplayName}." .Humanize().Transform(To.SentenceCase) )); } if (newOwnerEntities.Any(e => string.Equals(e.Name, entity.Name, StringComparison.OrdinalIgnoreCase))) { return(ModifyEntityResult.FromError ( CommandError.MultipleMatches, $"That user already owns a {entity.EntityTypeDisplayName} named {entity.Name}. Please rename it first." .Humanize().Transform(To.SentenceCase) )); } var newUser = await db.GetOrRegisterUserAsync(newOwner); entity.Owner = newUser; await db.SaveChangesAsync(); return(ModifyEntityResult.FromSuccess(ModifyEntityAction.Edited)); }