mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-16 22:36:21 +00:00
70 lines
2.2 KiB
Ruby
70 lines
2.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
# Crea la tabla de sitios y las relaciones con Usuaries e Invitades
|
|
class CreateSitios < ActiveRecord::Migration[5.2]
|
|
def up
|
|
# Tabla de Sitios
|
|
create_table :sites do |t|
|
|
t.timestamps
|
|
t.string :name, index: true, unique: true
|
|
end
|
|
|
|
# Relación HABTM entre Sitios y Usuaries
|
|
create_table :sites_usuaries, id: false do |t|
|
|
t.belongs_to :site, index: true
|
|
t.belongs_to :usuarie, index: true
|
|
end
|
|
|
|
# Relación HABTM entre Sitios e Invitades
|
|
create_table :invitades_sites, id: false do |t|
|
|
t.belongs_to :site, index: true
|
|
t.belongs_to :usuarie, index: true
|
|
end
|
|
|
|
## Crear las relaciones correspondientes
|
|
#
|
|
# Obtener todos los sitios (estamos moviendo funcionalidad previa de
|
|
# Site
|
|
sites = Pathname.new(Site.site_path)
|
|
.children.map(&:expand_path).map(&:to_s)
|
|
|
|
sites.each do |dir|
|
|
site = Site.create name: File.basename(dir)
|
|
|
|
file = File.join([dir, '.usuarias'])
|
|
usuarias = File.exist?(file) ? File.read(file).split("\n").uniq : []
|
|
|
|
file = File.join([dir, '.invitadxs'])
|
|
invitadxs = File.exist?(file) ? File.read(file).split("\n").uniq : []
|
|
|
|
# Tenemos que crear a les usuaries porque no existían en ningún
|
|
# lado
|
|
usuarias.each do |email|
|
|
usuarie = Usuarie.find_by(email: email)
|
|
usuarie ||= Usuarie.create(email: email,
|
|
password: SecureRandom.hex,
|
|
confirmed_at: Date.today)
|
|
|
|
sql = "insert into sites_usuaries (site_id, usuarie_id)
|
|
values (#{site.id}, #{usuarie.id});"
|
|
ActiveRecord::Base.connection.execute(sql)
|
|
end
|
|
|
|
invitadxs.each do |email|
|
|
usuarie = Usuarie.find_by(email: email)
|
|
usuarie ||= Usuarie.create(email: email,
|
|
password: SecureRandom.hex,
|
|
confirmed_at: Date.today)
|
|
sql = "insert into invitades_sites (site_id, usuarie_id)
|
|
values (#{site.id}, #{usuarie.id});"
|
|
ActiveRecord::Base.connection.execute(sql)
|
|
end
|
|
end
|
|
end
|
|
|
|
def down
|
|
drop_table :sites
|
|
drop_table :sites_usuaries
|
|
drop_table :invitades_sites
|
|
end
|
|
end
|