%% @doc recurrence_exception: set → bag, чтобы хранить несколько cancel на один master. -module('20260730120000_recurrence_exception_bag'). -export([up/0, down/0]). -include("records.hrl"). up() -> case lists:member(recurrence_exception, mnesia:system_info(tables)) of false -> case mnesia:create_table(recurrence_exception, [ {disc_copies, [node()]}, {type, bag}, {attributes, record_info(fields, recurrence_exception)} ]) of {atomic, ok} -> ok; {aborted, {already_exists, recurrence_exception}} -> ok; {aborted, Reason} -> error({create_table_failed, Reason}) end; true -> case mnesia:table_info(recurrence_exception, type) of bag -> ok; _ -> Rows = mnesia:dirty_match_object(#recurrence_exception{_ = '_'}), case mnesia:delete_table(recurrence_exception) of {atomic, ok} -> ok; {aborted, Reason1} -> error({delete_table_failed, Reason1}) end, case mnesia:create_table(recurrence_exception, [ {disc_copies, [node()]}, {type, bag}, {attributes, record_info(fields, recurrence_exception)} ]) of {atomic, ok} -> ok; {aborted, Reason2} -> error({create_table_failed, Reason2}) end, lists:foreach(fun(R) -> mnesia:dirty_write(R) end, Rows), ok end end. down() -> %% Откат в set потерял бы все кроме одного exception на master — не делаем. ok.