Improve script

This commit is contained in:
julien committed 2026-11-03 15:18:09 +01:00
1 parent a57fa574eb
commit 2d72b20cad
5 files changed
+107 -167

No files matched your search

+51
View File
@@ -0,0 +1,51 @@
#!/usr/bin/env ruby
require "dotenv/load" if ENV.fetch("RACK_ENV", "development") == "development"
require_relative "../lib/database"
abort "Usage: ruby bin/add-core-member EMAIL" unless ARGV.one?
email = ARGV.first.strip.downcase
abort "Adresse électronique manquante." if email.empty?
begin
DB.transaction do
verified_status_id = DB[:account_statuses]
.where(name: "Verified")
.get(:id)
raise "Statut Verified introuvable." unless verified_status_id
account = DB[:accounts]
.where(Sequel.function(:lower, :email) => email)
.first
raise "Compte introuvable : #{email}" unless account
raise "Adresse électronique non vérifiée : #{email}" unless
account[:status_id] == verified_status_id
member = DB[:members].where(account_id: account[:id]).first
raise "Fiche membre introuvable." unless member
raise "Une personne physique est requise." unless
member[:kind] == "individual"
raise "Ce membre appartient déjà au Noyau." if member[:core_member]
membership = DB[:memberships]
.where(member_id: member[:id], status: "accepted")
.first
raise "Ce membre doit avoir une adhésion acceptée." unless membership
updated = DB[:members]
.where(id: member[:id], core_member: false)
.update(core_member: true)
raise "Impossible d'ajouter ce membre au Noyau." unless updated == 1
end
rescue StandardError => e
abort "Erreur : #{e.message}"
end
puts "#{email} a été ajouté au Noyau."
-155
View File
@@ -1,155 +0,0 @@
#!/usr/bin/env ruby
require "dotenv/load" if ENV.fetch("RACK_ENV", "development") == "development"
environment = ENV.fetch("RACK_ENV", "development")
abort "Environnement non pris en charge." unless
%w[development production].include?(environment)
require "date"
require "io/console"
require_relative "../lib/database"
console = IO.console or abort "Terminal interactif requis."
if environment == "production" &&
DB[:members].where(core_member: true).count.positive?
abort "Un Noyau existe déjà."
end
verified_status_id = DB[:account_statuses]
.where(name: "Verified")
.get(:id)
abort "Statut Verified introuvable." unless verified_status_id
find_member = lambda do |email|
account = DB[:accounts]
.where(Sequel.function(:lower, :email) => email)
.first
abort "Compte introuvable : #{email}" unless account
abort "Adresse électronique non vérifiée : #{email}" unless
account[:status_id] == verified_status_id
member = DB[:members]
.where(account_id: account[:id])
.first
abort "Fiche membre introuvable : #{email}" unless member
abort "Une personne physique est requise : #{email}" unless
member[:kind] == "individual"
member
end
console.print "Date de l'assemblée (AAAA-MM-JJ) : "
date_input = console.gets&.strip
unless date_input&.match?(/\A\d{4}-\d{2}-\d{2}\z/)
abort "Format attendu : AAAA-MM-JJ."
end
begin
assembly_date = Date.iso8601(date_input)
rescue Date::Error
abort "Date invalide."
end
abort "La date ne peut pas être dans le futur." if
assembly_date > Date.today
assembly_datetime = Time.utc(
assembly_date.year,
assembly_date.month,
assembly_date.day
)
console.puts
console.puts "Saisissez les adresses électroniques des membres désignés."
console.puts "Une adresse par ligne. Entrée pour terminer."
console.puts
emails = []
loop do
console.print "Adresse électronique : "
email = console.gets&.strip&.downcase
break if email.to_s.empty?
abort "Adresse déjà saisie : #{email}" if emails.include?(email)
emails << email
end
minimum_members = environment == "production" ? 3 : 1
abort "Au moins #{minimum_members} membre(s) sont nécessaires." if
emails.length < minimum_members
members = emails.map do |email|
[email, find_member.call(email)]
end
console.puts
console.puts "Environnement : #{environment}"
console.puts "Date de l'assemblée : #{assembly_date}"
console.puts
console.puts "Membres du Noyau :"
members.each do |email, member|
name = "#{member[:first_name]} #{member[:last_name]}"
console.puts " #{name} (#{email})"
end
console.puts
console.print "Confirmer l'initialisation ? [o/N] "
abort "Opération annulée." unless %w[o oui].include?(
console.gets&.strip&.downcase
)
if environment == "production" &&
DB[:members].where(core_member: true).count.positive?
abort "Un Noyau existe déjà."
end
DB.transaction do
members.each do |_email, member|
membership = DB[:memberships]
.where(
member_id: member[:id],
status: %w[pending accepted]
)
.first
if membership && membership[:status] == "pending"
DB[:memberships]
.where(id: membership[:id])
.update(
status: "accepted",
decided_at: assembly_datetime,
recorded_by: nil
)
elsif membership.nil?
DB[:memberships].insert(
member_id: member[:id],
status: "accepted",
requested_at: assembly_datetime,
decided_at: assembly_datetime,
recorded_by: nil
)
end
DB[:members]
.where(id: member[:id])
.update(core_member: true)
end
end
puts "Membres du Noyau enregistrés (#{members.length})."