codegen: register seaography entity module (#2403)
* codegen: register seaography entity module * codegen: register seaography active enum * Update seaography examples * fmt
This commit is contained in:
parent
760b825a12
commit
bfca886236
@ -14,11 +14,7 @@ pub fn schema(
|
|||||||
// Builder of Seaography query root
|
// Builder of Seaography query root
|
||||||
let mut builder = Builder::new(&CONTEXT, database.clone());
|
let mut builder = Builder::new(&CONTEXT, database.clone());
|
||||||
// Register SeaORM entities
|
// Register SeaORM entities
|
||||||
seaography::register_entities!(
|
let builder = crate::models::_entities::register_entity_modules(builder);
|
||||||
builder,
|
|
||||||
// List all models we want to include in the GraphQL endpoint here
|
|
||||||
[files, notes, users]
|
|
||||||
);
|
|
||||||
// Configure async GraphQL limits
|
// Configure async GraphQL limits
|
||||||
let schema = builder
|
let schema = builder
|
||||||
.schema_builder()
|
.schema_builder()
|
||||||
|
@ -5,3 +5,5 @@ pub mod prelude;
|
|||||||
pub mod files;
|
pub mod files;
|
||||||
pub mod notes;
|
pub mod notes;
|
||||||
pub mod users;
|
pub mod users;
|
||||||
|
|
||||||
|
seaography::register_entity_modules!([files, notes, users]);
|
||||||
|
@ -12,13 +12,9 @@ pub fn schema(
|
|||||||
complexity: usize,
|
complexity: usize,
|
||||||
) -> Result<Schema, SchemaError> {
|
) -> Result<Schema, SchemaError> {
|
||||||
// Builder of Seaography query root
|
// Builder of Seaography query root
|
||||||
let mut builder = Builder::new(&CONTEXT, database.clone());
|
let builder = Builder::new(&CONTEXT, database.clone());
|
||||||
// Register SeaORM entities
|
// Register SeaORM entities
|
||||||
seaography::register_entities!(
|
let builder = crate::models::_entities::register_entity_modules(builder);
|
||||||
builder,
|
|
||||||
// List all models we want to include in the GraphQL endpoint here
|
|
||||||
[files, notes, users]
|
|
||||||
);
|
|
||||||
// Configure async GraphQL limits
|
// Configure async GraphQL limits
|
||||||
let schema = builder
|
let schema = builder
|
||||||
.schema_builder()
|
.schema_builder()
|
||||||
|
@ -5,3 +5,5 @@ pub mod prelude;
|
|||||||
pub mod files;
|
pub mod files;
|
||||||
pub mod notes;
|
pub mod notes;
|
||||||
pub mod users;
|
pub mod users;
|
||||||
|
|
||||||
|
seaography::register_entity_modules!([files, notes, users]);
|
||||||
|
@ -6,3 +6,5 @@ pub mod baker;
|
|||||||
pub mod bakery;
|
pub mod bakery;
|
||||||
pub mod cake;
|
pub mod cake;
|
||||||
pub mod cake_baker;
|
pub mod cake_baker;
|
||||||
|
|
||||||
|
seaography::register_entity_modules!([baker, bakery, cake, cake_baker]);
|
||||||
|
@ -11,8 +11,8 @@ pub fn schema(
|
|||||||
depth: Option<usize>,
|
depth: Option<usize>,
|
||||||
complexity: Option<usize>,
|
complexity: Option<usize>,
|
||||||
) -> Result<Schema, SchemaError> {
|
) -> Result<Schema, SchemaError> {
|
||||||
let mut builder = Builder::new(&CONTEXT, database.clone());
|
let builder = Builder::new(&CONTEXT, database.clone());
|
||||||
seaography::register_entities!(builder, [baker, bakery, cake, cake_baker,]);
|
let builder = crate::entities::register_entity_modules(builder);
|
||||||
let schema = builder.schema_builder();
|
let schema = builder.schema_builder();
|
||||||
let schema = if let Some(depth) = depth {
|
let schema = if let Some(depth) = depth {
|
||||||
schema.limit_depth(depth)
|
schema.limit_depth(depth)
|
||||||
|
@ -171,7 +171,7 @@ impl EntityWriter {
|
|||||||
pub fn generate(self, context: &EntityWriterContext) -> WriterOutput {
|
pub fn generate(self, context: &EntityWriterContext) -> WriterOutput {
|
||||||
let mut files = Vec::new();
|
let mut files = Vec::new();
|
||||||
files.extend(self.write_entities(context));
|
files.extend(self.write_entities(context));
|
||||||
files.push(self.write_index_file(context.lib));
|
files.push(self.write_index_file(context.lib, context.seaography));
|
||||||
files.push(self.write_prelude());
|
files.push(self.write_prelude());
|
||||||
if !self.enums.is_empty() {
|
if !self.enums.is_empty() {
|
||||||
files.push(self.write_sea_orm_active_enums(
|
files.push(self.write_sea_orm_active_enums(
|
||||||
@ -245,7 +245,7 @@ impl EntityWriter {
|
|||||||
.collect()
|
.collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn write_index_file(&self, lib: bool) -> OutputFile {
|
pub fn write_index_file(&self, lib: bool, seaography: bool) -> OutputFile {
|
||||||
let mut lines = Vec::new();
|
let mut lines = Vec::new();
|
||||||
Self::write_doc_comment(&mut lines);
|
Self::write_doc_comment(&mut lines);
|
||||||
let code_blocks: Vec<TokenStream> = self.entities.iter().map(Self::gen_mod).collect();
|
let code_blocks: Vec<TokenStream> = self.entities.iter().map(Self::gen_mod).collect();
|
||||||
@ -266,6 +266,12 @@ impl EntityWriter {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if seaography {
|
||||||
|
lines.push("".to_owned());
|
||||||
|
let ts = Self::gen_seaography_entity_mod(&self.entities, &self.enums);
|
||||||
|
Self::write(&mut lines, vec![ts]);
|
||||||
|
}
|
||||||
|
|
||||||
let file_name = match lib {
|
let file_name = match lib {
|
||||||
true => "lib.rs".to_owned(),
|
true => "lib.rs".to_owned(),
|
||||||
false => "mod.rs".to_owned(),
|
false => "mod.rs".to_owned(),
|
||||||
@ -704,6 +710,48 @@ impl EntityWriter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn gen_seaography_entity_mod(
|
||||||
|
entities: &[Entity],
|
||||||
|
enums: &BTreeMap<String, ActiveEnum>,
|
||||||
|
) -> TokenStream {
|
||||||
|
let mut ts = TokenStream::new();
|
||||||
|
for entity in entities {
|
||||||
|
let table_name_snake_case_ident = format_ident!(
|
||||||
|
"{}",
|
||||||
|
escape_rust_keyword(entity.get_table_name_snake_case_ident())
|
||||||
|
);
|
||||||
|
ts = quote! {
|
||||||
|
#ts
|
||||||
|
#table_name_snake_case_ident,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ts = quote! {
|
||||||
|
seaography::register_entity_modules!([
|
||||||
|
#ts
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut enum_ts = TokenStream::new();
|
||||||
|
for active_enum in enums.values() {
|
||||||
|
let enum_name = &active_enum.enum_name.to_string();
|
||||||
|
let enum_iden = format_ident!("{}", enum_name.to_upper_camel_case());
|
||||||
|
enum_ts = quote! {
|
||||||
|
#enum_ts
|
||||||
|
sea_orm_active_enums::#enum_iden
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !enum_ts.is_empty() {
|
||||||
|
ts = quote! {
|
||||||
|
#ts
|
||||||
|
|
||||||
|
seaography::register_active_enums!([
|
||||||
|
#enum_ts
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
ts
|
||||||
|
}
|
||||||
|
|
||||||
pub fn gen_prelude_use(entity: &Entity) -> TokenStream {
|
pub fn gen_prelude_use(entity: &Entity) -> TokenStream {
|
||||||
let table_name_snake_case_ident = entity.get_table_name_snake_case_ident();
|
let table_name_snake_case_ident = entity.get_table_name_snake_case_ident();
|
||||||
let table_name_camel_case_ident = entity.get_table_name_camel_case_ident();
|
let table_name_camel_case_ident = entity.get_table_name_camel_case_ident();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user