mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2025-04-08 23:53:53 +02:00
(quality) add unique constraints in db
Also: code lint in SSO models
This commit is contained in:
parent
66a55b62d9
commit
6ae8c965f3
@ -41,10 +41,10 @@ class AuthProvider < ApplicationRecord
|
|||||||
provider = find_by(status: 'active')
|
provider = find_by(status: 'active')
|
||||||
return local if provider.nil?
|
return local if provider.nil?
|
||||||
|
|
||||||
return provider
|
provider
|
||||||
rescue ActiveRecord::StatementInvalid
|
rescue ActiveRecord::StatementInvalid
|
||||||
# we fall here on database creation because the table "active_providers" still does not exists at the moment
|
# we fall here on database creation because the table "active_providers" still does not exists at the moment
|
||||||
return local
|
local
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ class AuthProvider < ApplicationRecord
|
|||||||
|
|
||||||
parsed = /^([^-]+)-(.+)$/.match(strategy_name)
|
parsed = /^([^-]+)-(.+)$/.match(strategy_name)
|
||||||
ret = nil
|
ret = nil
|
||||||
all.each do |strategy|
|
all.find_each do |strategy|
|
||||||
if strategy.provider_type == parsed[1] && strategy.name.downcase.parameterize == parsed[2]
|
if strategy.provider_type == parsed[1] && strategy.name.downcase.parameterize == parsed[2]
|
||||||
ret = strategy
|
ret = strategy
|
||||||
break
|
break
|
||||||
@ -70,13 +70,13 @@ class AuthProvider < ApplicationRecord
|
|||||||
|
|
||||||
## Return the name that should be registered in OmniAuth for the corresponding strategy
|
## Return the name that should be registered in OmniAuth for the corresponding strategy
|
||||||
def strategy_name
|
def strategy_name
|
||||||
provider_type + '-' + name.downcase.parameterize
|
"#{provider_type}-#{name.downcase.parameterize}"
|
||||||
end
|
end
|
||||||
|
|
||||||
## Return the provider type name without the "Provider" part.
|
## Return the provider type name without the "Provider" part.
|
||||||
## eg. DatabaseProvider will return 'database'
|
## eg. DatabaseProvider will return 'database'
|
||||||
def provider_type
|
def provider_type
|
||||||
providable_type[0..-9].downcase
|
providable_type[0..-9]&.downcase
|
||||||
end
|
end
|
||||||
|
|
||||||
## Return the user's profile fields that are currently managed from the SSO
|
## Return the user's profile fields that are currently managed from the SSO
|
||||||
@ -84,7 +84,7 @@ class AuthProvider < ApplicationRecord
|
|||||||
def sso_fields
|
def sso_fields
|
||||||
fields = []
|
fields = []
|
||||||
auth_provider_mappings.each do |mapping|
|
auth_provider_mappings.each do |mapping|
|
||||||
fields.push(mapping.local_model + '.' + mapping.local_field)
|
fields.push("#{mapping.local_model}.#{mapping.local_field}")
|
||||||
end
|
end
|
||||||
fields
|
fields
|
||||||
end
|
end
|
||||||
@ -96,10 +96,10 @@ class AuthProvider < ApplicationRecord
|
|||||||
end
|
end
|
||||||
|
|
||||||
def safe_destroy
|
def safe_destroy
|
||||||
if status != 'active'
|
if status == 'active'
|
||||||
destroy
|
|
||||||
else
|
|
||||||
false
|
false
|
||||||
|
else
|
||||||
|
destroy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -3,6 +3,5 @@
|
|||||||
# OAuth2Provider is a special type of AuthProvider which provides authentication through an external SSO server using
|
# OAuth2Provider is a special type of AuthProvider which provides authentication through an external SSO server using
|
||||||
# the oAuth 2.0 protocol.
|
# the oAuth 2.0 protocol.
|
||||||
class OAuth2Provider < ApplicationRecord
|
class OAuth2Provider < ApplicationRecord
|
||||||
has_one :auth_provider, as: :providable
|
has_one :auth_provider, as: :providable, dependent: :destroy
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
# OpenIdConnectProvider is a special type of AuthProvider which provides authentication through an external SSO server using
|
# OpenIdConnectProvider is a special type of AuthProvider which provides authentication through an external SSO server using
|
||||||
# the OpenID Connect protocol.
|
# the OpenID Connect protocol.
|
||||||
class OpenIdConnectProvider < ApplicationRecord
|
class OpenIdConnectProvider < ApplicationRecord
|
||||||
has_one :auth_provider, as: :providable
|
has_one :auth_provider, as: :providable, dependent: :destroy
|
||||||
|
|
||||||
validates :issuer, presence: true
|
validates :issuer, presence: true
|
||||||
validates :client__identifier, presence: true
|
validates :client__identifier, presence: true
|
||||||
@ -28,8 +28,8 @@ class OpenIdConnectProvider < ApplicationRecord
|
|||||||
end
|
end
|
||||||
|
|
||||||
def client_config
|
def client_config
|
||||||
OpenIdConnectProvider.columns.map(&:name).filter { |n| n.start_with?('client__') }.map do |n|
|
OpenIdConnectProvider.columns.map(&:name).filter { |n| n.start_with?('client__') }.to_h do |n|
|
||||||
[n.sub('client__', ''), send(n)]
|
[n.sub('client__', ''), send(n)]
|
||||||
end.to_h
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
12
db/migrate/20230302120458_add_uniqueness_constraints.rb
Normal file
12
db/migrate/20230302120458_add_uniqueness_constraints.rb
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# Add uniqueness constraint at database level
|
||||||
|
class AddUniquenessConstraints < ActiveRecord::Migration[5.2]
|
||||||
|
def change
|
||||||
|
add_index :credits, %i[plan_id creditable_id creditable_type], unique: true
|
||||||
|
add_index :prices, %i[plan_id priceable_id priceable_type group_id duration], unique: true,
|
||||||
|
name: 'index_prices_on_plan_priceable_group_and_duration'
|
||||||
|
add_index :price_categories, :name, unique: true
|
||||||
|
add_index :auth_providers, :name, unique: true
|
||||||
|
end
|
||||||
|
end
|
@ -10,7 +10,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 2023_02_13_134954) do
|
ActiveRecord::Schema.define(version: 2023_03_02_120458) do
|
||||||
|
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "fuzzystrmatch"
|
enable_extension "fuzzystrmatch"
|
||||||
@ -122,6 +122,7 @@ ActiveRecord::Schema.define(version: 2023_02_13_134954) do
|
|||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", null: false
|
||||||
t.string "providable_type"
|
t.string "providable_type"
|
||||||
t.integer "providable_id"
|
t.integer "providable_id"
|
||||||
|
t.index ["name"], name: "index_auth_providers_on_name", unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "availabilities", id: :serial, force: :cascade do |t|
|
create_table "availabilities", id: :serial, force: :cascade do |t|
|
||||||
@ -163,10 +164,10 @@ ActiveRecord::Schema.define(version: 2023_02_13_134954) do
|
|||||||
|
|
||||||
create_table "cart_item_event_reservation_tickets", force: :cascade do |t|
|
create_table "cart_item_event_reservation_tickets", force: :cascade do |t|
|
||||||
t.integer "booked"
|
t.integer "booked"
|
||||||
t.bigint "event_price_category_id"
|
|
||||||
t.bigint "cart_item_event_reservation_id"
|
t.bigint "cart_item_event_reservation_id"
|
||||||
t.datetime "created_at", null: false
|
t.datetime "created_at", null: false
|
||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", null: false
|
||||||
|
t.bigint "event_price_category_id"
|
||||||
t.index ["cart_item_event_reservation_id"], name: "index_cart_item_tickets_on_cart_item_event_reservation"
|
t.index ["cart_item_event_reservation_id"], name: "index_cart_item_tickets_on_cart_item_event_reservation"
|
||||||
t.index ["event_price_category_id"], name: "index_cart_item_tickets_on_event_price_category"
|
t.index ["event_price_category_id"], name: "index_cart_item_tickets_on_event_price_category"
|
||||||
end
|
end
|
||||||
@ -287,6 +288,7 @@ ActiveRecord::Schema.define(version: 2023_02_13_134954) do
|
|||||||
t.integer "hours"
|
t.integer "hours"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
|
t.index ["plan_id", "creditable_id", "creditable_type"], name: "index_credits_on_plan_id_and_creditable_id_and_creditable_type", unique: true
|
||||||
t.index ["plan_id"], name: "index_credits_on_plan_id"
|
t.index ["plan_id"], name: "index_credits_on_plan_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -787,6 +789,8 @@ ActiveRecord::Schema.define(version: 2023_02_13_134954) do
|
|||||||
t.text "conditions"
|
t.text "conditions"
|
||||||
t.datetime "created_at", null: false
|
t.datetime "created_at", null: false
|
||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", null: false
|
||||||
|
t.index "btrim(lower((name)::text))", name: "index_price_categories_on_TRIM_BOTH_FROM_LOWER_name", unique: true
|
||||||
|
t.index ["name"], name: "index_price_categories_on_name", unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "prices", id: :serial, force: :cascade do |t|
|
create_table "prices", id: :serial, force: :cascade do |t|
|
||||||
@ -799,6 +803,7 @@ ActiveRecord::Schema.define(version: 2023_02_13_134954) do
|
|||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", null: false
|
||||||
t.integer "duration", default: 60
|
t.integer "duration", default: 60
|
||||||
t.index ["group_id"], name: "index_prices_on_group_id"
|
t.index ["group_id"], name: "index_prices_on_group_id"
|
||||||
|
t.index ["plan_id", "priceable_id", "priceable_type", "group_id", "duration"], name: "index_prices_on_plan_priceable_group_and_duration", unique: true
|
||||||
t.index ["plan_id"], name: "index_prices_on_plan_id"
|
t.index ["plan_id"], name: "index_prices_on_plan_id"
|
||||||
t.index ["priceable_type", "priceable_id"], name: "index_prices_on_priceable_type_and_priceable_id"
|
t.index ["priceable_type", "priceable_id"], name: "index_prices_on_priceable_type_and_priceable_id"
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user