@@ -83,104 +83,101 @@ class Dart extends LanguageMeta {
8383  }
8484
8585  getTemplate() {
86-     return `<%  for  (const attribute of collection.attributes) { -%> 
87- <%  if  (attribute.type ===  ' relationship' -%> 
88- import '<% -  toSnakeCase(collections.find(c => c.$id  ===  attribute.relatedCollection).name) %> 
89- 
90- <%  } -%> 
91- <%  } -%> 
92- /// This file is auto-generated by the Appwrite CLI. 
93- /// You can regenerate it by running \`appwrite ${process.argv.slice(2).join(' ')}\`.
94- 
95- <%  for  (const attribute of collection.attributes) { -%> 
96- <%  if  (attribute.format  ===  ' enum' -%> 
86+   return `// This file is auto-generated by the Appwrite CLI. 
87+ // You can regenerate it by running \`appwrite ${process.argv.slice(2).join(' ')}\`.
88+ <%  const __relatedImportsSeen  =  new  Set ();
89+    const sortedAttributes =  collection.attributes.slice().sort((a, b) => { 
90+      if  (a.required ===  b.required) return  0 ; 
91+      return  a.required ?  - 1  : 1 ; 
92+    }); -%>  
93+ <%  const __attrs  =  sortedAttributes; -%> 
94+ <%  for  (const attribute of __attrs ) { -%> 
95+ <%    if  (attribute.type ===  ' ${AttributeType.RELATIONSHIP}' -%> 
96+ <%      const related =  collections.find(c => c.$id  ===  attribute.relatedCollection); -%> 
97+ <%      if  (related &&  ! __relatedImportsSeen .has(toSnakeCase(related.name))) { -%> 
98+ import '<% -  toSnakeCase(related.name) %> 
99+ <%        __relatedImportsSeen .add(toSnakeCase(related.name)); -%> 
100+ <%      } -%> 
101+ <%    } -%> 
102+ <%  } -%> 
103+ 
104+ <%  for  (const attribute of __attrs ) { -%> 
105+ <%  if  (attribute.format  ===  ' ${AttributeType.ENUM}' -%> 
97106enum <% -  toPascalCase(attribute.key) %> 
98107<%  for  (const [index, element] of Object .entries(attribute.elements)) { -%> 
99-   <% -  strict ?  toCamelCase(element) : element %><%  if  (index <  attribute.elements.length -  1 ) { %> <%  } %> 
108+   <% -  strict ?  toCamelCase(element) : element %><%  if  (index <  attribute.elements.length -  1 ) { - %><%  } %> 
100109<%  } -%> 
101110}
102111
103112<%  } -%> 
104113<%  } -%> 
105114class <%=  toPascalCase(collection.name) %> 
106- <%  for  (const [index, attribute] of Object .entries(collection.attributes )) { -%> 
115+ <%  for  (const [index, attribute] of Object .entries(__attrs )) { -%> 
107116  <% -  getType(attribute, collections) %> <%=  strict ?  toCamelCase(attribute.key) : attribute.key %> 
108117<%  } -%> 
109118
110119  <%=  toPascalCase(collection.name) %> 
111-   <%  for  (const [index, attribute] of Object .entries(collection.attributes )) { -%> 
112-   <%  if  (attribute.required) { %> <%  } %> <%=  strict ?  toCamelCase(attribute.key) : attribute.key %><%  if  (index <  collection.attributes. length -  1 ) { %> <%  } %> 
120+   <%  for  (const [index, attribute] of Object .entries(__attrs )) { -%> 
121+   <%  if  (attribute.required) { %> <%  } %> <%=  strict ?  toCamelCase(attribute.key) : attribute.key %><%  if  (index <  __attrs . length -  1 ) { - %><%  } %> 
113122  <%  } -%> 
114123});
115124
116125  factory <%=  toPascalCase(collection.name) %> String , dynamic > map) {
117126    return <%=  toPascalCase(collection.name) %> 
118- <%  for  (const [index, attribute] of Object .entries(collection.attributes )) { -%> 
119-        <%=  strict ?  toCamelCase(attribute.key) : attribute.key %> <%  if  (attribute.type ===  ' string ' ||  attribute.type ===  ' email ' ||  attribute.type ===  ' datetime ' -%> 
120- <%  if  (attribute.format  ===  ' enum ' -%> 
127+ <%  for  (const [index, attribute] of Object .entries(__attrs )) { -%> 
128+   <%=  strict ?  toCamelCase(attribute.key) : attribute.key %> <%  if  (attribute.type ===  ' ${AttributeType.STRING} ' ||  attribute.type ===  ' ${AttributeType.EMAIL} ' ||  attribute.type ===  ' ${AttributeType.DATETIME} ' -%> 
129+ <%  if  (attribute.format  ===  ' ${AttributeType.ENUM} ' -%> 
121130<%  if  (attribute.array) { -%> 
122- (map['<%=  attribute.key %> dynamic >?)?.map((e) => <% -  toPascalCase(attribute.key) %> <%  if  (!attribute.required) { %> <%  } -%> 
123- <%  } else  { -%> 
131+ (map['<%=  attribute.key %> dynamic >?)?.map((e) => <% -  toPascalCase(attribute.key) %> <%  } else  { -%> 
124132<%  if  (!attribute.required) { -%> 
125133map['<%=  attribute.key %> <% -  toPascalCase(attribute.key) %> <%=  attribute.key %> <%  } else  { -%> 
126134<% -  toPascalCase(attribute.key) %> <%=  attribute.key %> <%  } -%> 
127135<%  } -%> 
128136<%  } else  { -%> 
129137<%  if  (attribute.array) { -%> 
130- List<String >.from(map['<%=  attribute.key %> <%  if  (!attribute.required) { %> <%  } -%> 
131- <%  } else  { -%> 
132- map['<%=  attribute.key %> <%  if  (!attribute.required) { %> <%  } %> <%  if  (!attribute.required) { %> <%  } -%> 
138+ List<String >.from(map['<%=  attribute.key %> <%  } else  { -%> 
139+ map['<%=  attribute.key %> <%  if  (!attribute.required) { %> <%  } %> <%  } -%> 
133140<%  } -%> 
134- <%  } -%> 
135- <%  } else if  (attribute.type ===  ' integer' -%> 
141+ <%  } else if  (attribute.type ===  ' ${AttributeType.INTEGER}' -%> 
136142<%  if  (attribute.array) { -%> 
137- List<int >.from(map['<%=  attribute.key %> <%  if  (!attribute.required) { %> <%  } -%> 
138- <%  } else  { -%> 
139- map['<%=  attribute.key %> <%  if  (!attribute.required) { %> <%  } -%> 
140- <%  } -%> 
141- <%  } else if  (attribute.type ===  ' float' -%> 
143+ List<int >.from(map['<%=  attribute.key %> <%  } else  { -%> 
144+ map['<%=  attribute.key %> <%  } -%> 
145+ <%  } else if  (attribute.type ===  ' ${AttributeType.FLOAT}' -%> 
142146<%  if  (attribute.array) { -%> 
143- List<double >.from(map['<%=  attribute.key %> <%  if  (!attribute.required) { %> <%  } -%> 
144- <%  } else  { -%> 
145- map['<%=  attribute.key %> <%  if  (!attribute.required) { %> <%  } -%> 
146- <%  } -%> 
147- <%  } else if  (attribute.type ===  ' boolean' -%> 
147+ List<double >.from(map['<%=  attribute.key %> <%  } else  { -%> 
148+ map['<%=  attribute.key %> <%  } -%> 
149+ <%  } else if  (attribute.type ===  ' ${AttributeType.BOOLEAN}' -%> 
148150<%  if  (attribute.array) { -%> 
149- List<bool >.from(map['<%=  attribute.key %> <%  if  (!attribute.required) { %> <%  } -%> 
150- <%  } else  { -%> 
151- map['<%=  attribute.key %> <%  if  (!attribute.required) { %> <%  } -%> 
152- <%  } -%> 
153- <%  } else if  (attribute.type ===  ' relationship' -%> 
151+ List<bool >.from(map['<%=  attribute.key %> <%  } else  { -%> 
152+ map['<%=  attribute.key %> <%  } -%> 
153+ <%  } else if  (attribute.type ===  ' ${AttributeType.RELATIONSHIP}' -%> 
154154<%  if  ((attribute.relationType ===  ' oneToMany' &&  attribute.side ===  ' parent' ||  (attribute.relationType ===  ' manyToOne' &&  attribute.side ===  ' child' ||  attribute.relationType ===  ' manyToMany' -%> 
155- (map['<%=  attribute.key %> dynamic >?)?.map((e) => <% -  toPascalCase(collections.find(c => c.$id  ===  attribute.relatedCollection).name) %> <%   if  (!attribute.required) {  %>  ?? [] <%  }  -%> 
155+ (map['<%=  attribute.key %> dynamic >?)?.map((e) => <% -  toPascalCase(collections.find(c => c.$id  ===  attribute.relatedCollection).name) %> 
156156<%  } else  { -%> 
157157<%  if  (!attribute.required) { -%> 
158158map['<%=  attribute.key %> <% -  toPascalCase(collections.find(c => c.$id  ===  attribute.relatedCollection).name) %> <%=  attribute.key %> <%  } else  { -%> 
159159<% -  toPascalCase(collections.find(c => c.$id  ===  attribute.relatedCollection).name) %> <%=  attribute.key %> <%  } -%> 
160160<%  } -%> 
161- <%  } -%><%  if  (index <  collection.attributes. length -  1 ) { %> <%  } %> 
161+ <%  } -%><%  if  (index <  __attrs . length -  1 ) { - %><%  } %> 
162162<%  } -%> 
163163    );
164164  }
165165
166166  Map<String , dynamic > toMap() {
167167    return {
168- <%  for  (const [index, attribute] of Object .entries(collection.attributes )) { -%> 
169-       " <%=  attribute.key %> " : <%  if  (attribute.type ===  ' relationship ' -%> 
168+ <%  for  (const [index, attribute] of Object .entries(__attrs )) { -%> 
169+   ' <%=  attribute.key %> ' : <%  if  (attribute.type ===  ' ${AttributeType.RELATIONSHIP} ' -%> 
170170<%  if  ((attribute.relationType ===  ' oneToMany' &&  attribute.side ===  ' parent' ||  (attribute.relationType ===  ' manyToOne' &&  attribute.side ===  ' child' ||  attribute.relationType ===  ' manyToMany' -%> 
171- <%=  strict ?  toCamelCase(attribute.key) : attribute.key %><%  if  (!attribute.required) { %> <%  } %> <%   if  (!attribute.required) {  %>  ?? [] <%  }  -%> 
171+ <%=  strict ?  toCamelCase(attribute.key) : attribute.key %><%  if  (!attribute.required) { %> <%  } %> 
172172<%  } else  { -%> 
173- <%=  strict ?  toCamelCase(attribute.key) : attribute.key %><%  if  (!attribute.required) { %> <%  } %> <%  if  (!attribute.required) { %> <%  } -%> 
174- <%  } -%> 
175- <%  } else if  (attribute.format  ===  ' enum' -%> 
173+ <%=  strict ?  toCamelCase(attribute.key) : attribute.key %><%  if  (!attribute.required) { %> <%  } %> <%  } -%> 
174+ <%  } else if  (attribute.format  ===  ' ${AttributeType.ENUM}' -%> 
176175<%  if  (attribute.array) { -%> 
177- <%=  strict ?  toCamelCase(attribute.key) : attribute.key %><%  if  (!attribute.required) { %> <%  } %> <%  if  (!attribute.required) { %> <%  } -%> 
178- <%  } else  { -%> 
179- <%=  strict ?  toCamelCase(attribute.key) : attribute.key %><%  if  (!attribute.required) { %> <%  } %> <%  if  (!attribute.required) { %> <%  } -%> 
180- <%  } -%> 
176+ <%=  strict ?  toCamelCase(attribute.key) : attribute.key %><%  if  (!attribute.required) { %> <%  } %> <%  } else  { -%> 
177+ <%=  strict ?  toCamelCase(attribute.key) : attribute.key %><%  if  (!attribute.required) { %> <%  } %> <%  } -%> 
181178<%  } else  { -%> 
182179<%=  strict ?  toCamelCase(attribute.key) : attribute.key -%> 
183- <%  } -%><%  if  (index <  collection.attributes. length -  1 ) { %> <%  } %> 
180+ <%  } -%><%  if  (index <  __attrs . length -  1 ) { - %><%  } %> 
184181<%  } -%> 
185182    };
186183  }
0 commit comments