From 3a23403f3aaa50c931c43e051ff7bbbdb503af6c Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 02:56:10 +0000 Subject: [PATCH 01/19] generated users with devise --- Gemfile | 1 + Gemfile.lock | 34 ++ app/models/user.rb | 6 + config/initializers/devise.rb | 313 ++++++++++++++++++ config/locales/devise.en.yml | 65 ++++ config/routes.rb | 4 + .../20250314025416_devise_create_users.rb | 48 +++ db/schema.rb | 2 +- 8 files changed, 472 insertions(+), 1 deletion(-) create mode 100644 app/models/user.rb create mode 100644 config/initializers/devise.rb create mode 100644 config/locales/devise.en.yml create mode 100644 db/migrate/20250314025416_devise_create_users.rb diff --git a/Gemfile b/Gemfile index 1bd5c98af..e3e5d8571 100644 --- a/Gemfile +++ b/Gemfile @@ -98,6 +98,7 @@ group :development do gem "rails-erd" gem "rufo" gem "specs_to_readme" + gem "web_git" end group :development, :test do diff --git a/Gemfile.lock b/Gemfile.lock index c4571af47..d42785bf8 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -83,6 +83,7 @@ GEM annotate (3.2.0) activerecord (>= 3.2, < 8.0) rake (>= 10.4, < 14.0) + ansispan (0.0.2) appdev_support (0.2.1) tabulo awesome_print (1.9.2) @@ -141,6 +142,7 @@ GEM responders warden (~> 1.2.3) diff-lcs (1.5.1) + diffy (3.4.3) domain_name (0.6.20240107) dotenv (3.1.2) draft_generators (0.0.4) @@ -164,6 +166,11 @@ GEM ffi-compiler (1.3.2) ffi (>= 1.15.5) rake + git (3.0.0) + activesupport (>= 5.0) + addressable (~> 2.8) + process_executer (~> 1.3) + rchardet (~> 1.9) globalid (1.2.1) activesupport (>= 6.1) grade_runner (0.0.12) @@ -233,6 +240,8 @@ GEM mini_mime (1.1.5) minitest (5.23.1) msgpack (1.7.2) + mustermann (3.0.3) + ruby2_keywords (~> 0.0.1) mutex_m (0.2.0) net-http (0.4.1) uri @@ -256,6 +265,7 @@ GEM oj (3.13.23) orm_adapter (0.5.0) pg (1.5.6) + process_executer (1.3.0) pry (0.14.2) coderay (~> 1.1) method_source (~> 1.0) @@ -268,6 +278,10 @@ GEM nio4r (~> 2.0) racc (1.8.0) rack (3.0.11) + rack-protection (4.1.1) + base64 (>= 0.1.0) + logger (>= 1.6.0) + rack (>= 3.0.0, < 4) rack-session (2.0.0) rack (>= 3.0.0) rack-test (2.1.0) @@ -323,6 +337,7 @@ GEM activerecord (>= 6.1.5) activesupport (>= 6.1.5) i18n + rchardet (1.9.0) rdoc (6.7.0) psych (>= 4.0.0) redis (4.8.1) @@ -364,6 +379,7 @@ GEM ruby-vips (2.2.2) ffi (~> 1.12) logger + ruby2_keywords (0.0.5) rubyzip (2.3.2) rufo (0.18.0) sawyer (0.9.2) @@ -378,6 +394,13 @@ GEM simple_form (5.3.1) actionpack (>= 5.2) activemodel (>= 5.2) + sinatra (4.1.1) + logger (>= 1.6.0) + mustermann (~> 3.0) + rack (>= 3.0.0, < 4) + rack-protection (= 4.1.1) + rack-session (>= 2.0.0, < 3) + tilt (~> 2.0) specs_to_readme (0.1.0) sprockets (4.2.1) concurrent-ruby (~> 1.0) @@ -400,6 +423,7 @@ GEM terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) thor (1.3.1) + tilt (2.6.0) timeout (0.4.1) tty-screen (0.8.2) turbo-rails (2.0.5) @@ -408,6 +432,8 @@ GEM railties (>= 6.0.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) + tzinfo-data (1.2025.1) + tzinfo (>= 1.0.0) unicode-display_width (2.5.0) uri (0.13.0) warden (1.2.9) @@ -417,6 +443,13 @@ GEM activemodel (>= 6.0.0) bindex (>= 0.4.0) railties (>= 6.0.0) + web_git (0.1.0) + actionview + ansispan + diffy + git + sinatra + tzinfo-data webdrivers (5.3.1) nokogiri (~> 1.6) rubyzip (>= 1.3.0) @@ -482,6 +515,7 @@ DEPENDENCIES turbo-rails tzinfo-data web-console + web_git webdrivers webmock diff --git a/app/models/user.rb b/app/models/user.rb new file mode 100644 index 000000000..47567994e --- /dev/null +++ b/app/models/user.rb @@ -0,0 +1,6 @@ +class User < ApplicationRecord + # Include default devise modules. Others available are: + # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable + devise :database_authenticatable, :registerable, + :recoverable, :rememberable, :validatable +end diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb new file mode 100644 index 000000000..720e2ce3e --- /dev/null +++ b/config/initializers/devise.rb @@ -0,0 +1,313 @@ +# frozen_string_literal: true + +# Assuming you have not yet modified this file, each configuration option below +# is set to its default value. Note that some are commented out while others +# are not: uncommented lines are intended to protect your configuration from +# breaking changes in upgrades (i.e., in the event that future versions of +# Devise change the default values for those options). +# +# Use this hook to configure devise mailer, warden hooks and so forth. +# Many of these configuration options can be set straight in your model. +Devise.setup do |config| + # The secret key used by Devise. Devise uses this key to generate + # random tokens. Changing this key will render invalid all existing + # confirmation, reset password and unlock tokens in the database. + # Devise will use the `secret_key_base` as its `secret_key` + # by default. You can change it below and use your own secret key. + # config.secret_key = 'b3cb2d9868eee07c82562091a02dd29c3aa29a22bac4dda42b7588cb1072eb901a7c34cecdf34c2afb11628169b9b827cdaefab36117cf769ac310fe45e19774' + + # ==> Controller configuration + # Configure the parent class to the devise controllers. + # config.parent_controller = 'DeviseController' + + # ==> Mailer Configuration + # Configure the e-mail address which will be shown in Devise::Mailer, + # note that it will be overwritten if you use your own mailer class + # with default "from" parameter. + config.mailer_sender = 'please-change-me-at-config-initializers-devise@example.com' + + # Configure the class responsible to send e-mails. + # config.mailer = 'Devise::Mailer' + + # Configure the parent class responsible to send e-mails. + # config.parent_mailer = 'ActionMailer::Base' + + # ==> ORM configuration + # Load and configure the ORM. Supports :active_record (default) and + # :mongoid (bson_ext recommended) by default. Other ORMs may be + # available as additional gems. + require 'devise/orm/active_record' + + # ==> Configuration for any authentication mechanism + # Configure which keys are used when authenticating a user. The default is + # just :email. You can configure it to use [:username, :subdomain], so for + # authenticating a user, both parameters are required. Remember that those + # parameters are used only when authenticating and not when retrieving from + # session. If you need permissions, you should implement that in a before filter. + # You can also supply a hash where the value is a boolean determining whether + # or not authentication should be aborted when the value is not present. + # config.authentication_keys = [:email] + + # Configure parameters from the request object used for authentication. Each entry + # given should be a request method and it will automatically be passed to the + # find_for_authentication method and considered in your model lookup. For instance, + # if you set :request_keys to [:subdomain], :subdomain will be used on authentication. + # The same considerations mentioned for authentication_keys also apply to request_keys. + # config.request_keys = [] + + # Configure which authentication keys should be case-insensitive. + # These keys will be downcased upon creating or modifying a user and when used + # to authenticate or find a user. Default is :email. + config.case_insensitive_keys = [:email] + + # Configure which authentication keys should have whitespace stripped. + # These keys will have whitespace before and after removed upon creating or + # modifying a user and when used to authenticate or find a user. Default is :email. + config.strip_whitespace_keys = [:email] + + # Tell if authentication through request.params is enabled. True by default. + # It can be set to an array that will enable params authentication only for the + # given strategies, for example, `config.params_authenticatable = [:database]` will + # enable it only for database (email + password) authentication. + # config.params_authenticatable = true + + # Tell if authentication through HTTP Auth is enabled. False by default. + # It can be set to an array that will enable http authentication only for the + # given strategies, for example, `config.http_authenticatable = [:database]` will + # enable it only for database authentication. + # For API-only applications to support authentication "out-of-the-box", you will likely want to + # enable this with :database unless you are using a custom strategy. + # The supported strategies are: + # :database = Support basic authentication with authentication key + password + # config.http_authenticatable = false + + # If 401 status code should be returned for AJAX requests. True by default. + # config.http_authenticatable_on_xhr = true + + # The realm used in Http Basic Authentication. 'Application' by default. + # config.http_authentication_realm = 'Application' + + # It will change confirmation, password recovery and other workflows + # to behave the same regardless if the e-mail provided was right or wrong. + # Does not affect registerable. + # config.paranoid = true + + # By default Devise will store the user in session. You can skip storage for + # particular strategies by setting this option. + # Notice that if you are skipping storage for all authentication paths, you + # may want to disable generating routes to Devise's sessions controller by + # passing skip: :sessions to `devise_for` in your config/routes.rb + config.skip_session_storage = [:http_auth] + + # By default, Devise cleans up the CSRF token on authentication to + # avoid CSRF token fixation attacks. This means that, when using AJAX + # requests for sign in and sign up, you need to get a new CSRF token + # from the server. You can disable this option at your own risk. + # config.clean_up_csrf_token_on_authentication = true + + # When false, Devise will not attempt to reload routes on eager load. + # This can reduce the time taken to boot the app but if your application + # requires the Devise mappings to be loaded during boot time the application + # won't boot properly. + # config.reload_routes = true + + # ==> Configuration for :database_authenticatable + # For bcrypt, this is the cost for hashing the password and defaults to 12. If + # using other algorithms, it sets how many times you want the password to be hashed. + # The number of stretches used for generating the hashed password are stored + # with the hashed password. This allows you to change the stretches without + # invalidating existing passwords. + # + # Limiting the stretches to just one in testing will increase the performance of + # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use + # a value less than 10 in other environments. Note that, for bcrypt (the default + # algorithm), the cost increases exponentially with the number of stretches (e.g. + # a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation). + config.stretches = Rails.env.test? ? 1 : 12 + + # Set up a pepper to generate the hashed password. + # config.pepper = 'b24540a3b2cbd2a011c20770cda32a6bd52e898c567d67b9dd46619ff99761741b5e3e29a8c6fee5dbcadd0cb160d34397a473f60b47b7103b357d2cb5ce0444' + + # Send a notification to the original email when the user's email is changed. + # config.send_email_changed_notification = false + + # Send a notification email when the user's password is changed. + # config.send_password_change_notification = false + + # ==> Configuration for :confirmable + # A period that the user is allowed to access the website even without + # confirming their account. For instance, if set to 2.days, the user will be + # able to access the website for two days without confirming their account, + # access will be blocked just in the third day. + # You can also set it to nil, which will allow the user to access the website + # without confirming their account. + # Default is 0.days, meaning the user cannot access the website without + # confirming their account. + # config.allow_unconfirmed_access_for = 2.days + + # A period that the user is allowed to confirm their account before their + # token becomes invalid. For example, if set to 3.days, the user can confirm + # their account within 3 days after the mail was sent, but on the fourth day + # their account can't be confirmed with the token any more. + # Default is nil, meaning there is no restriction on how long a user can take + # before confirming their account. + # config.confirm_within = 3.days + + # If true, requires any email changes to be confirmed (exactly the same way as + # initial account confirmation) to be applied. Requires additional unconfirmed_email + # db field (see migrations). Until confirmed, new email is stored in + # unconfirmed_email column, and copied to email column on successful confirmation. + config.reconfirmable = true + + # Defines which key will be used when confirming an account + # config.confirmation_keys = [:email] + + # ==> Configuration for :rememberable + # The time the user will be remembered without asking for credentials again. + # config.remember_for = 2.weeks + + # Invalidates all the remember me tokens when the user signs out. + config.expire_all_remember_me_on_sign_out = true + + # If true, extends the user's remember period when remembered via cookie. + # config.extend_remember_period = false + + # Options to be passed to the created cookie. For instance, you can set + # secure: true in order to force SSL only cookies. + # config.rememberable_options = {} + + # ==> Configuration for :validatable + # Range for password length. + config.password_length = 6..128 + + # Email regex used to validate email formats. It simply asserts that + # one (and only one) @ exists in the given string. This is mainly + # to give user feedback and not to assert the e-mail validity. + config.email_regexp = /\A[^@\s]+@[^@\s]+\z/ + + # ==> Configuration for :timeoutable + # The time you want to timeout the user session without activity. After this + # time the user will be asked for credentials again. Default is 30 minutes. + # config.timeout_in = 30.minutes + + # ==> Configuration for :lockable + # Defines which strategy will be used to lock an account. + # :failed_attempts = Locks an account after a number of failed attempts to sign in. + # :none = No lock strategy. You should handle locking by yourself. + # config.lock_strategy = :failed_attempts + + # Defines which key will be used when locking and unlocking an account + # config.unlock_keys = [:email] + + # Defines which strategy will be used to unlock an account. + # :email = Sends an unlock link to the user email + # :time = Re-enables login after a certain amount of time (see :unlock_in below) + # :both = Enables both strategies + # :none = No unlock strategy. You should handle unlocking by yourself. + # config.unlock_strategy = :both + + # Number of authentication tries before locking an account if lock_strategy + # is failed attempts. + # config.maximum_attempts = 20 + + # Time interval to unlock the account if :time is enabled as unlock_strategy. + # config.unlock_in = 1.hour + + # Warn on the last attempt before the account is locked. + # config.last_attempt_warning = true + + # ==> Configuration for :recoverable + # + # Defines which key will be used when recovering the password for an account + # config.reset_password_keys = [:email] + + # Time interval you can reset your password with a reset password key. + # Don't put a too small interval or your users won't have the time to + # change their passwords. + config.reset_password_within = 6.hours + + # When set to false, does not sign a user in automatically after their password is + # reset. Defaults to true, so a user is signed in automatically after a reset. + # config.sign_in_after_reset_password = true + + # ==> Configuration for :encryptable + # Allow you to use another hashing or encryption algorithm besides bcrypt (default). + # You can use :sha1, :sha512 or algorithms from others authentication tools as + # :clearance_sha1, :authlogic_sha512 (then you should set stretches above to 20 + # for default behavior) and :restful_authentication_sha1 (then you should set + # stretches to 10, and copy REST_AUTH_SITE_KEY to pepper). + # + # Require the `devise-encryptable` gem when using anything other than bcrypt + # config.encryptor = :sha512 + + # ==> Scopes configuration + # Turn scoped views on. Before rendering "sessions/new", it will first check for + # "users/sessions/new". It's turned off by default because it's slower if you + # are using only default views. + # config.scoped_views = false + + # Configure the default scope given to Warden. By default it's the first + # devise role declared in your routes (usually :user). + # config.default_scope = :user + + # Set this configuration to false if you want /users/sign_out to sign out + # only the current scope. By default, Devise signs out all scopes. + # config.sign_out_all_scopes = true + + # ==> Navigation configuration + # Lists the formats that should be treated as navigational. Formats like + # :html should redirect to the sign in page when the user does not have + # access, but formats like :xml or :json, should return 401. + # + # If you have any extra navigational formats, like :iphone or :mobile, you + # should add them to the navigational formats lists. + # + # The "*/*" below is required to match Internet Explorer requests. + # config.navigational_formats = ['*/*', :html, :turbo_stream] + + # The default HTTP method used to sign out a resource. Default is :delete. + config.sign_out_via = :delete + + # ==> OmniAuth + # Add a new OmniAuth provider. Check the wiki for more information on setting + # up on your models and hooks. + # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo' + + # ==> Warden configuration + # If you want to use other strategies, that are not supported by Devise, or + # change the failure app, you can configure them inside the config.warden block. + # + # config.warden do |manager| + # manager.intercept_401 = false + # manager.default_strategies(scope: :user).unshift :some_external_strategy + # end + + # ==> Mountable engine configurations + # When using Devise inside an engine, let's call it `MyEngine`, and this engine + # is mountable, there are some extra configurations to be taken into account. + # The following options are available, assuming the engine is mounted as: + # + # mount MyEngine, at: '/my_engine' + # + # The router that invoked `devise_for`, in the example above, would be: + # config.router_name = :my_engine + # + # When using OmniAuth, Devise cannot automatically set OmniAuth path, + # so you need to do it manually. For the users scope, it would be: + # config.omniauth_path_prefix = '/my_engine/users/auth' + + # ==> Hotwire/Turbo configuration + # When using Devise with Hotwire/Turbo, the http status for error responses + # and some redirects must match the following. The default in Devise for existing + # apps is `200 OK` and `302 Found` respectively, but new apps are generated with + # these new defaults that match Hotwire/Turbo behavior. + # Note: These might become the new default in future versions of Devise. + config.responder.error_status = :unprocessable_entity + config.responder.redirect_status = :see_other + + # ==> Configuration for :registerable + + # When set to false, does not sign a user in automatically after their password is + # changed. Defaults to true, so a user is signed in automatically after changing a password. + # config.sign_in_after_change_password = true +end diff --git a/config/locales/devise.en.yml b/config/locales/devise.en.yml new file mode 100644 index 000000000..260e1c4ba --- /dev/null +++ b/config/locales/devise.en.yml @@ -0,0 +1,65 @@ +# Additional translations at https://github.com/heartcombo/devise/wiki/I18n + +en: + devise: + confirmations: + confirmed: "Your email address has been successfully confirmed." + send_instructions: "You will receive an email with instructions for how to confirm your email address in a few minutes." + send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes." + failure: + already_authenticated: "You are already signed in." + inactive: "Your account is not activated yet." + invalid: "Invalid %{authentication_keys} or password." + locked: "Your account is locked." + last_attempt: "You have one more attempt before your account is locked." + not_found_in_database: "Invalid %{authentication_keys} or password." + timeout: "Your session expired. Please sign in again to continue." + unauthenticated: "You need to sign in or sign up before continuing." + unconfirmed: "You have to confirm your email address before continuing." + mailer: + confirmation_instructions: + subject: "Confirmation instructions" + reset_password_instructions: + subject: "Reset password instructions" + unlock_instructions: + subject: "Unlock instructions" + email_changed: + subject: "Email Changed" + password_change: + subject: "Password Changed" + omniauth_callbacks: + failure: "Could not authenticate you from %{kind} because \"%{reason}\"." + success: "Successfully authenticated from %{kind} account." + passwords: + no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided." + send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes." + send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes." + updated: "Your password has been changed successfully. You are now signed in." + updated_not_active: "Your password has been changed successfully." + registrations: + destroyed: "Bye! Your account has been successfully cancelled. We hope to see you again soon." + signed_up: "Welcome! You have signed up successfully." + signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated." + signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked." + signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account." + update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirmation link to confirm your new email address." + updated: "Your account has been updated successfully." + updated_but_not_signed_in: "Your account has been updated successfully, but since your password was changed, you need to sign in again." + sessions: + signed_in: "Signed in successfully." + signed_out: "Signed out successfully." + already_signed_out: "Signed out successfully." + unlocks: + send_instructions: "You will receive an email with instructions for how to unlock your account in a few minutes." + send_paranoid_instructions: "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes." + unlocked: "Your account has been unlocked successfully. Please sign in to continue." + errors: + messages: + already_confirmed: "was already confirmed, please try signing in" + confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one" + expired: "has expired, please request a new one" + not_found: "not found" + not_locked: "was not locked" + not_saved: + one: "1 error prohibited this %{resource} from being saved:" + other: "%{count} errors prohibited this %{resource} from being saved:" diff --git a/config/routes.rb b/config/routes.rb index 262ffd547..8a00fbcc3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,10 @@ Rails.application.routes.draw do + devise_for :users # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html # Defines the root path route ("/") # root "articles#index" + + root "photos#index" + end diff --git a/db/migrate/20250314025416_devise_create_users.rb b/db/migrate/20250314025416_devise_create_users.rb new file mode 100644 index 000000000..4e0c059b6 --- /dev/null +++ b/db/migrate/20250314025416_devise_create_users.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +class DeviseCreateUsers < ActiveRecord::Migration[7.1] + def change + create_table :users do |t| + ## Database authenticatable + t.string :email, null: false, default: "" + t.string :encrypted_password, null: false, default: "" + + ## Recoverable + t.string :reset_password_token + t.datetime :reset_password_sent_at + + ## Rememberable + t.datetime :remember_created_at + + ## Trackable + # t.integer :sign_in_count, default: 0, null: false + # t.datetime :current_sign_in_at + # t.datetime :last_sign_in_at + # t.string :current_sign_in_ip + # t.string :last_sign_in_ip + + ## Confirmable + # t.string :confirmation_token + # t.datetime :confirmed_at + # t.datetime :confirmation_sent_at + # t.string :unconfirmed_email # Only if using reconfirmable + + ## Lockable + # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts + # t.string :unlock_token # Only if unlock strategy is :email or :both + # t.datetime :locked_at + + t.string :username + t.boolean :private + t.integer :likes_count + t.integer :comments_count + + t.timestamps null: false + end + + add_index :users, :email, unique: true + add_index :users, :reset_password_token, unique: true + # add_index :users, :confirmation_token, unique: true + # add_index :users, :unlock_token, unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index b783f9866..f9139984d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 0) do +ActiveRecord::Schema[7.1].define(version: 0) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" From d40a04672fdd3ed9c0e19cb01f93598ed5806c1f Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 02:57:20 +0000 Subject: [PATCH 02/19] Add indexes / constraints to User --- app/models/user.rb | 22 ++++++++++++++++++++++ db/schema.rb | 18 +++++++++++++++++- erd.png | Bin 0 -> 20654 bytes 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 erd.png diff --git a/app/models/user.rb b/app/models/user.rb index 47567994e..fe19d7e22 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,3 +1,25 @@ +# == Schema Information +# +# Table name: users +# +# id :bigint not null, primary key +# comments_count :integer +# email :string default(""), not null +# encrypted_password :string default(""), not null +# likes_count :integer +# private :boolean +# remember_created_at :datetime +# reset_password_sent_at :datetime +# reset_password_token :string +# username :string +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_users_on_email (email) UNIQUE +# index_users_on_reset_password_token (reset_password_token) UNIQUE +# class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable diff --git a/db/schema.rb b/db/schema.rb index f9139984d..dabb10226 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,8 +10,24 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 0) do +ActiveRecord::Schema[7.1].define(version: 2025_03_14_025416) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "users", force: :cascade do |t| + t.string "email", default: "", null: false + t.string "encrypted_password", default: "", null: false + t.string "reset_password_token" + t.datetime "reset_password_sent_at" + t.datetime "remember_created_at" + t.string "username" + t.boolean "private" + t.integer "likes_count" + t.integer "comments_count" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["email"], name: "index_users_on_email", unique: true + t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true + end + end diff --git a/erd.png b/erd.png new file mode 100644 index 0000000000000000000000000000000000000000..e8c7fc9204bbac3a4917dab3864ccc7680eb8f55 GIT binary patch literal 20654 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 Date: Fri, 14 Mar 2025 03:23:22 +0000 Subject: [PATCH 03/19] Edit Devise users migration to include default values, unique indexes, and citext --- .../20250314025416_devise_create_users.rb | 34 ++++++------------- 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/db/migrate/20250314025416_devise_create_users.rb b/db/migrate/20250314025416_devise_create_users.rb index 4e0c059b6..7ea95452f 100644 --- a/db/migrate/20250314025416_devise_create_users.rb +++ b/db/migrate/20250314025416_devise_create_users.rb @@ -1,3 +1,5 @@ +# db/migrate/_devise_create_users.rb + # frozen_string_literal: true class DeviseCreateUsers < ActiveRecord::Migration[7.1] @@ -14,35 +16,19 @@ def change ## Rememberable t.datetime :remember_created_at - ## Trackable - # t.integer :sign_in_count, default: 0, null: false - # t.datetime :current_sign_in_at - # t.datetime :last_sign_in_at - # t.string :current_sign_in_ip - # t.string :last_sign_in_ip - - ## Confirmable - # t.string :confirmation_token - # t.datetime :confirmed_at - # t.datetime :confirmation_sent_at - # t.string :unconfirmed_email # Only if using reconfirmable - - ## Lockable - # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts - # t.string :unlock_token # Only if unlock strategy is :email or :both - # t.datetime :locked_at - - t.string :username - t.boolean :private - t.integer :likes_count - t.integer :comments_count + ## [Optional Devise modules omitted for brevity] + + # Your custom columns + t.string :username + t.boolean :private, default: false + t.integer :likes_count, default: 0 + t.integer :comments_count, default: 0 t.timestamps null: false end add_index :users, :email, unique: true add_index :users, :reset_password_token, unique: true - # add_index :users, :confirmation_token, unique: true - # add_index :users, :unlock_token, unique: true + add_index :users, :username, unique: true # <--- Added! end end From fc380ffe473f5d7354c5e7f41ee37573a9b85bc2 Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 03:35:01 +0000 Subject: [PATCH 04/19] Generated photos --- app/controllers/photos_controller.rb | 70 +++++++++++++++++++++ app/models/photo.rb | 24 +++++++ app/models/user.rb | 4 ++ app/views/photos/_form.html.erb | 17 +++++ app/views/photos/_photo.html.erb | 27 ++++++++ app/views/photos/_photo.json.jbuilder | 2 + app/views/photos/edit.html.erb | 10 +++ app/views/photos/index.html.erb | 14 +++++ app/views/photos/index.json.jbuilder | 1 + app/views/photos/new.html.erb | 9 +++ app/views/photos/show.html.erb | 10 +++ app/views/photos/show.json.jbuilder | 1 + config/routes.rb | 1 + db/migrate/20250314032943_create_photos.rb | 13 ++++ db/schema.rb | 14 ++++- erd.png | Bin 20654 -> 26328 bytes 16 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 app/controllers/photos_controller.rb create mode 100644 app/models/photo.rb create mode 100644 app/views/photos/_form.html.erb create mode 100644 app/views/photos/_photo.html.erb create mode 100644 app/views/photos/_photo.json.jbuilder create mode 100644 app/views/photos/edit.html.erb create mode 100644 app/views/photos/index.html.erb create mode 100644 app/views/photos/index.json.jbuilder create mode 100644 app/views/photos/new.html.erb create mode 100644 app/views/photos/show.html.erb create mode 100644 app/views/photos/show.json.jbuilder create mode 100644 db/migrate/20250314032943_create_photos.rb diff --git a/app/controllers/photos_controller.rb b/app/controllers/photos_controller.rb new file mode 100644 index 000000000..7b50a7997 --- /dev/null +++ b/app/controllers/photos_controller.rb @@ -0,0 +1,70 @@ +class PhotosController < ApplicationController + before_action :set_photo, only: %i[ show edit update destroy ] + + # GET /photos or /photos.json + def index + @photos = Photo.all + end + + # GET /photos/1 or /photos/1.json + def show + end + + # GET /photos/new + def new + @photo = Photo.new + end + + # GET /photos/1/edit + def edit + end + + # POST /photos or /photos.json + def create + @photo = Photo.new(photo_params) + + respond_to do |format| + if @photo.save + format.html { redirect_to photo_url(@photo), notice: "Photo was successfully created." } + format.json { render :show, status: :created, location: @photo } + else + format.html { render :new, status: :unprocessable_entity } + format.json { render json: @photo.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /photos/1 or /photos/1.json + def update + respond_to do |format| + if @photo.update(photo_params) + format.html { redirect_to photo_url(@photo), notice: "Photo was successfully updated." } + format.json { render :show, status: :ok, location: @photo } + else + format.html { render :edit, status: :unprocessable_entity } + format.json { render json: @photo.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /photos/1 or /photos/1.json + def destroy + @photo.destroy! + + respond_to do |format| + format.html { redirect_to photos_url, notice: "Photo was successfully destroyed." } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_photo + @photo = Photo.find(params[:id]) + end + + # Only allow a list of trusted parameters through. + def photo_params + params.require(:photo).permit(:image, :comments_count, :likes_count, :caption, :owner_id) + end +end diff --git a/app/models/photo.rb b/app/models/photo.rb new file mode 100644 index 000000000..f09ff38f5 --- /dev/null +++ b/app/models/photo.rb @@ -0,0 +1,24 @@ +# == Schema Information +# +# Table name: photos +# +# id :bigint not null, primary key +# caption :text +# comments_count :integer default(0) +# image :string +# likes_count :integer default(0) +# created_at :datetime not null +# updated_at :datetime not null +# owner_id :bigint not null +# +# Indexes +# +# index_photos_on_owner_id (owner_id) +# +# Foreign Keys +# +# fk_rails_... (owner_id => users.id) +# +class Photo < ApplicationRecord + belongs_to :owner, class_name: "User" +end diff --git a/app/models/user.rb b/app/models/user.rb index fe19d7e22..e45b1c102 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -20,9 +20,13 @@ # index_users_on_email (email) UNIQUE # index_users_on_reset_password_token (reset_password_token) UNIQUE # +# app/models/user.rb + class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable + + has_many :own_photos, class_name: "Photo", foreign_key: "owner_id" end diff --git a/app/views/photos/_form.html.erb b/app/views/photos/_form.html.erb new file mode 100644 index 000000000..d58d4c2ae --- /dev/null +++ b/app/views/photos/_form.html.erb @@ -0,0 +1,17 @@ + +<%= simple_form_for(@photo) do |f| %> + <%= f.error_notification %> + <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> + +
+ <%= f.input :image %> + <%= f.input :comments_count %> + <%= f.input :likes_count %> + <%= f.input :caption %> + <%= f.association :owner %> +
+ +
+ <%= f.button :submit %> +
+<% end %> diff --git a/app/views/photos/_photo.html.erb b/app/views/photos/_photo.html.erb new file mode 100644 index 000000000..163412972 --- /dev/null +++ b/app/views/photos/_photo.html.erb @@ -0,0 +1,27 @@ +
+

+ Image: + <%= photo.image %> +

+ +

+ Comments count: + <%= photo.comments_count %> +

+ +

+ Likes count: + <%= photo.likes_count %> +

+ +

+ Caption: + <%= photo.caption %> +

+ +

+ Owner: + <%= photo.owner_id %> +

+ +
diff --git a/app/views/photos/_photo.json.jbuilder b/app/views/photos/_photo.json.jbuilder new file mode 100644 index 000000000..fad93a0a9 --- /dev/null +++ b/app/views/photos/_photo.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! photo, :id, :image, :comments_count, :likes_count, :caption, :owner_id, :created_at, :updated_at +json.url photo_url(photo, format: :json) diff --git a/app/views/photos/edit.html.erb b/app/views/photos/edit.html.erb new file mode 100644 index 000000000..334e57176 --- /dev/null +++ b/app/views/photos/edit.html.erb @@ -0,0 +1,10 @@ +

Editing photo

+ +<%= render "form", photo: @photo %> + +
+ +
+ <%= link_to "Show this photo", @photo %> | + <%= link_to "Back to photos", photos_path %> +
diff --git a/app/views/photos/index.html.erb b/app/views/photos/index.html.erb new file mode 100644 index 000000000..bfcfea758 --- /dev/null +++ b/app/views/photos/index.html.erb @@ -0,0 +1,14 @@ +

<%= notice %>

+ +

Photos

+ +
+ <% @photos.each do |photo| %> + <%= render photo %> +

+ <%= link_to "Show this photo", photo %> +

+ <% end %> +
+ +<%= link_to "New photo", new_photo_path %> diff --git a/app/views/photos/index.json.jbuilder b/app/views/photos/index.json.jbuilder new file mode 100644 index 000000000..24d84b804 --- /dev/null +++ b/app/views/photos/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @photos, partial: "photos/photo", as: :photo diff --git a/app/views/photos/new.html.erb b/app/views/photos/new.html.erb new file mode 100644 index 000000000..4649e7ad5 --- /dev/null +++ b/app/views/photos/new.html.erb @@ -0,0 +1,9 @@ +

New photo

+ +<%= render "form", photo: @photo %> + +
+ +
+ <%= link_to "Back to photos", photos_path %> +
diff --git a/app/views/photos/show.html.erb b/app/views/photos/show.html.erb new file mode 100644 index 000000000..2d4f05255 --- /dev/null +++ b/app/views/photos/show.html.erb @@ -0,0 +1,10 @@ +

<%= notice %>

+ +<%= render @photo %> + +
+ <%= link_to "Edit this photo", edit_photo_path(@photo) %> | + <%= link_to "Back to photos", photos_path %> + + <%= button_to "Destroy this photo", @photo, method: :delete %> +
diff --git a/app/views/photos/show.json.jbuilder b/app/views/photos/show.json.jbuilder new file mode 100644 index 000000000..5c0f6ffc9 --- /dev/null +++ b/app/views/photos/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "photos/photo", photo: @photo diff --git a/config/routes.rb b/config/routes.rb index 8a00fbcc3..ea108e3d2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,5 @@ Rails.application.routes.draw do + resources :photos devise_for :users # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html diff --git a/db/migrate/20250314032943_create_photos.rb b/db/migrate/20250314032943_create_photos.rb new file mode 100644 index 000000000..3290dad8c --- /dev/null +++ b/db/migrate/20250314032943_create_photos.rb @@ -0,0 +1,13 @@ +class CreatePhotos < ActiveRecord::Migration[7.0] + def change + create_table :photos do |t| + t.string :image + t.integer :comments_count, default: 0 + t.integer :likes_count, default: 0 + t.text :caption + t.references :owner, null: false, foreign_key: { to_table: :users } + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index dabb10226..bf939356f 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,10 +10,21 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2025_03_14_025416) do +ActiveRecord::Schema[7.1].define(version: 2025_03_14_032943) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "photos", force: :cascade do |t| + t.string "image" + t.integer "comments_count", default: 0 + t.integer "likes_count", default: 0 + t.text "caption" + t.bigint "owner_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["owner_id"], name: "index_photos_on_owner_id" + end + create_table "users", force: :cascade do |t| t.string "email", default: "", null: false t.string "encrypted_password", default: "", null: false @@ -30,4 +41,5 @@ t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end + add_foreign_key "photos", "users", column: "owner_id" end diff --git a/erd.png b/erd.png index e8c7fc9204bbac3a4917dab3864ccc7680eb8f55..c68203b6b52fdaacfd7ef1485863620446bf4c73 100644 GIT binary patch literal 26328 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

?}9Uf9|WvUTZvQ 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ðbum+4@>*OSpep@0~o4sR$G}2EFEHFXRbe zSb+wijic6jX%Ij=W}nc|P|&6(0)oqy!7QWV-!%s!-FKgc-^QxONMFfU;Wt~d+Itn= zLGp#UfiqYZl=I7%ugFokdHuRS;sdd?fBzn8AmIA(N+K(Ep!?F<;KOqgspj!#WQ#?9F)t`LR`~W+P@B(Ib`#&Ae$Sx3T1#`A z(~G7iI6#1^EUW$ObEo|rWTN0}flQ!hBVr*sK0YVIo$X+ku%$q(vD%0AE^vW%b_=IQ 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 literal 20654 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 Date: Fri, 14 Mar 2025 04:14:38 +0000 Subject: [PATCH 05/19] generate follow --- app/controllers/comments_controller.rb | 70 ++++++++++++++++++ app/controllers/follow_requests_controller.rb | 70 ++++++++++++++++++ app/models/comment.rb | 24 ++++++ app/models/follow_request.rb | 5 ++ app/models/photo.rb | 3 + app/models/user.rb | 44 ++++------- app/views/comments/_comment.html.erb | 17 +++++ app/views/comments/_comment.json.jbuilder | 2 + app/views/comments/_form.html.erb | 15 ++++ app/views/comments/edit.html.erb | 10 +++ app/views/comments/index.html.erb | 14 ++++ app/views/comments/index.json.jbuilder | 1 + app/views/comments/new.html.erb | 9 +++ app/views/comments/show.html.erb | 10 +++ app/views/comments/show.json.jbuilder | 1 + .../follow_requests/_follow_request.html.erb | 17 +++++ .../_follow_request.json.jbuilder | 2 + app/views/follow_requests/_form.html.erb | 15 ++++ app/views/follow_requests/edit.html.erb | 10 +++ app/views/follow_requests/index.html.erb | 14 ++++ app/views/follow_requests/index.json.jbuilder | 1 + app/views/follow_requests/new.html.erb | 9 +++ app/views/follow_requests/show.html.erb | 10 +++ app/views/follow_requests/show.json.jbuilder | 1 + config/routes.rb | 2 + db/migrate/20250314034312_create_comments.rb | 13 ++++ .../20250314041326_create_follow_requests.rb | 12 +++ db/schema.rb | 25 ++++++- erd.png | Bin 26328 -> 77747 bytes 29 files changed, 396 insertions(+), 30 deletions(-) create mode 100644 app/controllers/comments_controller.rb create mode 100644 app/controllers/follow_requests_controller.rb create mode 100644 app/models/comment.rb create mode 100644 app/models/follow_request.rb create mode 100644 app/views/comments/_comment.html.erb create mode 100644 app/views/comments/_comment.json.jbuilder create mode 100644 app/views/comments/_form.html.erb create mode 100644 app/views/comments/edit.html.erb create mode 100644 app/views/comments/index.html.erb create mode 100644 app/views/comments/index.json.jbuilder create mode 100644 app/views/comments/new.html.erb create mode 100644 app/views/comments/show.html.erb create mode 100644 app/views/comments/show.json.jbuilder create mode 100644 app/views/follow_requests/_follow_request.html.erb create mode 100644 app/views/follow_requests/_follow_request.json.jbuilder create mode 100644 app/views/follow_requests/_form.html.erb create mode 100644 app/views/follow_requests/edit.html.erb create mode 100644 app/views/follow_requests/index.html.erb create mode 100644 app/views/follow_requests/index.json.jbuilder create mode 100644 app/views/follow_requests/new.html.erb create mode 100644 app/views/follow_requests/show.html.erb create mode 100644 app/views/follow_requests/show.json.jbuilder create mode 100644 db/migrate/20250314034312_create_comments.rb create mode 100644 db/migrate/20250314041326_create_follow_requests.rb diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb new file mode 100644 index 000000000..6cae78f6e --- /dev/null +++ b/app/controllers/comments_controller.rb @@ -0,0 +1,70 @@ +class CommentsController < ApplicationController + before_action :set_comment, only: %i[ show edit update destroy ] + + # GET /comments or /comments.json + def index + @comments = Comment.all + end + + # GET /comments/1 or /comments/1.json + def show + end + + # GET /comments/new + def new + @comment = Comment.new + end + + # GET /comments/1/edit + def edit + end + + # POST /comments or /comments.json + def create + @comment = Comment.new(comment_params) + + respond_to do |format| + if @comment.save + format.html { redirect_to comment_url(@comment), notice: "Comment was successfully created." } + format.json { render :show, status: :created, location: @comment } + else + format.html { render :new, status: :unprocessable_entity } + format.json { render json: @comment.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /comments/1 or /comments/1.json + def update + respond_to do |format| + if @comment.update(comment_params) + format.html { redirect_to comment_url(@comment), notice: "Comment was successfully updated." } + format.json { render :show, status: :ok, location: @comment } + else + format.html { render :edit, status: :unprocessable_entity } + format.json { render json: @comment.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /comments/1 or /comments/1.json + def destroy + @comment.destroy! + + respond_to do |format| + format.html { redirect_to comments_url, notice: "Comment was successfully destroyed." } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_comment + @comment = Comment.find(params[:id]) + end + + # Only allow a list of trusted parameters through. + def comment_params + params.require(:comment).permit(:author_id, :photo_id, :body) + end +end diff --git a/app/controllers/follow_requests_controller.rb b/app/controllers/follow_requests_controller.rb new file mode 100644 index 000000000..fcbdc78c4 --- /dev/null +++ b/app/controllers/follow_requests_controller.rb @@ -0,0 +1,70 @@ +class FollowRequestsController < ApplicationController + before_action :set_follow_request, only: %i[ show edit update destroy ] + + # GET /follow_requests or /follow_requests.json + def index + @follow_requests = FollowRequest.all + end + + # GET /follow_requests/1 or /follow_requests/1.json + def show + end + + # GET /follow_requests/new + def new + @follow_request = FollowRequest.new + end + + # GET /follow_requests/1/edit + def edit + end + + # POST /follow_requests or /follow_requests.json + def create + @follow_request = FollowRequest.new(follow_request_params) + + respond_to do |format| + if @follow_request.save + format.html { redirect_to follow_request_url(@follow_request), notice: "Follow request was successfully created." } + format.json { render :show, status: :created, location: @follow_request } + else + format.html { render :new, status: :unprocessable_entity } + format.json { render json: @follow_request.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /follow_requests/1 or /follow_requests/1.json + def update + respond_to do |format| + if @follow_request.update(follow_request_params) + format.html { redirect_to follow_request_url(@follow_request), notice: "Follow request was successfully updated." } + format.json { render :show, status: :ok, location: @follow_request } + else + format.html { render :edit, status: :unprocessable_entity } + format.json { render json: @follow_request.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /follow_requests/1 or /follow_requests/1.json + def destroy + @follow_request.destroy! + + respond_to do |format| + format.html { redirect_to follow_requests_url, notice: "Follow request was successfully destroyed." } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_follow_request + @follow_request = FollowRequest.find(params[:id]) + end + + # Only allow a list of trusted parameters through. + def follow_request_params + params.require(:follow_request).permit(:recipient_id, :sender_id, :status) + end +end diff --git a/app/models/comment.rb b/app/models/comment.rb new file mode 100644 index 000000000..d2fb2066c --- /dev/null +++ b/app/models/comment.rb @@ -0,0 +1,24 @@ +# == Schema Information +# +# Table name: comments +# +# id :bigint not null, primary key +# body :text not null +# created_at :datetime not null +# updated_at :datetime not null +# author_id :bigint not null +# photo_id :bigint not null +# +# Indexes +# +# index_comments_on_photo_id (photo_id) +# +# Foreign Keys +# +# fk_rails_... (author_id => users.id) +# fk_rails_... (photo_id => photos.id) +# +class Comment < ApplicationRecord + belongs_to :author, class_name: "User" + belongs_to :photo +end diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb new file mode 100644 index 000000000..de84a55b2 --- /dev/null +++ b/app/models/follow_request.rb @@ -0,0 +1,5 @@ +# app/models/follow_request.rb +class FollowRequest < ApplicationRecord + belongs_to :recipient, class_name: "User" + belongs_to :sender, class_name: "User" +end diff --git a/app/models/photo.rb b/app/models/photo.rb index f09ff38f5..5c1ced9c6 100644 --- a/app/models/photo.rb +++ b/app/models/photo.rb @@ -19,6 +19,9 @@ # # fk_rails_... (owner_id => users.id) # +# app/models/photo.rb + class Photo < ApplicationRecord belongs_to :owner, class_name: "User" + has_many :comments end diff --git a/app/models/user.rb b/app/models/user.rb index e45b1c102..40d7fe18a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,32 +1,18 @@ -# == Schema Information -# -# Table name: users -# -# id :bigint not null, primary key -# comments_count :integer -# email :string default(""), not null -# encrypted_password :string default(""), not null -# likes_count :integer -# private :boolean -# remember_created_at :datetime -# reset_password_sent_at :datetime -# reset_password_token :string -# username :string -# created_at :datetime not null -# updated_at :datetime not null -# -# Indexes -# -# index_users_on_email (email) UNIQUE -# index_users_on_reset_password_token (reset_password_token) UNIQUE -# -# app/models/user.rb - class User < ApplicationRecord - # Include default devise modules. Others available are: - # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable - devise :database_authenticatable, :registerable, - :recoverable, :rememberable, :validatable - + # Devise modules, etc. + + # Photos, comments, etc. has_many :own_photos, class_name: "Photo", foreign_key: "owner_id" + + # Follow requests this user SENT + has_many :sent_follow_requests, + class_name: "FollowRequest", + foreign_key: "sender_id", + dependent: :destroy + + # Follow requests this user RECEIVED + has_many :received_follow_requests, + class_name: "FollowRequest", + foreign_key: "recipient_id", + dependent: :destroy end diff --git a/app/views/comments/_comment.html.erb b/app/views/comments/_comment.html.erb new file mode 100644 index 000000000..e5aac46fe --- /dev/null +++ b/app/views/comments/_comment.html.erb @@ -0,0 +1,17 @@ +

+

+ Author: + <%= comment.author_id %> +

+ +

+ Photo: + <%= comment.photo_id %> +

+ +

+ Body: + <%= comment.body %> +

+ +
diff --git a/app/views/comments/_comment.json.jbuilder b/app/views/comments/_comment.json.jbuilder new file mode 100644 index 000000000..64674aec1 --- /dev/null +++ b/app/views/comments/_comment.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! comment, :id, :author_id, :photo_id, :body, :created_at, :updated_at +json.url comment_url(comment, format: :json) diff --git a/app/views/comments/_form.html.erb b/app/views/comments/_form.html.erb new file mode 100644 index 000000000..2bbce7acd --- /dev/null +++ b/app/views/comments/_form.html.erb @@ -0,0 +1,15 @@ + +<%= simple_form_for(@comment) do |f| %> + <%= f.error_notification %> + <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> + +
+ <%= f.association :author %> + <%= f.association :photo %> + <%= f.input :body %> +
+ +
+ <%= f.button :submit %> +
+<% end %> diff --git a/app/views/comments/edit.html.erb b/app/views/comments/edit.html.erb new file mode 100644 index 000000000..9720435b0 --- /dev/null +++ b/app/views/comments/edit.html.erb @@ -0,0 +1,10 @@ +

Editing comment

+ +<%= render "form", comment: @comment %> + +
+ +
+ <%= link_to "Show this comment", @comment %> | + <%= link_to "Back to comments", comments_path %> +
diff --git a/app/views/comments/index.html.erb b/app/views/comments/index.html.erb new file mode 100644 index 000000000..c4935157a --- /dev/null +++ b/app/views/comments/index.html.erb @@ -0,0 +1,14 @@ +

<%= notice %>

+ +

Comments

+ +
+ <% @comments.each do |comment| %> + <%= render comment %> +

+ <%= link_to "Show this comment", comment %> +

+ <% end %> +
+ +<%= link_to "New comment", new_comment_path %> diff --git a/app/views/comments/index.json.jbuilder b/app/views/comments/index.json.jbuilder new file mode 100644 index 000000000..e3322af65 --- /dev/null +++ b/app/views/comments/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @comments, partial: "comments/comment", as: :comment diff --git a/app/views/comments/new.html.erb b/app/views/comments/new.html.erb new file mode 100644 index 000000000..6ba6dd8a4 --- /dev/null +++ b/app/views/comments/new.html.erb @@ -0,0 +1,9 @@ +

New comment

+ +<%= render "form", comment: @comment %> + +
+ +
+ <%= link_to "Back to comments", comments_path %> +
diff --git a/app/views/comments/show.html.erb b/app/views/comments/show.html.erb new file mode 100644 index 000000000..b90af0a6f --- /dev/null +++ b/app/views/comments/show.html.erb @@ -0,0 +1,10 @@ +

<%= notice %>

+ +<%= render @comment %> + +
+ <%= link_to "Edit this comment", edit_comment_path(@comment) %> | + <%= link_to "Back to comments", comments_path %> + + <%= button_to "Destroy this comment", @comment, method: :delete %> +
diff --git a/app/views/comments/show.json.jbuilder b/app/views/comments/show.json.jbuilder new file mode 100644 index 000000000..78a9099a3 --- /dev/null +++ b/app/views/comments/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "comments/comment", comment: @comment diff --git a/app/views/follow_requests/_follow_request.html.erb b/app/views/follow_requests/_follow_request.html.erb new file mode 100644 index 000000000..3b9f8c078 --- /dev/null +++ b/app/views/follow_requests/_follow_request.html.erb @@ -0,0 +1,17 @@ +
+

+ Recipient: + <%= follow_request.recipient_id %> +

+ +

+ Sender: + <%= follow_request.sender_id %> +

+ +

+ Status: + <%= follow_request.status %> +

+ +
diff --git a/app/views/follow_requests/_follow_request.json.jbuilder b/app/views/follow_requests/_follow_request.json.jbuilder new file mode 100644 index 000000000..d7dd54cc5 --- /dev/null +++ b/app/views/follow_requests/_follow_request.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! follow_request, :id, :recipient_id, :sender_id, :status, :created_at, :updated_at +json.url follow_request_url(follow_request, format: :json) diff --git a/app/views/follow_requests/_form.html.erb b/app/views/follow_requests/_form.html.erb new file mode 100644 index 000000000..2488a66af --- /dev/null +++ b/app/views/follow_requests/_form.html.erb @@ -0,0 +1,15 @@ + +<%= simple_form_for(@follow_request) do |f| %> + <%= f.error_notification %> + <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> + +
+ <%= f.association :recipient %> + <%= f.association :sender %> + <%= f.input :status %> +
+ +
+ <%= f.button :submit %> +
+<% end %> diff --git a/app/views/follow_requests/edit.html.erb b/app/views/follow_requests/edit.html.erb new file mode 100644 index 000000000..7c42ec88d --- /dev/null +++ b/app/views/follow_requests/edit.html.erb @@ -0,0 +1,10 @@ +

Editing follow request

+ +<%= render "form", follow_request: @follow_request %> + +
+ +
+ <%= link_to "Show this follow request", @follow_request %> | + <%= link_to "Back to follow requests", follow_requests_path %> +
diff --git a/app/views/follow_requests/index.html.erb b/app/views/follow_requests/index.html.erb new file mode 100644 index 000000000..20fd53284 --- /dev/null +++ b/app/views/follow_requests/index.html.erb @@ -0,0 +1,14 @@ +

<%= notice %>

+ +

Follow requests

+ +
+ <% @follow_requests.each do |follow_request| %> + <%= render follow_request %> +

+ <%= link_to "Show this follow request", follow_request %> +

+ <% end %> +
+ +<%= link_to "New follow request", new_follow_request_path %> diff --git a/app/views/follow_requests/index.json.jbuilder b/app/views/follow_requests/index.json.jbuilder new file mode 100644 index 000000000..b45255d0f --- /dev/null +++ b/app/views/follow_requests/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @follow_requests, partial: "follow_requests/follow_request", as: :follow_request diff --git a/app/views/follow_requests/new.html.erb b/app/views/follow_requests/new.html.erb new file mode 100644 index 000000000..f13075ef6 --- /dev/null +++ b/app/views/follow_requests/new.html.erb @@ -0,0 +1,9 @@ +

New follow request

+ +<%= render "form", follow_request: @follow_request %> + +
+ +
+ <%= link_to "Back to follow requests", follow_requests_path %> +
diff --git a/app/views/follow_requests/show.html.erb b/app/views/follow_requests/show.html.erb new file mode 100644 index 000000000..6db53cce2 --- /dev/null +++ b/app/views/follow_requests/show.html.erb @@ -0,0 +1,10 @@ +

<%= notice %>

+ +<%= render @follow_request %> + +
+ <%= link_to "Edit this follow request", edit_follow_request_path(@follow_request) %> | + <%= link_to "Back to follow requests", follow_requests_path %> + + <%= button_to "Destroy this follow request", @follow_request, method: :delete %> +
diff --git a/app/views/follow_requests/show.json.jbuilder b/app/views/follow_requests/show.json.jbuilder new file mode 100644 index 000000000..3fb15c16d --- /dev/null +++ b/app/views/follow_requests/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "follow_requests/follow_request", follow_request: @follow_request diff --git a/config/routes.rb b/config/routes.rb index ea108e3d2..9620e4f98 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,6 @@ Rails.application.routes.draw do + resources :follow_requests + resources :comments resources :photos devise_for :users # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html diff --git a/db/migrate/20250314034312_create_comments.rb b/db/migrate/20250314034312_create_comments.rb new file mode 100644 index 000000000..a759f6462 --- /dev/null +++ b/db/migrate/20250314034312_create_comments.rb @@ -0,0 +1,13 @@ +# db/migrate/-create-comments.rb + +class CreateComments < ActiveRecord::Migration[7.0] + def change + create_table :comments do |t| + t.references :author, null: false, foreign_key: { to_table: :users }, index: false + t.references :photo, null: false, foreign_key: true + t.text :body, null: false + + t.timestamps + end + end +end diff --git a/db/migrate/20250314041326_create_follow_requests.rb b/db/migrate/20250314041326_create_follow_requests.rb new file mode 100644 index 000000000..048b8fa9e --- /dev/null +++ b/db/migrate/20250314041326_create_follow_requests.rb @@ -0,0 +1,12 @@ +# db/migrate/XXXXXXXXXXXX_create_follow_requests.rb +class CreateFollowRequests < ActiveRecord::Migration[7.0] + def change + create_table :follow_requests do |t| + t.references :recipient, null: false, foreign_key: { to_table: :users } + t.references :sender, null: false, foreign_key: { to_table: :users } + t.string :status, default: "pending" + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index bf939356f..b3c4040a7 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,10 +10,29 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2025_03_14_032943) do +ActiveRecord::Schema[7.1].define(version: 2025_03_14_041326) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" + create_table "comments", force: :cascade do |t| + t.bigint "author_id", null: false + t.bigint "photo_id", null: false + t.text "body", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["photo_id"], name: "index_comments_on_photo_id" + end + + create_table "follow_requests", force: :cascade do |t| + t.bigint "recipient_id", null: false + t.bigint "sender_id", null: false + t.string "status", default: "pending" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["recipient_id"], name: "index_follow_requests_on_recipient_id" + t.index ["sender_id"], name: "index_follow_requests_on_sender_id" + end + create_table "photos", force: :cascade do |t| t.string "image" t.integer "comments_count", default: 0 @@ -41,5 +60,9 @@ t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end + add_foreign_key "comments", "photos" + add_foreign_key "comments", "users", column: "author_id" + add_foreign_key "follow_requests", "users", column: "recipient_id" + add_foreign_key "follow_requests", "users", column: "sender_id" add_foreign_key "photos", "users", column: "owner_id" end diff --git a/erd.png b/erd.png index c68203b6b52fdaacfd7ef1485863620446bf4c73..846353b1c2378dfc84b59250240dfbca4379906a 100644 GIT binary patch literal 77747 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 literal 26328 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

?}9Uf9|WvUTZvQ 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ðbum+4@>*OSpep@0~o4sR$G}2EFEHFXRbe zSb+wijic6jX%Ij=W}nc|P|&6(0)oqy!7QWV-!%s!-FKgc-^QxONMFfU;Wt~d+Itn= zLGp#UfiqYZl=I7%ugFokdHuRS;sdd?fBzn8AmIA(N+K(Ep!?F<;KOqgspj!#WQ#?9F)t`LR`~W+P@B(Ib`#&Ae$Sx3T1#`A z(~G7iI6#1^EUW$ObEo|rWTN0}flQ!hBVr*sK0YVIo$X+ku%$q(vD%0AE^vW%b_=IQ zRii(AY@Li|lEmUZ=RM048!k&FexHl{C|lKN$hpp&i#uQbhM9enmE0PP*qAFYU0nFP zD>H1BK`;c1lxwF)JMxmkYnz#;NstD<_9YkH1HQ4a|ggONO9%l;a2da{$& zjvF>y^Rwbg4aC~PziD>6E#6omIofD~D{?u*q-YCY*n>5NZ<_aE(iHzNV18;TjdXu>TUbXe4aTFGKS z(PUenL+X!9`~Jg|i$R5x@#_?#*X~gWnikXsf5S97X7=y&yK?*+w(yt!mPT(DLKPeD zsl_Y^&}GMz;l#IEjgaZ%K0YPJS=hR~JUz3{T=tP!FbN4#ZwVI9phUFz1OyZo6{%0< zO`Rul{dTCT!ZK89xq}tt?!B$$=c!rL8h3ki&CaLcnrlXJ7FL&Mlb%uAq(^XT+@kwR z&b5m5!U?GhHx1ZrtT5VXrW8}~{{e>gBW zxCc^crUB%EP^QccBv`^V(F3t?esYo_3u$dd;tK!fBZNyWMK}c)QPBk$~42 z{@~4=x-8C7Oh`X@)>ra7!alt=$yWRbgEbb&l)W(#ne@!lrS#HZUS3gAl8JO3f?7v= z=t2kTTzO)qM!u-AucBO|6AtTG- zPAI?V_xeb0Aj<>~2xA3pw!{!cGQR<9S~|ilkgAsXD__%YB$^>h2HFkDzj~DL{d3jT zb40iw_syfl$BxeBZ0qKSV6LI6-6f=--5EiO*mfVM6AA^Rm~}8%$73~RKUqR2RD~Fj zV3+-6 zZ)y1();{PUdx&J4U-C$zSTV6pfBE_qq%yYd)t^iZ)svY@yPvN(LYOECD3Cy*%RQ`t zF1PpadDt30CDBd3Bvp^VeSMD`8p94;U!UmiJoA(0l zd|PX4XjYi(8TJK7kQ14+H-+G=#l@?SJtg$^(3guC;1}MVD?cwR*~wsz3H`VjKoR&K((fQAeSL&dp9~)9_vZ z2EiBulXuz8{08xG5-=4FvpP*0}Qe$S!MaxtVQ zDg03yIPsBSlpv-0nJ_ui`GBRri4Kwr{W}<%GT%yv72^qS{(DzgfVNfx;-jOJy0Cp; zc3B`K3+unVJBC{zhoTnrc>oX#$G-_D{Gg3Z0019+4ei+FXU{iDNr76r+pF}hHbi|a z7U`AkEeuE(0|RFu8ik8a1B(Q%EQCwQ9Z@2yOy_8nSBK3GYo{Q_aqA62ndYX7zHDDm zfqM*pU9@OKR4a#pi010bN`Oj`0D;H??tDElaUVjD!!8P)YMT0a1t62`#PxuNouOBJ z7cZDfqk$&QJ#;fI&8vo@7ChyqtzC_~2=%Yd*9md6<9XILg(8cTl!3e||%2T@gA=SnmbgDCtXj4!lBnS$q(KFU7! zjN@gjZ>@FZX;;aL7bDs6TF9JWGfJZGP?nNd^*TExum~$p+=&MSwAznU_7VWXXsTID z0#D?m@Fqbi#7G<``n|+S((R_os(EiieN}i`o;DlC(86V77hN*vNrR1CtfDPlT!^Hd3)d zPQ}H9U$=qkQA0y|^JWAM-pAryhuAA{9M#p;K!K1|>+a?>3tj}HBqGm&2_j_EQs6^A z6WJ?Bhf8zJuJs)>^Y9pf<{SsitSGpL$<$YQKqNSz`#3mA__=G7NH1lo8XFMm{yU0? ztn8h_!V~B}h_aE4^k%u^W-PSHTLf~6LW#0nZeOrp4%O%sG&cZ8fzr`c%;f1NuRTt| z7UAPVNSJFO&H;LjKTy8>2y~pj?RORC5EN5P;!b652S6$z7sI}QmCJ0K;YJF^o@u{D zA}w_%J|jQ`$Ks9ATOj*F;%cCKo^^F4vy9+&a9?^FlqmoSG}N+Rc}UI^O%!F+dE|b< zwFb2nVaP#VV5IdOn7ODUWmEGkY_A~AIQ(u92m1N=i2V$K0DbLtJ)k936M0C{ZEYF$ z$SSpvNr8(Hq!`lfWD^?UtvPt$z)?3REq=lW*4MWmdPZp9@N3{N4tDfP8$EMHROvBl zIk>so2U}yJP|Gky++2jBLbdXcm6Zx0m}o=9LxB4_s*{2vVu~jm2h%E!FP4wz&!H`r zmXbPOJW}==Zuk346+$#>U2;o`)qR^vY$c(ta!J*Oy(A za8a>z`vpWu0kj6ynu>c6IwmPg?lLdJ@j{VGh<91<&WVc@)+$6J?-F~DSWa5S5|W*c zm8HzvWK70t{`@)a=8H-0Z=v1Afho<&p~2w^QNX4}mV3E^#s1X!y*Gq5+>X0)1+r!L z0c%Z((zzhVmA&o!$4*Pesp~1r8Y&h9u$p-cXiN-e&#Q<8A zt>%PCGDpX_uNJgy*i;JrNNfo_4U|Ws2`Cd!Xs;kS< z#k2v*6iOBhN8l?|0jh!es|X=+<;I{7cfVfI9drM4S0_+5LV2@cFOtX(9~LL8Swtm@ zntU%g89F_0wjZ|aA&T+K(BU+TcP=iMch=?QP zN37^Rd(T}Q*)%XL4G)8BtAVl?l1i*}X%*ePeX(u8#@c5rC%SB%ot?qmBW{)m)3W#S z_Ev1oW0uM$gwt^>(3vr_VGeI-ZXScJ1_;zR`mBXa)_7UH!kTsK+IVy^>gT3ZK%?0k zt}QK1G-u_B@aEUB8H3t`v{G*BENMG-jF&IvF;gllA7oRODBAL*E>S{m>A(PWcFB70 zgK}%2o!JnVgN44hnAzEB%a-DKNN~?wuFlcNe3%XEV+B8@=VoU^s4uIea}~!=RD5O_!t(ESK+r9z+5sk^l?-hA5KA2jPk$ zlWQ@9A{+2H!V)nc7fU>L@(jhQ54{qRSBzaj)svMERx|U8z%4SW9g@E=ubCoaMs7{u zeLiM+WQIkgaI!@rgAoWo5ROaO?!j{(dEkAv^1VhxpxliYXvQls&>$2Hk#-6{>^-Yz zZ;=$@uDa^8A-a#ga-|oJGNd{j+PYFeKvcuq8K_{?&TYj3SjvCQI=AqKc69||E+q(_ zy2CtydmDBnivq;|8Q4RN8jwygFY>bDpG83*PAJrILL933`pQ>xsNgH|HeVhmJ{d)n i0YpY}+yCF=BEP}IAn(gheV*V|l1z>E85SBipZgDkfxfo@ From e7e4270e084f8e614c1b16251f93851baf4c7496 Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 04:21:32 +0000 Subject: [PATCH 06/19] generate likes --- app/controllers/likes_controller.rb | 70 ++++++++++++++++++++++ app/models/follow_request.rb | 21 +++++++ app/models/like.rb | 24 ++++++++ app/models/user.rb | 22 +++++++ app/views/likes/_form.html.erb | 14 +++++ app/views/likes/_like.html.erb | 12 ++++ app/views/likes/_like.json.jbuilder | 2 + app/views/likes/edit.html.erb | 10 ++++ app/views/likes/index.html.erb | 14 +++++ app/views/likes/index.json.jbuilder | 1 + app/views/likes/new.html.erb | 9 +++ app/views/likes/show.html.erb | 10 ++++ app/views/likes/show.json.jbuilder | 1 + config/routes.rb | 1 + db/migrate/20250314041715_create_likes.rb | 10 ++++ db/schema.rb | 13 +++- erd.png | Bin 77747 -> 101043 bytes 17 files changed, 233 insertions(+), 1 deletion(-) create mode 100644 app/controllers/likes_controller.rb create mode 100644 app/models/like.rb create mode 100644 app/views/likes/_form.html.erb create mode 100644 app/views/likes/_like.html.erb create mode 100644 app/views/likes/_like.json.jbuilder create mode 100644 app/views/likes/edit.html.erb create mode 100644 app/views/likes/index.html.erb create mode 100644 app/views/likes/index.json.jbuilder create mode 100644 app/views/likes/new.html.erb create mode 100644 app/views/likes/show.html.erb create mode 100644 app/views/likes/show.json.jbuilder create mode 100644 db/migrate/20250314041715_create_likes.rb diff --git a/app/controllers/likes_controller.rb b/app/controllers/likes_controller.rb new file mode 100644 index 000000000..9acbe1290 --- /dev/null +++ b/app/controllers/likes_controller.rb @@ -0,0 +1,70 @@ +class LikesController < ApplicationController + before_action :set_like, only: %i[ show edit update destroy ] + + # GET /likes or /likes.json + def index + @likes = Like.all + end + + # GET /likes/1 or /likes/1.json + def show + end + + # GET /likes/new + def new + @like = Like.new + end + + # GET /likes/1/edit + def edit + end + + # POST /likes or /likes.json + def create + @like = Like.new(like_params) + + respond_to do |format| + if @like.save + format.html { redirect_to like_url(@like), notice: "Like was successfully created." } + format.json { render :show, status: :created, location: @like } + else + format.html { render :new, status: :unprocessable_entity } + format.json { render json: @like.errors, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT /likes/1 or /likes/1.json + def update + respond_to do |format| + if @like.update(like_params) + format.html { redirect_to like_url(@like), notice: "Like was successfully updated." } + format.json { render :show, status: :ok, location: @like } + else + format.html { render :edit, status: :unprocessable_entity } + format.json { render json: @like.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /likes/1 or /likes/1.json + def destroy + @like.destroy! + + respond_to do |format| + format.html { redirect_to likes_url, notice: "Like was successfully destroyed." } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_like + @like = Like.find(params[:id]) + end + + # Only allow a list of trusted parameters through. + def like_params + params.require(:like).permit(:fan_id, :photo_id) + end +end diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb index de84a55b2..d535f85e7 100644 --- a/app/models/follow_request.rb +++ b/app/models/follow_request.rb @@ -1,3 +1,24 @@ +# == Schema Information +# +# Table name: follow_requests +# +# id :bigint not null, primary key +# status :string default("pending") +# created_at :datetime not null +# updated_at :datetime not null +# recipient_id :bigint not null +# sender_id :bigint not null +# +# Indexes +# +# index_follow_requests_on_recipient_id (recipient_id) +# index_follow_requests_on_sender_id (sender_id) +# +# Foreign Keys +# +# fk_rails_... (recipient_id => users.id) +# fk_rails_... (sender_id => users.id) +# # app/models/follow_request.rb class FollowRequest < ApplicationRecord belongs_to :recipient, class_name: "User" diff --git a/app/models/like.rb b/app/models/like.rb new file mode 100644 index 000000000..53806dcdd --- /dev/null +++ b/app/models/like.rb @@ -0,0 +1,24 @@ +# == Schema Information +# +# Table name: likes +# +# id :bigint not null, primary key +# created_at :datetime not null +# updated_at :datetime not null +# fan_id :bigint not null +# photo_id :bigint not null +# +# Indexes +# +# index_likes_on_fan_id (fan_id) +# index_likes_on_photo_id (photo_id) +# +# Foreign Keys +# +# fk_rails_... (fan_id => users.id) +# fk_rails_... (photo_id => photos.id) +# +class Like < ApplicationRecord + belongs_to :fan, class_name: "User" + belongs_to :photo +end diff --git a/app/models/user.rb b/app/models/user.rb index 40d7fe18a..e0f05afad 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,3 +1,25 @@ +# == Schema Information +# +# Table name: users +# +# id :bigint not null, primary key +# comments_count :integer +# email :string default(""), not null +# encrypted_password :string default(""), not null +# likes_count :integer +# private :boolean +# remember_created_at :datetime +# reset_password_sent_at :datetime +# reset_password_token :string +# username :string +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_users_on_email (email) UNIQUE +# index_users_on_reset_password_token (reset_password_token) UNIQUE +# class User < ApplicationRecord # Devise modules, etc. diff --git a/app/views/likes/_form.html.erb b/app/views/likes/_form.html.erb new file mode 100644 index 000000000..3c5026035 --- /dev/null +++ b/app/views/likes/_form.html.erb @@ -0,0 +1,14 @@ + +<%= simple_form_for(@like) do |f| %> + <%= f.error_notification %> + <%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %> + +

+ +
+ <%= f.button :submit %> +
+<% end %> diff --git a/app/views/likes/_like.html.erb b/app/views/likes/_like.html.erb new file mode 100644 index 000000000..f10d1d01a --- /dev/null +++ b/app/views/likes/_like.html.erb @@ -0,0 +1,12 @@ +
+

+ Fan: + <%= like.fan_id %> +

+ +

+ Photo: + <%= like.photo_id %> +

+ +
diff --git a/app/views/likes/_like.json.jbuilder b/app/views/likes/_like.json.jbuilder new file mode 100644 index 000000000..f89aea4a0 --- /dev/null +++ b/app/views/likes/_like.json.jbuilder @@ -0,0 +1,2 @@ +json.extract! like, :id, :fan_id, :photo_id, :created_at, :updated_at +json.url like_url(like, format: :json) diff --git a/app/views/likes/edit.html.erb b/app/views/likes/edit.html.erb new file mode 100644 index 000000000..39beff900 --- /dev/null +++ b/app/views/likes/edit.html.erb @@ -0,0 +1,10 @@ +

Editing like

+ +<%= render "form", like: @like %> + +
+ +
+ <%= link_to "Show this like", @like %> | + <%= link_to "Back to likes", likes_path %> +
diff --git a/app/views/likes/index.html.erb b/app/views/likes/index.html.erb new file mode 100644 index 000000000..3032ac648 --- /dev/null +++ b/app/views/likes/index.html.erb @@ -0,0 +1,14 @@ +

<%= notice %>

+ +

Likes

+ +
+ <% @likes.each do |like| %> + <%= render like %> +

+ <%= link_to "Show this like", like %> +

+ <% end %> +
+ +<%= link_to "New like", new_like_path %> diff --git a/app/views/likes/index.json.jbuilder b/app/views/likes/index.json.jbuilder new file mode 100644 index 000000000..721d47627 --- /dev/null +++ b/app/views/likes/index.json.jbuilder @@ -0,0 +1 @@ +json.array! @likes, partial: "likes/like", as: :like diff --git a/app/views/likes/new.html.erb b/app/views/likes/new.html.erb new file mode 100644 index 000000000..706f8f9d8 --- /dev/null +++ b/app/views/likes/new.html.erb @@ -0,0 +1,9 @@ +

New like

+ +<%= render "form", like: @like %> + +
+ +
+ <%= link_to "Back to likes", likes_path %> +
diff --git a/app/views/likes/show.html.erb b/app/views/likes/show.html.erb new file mode 100644 index 000000000..b635317e8 --- /dev/null +++ b/app/views/likes/show.html.erb @@ -0,0 +1,10 @@ +

<%= notice %>

+ +<%= render @like %> + +
+ <%= link_to "Edit this like", edit_like_path(@like) %> | + <%= link_to "Back to likes", likes_path %> + + <%= button_to "Destroy this like", @like, method: :delete %> +
diff --git a/app/views/likes/show.json.jbuilder b/app/views/likes/show.json.jbuilder new file mode 100644 index 000000000..587277f0d --- /dev/null +++ b/app/views/likes/show.json.jbuilder @@ -0,0 +1 @@ +json.partial! "likes/like", like: @like diff --git a/config/routes.rb b/config/routes.rb index 9620e4f98..91d3315eb 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,4 +1,5 @@ Rails.application.routes.draw do + resources :likes resources :follow_requests resources :comments resources :photos diff --git a/db/migrate/20250314041715_create_likes.rb b/db/migrate/20250314041715_create_likes.rb new file mode 100644 index 000000000..e75656e5a --- /dev/null +++ b/db/migrate/20250314041715_create_likes.rb @@ -0,0 +1,10 @@ +class CreateLikes < ActiveRecord::Migration[7.0] + def change + create_table :likes do |t| + t.references :fan, null: false, foreign_key: { to_table: :users } + t.references :photo, null: false, foreign_key: true + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index b3c4040a7..5e27112d8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2025_03_14_041326) do +ActiveRecord::Schema[7.1].define(version: 2025_03_14_041715) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -33,6 +33,15 @@ t.index ["sender_id"], name: "index_follow_requests_on_sender_id" end + create_table "likes", force: :cascade do |t| + t.bigint "fan_id", null: false + t.bigint "photo_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["fan_id"], name: "index_likes_on_fan_id" + t.index ["photo_id"], name: "index_likes_on_photo_id" + end + create_table "photos", force: :cascade do |t| t.string "image" t.integer "comments_count", default: 0 @@ -64,5 +73,7 @@ add_foreign_key "comments", "users", column: "author_id" add_foreign_key "follow_requests", "users", column: "recipient_id" add_foreign_key "follow_requests", "users", column: "sender_id" + add_foreign_key "likes", "photos" + add_foreign_key "likes", "users", column: "fan_id" add_foreign_key "photos", "users", column: "owner_id" end diff --git a/erd.png b/erd.png index 846353b1c2378dfc84b59250240dfbca4379906a..6fd84e9ea401a89de9e5b4944dacbe0569b5527e 100644 GIT binary patch literal 101043 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 literal 101043 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 Sq{dTH(wm?^K1g@rw*LV Date: Fri, 14 Mar 2025 04:54:30 +0000 Subject: [PATCH 11/19] add photo scopes --- app/models/photo.rb | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/app/models/photo.rb b/app/models/photo.rb index 8ee9901c8..04661657c 100644 --- a/app/models/photo.rb +++ b/app/models/photo.rb @@ -1,24 +1,3 @@ -# == Schema Information -# -# Table name: photos -# -# id :bigint not null, primary key -# caption :text -# comments_count :integer default(0) -# image :string -# likes_count :integer default(0) -# created_at :datetime not null -# updated_at :datetime not null -# owner_id :bigint not null -# -# Indexes -# -# index_photos_on_owner_id (owner_id) -# -# Foreign Keys -# -# fk_rails_... (owner_id => users.id) -# # app/models/photo.rb class Photo < ApplicationRecord @@ -29,4 +8,8 @@ class Photo < ApplicationRecord validates :caption, presence: true validates :image, presence: true + + # Scopes + scope :past_week, -> { where(created_at: 1.week.ago..Time.current) } + scope :by_likes, -> { order(likes_count: :desc) } end From a596882abb0186ac03454719eb4f29e36d055d80 Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 04:57:17 +0000 Subject: [PATCH 12/19] Add enum to FollowRequest model and update User associations to use accepted scope --- app/models/follow_request.rb | 23 ++---------------- app/models/user.rb | 46 +++++++----------------------------- 2 files changed, 10 insertions(+), 59 deletions(-) diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb index b2f81264a..d400204aa 100644 --- a/app/models/follow_request.rb +++ b/app/models/follow_request.rb @@ -1,25 +1,6 @@ -# == Schema Information -# -# Table name: follow_requests -# -# id :bigint not null, primary key -# status :string default("pending") -# created_at :datetime not null -# updated_at :datetime not null -# recipient_id :bigint not null -# sender_id :bigint not null -# -# Indexes -# -# index_follow_requests_on_recipient_id (recipient_id) -# index_follow_requests_on_sender_id (sender_id) -# -# Foreign Keys -# -# fk_rails_... (recipient_id => users.id) -# fk_rails_... (sender_id => users.id) -# class FollowRequest < ApplicationRecord belongs_to :recipient, class_name: "User" belongs_to :sender, class_name: "User" + + enum status: { pending: "pending", rejected: "rejected", accepted: "accepted" } end diff --git a/app/models/user.rb b/app/models/user.rb index 8f5428c41..82ffcb080 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,43 +1,13 @@ -# == Schema Information -# -# Table name: users -# -# id :bigint not null, primary key -# comments_count :integer -# email :string default(""), not null -# encrypted_password :string default(""), not null -# likes_count :integer -# photos_count :integer -# private :boolean default(TRUE) -# remember_created_at :datetime -# reset_password_sent_at :datetime -# reset_password_token :string -# username :string -# created_at :datetime not null -# updated_at :datetime not null -# -# Indexes -# -# index_users_on_email (email) UNIQUE -# index_users_on_reset_password_token (reset_password_token) UNIQUE -# -# app/models/user.rb - class User < ApplicationRecord - # Devise modules, associations, and indirect associations... - has_many :comments, foreign_key: :author_id, dependent: :destroy - has_many :likes, foreign_key: :fan_id, dependent: :destroy - has_many :own_photos, foreign_key: :owner_id, class_name: "Photo", dependent: :destroy - has_many :sent_follow_requests, foreign_key: :sender_id, class_name: "FollowRequest", dependent: :destroy - has_many :accepted_sent_follow_requests, -> { where(status: "accepted") }, foreign_key: :sender_id, class_name: "FollowRequest" - has_many :received_follow_requests, foreign_key: :recipient_id, class_name: "FollowRequest", dependent: :destroy - has_many :accepted_received_follow_requests, -> { where(status: "accepted") }, foreign_key: :recipient_id, class_name: "FollowRequest" + # Existing associations... + has_many :sent_follow_requests, foreign_key: :sender_id, class_name: "FollowRequest" + has_many :accepted_sent_follow_requests, -> { accepted }, foreign_key: :sender_id, class_name: "FollowRequest" + + has_many :received_follow_requests, foreign_key: :recipient_id, class_name: "FollowRequest" + has_many :accepted_received_follow_requests, -> { accepted }, foreign_key: :recipient_id, class_name: "FollowRequest" + # Other indirect associations (leaders, followers, etc.) remain the same: has_many :leaders, through: :accepted_sent_follow_requests, source: :recipient has_many :followers, through: :accepted_received_follow_requests, source: :sender - has_many :liked_photos, through: :likes, source: :photo - has_many :feed, through: :leaders, source: :own_photos - has_many :discover, through: :leaders, source: :liked_photos - - validates :username, presence: true, uniqueness: true + # ... rest of your associations end From 11e34a1bb5be7c31ae63166c5e9a52977517113a Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 05:03:16 +0000 Subject: [PATCH 13/19] add own --- app/models/user.rb | 31 +++++++++++++---- lib/tasks/dev.rake | 83 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 105 insertions(+), 9 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 82ffcb080..34a61f549 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,13 +1,30 @@ class User < ApplicationRecord - # Existing associations... - has_many :sent_follow_requests, foreign_key: :sender_id, class_name: "FollowRequest" - has_many :accepted_sent_follow_requests, -> { accepted }, foreign_key: :sender_id, class_name: "FollowRequest" + devise :database_authenticatable, :registerable, + :recoverable, :rememberable, :validatable - has_many :received_follow_requests, foreign_key: :recipient_id, class_name: "FollowRequest" - has_many :accepted_received_follow_requests, -> { accepted }, foreign_key: :recipient_id, class_name: "FollowRequest" + # Direct associations + has_many :comments, foreign_key: :author_id, dependent: :destroy + has_many :likes, foreign_key: :fan_id, dependent: :destroy + + # FollowRequest associations + has_many :sent_follow_requests, foreign_key: :sender_id, class_name: "FollowRequest", dependent: :destroy + has_many :received_follow_requests, foreign_key: :recipient_id, class_name: "FollowRequest", dependent: :destroy + has_many :accepted_sent_follow_requests, -> { where(status: "accepted") }, + foreign_key: :sender_id, class_name: "FollowRequest" + has_many :accepted_received_follow_requests, -> { where(status: "accepted") }, + foreign_key: :recipient_id, class_name: "FollowRequest" - # Other indirect associations (leaders, followers, etc.) remain the same: + # Indirect associations has_many :leaders, through: :accepted_sent_follow_requests, source: :recipient has_many :followers, through: :accepted_received_follow_requests, source: :sender - # ... rest of your associations + has_many :liked_photos, through: :likes, source: :photo + + # **This is the missing association:** + has_many :own_photos, foreign_key: :owner_id, class_name: "Photo", dependent: :destroy + + # Additional indirect associations for feed and discover, if applicable + has_many :feed, through: :leaders, source: :own_photos + has_many :discover, through: :leaders, source: :liked_photos + + validates :username, presence: true, uniqueness: true end diff --git a/lib/tasks/dev.rake b/lib/tasks/dev.rake index ca4ae8ef4..7c034125b 100644 --- a/lib/tasks/dev.rake +++ b/lib/tasks/dev.rake @@ -1,3 +1,82 @@ -desc "Fill the database tables with some sample data" -task({ :sample_data => :environment }) do +# lib/tasks/dev.rake + +task sample_data: :environment do + p "Creating sample data..." + + # Only run in development! + if Rails.env.development? + FollowRequest.destroy_all + Comment.destroy_all + Like.destroy_all + Photo.destroy_all + User.destroy_all + end + + # Create 12 sample users + 12.times do + name = Faker::Name.first_name.downcase + User.create!( + email: "#{name}@example.com", + password: "password", + username: name, + private: [true, false].sample + ) + end + + p "There are now #{User.count} users." + + users = User.all + + # Create follow requests between every pair of users (skipping self) + users.each do |first_user| + users.each do |second_user| + next if first_user == second_user + # With 75% chance, create a follow request from first_user to second_user + if rand < 0.75 + first_user.sent_follow_requests.create!( + recipient: second_user, + status: FollowRequest.statuses.keys.sample + ) + end + # And also with 75% chance, create one in the reverse direction + if rand < 0.75 + second_user.sent_follow_requests.create!( + recipient: first_user, + status: FollowRequest.statuses.keys.sample + ) + end + end + end + + p "There are now #{FollowRequest.count} follow requests." + + # For each user, create 0-15 photos with random captions and images + users.each do |user| + rand(15).times do + photo = user.own_photos.create!( + caption: Faker::Quote.jack_handey, + image: "https://robohash.org/#{rand(9999)}" + ) + + # For each follower of the user, decide if they like or comment on the photo + user.followers.each do |follower| + # With 50% chance, add a like, but only if they haven't liked it already. + if rand < 0.5 && !photo.fans.include?(follower) + photo.likes.create!(fan: follower) + end + + # With 25% chance, add a comment by the follower on this photo. + if rand < 0.25 + photo.comments.create!( + body: Faker::Quote.jack_handey, + author: follower + ) + end + end + end + end + + p "There are now #{Photo.count} photos." + p "There are now #{Like.count} likes." + p "There are now #{Comment.count} comments." end From a5f3f98906985875fb2b74705d6ae575661dd800 Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 21:35:16 +0000 Subject: [PATCH 14/19] start ui work --- config/routes.rb | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 91d3315eb..e83228160 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,14 +1,13 @@ Rails.application.routes.draw do - resources :likes - resources :follow_requests - resources :comments - resources :photos - devise_for :users - # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html - - # Defines the root path route ("/") - # root "articles#index" - + # Root route is set first root "photos#index" + # Devise routes + devise_for :users + + # Resource routes (alphabetically ordered) + resources :comments + resources :follow_requests + resources :likes + resources :photos end From 5b511da92863aee3d0159806284b98bacf8e3bda Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 21:52:44 +0000 Subject: [PATCH 15/19] added navbar --- app/views/layouts/application.html.erb | 13 ++++++-- app/views/shared/_cdn_assets.html.erb | 10 ++++++ app/views/shared/_navbar.html.erb | 44 ++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 2 deletions(-) create mode 100644 app/views/shared/_cdn_assets.html.erb create mode 100644 app/views/shared/_navbar.html.erb diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 9a595c93a..17d7a3c24 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -5,12 +5,21 @@ <%= csrf_meta_tags %> <%= csp_meta_tag %> - + + + <%= render partial: "shared/cdn_assets" %> + <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> <%= javascript_importmap_tags %> - <%= yield %> + + <%= render partial: "shared/navbar" %> + + +

diff --git a/app/views/shared/_cdn_assets.html.erb b/app/views/shared/_cdn_assets.html.erb new file mode 100644 index 000000000..985bd7950 --- /dev/null +++ b/app/views/shared/_cdn_assets.html.erb @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/app/views/shared/_navbar.html.erb b/app/views/shared/_navbar.html.erb new file mode 100644 index 000000000..3e25911d7 --- /dev/null +++ b/app/views/shared/_navbar.html.erb @@ -0,0 +1,44 @@ + + + From 380e4ff42d49bf834ffd314434ebd9da419b659b Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 22:22:15 +0000 Subject: [PATCH 16/19] added comprehensive sample data task --- lib/tasks/dev.rake | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/tasks/dev.rake b/lib/tasks/dev.rake index 7c034125b..aa7aee096 100644 --- a/lib/tasks/dev.rake +++ b/lib/tasks/dev.rake @@ -1,9 +1,10 @@ # lib/tasks/dev.rake +desc "Fill the database tables with some sample data" task sample_data: :environment do p "Creating sample data..." + starting = Time.now - # Only run in development! if Rails.env.development? FollowRequest.destroy_all Comment.destroy_all @@ -18,6 +19,7 @@ task sample_data: :environment do User.create!( email: "#{name}@example.com", password: "password", + password_confirmation: "password", username: name, private: [true, false].sample ) @@ -38,7 +40,7 @@ task sample_data: :environment do status: FollowRequest.statuses.keys.sample ) end - # And also with 75% chance, create one in the reverse direction + # And with 75% chance, create one in the reverse direction if rand < 0.75 second_user.sent_follow_requests.create!( recipient: first_user, @@ -60,12 +62,12 @@ task sample_data: :environment do # For each follower of the user, decide if they like or comment on the photo user.followers.each do |follower| - # With 50% chance, add a like, but only if they haven't liked it already. + # With 50% chance, add a like (only if they haven't liked it already) if rand < 0.5 && !photo.fans.include?(follower) photo.likes.create!(fan: follower) end - # With 25% chance, add a comment by the follower on this photo. + # With 25% chance, add a comment by the follower on this photo if rand < 0.25 photo.comments.create!( body: Faker::Quote.jack_handey, @@ -79,4 +81,6 @@ task sample_data: :environment do p "There are now #{Photo.count} photos." p "There are now #{Like.count} likes." p "There are now #{Comment.count} comments." + + p "Sample data created in #{Time.now - starting} seconds." end From 1e9c03e4c747e828f15f1b7420f33bdc4960e8c4 Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 22:28:38 +0000 Subject: [PATCH 17/19] force sign in --- app/controllers/application_controller.rb | 1 + app/views/layouts/application.html.erb | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 09705d12a..6b4dcfa85 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,2 +1,3 @@ class ApplicationController < ActionController::Base + before_action :authenticate_user! end diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index 17d7a3c24..da960b57b 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -14,6 +14,14 @@ + + <% if notice %> +
<%= notice %>
+ <% end %> + <% if alert %> +
<%= alert %>
+ <% end %> + <%= render partial: "shared/navbar" %> From 59fbd138c984e152b85de7f2b9c8b84feeea7d95 Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 22:35:57 +0000 Subject: [PATCH 18/19] added dissmissable flash messages --- app/views/layouts/application.html.erb | 20 +++++++++----------- app/views/photos/index.html.erb | 1 - app/views/shared/_flash.html.erb | 5 +++++ app/views/shared/_navbar.html.erb | 14 ++++++++++---- 4 files changed, 24 insertions(+), 16 deletions(-) create mode 100644 app/views/shared/_flash.html.erb diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index da960b57b..d97e7a53a 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -6,7 +6,7 @@ <%= csrf_meta_tags %> <%= csp_meta_tag %> - + <%= render partial: "shared/cdn_assets" %> <%= stylesheet_link_tag "application", "data-turbo-track": "reload" %> @@ -14,19 +14,17 @@ - - <% if notice %> -
<%= notice %>
- <% end %> - <% if alert %> -
<%= alert %>
- <% end %> - - <%= render partial: "shared/navbar" %> -
+ <% if notice.present? %> + <%= render partial: "shared/flash", locals: { message: notice, css_class: "success" } %> + <% end %> + + <% if alert.present? %> + <%= render partial: "shared/flash", locals: { message: alert, css_class: "danger" } %> + <% end %> + <%= yield %>
diff --git a/app/views/photos/index.html.erb b/app/views/photos/index.html.erb index bfcfea758..127d6cf9d 100644 --- a/app/views/photos/index.html.erb +++ b/app/views/photos/index.html.erb @@ -1,4 +1,3 @@ -

<%= notice %>

Photos

diff --git a/app/views/shared/_flash.html.erb b/app/views/shared/_flash.html.erb new file mode 100644 index 000000000..46cfd77c5 --- /dev/null +++ b/app/views/shared/_flash.html.erb @@ -0,0 +1,5 @@ + + diff --git a/app/views/shared/_navbar.html.erb b/app/views/shared/_navbar.html.erb index 3e25911d7..4a5887398 100644 --- a/app/views/shared/_navbar.html.erb +++ b/app/views/shared/_navbar.html.erb @@ -1,8 +1,8 @@ -

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 From e5f7444d4f2c57b0158c6cdd6be3b06cd627df4d Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 04:40:00 +0000 Subject: [PATCH 07/19] add photos --- app/models/comment.rb | 18 +++++--------- app/models/like.rb | 21 ++++++---------- app/models/photo.rb | 24 +++++++------------ ..._add_counter_caches_to_users_and_photos.rb | 5 ++++ ...0250314043920_add_photos_count_to_users.rb | 5 ++++ 5 files changed, 32 insertions(+), 41 deletions(-) create mode 100644 db/migrate/20250314043604_add_counter_caches_to_users_and_photos.rb create mode 100644 db/migrate/20250314043920_add_photos_count_to_users.rb diff --git a/app/models/comment.rb b/app/models/comment.rb index d2fb2066c..15559c662 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -3,22 +3,16 @@ # Table name: comments # # id :bigint not null, primary key -# body :text not null +# body :text # created_at :datetime not null # updated_at :datetime not null # author_id :bigint not null # photo_id :bigint not null # -# Indexes -# -# index_comments_on_photo_id (photo_id) -# -# Foreign Keys -# -# fk_rails_... (author_id => users.id) -# fk_rails_... (photo_id => photos.id) -# class Comment < ApplicationRecord - belongs_to :author, class_name: "User" - belongs_to :photo + # We want to update users.comments_count whenever a comment is created or destroyed + belongs_to :author, class_name: "User", counter_cache: true + + # We also want to update photos.comments_count similarly + belongs_to :photo, counter_cache: true end diff --git a/app/models/like.rb b/app/models/like.rb index 53806dcdd..9f5782330 100644 --- a/app/models/like.rb +++ b/app/models/like.rb @@ -3,22 +3,15 @@ # Table name: likes # # id :bigint not null, primary key -# created_at :datetime not null -# updated_at :datetime not null # fan_id :bigint not null # photo_id :bigint not null -# -# Indexes -# -# index_likes_on_fan_id (fan_id) -# index_likes_on_photo_id (photo_id) -# -# Foreign Keys -# -# fk_rails_... (fan_id => users.id) -# fk_rails_... (photo_id => photos.id) +# created_at :datetime not null +# updated_at :datetime not null # class Like < ApplicationRecord - belongs_to :fan, class_name: "User" - belongs_to :photo + # When a Like is created/destroyed, update users.likes_count + belongs_to :fan, class_name: "User", counter_cache: true + + # Also update photos.likes_count + belongs_to :photo, counter_cache: true end diff --git a/app/models/photo.rb b/app/models/photo.rb index 5c1ced9c6..27d39376c 100644 --- a/app/models/photo.rb +++ b/app/models/photo.rb @@ -3,25 +3,19 @@ # Table name: photos # # id :bigint not null, primary key -# caption :text -# comments_count :integer default(0) # image :string +# caption :text # likes_count :integer default(0) +# comments_count :integer default(0) +# owner_id :bigint not null # created_at :datetime not null # updated_at :datetime not null -# owner_id :bigint not null # -# Indexes -# -# index_photos_on_owner_id (owner_id) -# -# Foreign Keys -# -# fk_rails_... (owner_id => users.id) -# -# app/models/photo.rb - class Photo < ApplicationRecord - belongs_to :owner, class_name: "User" - has_many :comments + # Bumps the users.photos_count if you have a column for that (owner's photos_count). + # Only do this if you actually have a "photos_count" column on users! + belongs_to :owner, class_name: "User", counter_cache: true + + has_many :comments, dependent: :destroy + has_many :likes, dependent: :destroy end diff --git a/db/migrate/20250314043604_add_counter_caches_to_users_and_photos.rb b/db/migrate/20250314043604_add_counter_caches_to_users_and_photos.rb new file mode 100644 index 000000000..1ea0117b3 --- /dev/null +++ b/db/migrate/20250314043604_add_counter_caches_to_users_and_photos.rb @@ -0,0 +1,5 @@ +class AddPhotosCountToUsers < ActiveRecord::Migration[7.0] + def change + add_column :users, :photos_count, :integer, default: 0 + end +end diff --git a/db/migrate/20250314043920_add_photos_count_to_users.rb b/db/migrate/20250314043920_add_photos_count_to_users.rb new file mode 100644 index 000000000..4b3501b81 --- /dev/null +++ b/db/migrate/20250314043920_add_photos_count_to_users.rb @@ -0,0 +1,5 @@ +class AddPhotosCountToUsers < ActiveRecord::Migration[7.1] + def change + add_column :users, :photos_count, :integer + end +end From 22a8d928473bc9bb45b8b72ee375bac13efc1d67 Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 04:44:32 +0000 Subject: [PATCH 08/19] Add inverse has_many associations for comments, follow_requests, likes, and photos --- app/models/comment.rb | 17 +++---------- app/models/follow_request.rb | 24 +----------------- app/models/like.rb | 13 ---------- app/models/photo.rb | 19 +++----------- app/models/user.rb | 48 ++++++++++-------------------------- 5 files changed, 21 insertions(+), 100 deletions(-) diff --git a/app/models/comment.rb b/app/models/comment.rb index 15559c662..11ee7f7fc 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -1,18 +1,7 @@ -# == Schema Information -# -# Table name: comments -# -# id :bigint not null, primary key -# body :text -# created_at :datetime not null -# updated_at :datetime not null -# author_id :bigint not null -# photo_id :bigint not null -# class Comment < ApplicationRecord - # We want to update users.comments_count whenever a comment is created or destroyed + # Each comment belongs to an author (which is a User) and updates users.comments_count belongs_to :author, class_name: "User", counter_cache: true - - # We also want to update photos.comments_count similarly + + # Each comment belongs to a photo and updates photos.comments_count belongs_to :photo, counter_cache: true end diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb index d535f85e7..d9d55f24f 100644 --- a/app/models/follow_request.rb +++ b/app/models/follow_request.rb @@ -1,26 +1,4 @@ -# == Schema Information -# -# Table name: follow_requests -# -# id :bigint not null, primary key -# status :string default("pending") -# created_at :datetime not null -# updated_at :datetime not null -# recipient_id :bigint not null -# sender_id :bigint not null -# -# Indexes -# -# index_follow_requests_on_recipient_id (recipient_id) -# index_follow_requests_on_sender_id (sender_id) -# -# Foreign Keys -# -# fk_rails_... (recipient_id => users.id) -# fk_rails_... (sender_id => users.id) -# -# app/models/follow_request.rb class FollowRequest < ApplicationRecord belongs_to :recipient, class_name: "User" - belongs_to :sender, class_name: "User" + belongs_to :sender, class_name: "User" end diff --git a/app/models/like.rb b/app/models/like.rb index 9f5782330..bca00a8b5 100644 --- a/app/models/like.rb +++ b/app/models/like.rb @@ -1,17 +1,4 @@ -# == Schema Information -# -# Table name: likes -# -# id :bigint not null, primary key -# fan_id :bigint not null -# photo_id :bigint not null -# created_at :datetime not null -# updated_at :datetime not null -# class Like < ApplicationRecord - # When a Like is created/destroyed, update users.likes_count belongs_to :fan, class_name: "User", counter_cache: true - - # Also update photos.likes_count belongs_to :photo, counter_cache: true end diff --git a/app/models/photo.rb b/app/models/photo.rb index 27d39376c..d5ec23390 100644 --- a/app/models/photo.rb +++ b/app/models/photo.rb @@ -1,21 +1,10 @@ -# == Schema Information -# -# Table name: photos -# -# id :bigint not null, primary key -# image :string -# caption :text -# likes_count :integer default(0) -# comments_count :integer default(0) -# owner_id :bigint not null -# created_at :datetime not null -# updated_at :datetime not null -# class Photo < ApplicationRecord - # Bumps the users.photos_count if you have a column for that (owner's photos_count). - # Only do this if you actually have a "photos_count" column on users! + # The owner is a User (with a custom foreign key and counter cache) belongs_to :owner, class_name: "User", counter_cache: true + # A photo can have many comments has_many :comments, dependent: :destroy + + # A photo can have many likes has_many :likes, dependent: :destroy end diff --git a/app/models/user.rb b/app/models/user.rb index e0f05afad..f7a9d56af 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,40 +1,18 @@ -# == Schema Information -# -# Table name: users -# -# id :bigint not null, primary key -# comments_count :integer -# email :string default(""), not null -# encrypted_password :string default(""), not null -# likes_count :integer -# private :boolean -# remember_created_at :datetime -# reset_password_sent_at :datetime -# reset_password_token :string -# username :string -# created_at :datetime not null -# updated_at :datetime not null -# -# Indexes -# -# index_users_on_email (email) UNIQUE -# index_users_on_reset_password_token (reset_password_token) UNIQUE -# class User < ApplicationRecord - # Devise modules, etc. + # Devise modules and other configurations… - # Photos, comments, etc. - has_many :own_photos, class_name: "Photo", foreign_key: "owner_id" + # A user creates many comments (using author_id, not user_id) + has_many :comments, foreign_key: :author_id, dependent: :destroy - # Follow requests this user SENT - has_many :sent_follow_requests, - class_name: "FollowRequest", - foreign_key: "sender_id", - dependent: :destroy + # Follow requests this user SENT (as sender) + has_many :sent_follow_requests, foreign_key: :sender_id, class_name: "FollowRequest", dependent: :destroy - # Follow requests this user RECEIVED - has_many :received_follow_requests, - class_name: "FollowRequest", - foreign_key: "recipient_id", - dependent: :destroy + # Follow requests this user RECEIVED (as recipient) + has_many :received_follow_requests, foreign_key: :recipient_id, class_name: "FollowRequest", dependent: :destroy + + # A user (as a fan) can like many photos + has_many :likes, foreign_key: :fan_id, dependent: :destroy + + # Photos owned by this user (note the custom method name) + has_many :own_photos, foreign_key: :owner_id, class_name: "Photo", dependent: :destroy end From 2e5debfe232ea1270542458e63b9572fc3fd6cdc Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 04:47:17 +0000 Subject: [PATCH 09/19] add indirect --- app/models/user.rb | 57 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index f7a9d56af..937f5591c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,18 +1,57 @@ -class User < ApplicationRecord - # Devise modules and other configurations… +# app/models/user.rb - # A user creates many comments (using author_id, not user_id) +class User < ApplicationRecord + # Devise modules and other configurations... + + # --------------------- + # Direct Associations: + # --------------------- + + # Comments created by this user (using author_id in comments table) has_many :comments, foreign_key: :author_id, dependent: :destroy - # Follow requests this user SENT (as sender) + # Likes created by this user (acting as fan) + has_many :likes, foreign_key: :fan_id, dependent: :destroy + + # Photos owned by this user + has_many :own_photos, foreign_key: :owner_id, class_name: "Photo", dependent: :destroy + + # Follow requests sent from this user has_many :sent_follow_requests, foreign_key: :sender_id, class_name: "FollowRequest", dependent: :destroy - # Follow requests this user RECEIVED (as recipient) + # Follow requests received by this user has_many :received_follow_requests, foreign_key: :recipient_id, class_name: "FollowRequest", dependent: :destroy - # A user (as a fan) can like many photos - has_many :likes, foreign_key: :fan_id, dependent: :destroy + # ------------------------------ + # Filtered Follow Request Scopes: + # ------------------------------ - # Photos owned by this user (note the custom method name) - has_many :own_photos, foreign_key: :owner_id, class_name: "Photo", dependent: :destroy + # Only follow requests sent that have been accepted + has_many :accepted_sent_follow_requests, -> { where(status: "accepted") }, + foreign_key: :sender_id, class_name: "FollowRequest" + + # Only follow requests received that have been accepted + has_many :accepted_received_follow_requests, -> { where(status: "accepted") }, + foreign_key: :recipient_id, class_name: "FollowRequest" + + # ---------------------- + # Indirect Associations: + # ---------------------- + + # Leaders: Users that this user is following (via accepted follow requests sent) + has_many :leaders, through: :accepted_sent_follow_requests, source: :recipient + + # Followers: Users that are following this user (via accepted follow requests received) + has_many :followers, through: :accepted_received_follow_requests, source: :sender + + # Photos liked by this user (via the Like model) + has_many :liked_photos, through: :likes, source: :photo + + # Feed: Photos posted by the leaders that this user follows. + # This retrieves the leaders' own_photos. + has_many :feed, through: :leaders, source: :own_photos + + # Discover: Photos liked by the leaders that this user follows. + # This retrieves the leaders' liked_photos. + has_many :discover, through: :leaders, source: :liked_photos end From c7c2a3ec041590abee7160eddd31b2bf9414a89c Mon Sep 17 00:00:00 2001 From: Joseph Fleming <162403379+josephrfleming@users.noreply.github.com> Date: Fri, 14 Mar 2025 04:53:25 +0000 Subject: [PATCH 10/19] Remove duplicate counter cache column additions from migration --- app/models/comment.rb | 27 ++++++- app/models/follow_request.rb | 21 ++++++ app/models/like.rb | 20 +++++ app/models/photo.rb | 32 ++++++-- app/models/user.rb | 70 +++++++----------- ..._add_counter_caches_to_users_and_photos.rb | 8 +- .../20250314044847_add_default_to_private.rb | 7 ++ db/schema.rb | 5 +- erd.png | Bin 101043 -> 83598 bytes 9 files changed, 136 insertions(+), 54 deletions(-) create mode 100644 db/migrate/20250314044847_add_default_to_private.rb diff --git a/app/models/comment.rb b/app/models/comment.rb index 11ee7f7fc..59b81cade 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -1,7 +1,28 @@ +# == Schema Information +# +# Table name: comments +# +# id :bigint not null, primary key +# body :text not null +# created_at :datetime not null +# updated_at :datetime not null +# author_id :bigint not null +# photo_id :bigint not null +# +# Indexes +# +# index_comments_on_photo_id (photo_id) +# +# Foreign Keys +# +# fk_rails_... (author_id => users.id) +# fk_rails_... (photo_id => photos.id) +# +# app/models/comment.rb + class Comment < ApplicationRecord - # Each comment belongs to an author (which is a User) and updates users.comments_count belongs_to :author, class_name: "User", counter_cache: true - - # Each comment belongs to a photo and updates photos.comments_count belongs_to :photo, counter_cache: true + + validates :body, presence: true end diff --git a/app/models/follow_request.rb b/app/models/follow_request.rb index d9d55f24f..b2f81264a 100644 --- a/app/models/follow_request.rb +++ b/app/models/follow_request.rb @@ -1,3 +1,24 @@ +# == Schema Information +# +# Table name: follow_requests +# +# id :bigint not null, primary key +# status :string default("pending") +# created_at :datetime not null +# updated_at :datetime not null +# recipient_id :bigint not null +# sender_id :bigint not null +# +# Indexes +# +# index_follow_requests_on_recipient_id (recipient_id) +# index_follow_requests_on_sender_id (sender_id) +# +# Foreign Keys +# +# fk_rails_... (recipient_id => users.id) +# fk_rails_... (sender_id => users.id) +# class FollowRequest < ApplicationRecord belongs_to :recipient, class_name: "User" belongs_to :sender, class_name: "User" diff --git a/app/models/like.rb b/app/models/like.rb index bca00a8b5..d7a03b761 100644 --- a/app/models/like.rb +++ b/app/models/like.rb @@ -1,3 +1,23 @@ +# == Schema Information +# +# Table name: likes +# +# id :bigint not null, primary key +# created_at :datetime not null +# updated_at :datetime not null +# fan_id :bigint not null +# photo_id :bigint not null +# +# Indexes +# +# index_likes_on_fan_id (fan_id) +# index_likes_on_photo_id (photo_id) +# +# Foreign Keys +# +# fk_rails_... (fan_id => users.id) +# fk_rails_... (photo_id => photos.id) +# class Like < ApplicationRecord belongs_to :fan, class_name: "User", counter_cache: true belongs_to :photo, counter_cache: true diff --git a/app/models/photo.rb b/app/models/photo.rb index d5ec23390..8ee9901c8 100644 --- a/app/models/photo.rb +++ b/app/models/photo.rb @@ -1,10 +1,32 @@ +# == Schema Information +# +# Table name: photos +# +# id :bigint not null, primary key +# caption :text +# comments_count :integer default(0) +# image :string +# likes_count :integer default(0) +# created_at :datetime not null +# updated_at :datetime not null +# owner_id :bigint not null +# +# Indexes +# +# index_photos_on_owner_id (owner_id) +# +# Foreign Keys +# +# fk_rails_... (owner_id => users.id) +# +# app/models/photo.rb + class Photo < ApplicationRecord - # The owner is a User (with a custom foreign key and counter cache) belongs_to :owner, class_name: "User", counter_cache: true - - # A photo can have many comments has_many :comments, dependent: :destroy - - # A photo can have many likes has_many :likes, dependent: :destroy + has_many :fans, through: :likes + + validates :caption, presence: true + validates :image, presence: true end diff --git a/app/models/user.rb b/app/models/user.rb index 937f5591c..8f5428c41 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,57 +1,43 @@ +# == Schema Information +# +# Table name: users +# +# id :bigint not null, primary key +# comments_count :integer +# email :string default(""), not null +# encrypted_password :string default(""), not null +# likes_count :integer +# photos_count :integer +# private :boolean default(TRUE) +# remember_created_at :datetime +# reset_password_sent_at :datetime +# reset_password_token :string +# username :string +# created_at :datetime not null +# updated_at :datetime not null +# +# Indexes +# +# index_users_on_email (email) UNIQUE +# index_users_on_reset_password_token (reset_password_token) UNIQUE +# # app/models/user.rb class User < ApplicationRecord - # Devise modules and other configurations... - - # --------------------- - # Direct Associations: - # --------------------- - - # Comments created by this user (using author_id in comments table) + # Devise modules, associations, and indirect associations... has_many :comments, foreign_key: :author_id, dependent: :destroy - - # Likes created by this user (acting as fan) has_many :likes, foreign_key: :fan_id, dependent: :destroy - - # Photos owned by this user has_many :own_photos, foreign_key: :owner_id, class_name: "Photo", dependent: :destroy - - # Follow requests sent from this user has_many :sent_follow_requests, foreign_key: :sender_id, class_name: "FollowRequest", dependent: :destroy - - # Follow requests received by this user + has_many :accepted_sent_follow_requests, -> { where(status: "accepted") }, foreign_key: :sender_id, class_name: "FollowRequest" has_many :received_follow_requests, foreign_key: :recipient_id, class_name: "FollowRequest", dependent: :destroy + has_many :accepted_received_follow_requests, -> { where(status: "accepted") }, foreign_key: :recipient_id, class_name: "FollowRequest" - # ------------------------------ - # Filtered Follow Request Scopes: - # ------------------------------ - - # Only follow requests sent that have been accepted - has_many :accepted_sent_follow_requests, -> { where(status: "accepted") }, - foreign_key: :sender_id, class_name: "FollowRequest" - - # Only follow requests received that have been accepted - has_many :accepted_received_follow_requests, -> { where(status: "accepted") }, - foreign_key: :recipient_id, class_name: "FollowRequest" - - # ---------------------- - # Indirect Associations: - # ---------------------- - - # Leaders: Users that this user is following (via accepted follow requests sent) has_many :leaders, through: :accepted_sent_follow_requests, source: :recipient - - # Followers: Users that are following this user (via accepted follow requests received) has_many :followers, through: :accepted_received_follow_requests, source: :sender - - # Photos liked by this user (via the Like model) has_many :liked_photos, through: :likes, source: :photo - - # Feed: Photos posted by the leaders that this user follows. - # This retrieves the leaders' own_photos. has_many :feed, through: :leaders, source: :own_photos - - # Discover: Photos liked by the leaders that this user follows. - # This retrieves the leaders' liked_photos. has_many :discover, through: :leaders, source: :liked_photos + + validates :username, presence: true, uniqueness: true end diff --git a/db/migrate/20250314043604_add_counter_caches_to_users_and_photos.rb b/db/migrate/20250314043604_add_counter_caches_to_users_and_photos.rb index 1ea0117b3..8f7255168 100644 --- a/db/migrate/20250314043604_add_counter_caches_to_users_and_photos.rb +++ b/db/migrate/20250314043604_add_counter_caches_to_users_and_photos.rb @@ -1,5 +1,9 @@ -class AddPhotosCountToUsers < ActiveRecord::Migration[7.0] +class AddCounterCachesToUsersAndPhotos < ActiveRecord::Migration[7.0] def change - add_column :users, :photos_count, :integer, default: 0 + # The following lines are commented out because the columns already exist: + # add_column :users, :comments_count, :integer, default: 0 + # add_column :users, :likes_count, :integer, default: 0 + # add_column :photos, :comments_count, :integer, default: 0 + # add_column :photos, :likes_count, :integer, default: 0 end end diff --git a/db/migrate/20250314044847_add_default_to_private.rb b/db/migrate/20250314044847_add_default_to_private.rb new file mode 100644 index 000000000..bed61220e --- /dev/null +++ b/db/migrate/20250314044847_add_default_to_private.rb @@ -0,0 +1,7 @@ +# db/migrate/XXXXXXXXXX_add_default_to_private.rb + +class AddDefaultToPrivate < ActiveRecord::Migration[7.0] + def change + change_column_default :users, :private, true + end +end diff --git a/db/schema.rb b/db/schema.rb index 5e27112d8..a4b8000f3 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2025_03_14_041715) do +ActiveRecord::Schema[7.1].define(version: 2025_03_14_044847) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -60,11 +60,12 @@ t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.string "username" - t.boolean "private" + t.boolean "private", default: true t.integer "likes_count" t.integer "comments_count" t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.integer "photos_count" t.index ["email"], name: "index_users_on_email", unique: true t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true end diff --git a/erd.png b/erd.png index 6fd84e9ea401a89de9e5b4944dacbe0569b5527e..aed87e5da74e936c58b52e63ad796d497f87b13d 100644 GIT binary patch literal 83598 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