diff --git a/app/interactors/log_user_session.rb b/app/interactors/log_user_session.rb index eed437e..428f58c 100644 --- a/app/interactors/log_user_session.rb +++ b/app/interactors/log_user_session.rb @@ -6,6 +6,7 @@ class LogUserSession def call Session.create!( account: context.user.account, + logged_at: context.user.current_sign_in_at, ip_address: context.user.current_sign_in_ip, ) end diff --git a/app/models/session.rb b/app/models/session.rb index d0bfaed..221d126 100644 --- a/app/models/session.rb +++ b/app/models/session.rb @@ -11,5 +11,7 @@ class Session < ApplicationRecord # Validations # ############### + validates :logged_at, presence: true + validates :ip_address, presence: true end diff --git a/db/migrate/20181129203927_initial_migration.rb b/db/migrate/20181129203927_initial_migration.rb index 45036c4..ee606bb 100644 --- a/db/migrate/20181129203927_initial_migration.rb +++ b/db/migrate/20181129203927_initial_migration.rb @@ -271,7 +271,8 @@ private t.references :account, null: false, index: true, foreign_key: true - t.string :ip_address, null: false + t.datetime :logged_at, null: false + t.string :ip_address, null: false end create_table :person_comments do |t| diff --git a/db/structure.sql b/db/structure.sql index 0bacb32..174f01d 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -737,6 +737,7 @@ CREATE TABLE public.sessions ( created_at timestamp(6) without time zone NOT NULL, updated_at timestamp(6) without time zone NOT NULL, account_id bigint NOT NULL, + logged_at timestamp without time zone NOT NULL, ip_address character varying NOT NULL, CONSTRAINT ip_address CHECK (public.is_good_small_text((ip_address)::text)) ); diff --git a/factories/sessions.rb b/factories/sessions.rb index 0a9820e..97909b0 100644 --- a/factories/sessions.rb +++ b/factories/sessions.rb @@ -4,6 +4,8 @@ FactoryBot.define do factory :some_session, class: Session do association :account, factory: :usual_account + logged_at { Faker::Time.backward.utc } + ip_address { Faker::Internet.ip_v4_address } trait :with_ipv6_address do diff --git a/spec/models/session_spec.rb b/spec/models/session_spec.rb index cb3c48f..b5170bb 100644 --- a/spec/models/session_spec.rb +++ b/spec/models/session_spec.rb @@ -11,6 +11,17 @@ RSpec.describe Session do it { is_expected.to validate_presence_of(:account).with_message(:required) } end + describe '#logged_at' do + def allow_value(*) + super.for :logged_at + end + + it { is_expected.to validate_presence_of :logged_at } + + it { is_expected.to allow_value Faker::Time.backward.utc } + it { is_expected.to allow_value Faker::Time.forward.utc } + end + describe '#ip_address' do it { is_expected.to validate_presence_of :ip_address } end