Imrpove migrations

This commit is contained in:
julien committed 2026-11-02 22:46:41 +01:00
1 parent db316b2914
commit 9aa3da5191
4 files changed
+13 -39

No files matched your search

+7 -21
View File
@@ -1,12 +1,11 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
require "dotenv/load" if ENV.fetch("RACK_ENV", "development") == "development"
environment = ENV.fetch("RACK_ENV", "development") environment = ENV.fetch("RACK_ENV", "development")
require "dotenv/load" if environment == "development"
abort "Environnement non pris en charge." unless abort "Environnement non pris en charge." unless
%w[development production].include?( %w[development production].include?(environment)
ENV.fetch("RACK_ENV", "development")
)
require "date" require "date"
require "io/console" require "io/console"
@@ -97,15 +96,6 @@ members = emails.map do |email|
[email, find_member.call(email)] [email, find_member.call(email)]
end end
console.puts
console.print "Adresse de la personne qui enregistre la décision : "
recorded_by_email = console.gets&.strip&.downcase
abort "Adresse électronique obligatoire." if
recorded_by_email.to_s.empty?
recorded_by = find_member.call(recorded_by_email)
console.puts console.puts
console.puts "Environnement : #{environment}" console.puts "Environnement : #{environment}"
console.puts "Date de l'assemblée : #{assembly_date}" console.puts "Date de l'assemblée : #{assembly_date}"
@@ -117,8 +107,6 @@ members.each do |email, member|
console.puts " #{name} (#{email})" console.puts " #{name} (#{email})"
end end
console.puts
console.puts "Décision enregistrée par : #{recorded_by_email}"
console.puts console.puts
console.print "Confirmer l'initialisation ? [o/N] " console.print "Confirmer l'initialisation ? [o/N] "
@@ -136,8 +124,7 @@ DB.transaction do
membership = DB[:memberships] membership = DB[:memberships]
.where( .where(
member_id: member[:id], member_id: member[:id],
status: %w[pending accepted], status: %w[pending accepted]
ended_at: nil
) )
.first .first
@@ -147,7 +134,7 @@ DB.transaction do
.update( .update(
status: "accepted", status: "accepted",
decided_at: assembly_datetime, decided_at: assembly_datetime,
recorded_by: recorded_by[:id] recorded_by: nil
) )
elsif membership.nil? elsif membership.nil?
DB[:memberships].insert( DB[:memberships].insert(
@@ -155,7 +142,7 @@ DB.transaction do
status: "accepted", status: "accepted",
requested_at: assembly_datetime, requested_at: assembly_datetime,
decided_at: assembly_datetime, decided_at: assembly_datetime,
recorded_by: recorded_by[:id] recorded_by: nil
) )
end end
@@ -165,5 +152,4 @@ DB.transaction do
end end
end end
puts "Noyau initialisé (#{members.length} membres)." puts "Membres du Noyau enregistrés (#{members.length})."
+3 -15
View File
@@ -18,16 +18,12 @@ Sequel.migration do
foreign_key :recorded_by, :members, foreign_key :recorded_by, :members,
type: :Bignum type: :Bignum
DateTime :ended_at
String :end_reason
index :status index :status
# Un seul dossier en attente ou une seule adhésion # Un seul dossier en attente ou une seule adhésion acceptée.
# en cours par adhérent.
index :member_id, index :member_id,
unique: true, unique: true,
where: { status: ["pending", "accepted"], ended_at: nil } where: { status: ["pending", "accepted"] }
constraint :memberships_status_valid, constraint :memberships_status_valid,
Sequel.lit("status IN ('pending', 'accepted', 'rejected')") Sequel.lit("status IN ('pending', 'accepted', 'rejected')")
@@ -37,15 +33,7 @@ Sequel.migration do
"(status = 'pending' AND decided_at IS NULL " \ "(status = 'pending' AND decided_at IS NULL " \
"AND recorded_by IS NULL) " \ "AND recorded_by IS NULL) " \
"OR (status IN ('accepted', 'rejected') " \ "OR (status IN ('accepted', 'rejected') " \
"AND decided_at IS NOT NULL AND recorded_by IS NOT NULL)" "AND decided_at IS NOT NULL)"
)
constraint :memberships_end_consistent,
Sequel.lit(
"(ended_at IS NULL AND end_reason IS NULL) " \
"OR (status = 'accepted' AND ended_at IS NOT NULL " \
"AND end_reason IN ('resignation', 'death', " \
"'dissolution', 'exclusion'))"
) )
end end
end end
+1 -2
View File
@@ -10,8 +10,7 @@ class Netig
Sequel[:members][:account_id] => rodauth.account_id, Sequel[:members][:account_id] => rodauth.account_id,
Sequel[:members][:kind] => "individual", Sequel[:members][:kind] => "individual",
Sequel[:members][:core_member] => true, Sequel[:members][:core_member] => true,
Sequel[:memberships][:status] => "accepted", Sequel[:memberships][:status] => "accepted"
Sequel[:memberships][:ended_at] => nil
) )
.count .count
.positive? .positive?
+2 -1
View File
@@ -10,6 +10,7 @@
<tr> <tr>
<th>Identité</th> <th>Identité</th>
<th>Type</th> <th>Type</th>
<th>Membre du Noyau</th>
<th>Adresse électronique</th> <th>Adresse électronique</th>
</tr> </tr>
</thead> </thead>
@@ -26,6 +27,7 @@
<%= member[:kind] == "individual" ? <%= member[:kind] == "individual" ?
"Personne physique" : "Personne morale" %> "Personne physique" : "Personne morale" %>
</td> </td>
<td><%= member[:core_member] ? "Oui" : "Non" %></td>
<td><%= member[:email] %></td> <td><%= member[:email] %></td>
</tr> </tr>
<% end %> <% end %>
@@ -34,4 +36,3 @@
<% end %> <% end %>
</div> </div>
</section> </section>