11using LcmCrdt . Changes ;
22using SIL . Harmony ;
3+ using UUIDNext ;
34
45namespace LcmCrdt . Objects ;
56
@@ -15,20 +16,44 @@ public static class PreDefinedData
1516 public static readonly Guid AdjectivePartOfSpeechId = new ( "30d07580-5052-4d91-bc24-469b8b2d7df9" ) ;
1617 public static readonly Guid AdverbPartOfSpeechId = new ( "46e4fe08-ffa0-4c8b-bf98-2c56f38904d9" ) ;
1718
18- internal static async Task AddPredefinedComplexFormTypes ( DataModel dataModel , Guid clientId )
19+ // Per-kind UUIDv5 namespaces for deriving per-project seed commit-ids.
20+ // Per-project ids avoid the LexBox CrdtCommits PK collision a shared constant would cause —
21+ // otherwise the seed row gets attributed to whichever project pushed first.
22+ private static readonly Guid ComplexFormTypesSeedNamespace = new ( "dc60d2a9-0cc2-48ed-803c-a238a14b6eae" ) ;
23+ private static readonly Guid SemanticDomainsSeedNamespace = new ( "023faebb-711b-4d2f-a14f-a15621fc66bc" ) ;
24+ private static readonly Guid PartsOfSpeechSeedNamespace = new ( "023faebb-711b-4d2f-b34f-a15621fc66bb" ) ;
25+ private static readonly Guid CustomViewsSeedNamespace = new ( "b2c3d4e5-f6a7-8901-bcde-f12345678901" ) ;
26+ private static readonly Guid MorphTypesSeedNamespace = new ( "a7b2c3d4-e5f6-4a8b-9c0d-1e2f3a4b5c6d" ) ;
27+
28+ public static Guid ComplexFormTypesSeedCommitId ( Guid projectId ) =>
29+ Uuid . NewNameBased ( ComplexFormTypesSeedNamespace , projectId . ToString ( ) ) ;
30+
31+ public static Guid SemanticDomainsSeedCommitId ( Guid projectId ) =>
32+ Uuid . NewNameBased ( SemanticDomainsSeedNamespace , projectId . ToString ( ) ) ;
33+
34+ public static Guid PartsOfSpeechSeedCommitId ( Guid projectId ) =>
35+ Uuid . NewNameBased ( PartsOfSpeechSeedNamespace , projectId . ToString ( ) ) ;
36+
37+ public static Guid CustomViewsSeedCommitId ( Guid projectId ) =>
38+ Uuid . NewNameBased ( CustomViewsSeedNamespace , projectId . ToString ( ) ) ;
39+
40+ public static Guid MorphTypesSeedCommitId ( Guid projectId ) =>
41+ Uuid . NewNameBased ( MorphTypesSeedNamespace , projectId . ToString ( ) ) ;
42+
43+ internal static async Task AddPredefinedComplexFormTypes ( DataModel dataModel , ProjectData projectData )
1944 {
20- await dataModel . AddChanges ( clientId ,
45+ await dataModel . AddChanges ( projectData . ClientId ,
2146 [
2247 new CreateComplexFormType ( CompoundComplexFormTypeId , new MultiString ( ) { { "en" , "Compound" } } ) ,
2348 new CreateComplexFormType ( UnspecifiedComplexFormTypeId , new MultiString ( ) { { "en" , "Unspecified" } } )
2449 ] ,
25- new Guid ( "dc60d2a9-0cc2-48ed-803c-a238a14b6eae" ) ) ;
50+ ComplexFormTypesSeedCommitId ( projectData . Id ) ) ;
2651 }
2752
28- internal static async Task AddPredefinedSemanticDomains ( DataModel dataModel , Guid clientId )
53+ internal static async Task AddPredefinedSemanticDomains ( DataModel dataModel , ProjectData projectData )
2954 {
3055 //todo load from xml instead of hardcoding and use real IDs
31- await dataModel . AddChanges ( clientId ,
56+ await dataModel . AddChanges ( projectData . ClientId ,
3257 [
3358 new CreateSemanticDomainChange ( new Guid ( "63403699-07c1-43f3-a47c-069d6e4316e5" ) , new MultiString ( ) { { "en" , "Universe, Creation" } } , "1" , true ) ,
3459 new CreateSemanticDomainChange ( new Guid ( "999581c4-1611-4acb-ae1b-5e6c1dfe6f0c" ) , new MultiString ( ) { { "en" , "Sky" } } , "1.1" , true ) ,
@@ -38,25 +63,25 @@ await dataModel.AddChanges(clientId,
3863 new CreateSemanticDomainChange ( new Guid ( "46e4fe08-ffa0-4c8b-bf88-2c56f38904d5" ) , new MultiString ( ) { { "en" , "Head" } } , "2.1.1" , false ) ,
3964 new CreateSemanticDomainChange ( new Guid ( "46e4fe08-ffa0-4c8b-bf88-2c56f38904d6" ) , new MultiString ( ) { { "en" , "Eye" } } , "2.1.1.1" , false ) ,
4065 ] ,
41- new Guid ( "023faebb-711b-4d2f-a14f-a15621fc66bc" ) ) ;
66+ SemanticDomainsSeedCommitId ( projectData . Id ) ) ;
4267 }
4368
44- public static async Task AddPredefinedPartsOfSpeech ( DataModel dataModel , Guid clientId )
69+ public static async Task AddPredefinedPartsOfSpeech ( DataModel dataModel , ProjectData projectData )
4570 {
4671 //todo load from xml instead of hardcoding
47- await dataModel . AddChanges ( clientId ,
72+ await dataModel . AddChanges ( projectData . ClientId ,
4873 [
4974 new CreatePartOfSpeechChange ( NounPartOfSpeechId , new MultiString ( ) { { "en" , "Noun" } } , true ) ,
5075 new CreatePartOfSpeechChange ( VerbPartOfSpeechId , new MultiString ( ) { { "en" , "Verb" } } , true ) ,
5176 new CreatePartOfSpeechChange ( AdjectivePartOfSpeechId , new MultiString ( ) { { "en" , "Adjective" } } , true ) ,
5277 new CreatePartOfSpeechChange ( AdverbPartOfSpeechId , new MultiString ( ) { { "en" , "Adverb" } } , true ) ,
5378 ] ,
54- new Guid ( "023faebb-711b-4d2f-b34f-a15621fc66bb" ) ) ;
79+ PartsOfSpeechSeedCommitId ( projectData . Id ) ) ;
5580 }
5681
57- internal static async Task AddPredefinedCustomViews ( DataModel dataModel , Guid clientId )
82+ internal static async Task AddPredefinedCustomViews ( DataModel dataModel , ProjectData projectData )
5883 {
59- await dataModel . AddChanges ( clientId ,
84+ await dataModel . AddChanges ( projectData . ClientId ,
6085 [
6186 new CreateCustomViewChange (
6287 new Guid ( "a1b2c3d4-e5f6-7890-abcd-ef1234567890" ) ,
@@ -82,15 +107,13 @@ await dataModel.AddChanges(clientId,
82107 Analysis = [ new ViewWritingSystem { WsId = "en" } ]
83108 } )
84109 ] ,
85- new Guid ( "b2c3d4e5-f6a7-8901-bcde-f12345678901" ) ) ;
110+ CustomViewsSeedCommitId ( projectData . Id ) ) ;
86111 }
87112
88- public static readonly Guid MorphTypesSeedCommitId = new ( "a7b2c3d4-e5f6-4a8b-9c0d-1e2f3a4b5c6d" ) ;
89-
90- internal static async Task AddPredefinedMorphTypes ( DataModel dataModel , Guid clientId )
113+ internal static async Task AddPredefinedMorphTypes ( DataModel dataModel , ProjectData projectData )
91114 {
92- await dataModel . AddChanges ( clientId ,
115+ await dataModel . AddChanges ( projectData . ClientId ,
93116 [ .. CanonicalMorphTypes . All . Values . Select ( mt => new CreateMorphTypeChange ( mt ) ) ] ,
94- MorphTypesSeedCommitId ) ;
117+ MorphTypesSeedCommitId ( projectData . Id ) ) ;
95118 }
96119}
0 commit comments