diff --git a/Gemfile b/Gemfile index 1e1c97673..cd72c7752 100644 --- a/Gemfile +++ b/Gemfile @@ -51,6 +51,7 @@ gem "kaminari" gem "leaflet-rails" gem "libretranslate"#, path: "../libretranslate" gem "lucide-rails" +gem "minitest", "< 6" # TODO Seb : Upgrade en Rails 8.1.2 gem "octokit" gem "omniauth-rails_csrf_protection", "~> 1" gem "omniauth-saml", "~> 2" diff --git a/Gemfile.lock b/Gemfile.lock index 072bb521d..24650180a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -119,14 +119,14 @@ GEM add_to_calendar (0.5.1) tzinfo (>= 1.1, < 3) tzinfo-data (~> 1.2020) - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) + addressable (2.8.8) + public_suffix (>= 2.0.2, < 8.0) annotaterb (4.20.0) activerecord (>= 6.0.0) activesupport (>= 6.0.0) aws-eventstream (1.4.0) - aws-partitions (1.1187.0) - aws-sdk-core (3.239.1) + aws-partitions (1.1209.0) + aws-sdk-core (3.241.4) aws-eventstream (~> 1, >= 1.3.0) aws-partitions (~> 1, >= 1.992.0) aws-sigv4 (~> 1.9) @@ -134,29 +134,29 @@ GEM bigdecimal jmespath (~> 1, >= 1.6.1) logger - aws-sdk-kms (1.118.0) - aws-sdk-core (~> 3, >= 3.239.1) + aws-sdk-kms (1.121.0) + aws-sdk-core (~> 3, >= 3.241.4) aws-sigv4 (~> 1.5) - aws-sdk-s3 (1.205.0) - aws-sdk-core (~> 3, >= 3.234.0) + aws-sdk-s3 (1.212.0) + aws-sdk-core (~> 3, >= 3.241.4) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.5) aws-sigv4 (1.12.1) aws-eventstream (~> 1, >= 1.0.2) - base64 (0.2.0) - bcrypt (3.1.20) + base64 (0.3.0) + bcrypt (3.1.21) benchmark (0.5.0) better_errors (2.10.1) erubi (>= 1.0.0) rack (>= 0.9.0) rouge (>= 1.0.0) - bigdecimal (3.3.1) + bigdecimal (4.0.1) bindex (0.8.1) binding_of_caller (1.0.1) debug_inspector (>= 1.2.0) - bootsnap (1.19.0) + bootsnap (1.21.1) msgpack (~> 1.2) - bootstrap (5.3.5) + bootstrap (5.3.8) popper_js (>= 2.11.8, < 3) bootstrap5-kaminari-views (0.0.1) kaminari (>= 0.13) @@ -167,10 +167,11 @@ GEM addressable (~> 2.3, >= 2.3.0) json (~> 2.1, >= 2.1.0) typhoeus (~> 1.0, >= 1.0.1) - bugsnag (6.28.0) + bugsnag (6.29.0) concurrent-ruby (~> 1.0) builder (3.3.0) - byebug (12.0.0) + byebug (13.0.0) + reline (>= 0.6.0) cancancan (3.3.0) capybara (3.40.0) addressable @@ -181,7 +182,7 @@ GEM rack-test (>= 0.6.3) regexp_parser (>= 1.5, < 3.0) xpath (~> 3.2) - caxlsx (4.4.0) + caxlsx (4.4.1) htmlentities (~> 4.3, >= 4.3.4) marcel (~> 1.0) nokogiri (~> 1.10, >= 1.10.4) @@ -196,14 +197,14 @@ GEM namae (~> 1.0) observer (< 1.0) open-uri (< 1.0) - citeproc-ruby (2.1.4) + citeproc-ruby (2.1.8) citeproc (~> 1.0, >= 1.0.9) csl (~> 2.0) observer (< 1.0) cocoon (1.2.15) - concurrent-ruby (1.3.5) - connection_pool (2.5.4) - countries (8.0.4) + concurrent-ruby (1.3.6) + connection_pool (3.0.2) + countries (8.1.0) unaccent (~> 0.3) country_select (11.0.0) countries (> 6.0, < 9.0) @@ -227,7 +228,7 @@ GEM metainspector nokogiri rails-html-sanitizer - date (3.5.0) + date (3.5.1) debug_inspector (1.2.0) devise (4.9.4) bcrypt (~> 3.0) @@ -245,7 +246,7 @@ GEM encryptor (3.0.0) enum_help (0.0.20) activesupport (>= 3.0.0) - erb (6.0.0) + erb (6.0.1) erubi (1.13.1) et-orbi (1.4.0) tzinfo @@ -264,28 +265,28 @@ GEM http-cookie (>= 1.0.0) faraday-encoding (0.0.6) faraday - faraday-follow_redirects (0.4.0) + faraday-follow_redirects (0.5.0) faraday (>= 1, < 3) faraday-gzip (2.0.1) faraday (>= 1.0) zlib (~> 3.0) - faraday-http-cache (2.5.1) + faraday-http-cache (2.6.1) faraday (>= 0.8) faraday-multipart (1.0.4) multipart-post (~> 2) faraday-net_http (3.4.2) net-http (~> 0.5) - faraday-retry (2.3.2) + faraday-retry (2.4.0) faraday (~> 2.0) fastimage (2.4.0) - ffi (1.17.2-arm64-darwin) - ffi (1.17.2-x86_64-darwin) - ffi (1.17.2-x86_64-linux-gnu) + ffi (1.17.3-arm64-darwin) + ffi (1.17.3-x86_64-darwin) + ffi (1.17.3-x86_64-linux-gnu) figaro (1.3.0) thor (>= 0.14.0, < 2) font-awesome-sass (6.7.2) sassc (~> 2.0) - forwardable (1.3.3) + forwardable (1.4.0) fugit (1.12.1) et-orbi (~> 1.4) raabro (~> 1.4) @@ -306,26 +307,26 @@ GEM geocoder (1.8.6) base64 (>= 0.1.0) csv (>= 3.0.0) - gitlab (6.0.0) - base64 (~> 0.2.0) + gitlab (6.1.0) + base64 httparty (~> 0.20) terminal-table (>= 1.5.1) globalid (1.3.0) activesupport (>= 6.1) - good_job (4.12.1) + good_job (4.13.1) activejob (>= 6.1.0) activerecord (>= 6.1.0) concurrent-ruby (>= 1.3.1) fugit (>= 1.11.0) railties (>= 6.1.0) thor (>= 1.0.0) - google-protobuf (4.33.1-arm64-darwin) + google-protobuf (4.33.4-arm64-darwin) bigdecimal rake (>= 13) - google-protobuf (4.33.1-x86_64-darwin) + google-protobuf (4.33.4-x86_64-darwin) bigdecimal rake (>= 13) - google-protobuf (4.33.1-x86_64-linux-gnu) + google-protobuf (4.33.4-x86_64-linux-gnu) bigdecimal rake (>= 13) hal_openscience (0.1.0) @@ -333,17 +334,18 @@ GEM net-http open-uri hashdiff (1.2.1) - hashie (5.0.0) + hashie (5.1.0) + logger htmlentities (4.4.2) http-cookie (1.1.0) domain_name (~> 0.5) - httparty (0.23.2) + httparty (0.24.2) csv mini_mime (>= 1.0.0) multi_xml (>= 0.5.2) httpclient (2.9.0) mutex_m - i18n (1.14.7) + i18n (1.14.8) concurrent-ruby (~> 1.0) i18n_data (0.17.1) simple_po_parser (~> 1.1) @@ -355,8 +357,8 @@ GEM ruby-vips (>= 2.0.17, < 3) invisible_captcha (2.3.0) rails (>= 5.2) - io-console (0.8.1) - irb (1.15.3) + io-console (0.8.2) + irb (1.16.0) pp (>= 0.6.0) rdoc (>= 4.0.0) reline (>= 0.4.2) @@ -370,10 +372,10 @@ GEM thor (>= 0.14, < 2.0) jsbundling-rails (1.3.1) railties (>= 6.0.0) - json (2.16.0) - json-schema (6.0.0) + json (2.18.0) + json-schema (6.1.0) addressable (~> 2.8) - bigdecimal (~> 3.1) + bigdecimal (>= 3.1, < 5) jwt (3.1.2) base64 kamifusen (1.13.2) @@ -398,14 +400,15 @@ GEM json net-http open-uri - listen (3.9.0) + listen (3.10.0) + logger rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) logger (1.7.0) - loofah (2.24.1) + loofah (2.25.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) - lucide-rails (0.7.1) + lucide-rails (0.7.3) railties (>= 4.1.0) mail (2.9.0) logger @@ -430,18 +433,18 @@ GEM mini_magick (5.3.1) logger mini_mime (1.1.5) - minitest (5.26.2) + minitest (5.27.0) msgpack (1.8.0) - multi_xml (0.7.2) - bigdecimal (~> 3.1) + multi_xml (0.8.1) + bigdecimal (>= 3.1, < 5) multipart-post (2.4.1) mutex_m (0.3.0) namae (1.2.0) racc (~> 1.7) nesty (1.0.2) - net-http (0.8.0) + net-http (0.9.1) uri (>= 0.11.1) - net-imap (0.5.12) + net-imap (0.6.2) date net-protocol net-pop (0.1.2) @@ -499,10 +502,10 @@ GEM activerecord (>= 7, < 8.2) pexels (0.5.0) requests (~> 1.0.2) - pg (1.6.2-arm64-darwin) - pg (1.6.2-x86_64-darwin) - pg (1.6.2-x86_64-linux) - pg_query (6.1.0) + pg (1.6.3-arm64-darwin) + pg (1.6.3-x86_64-darwin) + pg (1.6.3-x86_64-linux) + pg_query (6.2.1) google-protobuf (>= 3.25.3) pghero (3.7.0) activerecord (>= 7.1) @@ -510,11 +513,11 @@ GEM pp (0.6.3) prettyprint prettyprint (0.2.0) - psych (5.2.6) + psych (5.3.1) date stringio - public_suffix (6.0.2) - puma (7.1.0) + public_suffix (7.0.2) + puma (7.2.0) nio4r (~> 2.0) raabro (1.4.0) racc (1.8.1) @@ -531,7 +534,7 @@ GEM rack-test (2.2.0) rack (>= 1.3) rack-timeout (0.7.0) - rackup (2.2.1) + rackup (2.3.1) rack (>= 3) rails (8.0.4) actioncable (= 8.0.4) @@ -575,13 +578,13 @@ GEM ffi (~> 1.0) rbnacl (7.1.2) ffi (~> 1) - rdoc (6.15.1) + rdoc (7.1.0) erb psych (>= 4.0.0) tsort redis (5.4.1) redis-client (>= 0.22.0) - redis-client (0.26.1) + redis-client (0.26.3) connection_pool regexp_parser (2.11.3) reline (0.6.3) @@ -596,7 +599,7 @@ GEM nokogiri (~> 1) rubyzip (>= 1.3.0, < 3.0.0) rotp (6.3.0) - rouge (4.6.1) + rouge (4.7.0) rspec-core (3.13.6) rspec-support (~> 3.13.0) rspec-expectations (3.13.5) @@ -632,7 +635,7 @@ GEM ruby-saml (1.18.1) nokogiri (>= 1.13.10) rexml - ruby-vips (2.2.5) + ruby-vips (2.3.0) ffi (~> 1.12) logger rubyzip (2.4.1) @@ -658,10 +661,10 @@ GEM set (1.1.2) simple-navigation (4.4.0) activesupport (>= 2.3.2) - simple_form (5.4.0) + simple_form (5.4.1) actionpack (>= 7.0) activemodel (>= 7.0) - simple_form_bs5_file_input (0.2.1) + simple_form_bs5_file_input (0.3.0) rails simple_form simple_form_password_with_hints (0.0.10) @@ -687,37 +690,36 @@ GEM actionpack (>= 6.1) activesupport (>= 6.1) sprockets (>= 3.0.0) - stringio (3.1.8) + stringio (3.2.0) sugar-high (0.7.3) sweetloader (0.1.6) activesupport (>= 3.0.1) i18n terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) - thor (1.4.0) - tilt (2.6.1) - time (0.4.1) + thor (1.5.0) + tilt (2.7.0) + time (0.4.2) date - timeout (0.4.4) + timeout (0.6.0) tsort (0.2.0) typhoeus (1.5.0) ethon (>= 0.9.0, < 0.16.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - tzinfo-data (1.2025.2) + tzinfo-data (1.2025.3) tzinfo (>= 1.0.0) unaccent (0.4.0) unicode-display_width (3.2.0) unicode-emoji (~> 4.1) - unicode-emoji (4.1.0) + unicode-emoji (4.2.0) unsplash (3.1.1) faraday-multipart (~> 1.0.4) httparty (~> 0.20) oauth2 (>= 2.0.8) uri (1.1.1) useragent (0.16.11) - vcr (6.3.1) - base64 + vcr (6.4.0) version_gem (1.1.9) vimeo (1.5.4) httparty (>= 0.4.5) @@ -747,7 +749,7 @@ GEM websocket-extensions (0.1.5) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.7.3) + zeitwerk (2.7.4) zlib (3.2.2) PLATFORMS @@ -809,6 +811,7 @@ DEPENDENCIES libretranslate listen (~> 3.3) lucide-rails + minitest (< 6) mutex_m (~> 0.3.0) octokit omniauth-rails_csrf_protection (~> 1) diff --git a/app/models/university/organization.rb b/app/models/university/organization.rb index 333b6371b..0c944c878 100644 --- a/app/models/university/organization.rb +++ b/app/models/university/organization.rb @@ -9,6 +9,9 @@ # country :string # deleted_at :datetime # email :string +# is_laboratory :boolean default(FALSE) +# is_location :boolean default(FALSE) +# is_school :boolean default(FALSE) # kind :integer default("company") # latitude :float # longitude :float @@ -46,6 +49,7 @@ class University::Organization < ApplicationRecord include Sanitizable include Searchable include WithCountry + include WithFacets include WithGeolocation include WithKind include WithOpenApi diff --git a/app/models/university/organization/localization/laboratory.rb b/app/models/university/organization/localization/laboratory.rb new file mode 100644 index 000000000..0b327e0fd --- /dev/null +++ b/app/models/university/organization/localization/laboratory.rb @@ -0,0 +1,72 @@ +# == Schema Information +# +# Table name: university_organization_localizations +# +# id :uuid not null, primary key +# address_additional :string +# address_name :string +# deleted_at :datetime +# featured_image_alt :string +# featured_image_credit :text +# linkedin :string +# long_name :string +# mastodon :string +# meta_description :text +# migration_identifier :string +# name :string +# published :boolean default(TRUE) +# published_at :datetime +# slug :string +# summary :text +# text :text +# twitter :string +# url :string +# created_at :datetime not null +# updated_at :datetime not null +# about_id :uuid uniquely indexed => [language_id], indexed +# language_id :uuid uniquely indexed => [about_id], indexed +# university_id :uuid indexed +# +# Indexes +# +# idx_on_about_id_language_id_eb921fd47b (about_id,language_id) UNIQUE +# index_university_organization_localizations_on_about_id (about_id) +# index_university_organization_localizations_on_language_id (language_id) +# index_university_organization_localizations_on_university_id (university_id) +# +# Foreign Keys +# +# fk_rails_19fb4f0718 (about_id => university_organizations.id) +# fk_rails_4b46ee9073 (language_id => languages.id) +# fk_rails_ba221edb00 (university_id => universities.id) +# +class University::Organization::Localization::Laboratory < University::Organization::Localization + def self.polymorphic_name + 'University::Organization::Localization::Laboratory' + end + + def git_path_relative + "laboratories/#{slug}/_index.html" + end + + def template_static + "admin/university/organizations/laboratories/static" + end + + def dependencies + [ + organization_l10n, + organization + ] + end + + def references + # TODO + end + + def static_localization_key + # so we don't mess with the University::Organization::Localization static_localization_key + "#{about.class.polymorphic_name.parameterize}-laboratory-#{self.about_id}" + end + +end diff --git a/app/models/university/organization/localization/location.rb b/app/models/university/organization/localization/location.rb new file mode 100644 index 000000000..af3c248fa --- /dev/null +++ b/app/models/university/organization/localization/location.rb @@ -0,0 +1,72 @@ +# == Schema Information +# +# Table name: university_organization_localizations +# +# id :uuid not null, primary key +# address_additional :string +# address_name :string +# deleted_at :datetime +# featured_image_alt :string +# featured_image_credit :text +# linkedin :string +# long_name :string +# mastodon :string +# meta_description :text +# migration_identifier :string +# name :string +# published :boolean default(TRUE) +# published_at :datetime +# slug :string +# summary :text +# text :text +# twitter :string +# url :string +# created_at :datetime not null +# updated_at :datetime not null +# about_id :uuid uniquely indexed => [language_id], indexed +# language_id :uuid uniquely indexed => [about_id], indexed +# university_id :uuid indexed +# +# Indexes +# +# idx_on_about_id_language_id_eb921fd47b (about_id,language_id) UNIQUE +# index_university_organization_localizations_on_about_id (about_id) +# index_university_organization_localizations_on_language_id (language_id) +# index_university_organization_localizations_on_university_id (university_id) +# +# Foreign Keys +# +# fk_rails_19fb4f0718 (about_id => university_organizations.id) +# fk_rails_4b46ee9073 (language_id => languages.id) +# fk_rails_ba221edb00 (university_id => universities.id) +# +class University::Organization::Localization::Location < University::Organization::Localization + def self.polymorphic_name + 'University::Organization::Localization::Location' + end + + def git_path_relative + "locations/#{slug}/_index.html" + end + + def template_static + "admin/university/organizations/locations/static" + end + + def dependencies + [ + organization_l10n, + organization + ] + end + + def references + # TODO + end + + def static_localization_key + # so we don't mess with the University::Organization::Localization static_localization_key + "#{about.class.polymorphic_name.parameterize}-location-#{self.about_id}" + end + +end diff --git a/app/models/university/organization/localization/school.rb b/app/models/university/organization/localization/school.rb new file mode 100644 index 000000000..6e96a9bba --- /dev/null +++ b/app/models/university/organization/localization/school.rb @@ -0,0 +1,72 @@ +# == Schema Information +# +# Table name: university_organization_localizations +# +# id :uuid not null, primary key +# address_additional :string +# address_name :string +# deleted_at :datetime +# featured_image_alt :string +# featured_image_credit :text +# linkedin :string +# long_name :string +# mastodon :string +# meta_description :text +# migration_identifier :string +# name :string +# published :boolean default(TRUE) +# published_at :datetime +# slug :string +# summary :text +# text :text +# twitter :string +# url :string +# created_at :datetime not null +# updated_at :datetime not null +# about_id :uuid uniquely indexed => [language_id], indexed +# language_id :uuid uniquely indexed => [about_id], indexed +# university_id :uuid indexed +# +# Indexes +# +# idx_on_about_id_language_id_eb921fd47b (about_id,language_id) UNIQUE +# index_university_organization_localizations_on_about_id (about_id) +# index_university_organization_localizations_on_language_id (language_id) +# index_university_organization_localizations_on_university_id (university_id) +# +# Foreign Keys +# +# fk_rails_19fb4f0718 (about_id => university_organizations.id) +# fk_rails_4b46ee9073 (language_id => languages.id) +# fk_rails_ba221edb00 (university_id => universities.id) +# +class University::Organization::Localization::School < University::Organization::Localization + def self.polymorphic_name + 'University::Organization::Localization::School' + end + + def git_path_relative + "schools/#{slug}/_index.html" + end + + def template_static + "admin/university/organizations/schools/static" + end + + def dependencies + [ + organization_l10n, + organization + ] + end + + def references + # TODO + end + + def static_localization_key + # so we don't mess with the University::Organization::Localization static_localization_key + "#{about.class.polymorphic_name.parameterize}-school-#{self.about_id}" + end + +end diff --git a/app/models/university/organization/with_facets.rb b/app/models/university/organization/with_facets.rb new file mode 100644 index 000000000..fc71b0031 --- /dev/null +++ b/app/models/university/organization/with_facets.rb @@ -0,0 +1,17 @@ +module University::Organization::WithFacets + extend ActiveSupport::Concern + + included do + LIST_OF_FACETS = [ + :location, + :school, + :laboratory + ].freeze + + scope :locations, -> { where(is_location: true) } + scope :schools, -> { where(is_school: true) } + scope :laboratories, -> { where(is_laboratory: true) } + # Filters + scope :for_facet, -> (facet, language = nil) { where("is_#{facet}": true) } + end +end \ No newline at end of file diff --git a/app/models/university/person/with_facets.rb b/app/models/university/person/with_facets.rb index d73e7585f..e15f87d5d 100644 --- a/app/models/university/person/with_facets.rb +++ b/app/models/university/person/with_facets.rb @@ -15,29 +15,8 @@ module University::Person::WithFacets scope :teachers, -> { where(is_teacher: true) } scope :researchers, -> { where(is_researcher: true) } scope :alumni, -> { where(is_alumnus: true) } - scope :with_habilitation, -> { where(habilitation: true) } - scope :for_facet, -> (facet, language = nil) { where("is_#{facet}": true) } - end - - def facets - LIST_OF_FACETS.reject do |facet| - !public_send("is_#{facet}") - end - end - - def administrator_facets - @administrator_facets ||= University::Person::Localization::Administrator.where(id: localization_ids) - end - def author_facets - @author_facets ||= University::Person::Localization::Author.where(id: localization_ids) - end - - def researcher_facets - @researcher_facets ||= University::Person::Localization::Researcher.where(id: localization_ids) - end - - def teacher_facets - @teacher_facets ||= University::Person::Localization::Teacher.where(id: localization_ids) + # Filters + scope :for_facet, -> (facet, language = nil) { where("is_#{facet}": true) } end end \ No newline at end of file diff --git a/app/models/university/person/with_realm_research.rb b/app/models/university/person/with_realm_research.rb index 2428db0ce..672c9367b 100644 --- a/app/models/university/person/with_realm_research.rb +++ b/app/models/university/person/with_realm_research.rb @@ -40,6 +40,7 @@ module University::Person::WithRealmResearch through: :research_journal_papers, source: :websites + scope :with_habilitation, -> { where(habilitation: true) } scope :with_hal_identifier, -> { where.not(hal_form_identifier: [nil,'']) } end diff --git a/app/services/migrations/organizations.rb b/app/services/migrations/organizations.rb new file mode 100644 index 000000000..0b3b288d2 --- /dev/null +++ b/app/services/migrations/organizations.rb @@ -0,0 +1,24 @@ +class Migrations::Organizations + def self.migrate + puts 'Identifying organizations to merge' + University.find_each do |university| + locations = university.locations + schools = university.schools + laboratories = university.laboratories + next if schools.none? && laboratories.none? && locations.none? + puts university + puts '--- locations' + locations.each do |location| + puts "#{location.original_localization} — #{location.id}" + end + puts '--- schools' + schools.each do |school| + puts "#{school.original_localization} — #{school.id}" + end + puts '--- laboratories' + laboratories.each do |laboratory| + puts "#{laboratory.original_localization} — #{laboratory.id}" + end + end + end +end \ No newline at end of file diff --git a/db/migrate/20260119090426_add_booleans_to_university_organization.rb b/db/migrate/20260119090426_add_booleans_to_university_organization.rb new file mode 100644 index 000000000..0421a7f5c --- /dev/null +++ b/db/migrate/20260119090426_add_booleans_to_university_organization.rb @@ -0,0 +1,7 @@ +class AddBooleansToUniversityOrganization < ActiveRecord::Migration[8.0] + def change + add_column :university_organizations, :is_school, :boolean, default: false + add_column :university_organizations, :is_location, :boolean, default: false + add_column :university_organizations, :is_laboratory, :boolean, default: false + end +end diff --git a/db/schema.rb b/db/schema.rb index 367f7773e..e0d2b73a9 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[8.0].define(version: 2026_01_14_132529) do +ActiveRecord::Schema[8.0].define(version: 2026_01_19_090426) do # These are extensions that must be enabled in order to support this database enable_extension "pg_catalog.plpgsql" enable_extension "pg_stat_statements" @@ -2292,6 +2292,9 @@ t.uuid "created_by_id" t.string "bodyclass" t.datetime "deleted_at" + t.boolean "is_school", default: false + t.boolean "is_location", default: false + t.boolean "is_laboratory", default: false t.index ["created_by_id"], name: "index_university_organizations_on_created_by_id" t.index ["university_id"], name: "index_university_organizations_on_university_id" end