gen migrations
This commit is contained in:
parent
c6e00e9c98
commit
b2e6c14386
24 changed files with 540 additions and 8 deletions
17
README.md
17
README.md
|
@ -46,12 +46,19 @@ part 'car.g.dart';
|
||||||
|
|
||||||
@serializable
|
@serializable
|
||||||
@orm
|
@orm
|
||||||
class _Car extends Model {
|
abstract class _Car extends Model {
|
||||||
String make;
|
String get make;
|
||||||
String description;
|
|
||||||
bool familyFriendly;
|
String get description;
|
||||||
DateTime recalledAt;
|
|
||||||
|
bool get familyFriendly;
|
||||||
|
|
||||||
|
DateTime get recalledAt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// You can disable migration generation.
|
||||||
|
@Orm(generateMigrations: false)
|
||||||
|
abstract class _NoMigrations extends Model {}
|
||||||
```
|
```
|
||||||
|
|
||||||
Models can use the `@Alias()` annotation; `package:angel_orm` obeys it.
|
Models can use the `@Alias()` annotation; `package:angel_orm` obeys it.
|
||||||
|
|
|
@ -1,9 +1,17 @@
|
||||||
const Orm orm = const Orm();
|
const Orm orm = const Orm();
|
||||||
|
|
||||||
class Orm {
|
class Orm {
|
||||||
|
/// The name of the table to query.
|
||||||
|
///
|
||||||
|
/// Inferred if not present.
|
||||||
final String tableName;
|
final String tableName;
|
||||||
|
|
||||||
|
/// Whether to generate migrations for this model.
|
||||||
|
///
|
||||||
|
/// Defaults to [:true:].
|
||||||
|
final bool generateMigrations;
|
||||||
|
|
||||||
const Orm({this.tableName});
|
const Orm({this.tableName, this.generateMigrations: true});
|
||||||
}
|
}
|
||||||
|
|
||||||
class Join {
|
class Join {
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
# 2.0.0-dev.1
|
||||||
|
* Generate migration files.
|
||||||
|
|
||||||
# 2.0.0-dev
|
# 2.0.0-dev
|
||||||
* Dart 2 updates, and more.
|
* Dart 2 updates, and more.
|
||||||
|
|
||||||
|
|
|
@ -2,11 +2,13 @@ builders:
|
||||||
angel_orm:
|
angel_orm:
|
||||||
import: "package:angel_orm_generator/angel_orm_generator.dart"
|
import: "package:angel_orm_generator/angel_orm_generator.dart"
|
||||||
builder_factories:
|
builder_factories:
|
||||||
|
- migrationBuilder
|
||||||
- ormBuilder
|
- ormBuilder
|
||||||
auto_apply: root_package
|
auto_apply: root_package
|
||||||
build_to: cache
|
build_to: cache
|
||||||
build_extensions:
|
build_extensions:
|
||||||
.dart:
|
.dart:
|
||||||
|
- ".angel_migration.g.part"
|
||||||
- ".angel_orm.g.part"
|
- ".angel_orm.g.part"
|
||||||
required_inputs:
|
required_inputs:
|
||||||
- angel_serialize.g.part
|
- angel_serialize.g.part
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
//export 'src/mongodb_orm_generator.dart';
|
//export 'src/mongodb_orm_generator.dart';
|
||||||
|
export 'src/migration_generator.dart';
|
||||||
export 'src/orm_build_context.dart';
|
export 'src/orm_build_context.dart';
|
||||||
export 'src/orm_generator.dart';
|
export 'src/orm_generator.dart';
|
||||||
export 'src/readers.dart';
|
export 'src/readers.dart';
|
||||||
|
|
246
angel_orm_generator/lib/src/migration_generator.dart
Normal file
246
angel_orm_generator/lib/src/migration_generator.dart
Normal file
|
@ -0,0 +1,246 @@
|
||||||
|
import 'dart:async';
|
||||||
|
import 'package:analyzer/dart/element/element.dart';
|
||||||
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
|
import 'package:build/build.dart';
|
||||||
|
import 'package:code_builder/code_builder.dart';
|
||||||
|
import 'package:dart_style/dart_style.dart';
|
||||||
|
import 'package:source_gen/source_gen.dart' hide LibraryBuilder;
|
||||||
|
import 'orm_build_context.dart';
|
||||||
|
|
||||||
|
Builder migrationBuilder(BuilderOptions options) {
|
||||||
|
return new SharedPartBuilder([
|
||||||
|
new MigrationGenerator(
|
||||||
|
autoSnakeCaseNames: options.config['auto_snake_case_names'] != false,
|
||||||
|
autoIdAndDateFields: options.config['auto_id_and_date_fields'] != false)
|
||||||
|
], 'angel_migration');
|
||||||
|
}
|
||||||
|
|
||||||
|
class MigrationGenerator extends GeneratorForAnnotation<Orm> {
|
||||||
|
static final Parameter _schemaParam = new Parameter((b) => b
|
||||||
|
..name = 'schema'
|
||||||
|
..type = refer('Schema'));
|
||||||
|
static final Reference _schema = refer('schema');
|
||||||
|
|
||||||
|
/// If `true` (default), then field names will automatically be (de)serialized as snake_case.
|
||||||
|
final bool autoSnakeCaseNames;
|
||||||
|
|
||||||
|
/// If `true` (default), then the schema will automatically add id, created_at and updated_at fields.
|
||||||
|
final bool autoIdAndDateFields;
|
||||||
|
|
||||||
|
const MigrationGenerator(
|
||||||
|
{this.autoSnakeCaseNames: true, this.autoIdAndDateFields: true});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<String> generateForAnnotatedElement(
|
||||||
|
Element element, ConstantReader annotation, BuildStep buildStep) async {
|
||||||
|
if (element is! ClassElement)
|
||||||
|
throw 'Only classes can be annotated with @ORM().';
|
||||||
|
|
||||||
|
var generateMigrations =
|
||||||
|
annotation.peek('generateMigrations')?.boolValue ?? true;
|
||||||
|
|
||||||
|
if (!generateMigrations) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var resolver = await buildStep.resolver;
|
||||||
|
var ctx = await buildOrmContext(
|
||||||
|
element as ClassElement,
|
||||||
|
annotation,
|
||||||
|
buildStep,
|
||||||
|
resolver,
|
||||||
|
autoSnakeCaseNames != false,
|
||||||
|
autoIdAndDateFields != false);
|
||||||
|
var lib = generateMigrationLibrary(
|
||||||
|
ctx, element as ClassElement, resolver, buildStep);
|
||||||
|
if (lib == null) return null;
|
||||||
|
return new DartFormatter().format(lib.accept(new DartEmitter()).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
Library generateMigrationLibrary(OrmBuildContext ctx, ClassElement element,
|
||||||
|
Resolver resolver, BuildStep buildStep) {
|
||||||
|
return new Library((lib) {
|
||||||
|
lib.body.add(new Class((clazz) {
|
||||||
|
clazz
|
||||||
|
..name = '${ctx.buildContext.modelClassName}Migration'
|
||||||
|
..extend = refer('Migration')
|
||||||
|
..methods
|
||||||
|
.addAll([buildUpMigration(ctx, lib), buildDownMigration(ctx)]);
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Method buildUpMigration(OrmBuildContext ctx, LibraryBuilder lib) {
|
||||||
|
return new Method((meth) {
|
||||||
|
meth
|
||||||
|
..name = 'up'
|
||||||
|
..annotations.add(refer('override'))
|
||||||
|
..requiredParameters.add(_schemaParam);
|
||||||
|
|
||||||
|
//var closure = new Method.closure()..addPositional(parameter('table'));
|
||||||
|
var closure = new Method((closure) {
|
||||||
|
closure
|
||||||
|
..requiredParameters.add(new Parameter((b) => b..name = 'table'))
|
||||||
|
..body = new Block((closureBody) {
|
||||||
|
var table = refer('table');
|
||||||
|
|
||||||
|
List<String> dup = [];
|
||||||
|
ctx.columns.forEach((name, col) {
|
||||||
|
var key = ctx.buildContext.resolveFieldName(name);
|
||||||
|
|
||||||
|
if (dup.contains(key))
|
||||||
|
return;
|
||||||
|
else {
|
||||||
|
if (key != 'id' || autoIdAndDateFields == false) {
|
||||||
|
// Check for relationships that might duplicate
|
||||||
|
for (var rName in ctx.relations.keys) {
|
||||||
|
var relationship = ctx.relations[rName];
|
||||||
|
if (relationship.localKey == key) return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dup.add(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
String methodName;
|
||||||
|
List<Expression> positional = [literal(key)];
|
||||||
|
Map<String, Expression> named = {};
|
||||||
|
|
||||||
|
if (autoIdAndDateFields != false && name == 'id')
|
||||||
|
methodName = 'serial';
|
||||||
|
|
||||||
|
if (methodName == null) {
|
||||||
|
switch (col.type) {
|
||||||
|
case ColumnType.varChar:
|
||||||
|
methodName = 'varChar';
|
||||||
|
if (col.length != null)
|
||||||
|
named['length'] = literal(col.length);
|
||||||
|
break;
|
||||||
|
case ColumnType.serial:
|
||||||
|
methodName = 'serial';
|
||||||
|
break;
|
||||||
|
case ColumnType.int:
|
||||||
|
methodName = 'integer';
|
||||||
|
break;
|
||||||
|
case ColumnType.float:
|
||||||
|
methodName = 'float';
|
||||||
|
break;
|
||||||
|
case ColumnType.numeric:
|
||||||
|
methodName = 'numeric';
|
||||||
|
break;
|
||||||
|
case ColumnType.boolean:
|
||||||
|
methodName = 'boolean';
|
||||||
|
break;
|
||||||
|
case ColumnType.date:
|
||||||
|
methodName = 'date';
|
||||||
|
break;
|
||||||
|
case ColumnType.dateTime:
|
||||||
|
methodName = 'dateTime';
|
||||||
|
break;
|
||||||
|
case ColumnType.timeStamp:
|
||||||
|
methodName = 'timeStamp';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Expression provColumn;
|
||||||
|
var colType = refer('Column');
|
||||||
|
var columnTypeType = refer('ColumnType');
|
||||||
|
|
||||||
|
if (col.length == null) {
|
||||||
|
methodName = 'declare';
|
||||||
|
provColumn = columnTypeType.newInstance([
|
||||||
|
literal(col.type.name),
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
methodName = 'declareColumn';
|
||||||
|
provColumn = colType.newInstance([], {
|
||||||
|
'type': columnTypeType.newInstance([
|
||||||
|
literal(col.type.name),
|
||||||
|
]),
|
||||||
|
'length': literal(col.length),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
positional.add(provColumn);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var field = table.property(methodName).call(positional, named);
|
||||||
|
var cascade = <Expression>[];
|
||||||
|
|
||||||
|
if (col.defaultValue != null) {
|
||||||
|
cascade
|
||||||
|
.add(refer('defaultsTo').call([literal(col.defaultValue)]));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (col.indexType == IndexType.primaryKey ||
|
||||||
|
(autoIdAndDateFields != false && name == 'id')) {
|
||||||
|
cascade.add(refer('primaryKey').call([]));
|
||||||
|
} else if (col.indexType == IndexType.unique) {
|
||||||
|
cascade.add(refer('unique').call([]));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (col.isNullable != true)
|
||||||
|
cascade.add(refer('notNull').call([]));
|
||||||
|
|
||||||
|
if (cascade.isNotEmpty) {
|
||||||
|
var b = new StringBuffer()
|
||||||
|
..writeln(field.accept(new DartEmitter()));
|
||||||
|
|
||||||
|
for (var ex in cascade) {
|
||||||
|
b
|
||||||
|
..write('..')
|
||||||
|
..writeln(ex.accept(new DartEmitter()));
|
||||||
|
}
|
||||||
|
|
||||||
|
field = new CodeExpression(new Code(b.toString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
closureBody.addExpression(field);
|
||||||
|
});
|
||||||
|
|
||||||
|
ctx.relations.forEach((name, r) {
|
||||||
|
var relationship = r;
|
||||||
|
|
||||||
|
if (relationship.type == RelationshipType.belongsTo) {
|
||||||
|
var key = relationship.localKey;
|
||||||
|
|
||||||
|
var field = table.property('integer').call([literal(key)]);
|
||||||
|
// .references('user', 'id').onDeleteCascade()
|
||||||
|
var ref = field.property('references').call([
|
||||||
|
literal(relationship.foreignTable),
|
||||||
|
literal(relationship.foreignKey),
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (relationship.cascadeOnDelete != false &&
|
||||||
|
const [RelationshipType.hasOne, RelationshipType.belongsTo]
|
||||||
|
.contains(relationship.type))
|
||||||
|
ref = ref.property('onDeleteCascade').call([]);
|
||||||
|
closureBody.addExpression(ref);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
meth.body = new Block((b) {
|
||||||
|
b.addExpression(_schema.property('create').call([
|
||||||
|
literal(ctx.tableName),
|
||||||
|
closure.closure,
|
||||||
|
]));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Method buildDownMigration(OrmBuildContext ctx) {
|
||||||
|
return new Method((b) {
|
||||||
|
b
|
||||||
|
..name = 'down'
|
||||||
|
..annotations.add(refer('override'))
|
||||||
|
..requiredParameters.add(_schemaParam)
|
||||||
|
..body = new Block((b) {
|
||||||
|
b.addExpression(
|
||||||
|
_schema.property('drop').call([literalString(ctx.tableName)]));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
name: angel_orm_generator
|
name: angel_orm_generator
|
||||||
version: 2.0.0-dev
|
version: 2.0.0-dev.1
|
||||||
description: Code generators for Angel's ORM. Generates query builder classes.
|
description: Code generators for Angel's ORM. Generates query builder classes.
|
||||||
author: Tobe O <thosakwe@gmail.com>
|
author: Tobe O <thosakwe@gmail.com>
|
||||||
homepage: https://github.com/angel-dart/orm
|
homepage: https://github.com/angel-dart/orm
|
||||||
|
@ -14,6 +14,7 @@ dependencies:
|
||||||
build: ">=0.12.0 <2.0.0"
|
build: ">=0.12.0 <2.0.0"
|
||||||
build_config: ^0.3.0
|
build_config: ^0.3.0
|
||||||
code_builder: ^3.0.0
|
code_builder: ^3.0.0
|
||||||
|
dart_style: ^1.0.0
|
||||||
inflection:
|
inflection:
|
||||||
git:
|
git:
|
||||||
url: https://github.com/thosakwe/dart-inflection.git
|
url: https://github.com/thosakwe/dart-inflection.git
|
||||||
|
@ -24,7 +25,10 @@ dependencies:
|
||||||
source_gen: ^0.9.0
|
source_gen: ^0.9.0
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
angel_framework: ^2.0.0-alpha
|
angel_framework: ^2.0.0-alpha
|
||||||
#angel_migration: ^1.0.0-alpha
|
angel_migration:
|
||||||
|
git:
|
||||||
|
url: https://github.com/angel-dart/migration
|
||||||
|
path: angel_migration
|
||||||
#angel_test: ^1.0.0
|
#angel_test: ^1.0.0
|
||||||
build_runner: ^1.0.0
|
build_runner: ^1.0.0
|
||||||
collection: ^1.0.0
|
collection: ^1.0.0
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
library angel_orm.generator.models.author;
|
library angel_orm.generator.models.author;
|
||||||
|
|
||||||
import 'package:angel_model/angel_model.dart';
|
import 'package:angel_model/angel_model.dart';
|
||||||
|
import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
part 'author.g.dart';
|
part 'author.g.dart';
|
||||||
|
|
|
@ -2,6 +2,27 @@
|
||||||
|
|
||||||
part of angel_orm.generator.models.author;
|
part of angel_orm.generator.models.author;
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// MigrationGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
class AuthorMigration extends Migration {
|
||||||
|
@override
|
||||||
|
up(Schema schema) {
|
||||||
|
schema.create('authors', (table) {
|
||||||
|
table.serial('id')..primaryKey();
|
||||||
|
table.varChar('name');
|
||||||
|
table.timeStamp('created_at');
|
||||||
|
table.timeStamp('updated_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
down(Schema schema) {
|
||||||
|
schema.drop('authors');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
// OrmGenerator
|
// OrmGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
library angel_orm.generator.models.book;
|
library angel_orm.generator.models.book;
|
||||||
|
|
||||||
|
import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_model/angel_model.dart';
|
import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
|
|
@ -2,6 +2,29 @@
|
||||||
|
|
||||||
part of angel_orm.generator.models.book;
|
part of angel_orm.generator.models.book;
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// MigrationGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
class BookMigration extends Migration {
|
||||||
|
@override
|
||||||
|
up(Schema schema) {
|
||||||
|
schema.create('books', (table) {
|
||||||
|
table.serial('id')..primaryKey();
|
||||||
|
table.varChar('name');
|
||||||
|
table.timeStamp('created_at');
|
||||||
|
table.timeStamp('updated_at');
|
||||||
|
table.integer('author_id').references('authors', 'id');
|
||||||
|
table.integer('partner_author_id').references('authors', 'id');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
down(Schema schema) {
|
||||||
|
schema.drop('books');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
// OrmGenerator
|
// OrmGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
library angel_orm.generator.models.car;
|
library angel_orm.generator.models.car;
|
||||||
|
|
||||||
|
import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_model/angel_model.dart';
|
import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
|
|
@ -2,6 +2,30 @@
|
||||||
|
|
||||||
part of angel_orm.generator.models.car;
|
part of angel_orm.generator.models.car;
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// MigrationGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
class CarMigration extends Migration {
|
||||||
|
@override
|
||||||
|
up(Schema schema) {
|
||||||
|
schema.create('cars', (table) {
|
||||||
|
table.serial('id')..primaryKey();
|
||||||
|
table.varChar('make');
|
||||||
|
table.varChar('description');
|
||||||
|
table.boolean('family_friendly');
|
||||||
|
table.timeStamp('recalled_at');
|
||||||
|
table.timeStamp('created_at');
|
||||||
|
table.timeStamp('updated_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
down(Schema schema) {
|
||||||
|
schema.drop('cars');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
// OrmGenerator
|
// OrmGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
|
@ -2,6 +2,26 @@
|
||||||
|
|
||||||
part of angel_orm_generator.test.models.customer;
|
part of angel_orm_generator.test.models.customer;
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// MigrationGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
class CustomerMigration extends Migration {
|
||||||
|
@override
|
||||||
|
up(Schema schema) {
|
||||||
|
schema.create('customers', (table) {
|
||||||
|
table.serial('id')..primaryKey();
|
||||||
|
table.timeStamp('created_at');
|
||||||
|
table.timeStamp('updated_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
down(Schema schema) {
|
||||||
|
schema.drop('customers');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
// OrmGenerator
|
// OrmGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
|
@ -2,6 +2,28 @@
|
||||||
|
|
||||||
part of angel_orm_generator.test.models.foot;
|
part of angel_orm_generator.test.models.foot;
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// MigrationGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
class FootMigration extends Migration {
|
||||||
|
@override
|
||||||
|
up(Schema schema) {
|
||||||
|
schema.create('feet', (table) {
|
||||||
|
table.serial('id')..primaryKey();
|
||||||
|
table.integer('leg_id');
|
||||||
|
table.integer('n_toes');
|
||||||
|
table.timeStamp('created_at');
|
||||||
|
table.timeStamp('updated_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
down(Schema schema) {
|
||||||
|
schema.drop('feet');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
// OrmGenerator
|
// OrmGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
library angel_orm_generator.test.models.fruit;
|
library angel_orm_generator.test.models.fruit;
|
||||||
|
|
||||||
|
import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_model/angel_model.dart';
|
import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
|
|
@ -2,6 +2,28 @@
|
||||||
|
|
||||||
part of angel_orm_generator.test.models.fruit;
|
part of angel_orm_generator.test.models.fruit;
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// MigrationGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
class FruitMigration extends Migration {
|
||||||
|
@override
|
||||||
|
up(Schema schema) {
|
||||||
|
schema.create('fruits', (table) {
|
||||||
|
table.serial('id')..primaryKey();
|
||||||
|
table.integer('tree_id');
|
||||||
|
table.varChar('common_name');
|
||||||
|
table.timeStamp('created_at');
|
||||||
|
table.timeStamp('updated_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
down(Schema schema) {
|
||||||
|
schema.drop('fruits');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
// OrmGenerator
|
// OrmGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
library angel_orm_generator.test.models.leg;
|
library angel_orm_generator.test.models.leg;
|
||||||
|
|
||||||
|
import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_model/angel_model.dart';
|
import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
|
|
@ -2,6 +2,27 @@
|
||||||
|
|
||||||
part of angel_orm_generator.test.models.leg;
|
part of angel_orm_generator.test.models.leg;
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// MigrationGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
class LegMigration extends Migration {
|
||||||
|
@override
|
||||||
|
up(Schema schema) {
|
||||||
|
schema.create('legs', (table) {
|
||||||
|
table.serial('id')..primaryKey();
|
||||||
|
table.varChar('name');
|
||||||
|
table.timeStamp('created_at');
|
||||||
|
table.timeStamp('updated_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
down(Schema schema) {
|
||||||
|
schema.drop('legs');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
// OrmGenerator
|
// OrmGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
|
@ -2,6 +2,30 @@
|
||||||
|
|
||||||
part of angel_orm_generator.test.models.order;
|
part of angel_orm_generator.test.models.order;
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// MigrationGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
class OrderMigration extends Migration {
|
||||||
|
@override
|
||||||
|
up(Schema schema) {
|
||||||
|
schema.create('orders', (table) {
|
||||||
|
table.serial('id')..primaryKey();
|
||||||
|
table.integer('customer_id');
|
||||||
|
table.integer('employee_id');
|
||||||
|
table.timeStamp('order_date');
|
||||||
|
table.integer('shipper_id');
|
||||||
|
table.timeStamp('created_at');
|
||||||
|
table.timeStamp('updated_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
down(Schema schema) {
|
||||||
|
schema.drop('orders');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
// OrmGenerator
|
// OrmGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
library angel_orm_generator.test.models.tree;
|
library angel_orm_generator.test.models.tree;
|
||||||
|
|
||||||
|
import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_model/angel_model.dart';
|
import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
|
|
@ -2,6 +2,27 @@
|
||||||
|
|
||||||
part of angel_orm_generator.test.models.tree;
|
part of angel_orm_generator.test.models.tree;
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// MigrationGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
class TreeMigration extends Migration {
|
||||||
|
@override
|
||||||
|
up(Schema schema) {
|
||||||
|
schema.create('trees', (table) {
|
||||||
|
table.serial('id')..primaryKey();
|
||||||
|
table.declare('rings', new ColumnType('smallint'));
|
||||||
|
table.timeStamp('created_at');
|
||||||
|
table.timeStamp('updated_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
down(Schema schema) {
|
||||||
|
schema.drop('trees');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
// OrmGenerator
|
// OrmGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
library angel_orm_generator.test.models.user;
|
library angel_orm_generator.test.models.user;
|
||||||
|
|
||||||
|
import 'package:angel_migration/angel_migration.dart';
|
||||||
import 'package:angel_model/angel_model.dart';
|
import 'package:angel_model/angel_model.dart';
|
||||||
import 'package:angel_orm/angel_orm.dart';
|
import 'package:angel_orm/angel_orm.dart';
|
||||||
import 'package:angel_serialize/angel_serialize.dart';
|
import 'package:angel_serialize/angel_serialize.dart';
|
||||||
|
|
|
@ -2,6 +2,62 @@
|
||||||
|
|
||||||
part of angel_orm_generator.test.models.user;
|
part of angel_orm_generator.test.models.user;
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// MigrationGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
class UserMigration extends Migration {
|
||||||
|
@override
|
||||||
|
up(Schema schema) {
|
||||||
|
schema.create('users', (table) {
|
||||||
|
table.serial('id')..primaryKey();
|
||||||
|
table.varChar('username');
|
||||||
|
table.varChar('password');
|
||||||
|
table.varChar('email');
|
||||||
|
table.timeStamp('created_at');
|
||||||
|
table.timeStamp('updated_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
down(Schema schema) {
|
||||||
|
schema.drop('users');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class RoleMigration extends Migration {
|
||||||
|
@override
|
||||||
|
up(Schema schema) {
|
||||||
|
schema.create('roles', (table) {
|
||||||
|
table.serial('id')..primaryKey();
|
||||||
|
table.varChar('name');
|
||||||
|
table.timeStamp('created_at');
|
||||||
|
table.timeStamp('updated_at');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
down(Schema schema) {
|
||||||
|
schema.drop('roles');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class UserRoleMigration extends Migration {
|
||||||
|
@override
|
||||||
|
up(Schema schema) {
|
||||||
|
schema.create('user_roles', (table) {
|
||||||
|
table.serial('id')..primaryKey();
|
||||||
|
table.integer('user_id').references('users', 'id');
|
||||||
|
table.integer('role_id').references('roles', 'id');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
down(Schema schema) {
|
||||||
|
schema.drop('user_roles');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
// OrmGenerator
|
// OrmGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
Loading…
Reference in a new issue