|
| 1 | +CREATE MIGRATION m1vlgekf4eyzweb6xmldmxwzohoh7xbrre6fbc7e2d3t7q7ry3qobq |
| 2 | + ONTO m1kzwpoy3r3awvbzqxxzz3upkkemxjtf33ra53zkuxzexsc7r5x4zq |
| 3 | +{ |
| 4 | + CREATE MODULE Product IF NOT EXISTS; |
| 5 | + CREATE TYPE Scripture::UnspecifiedPortion { |
| 6 | + CREATE REQUIRED PROPERTY book: std::str { |
| 7 | + SET readonly := true; |
| 8 | + }; |
| 9 | + CREATE REQUIRED PROPERTY totalVerses: std::int16 { |
| 10 | + SET readonly := true; |
| 11 | + CREATE CONSTRAINT std::min_value(1); |
| 12 | + }; |
| 13 | + }; |
| 14 | + CREATE SCALAR TYPE Product::Medium EXTENDING enum<Print, Web, EBook, App, TrainedStoryTellers, Audio, Video, Other>; |
| 15 | + CREATE SCALAR TYPE Product::Methodology EXTENDING enum<Paratext, OtherWritten, Render, Audacity, AdobeAudition, OtherOralTranslation, StoryTogether, SeedCompanyMethod, OneStory, Craft2Tell, OtherOralStories, Film, SignLanguage, OtherVisual>; |
| 16 | + CREATE SCALAR TYPE Product::ProgressMeasurement EXTENDING enum<Number, Percent, Boolean>; |
| 17 | + CREATE SCALAR TYPE Product::Purpose EXTENDING enum<EvangelismChurchPlanting, ChurchLife, ChurchMaturity, SocialIssues, Discipleship>; |
| 18 | + CREATE SCALAR TYPE Product::Step EXTENDING enum<ExegesisAndFirstDraft, TeamCheck, CommunityTesting, BackTranslation, ConsultantCheck, InternalizationAndDrafting, PeerRevision, ConsistencyCheckAndFinalEdits, Craft, Test, `Check`, Record, Develop, Translate, Completed>; |
| 19 | + CREATE ABSTRACT TYPE default::Product EXTENDING Engagement::Child { |
| 20 | + CREATE LINK scripture: Scripture::Collection { |
| 21 | + ON SOURCE DELETE DELETE TARGET IF ORPHAN; |
| 22 | + }; |
| 23 | + CREATE PROPERTY describeCompletion: std::str; |
| 24 | + CREATE MULTI PROPERTY mediums: Product::Medium; |
| 25 | + CREATE PROPERTY methodology: Product::Methodology; |
| 26 | + CREATE PROPERTY placeholderDescription: std::str; |
| 27 | + CREATE PROPERTY pnpIndex: std::int16; |
| 28 | + CREATE PROPERTY progressStepMeasurement: Product::ProgressMeasurement; |
| 29 | + CREATE PROPERTY progressTarget: std::int16; |
| 30 | + CREATE MULTI PROPERTY purposes: Product::Purpose; |
| 31 | + CREATE MULTI PROPERTY steps: Product::Step; |
| 32 | + CREATE TRIGGER denyEmptyScriptureCollection |
| 33 | + AFTER UPDATE, INSERT |
| 34 | + FOR EACH DO (std::assert((NOT (EXISTS (__new__.scripture)) OR EXISTS (__new__.scripture.verses)), message := '`Product.scripture` should have a `Scripture::Collection` with verses or be null/empty-set')); |
| 35 | + }; |
| 36 | + CREATE TYPE default::DirectScriptureProduct EXTENDING default::Product { |
| 37 | + CREATE LINK unspecifiedScripture: Scripture::UnspecifiedPortion { |
| 38 | + ON SOURCE DELETE DELETE TARGET IF ORPHAN; |
| 39 | + }; |
| 40 | + CREATE PROPERTY totalVerseEquivalents: std::int32; |
| 41 | + CREATE PROPERTY totalVerses: std::int16; |
| 42 | + }; |
| 43 | + CREATE TYPE default::DerivativeScriptureProduct EXTENDING default::Product { |
| 44 | + CREATE REQUIRED LINK produces: default::Producible; |
| 45 | + ALTER LINK scripture { |
| 46 | + SET OWNED; |
| 47 | + }; |
| 48 | + CREATE LINK scriptureOverride: Scripture::Collection { |
| 49 | + ON SOURCE DELETE DELETE TARGET IF ORPHAN; |
| 50 | + }; |
| 51 | + ALTER LINK scripture { |
| 52 | + CREATE REWRITE |
| 53 | + INSERT |
| 54 | + USING ((IF EXISTS (.scriptureOverride) THEN .scriptureOverride ELSE .produces.scripture)); |
| 55 | + CREATE REWRITE |
| 56 | + UPDATE |
| 57 | + USING ((IF EXISTS (.scriptureOverride) THEN .scriptureOverride ELSE .produces.scripture)); |
| 58 | + }; |
| 59 | + CREATE REQUIRED PROPERTY composite: std::bool { |
| 60 | + SET default := false; |
| 61 | + }; |
| 62 | + CREATE PROPERTY totalVerseEquivalents: std::int32; |
| 63 | + CREATE PROPERTY totalVerses: std::int16; |
| 64 | + }; |
| 65 | + ALTER TYPE default::Producible { |
| 66 | + CREATE TRIGGER updateDerivativeProducts |
| 67 | + AFTER UPDATE |
| 68 | + FOR EACH DO (UPDATE |
| 69 | + __new__.<produces[IS default::DerivativeScriptureProduct] |
| 70 | + FILTER |
| 71 | + ((__new__.scripture != __old__.scripture) AND NOT (EXISTS (.scriptureOverride))) |
| 72 | + SET { |
| 73 | + scripture := __new__.scripture |
| 74 | + }); |
| 75 | + ALTER TRIGGER denyEmptyScriptureCollection USING (std::assert((NOT (EXISTS (__new__.scripture)) OR EXISTS (__new__.scripture.verses)), message := '`Producible.scripture` should have a `Scripture::Collection` with verses or be null/empty-set')); |
| 76 | + }; |
| 77 | + CREATE TYPE default::OtherProduct EXTENDING default::Product { |
| 78 | + CREATE PROPERTY description: std::str; |
| 79 | + CREATE REQUIRED PROPERTY title: std::str; |
| 80 | + }; |
| 81 | +}; |
0 commit comments