lib/tasks/one_off.rake
namespace :one_off do
desc "Clean up orphaned page tags"
task clean_orphaned_page_tags: :environment do
PageTag.find_each do |page_tag|
referenced_page = page_tag.page
if referenced_page.nil?
page_tag.destroy
end
end
end
desc "Alert users who've saved at least one tree"
task trees_notification: :environment do
reference_code = 'green-trees'
User.find_each do |user|
trees = GreenService.total_trees_saved_by(user)
if trees >= 1
user.notifications.create!(
message_html: "<div>You've saved #{trees.round} tree#{'s' if trees.round > 1} by going digital!</div><div class='blue-text text-darken-3'>That's AWESOME! Click here to see how.</div>",
icon: 'park',
icon_color: 'green',
happened_at: DateTime.current,
passthrough_link: 'https://www.notebook.ai/my/data/green',
reference_code: reference_code
) unless user.notifications.where(reference_code: reference_code).any?
end
end
end
desc "Year in Review notification"
task year_in_review_notification: :environment do
year = DateTime.current.year
User.find_each do |user|
user.notifications.create(
message_html: "<div>Your #{year} Year in Review is now available!</div><div class='blue-text text-darken-3'>Look back on your year on Notebook.ai.</div>",
icon: 'event',
icon_color: 'blue',
happened_at: DateTime.current,
passthrough_link: Rails.application.routes.url_helpers.review_year_path(year)
)
end
end
desc "Create a notification for all users telling them about the new notifications"
task notifications_announcement: :environment do
User.all.find_each do |user|
user.notifications.create(
message_html: '<div>A new feature is now available:</div><div class="blue-text text-darken-3">Notifications on Notebook.ai</div>',
icon: 'favorite',
icon_color: 'red',
happened_at: DateTime.current,
passthrough_link: 'https://medium.com/indent-labs/notifications-on-notebook-ai-693544b676cb'
)
end
end
desc "Create initial public collections"
task initial_public_collections: :environment do
OWNER_USER_ID = 5
PageCollection.find_or_create_by(
title: 'The Multiverse',
# subtitle: 'Browse public universes',
privacy: 'public',
page_types: ['Universe'],
color: Universe.color,
user_id: OWNER_USER_ID,
cover_image: "card-headers/universes.webp",
description: "The Multiverse is for all of our universes. It's a single, public index — a starting point, if you will — for the wonderful worlds of Notebook.ai.\n\nWhether it's sci-fi or modern, fantasy or fairy tale, modern or horror, original content or alternate universes — your universe is welcome in the Multiverse. Just make sure it's all filled out and has all kinds of pages to continue getting lost in from the universe's page!"
)
PageCollection.find_or_create_by(
title: 'Superheroes',
# subtitle: 'Browse public creatures and floras',
privacy: 'public',
page_types: ['Character'],
color: Character.color,
user_id: OWNER_USER_ID,
cover_image: "https://i.imgur.com/nuRMRNV.jpg",
description: "Who's the most super of the superheroes in your world? Let's build a collection of the best of the best!"
)
PageCollection.find_or_create_by(
title: 'Supervillains',
# subtitle: 'Browse public creatures and floras',
privacy: 'public',
page_types: ['Character'],
color: Character.color,
user_id: OWNER_USER_ID,
cover_image: "https://i.imgur.com/JGZTuuE.jpg",
description: "Who' the baddest baddie you've got? Fill out your supervillain's notebook page and then submit them here; let's build a collection of every world's worst villains!"
)
PageCollection.find_or_create_by(
title: 'The Bestiary',
# subtitle: 'Browse public creatures and floras',
privacy: 'public',
page_types: ['Creature', 'Flora'],
color: Creature.color,
user_id: OWNER_USER_ID,
cover_image: "card-headers/creatures.webp",
description: "The Bestiary is a collection of life.\n\nSubmit your creatures from all your universes, big or small, and then submit your plant life too!"
)
PageCollection.find_or_create_by(
title: 'The Atlas',
# subtitle: 'Browse public locations, planets, continents, countries, towns, and landmarks',
privacy: 'public',
page_types: ['Location', 'Planet', 'Continent', 'Country', 'Town', 'Landmark'],
color: Location.color,
user_id: OWNER_USER_ID,
cover_image: "card-headers/locations.webp",
description: "The Atlas is a public collection for the locations in our worlds.\n\nYou can submit locations, planets, continents, countries, towns, and landmarks! Let's fill the atlas up with a rich shared world populated with locations around the multiverse."
)
PageCollection.find_or_create_by(
title: 'The Pantheon',
# subtitle: 'Browse public religions and deities',
privacy: 'public',
page_types: ['Religion', 'Deity'],
color: Religion.color,
user_id: OWNER_USER_ID,
cover_image: "card-headers/religions.webp",
description: "We can build a collective pantheon of gods and goddesses by submitting our deity and religion pages to this collection. Feel free to have your characters take up any the religions shared here!"
)
PageCollection.find_or_create_by(
title: 'The Armory',
# subtitle: 'Browse public universes',
privacy: 'public',
page_types: ['Item', 'Technology', 'Vehicle'],
color: Item.color,
user_id: OWNER_USER_ID,
cover_image: "https://i.imgur.com/8RI3EzY.jpg",
description: "The Armory is a massive arsenal of items, technology, and vehicles. Submit your weapons, armor, tech, and all other implements of war!"
)
PageCollection.find_or_create_by(
title: 'World Calendar',
# subtitle: 'Browse public universes',
privacy: 'public',
page_types: ['Tradition'],
color: Tradition.color,
user_id: OWNER_USER_ID,
cover_image: "card-headers/traditions.webp",
description: "We're building a giant calendar of all kinds of traditions, events, routines, and important dates. Submit your traditions and let's see if we can fill up a whole year!"
)
end
desc "Create initial public collections"
task make_everyone_follow_andrew: :environment do
# Start at the end to minimize overlap with new users since the task started (since new code autofollows)
User.all.order('id DESC').find_each do |user|
UserFollowing.create(user_id: user.id, followed_user_id: 5)
end
end
desc "Let premium users know they can make collections"
task premium_user_collections_notification: :environment do
User.where(selected_billing_plan_id: [2, 3, 4, 5, 6]).find_each do |user|
user.notifications.create(
message_html: '<div>A new feature is now available:</div><div class="blue-text text-darken-3">Users with a Premium subscription can now create Collections.</div>',
icon: 'favorite',
icon_color: PageCollection.color,
happened_at: DateTime.current,
passthrough_link: 'https://www.notebook.ai/collections'
)
end
end
end