@@ -81,6 +81,9 @@ enum Commands {
8181 Migration {
8282 #[ arg( help = "The name of the migration." ) ]
8383 name : String ,
84+
85+ #[ arg( long, help = "Generate a simple (non-reversible) migration as a single .sql file." ) ]
86+ simple : bool,
8487 } ,
8588 #[ command ( about = "Generate an entity" ) ]
8689 Entity {
@@ -139,12 +142,18 @@ fn cli(ui: &mut UI<'_>, cli: Cli) -> Result<(), anyhow::Error> {
139142 Ok ( ( ) )
140143 }
141144 { % if template_type != "minimal" -%}
142- Commands :: Migration { name } => {
145+ Commands :: Migration { name, simple } => {
143146 ui. info ( "Generating migration…" ) ;
144- let ( up_file_name, down_file_name) = generate_migration ( & name, cli. r#override )
145- . context ( "Could not generate migration!" ) ?;
146- ui. success ( & format ! ( "Generated migration {}." , up_file_name. display( ) ) ) ;
147- ui. success ( & format ! ( "Generated migration {}." , down_file_name. display( ) ) ) ;
147+ if simple {
148+ let file_name = generate_simple_migration ( & name, cli. r#override )
149+ . context ( "Could not generate migration!" ) ?;
150+ ui. success ( & format ! ( "Generated migration {}." , file_name. display( ) ) ) ;
151+ } else {
152+ let ( up_file_name, down_file_name) = generate_migration ( & name, cli. r#override )
153+ . context ( "Could not generate migration!" ) ?;
154+ ui. success ( & format ! ( "Generated migration {}." , up_file_name. display( ) ) ) ;
155+ ui. success ( & format ! ( "Generated migration {}." , down_file_name. display( ) ) ) ;
156+ }
148157 Ok ( ( ) )
149158 }
150159 Commands :: Entity { name, fields } => {
@@ -263,6 +272,14 @@ fn generate_controller_test(name: &str, r#override: bool) -> Result<String, anyh
263272}
264273
265274{ % if template_type != "minimal" -%}
275+ fn generate_simple_migration ( name: & str, r#override: bool ) -> Result <PathBuf , anyhow:: Error > {
276+ let timestamp = SystemTime :: now ( ) . duration_since ( SystemTime :: UNIX_EPOCH ) ?;
277+ let file_path = PathBuf :: from ( format ! ( "./db/migrations/{}_{name}.sql" , timestamp. as_secs( ) ) ) ;
278+ create_project_file ( file_path. to_str ( ) . expect ( "Invalid file path for migration!" ) , "" . as_bytes ( ) , r#override) ?;
279+
280+ Ok ( file_path)
281+ }
282+
266283fn generate_migration( name: & str, r#override: bool ) -> Result <( PathBuf , PathBuf ) , anyhow:: Error > {
267284 let timestamp = SystemTime :: now ( ) . duration_since ( SystemTime :: UNIX_EPOCH ) ?;
268285 let dir_path = PathBuf :: from ( & format ! ( "./db/migrations/{}__{name}" , timestamp. as_secs( ) ) ) ;
0 commit comments