diff --git a/lib/api/mysql/mysql_databases_api.dart b/lib/api/mysql/mysql_databases_api.dart new file mode 100644 index 0000000..6ffb0c1 --- /dev/null +++ b/lib/api/mysql/mysql_databases_api.dart @@ -0,0 +1,8 @@ +import 'package:paas_dashboard_flutter/module/mysql/mysql_database.dart'; + +class MysqlDatabaseApi { + static Future> getDatabaseList( + String host, int port, String username, String password) async { + throw UnimplementedError(); + } +} diff --git a/lib/api/mysql/mysql_tables_api.dart b/lib/api/mysql/mysql_tables_api.dart new file mode 100644 index 0000000..5ec6d85 --- /dev/null +++ b/lib/api/mysql/mysql_tables_api.dart @@ -0,0 +1,8 @@ +import 'package:paas_dashboard_flutter/module/mysql/mysql_table.dart'; + +class MysqlTablesApi { + static Future> getTableList(String host, int port, + String username, String password, String databaseName) async { + throw UnimplementedError(); + } +} diff --git a/lib/module/mysql/const.dart b/lib/module/mysql/const.dart new file mode 100644 index 0000000..9f1d676 --- /dev/null +++ b/lib/module/mysql/const.dart @@ -0,0 +1,7 @@ +class MysqlConst { + static const String infoDb = "information_schema"; + static const String defaultHost = "localhost"; + static const int defaultPort = 3306; + static const String defaultUsername = "hzj"; + static const String defaultPassword = "Mysql@123"; +} diff --git a/lib/module/mysql/mysql_database.dart b/lib/module/mysql/mysql_database.dart new file mode 100644 index 0000000..18c0ff7 --- /dev/null +++ b/lib/module/mysql/mysql_database.dart @@ -0,0 +1,14 @@ +class DatabaseResp { + final String databaseName; + + DatabaseResp(this.databaseName); + + DatabaseResp deepCopy() { + return new DatabaseResp(this.databaseName); + } + + @override + String toString() { + return 'DatabaseResp{databaseName: $databaseName}'; + } +} diff --git a/lib/module/mysql/mysql_table.dart b/lib/module/mysql/mysql_table.dart new file mode 100644 index 0000000..963fbc3 --- /dev/null +++ b/lib/module/mysql/mysql_table.dart @@ -0,0 +1,14 @@ +class TableResp { + final String tableName; + + TableResp(this.tableName); + + TableResp deepCopy() { + return new TableResp(this.tableName); + } + + @override + String toString() { + return 'TableResp{tableName: $tableName}'; + } +} diff --git a/lib/persistent/po/mysql_instance_po.dart b/lib/persistent/po/mysql_instance_po.dart index 973073d..a5640b2 100644 --- a/lib/persistent/po/mysql_instance_po.dart +++ b/lib/persistent/po/mysql_instance_po.dart @@ -9,6 +9,10 @@ class MysqlInstancePo { MysqlInstancePo( this.id, this.name, this.host, this.port, this.username, this.password); + MysqlInstancePo deepCopy() { + return new MysqlInstancePo(id, name, host, port, username, password); + } + Map toMap() { return { 'id': id, diff --git a/lib/route/page_route_const.dart b/lib/route/page_route_const.dart index 9cc4085..24e295d 100644 --- a/lib/route/page_route_const.dart +++ b/lib/route/page_route_const.dart @@ -8,6 +8,8 @@ class PageRouteConst { static const String MongoInstance = '/mongo/instance'; static const String MongoDatabase = '/mongo/instance/database'; static const String Mysql = '/mysql'; + static const String MysqlInstance = '/mysql/instance'; + static const String MysqlDatabase = '/mysql/instance/database'; static const String Pulsar = '/pulsar'; static const String PulsarInstance = '/pulsar/instance'; static const String PulsarTenant = '/pulsar/instance/tenant'; diff --git a/lib/ui/mysql/mysql_page.dart b/lib/ui/mysql/mysql_page.dart index 922d0d9..76e2ece 100644 --- a/lib/ui/mysql/mysql_page.dart +++ b/lib/ui/mysql/mysql_page.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:paas_dashboard_flutter/generated/l10n.dart'; +import 'package:paas_dashboard_flutter/route/page_route_const.dart'; import 'package:paas_dashboard_flutter/ui/util/form_util.dart'; import 'package:paas_dashboard_flutter/vm/mysql/mysql_instance_list_view_model.dart'; import 'package:provider/provider.dart'; @@ -16,7 +17,7 @@ class _MysqlPageState extends State { void initState() { super.initState(); Provider.of(context, listen: false) - .fetchMongoInstances(); + .fetchMysqlInstances(); } @override @@ -26,7 +27,7 @@ class _MysqlPageState extends State { var refreshButton = TextButton( onPressed: () { setState(() { - vm.fetchMongoInstances(); + vm.fetchMysqlInstances(); }); }, child: Text(S.of(context).refresh)); @@ -41,7 +42,7 @@ class _MysqlPageState extends State { ), ), Center( - child: Text('Mongo Instance List'), + child: Text('Mysql Instance List'), ), SingleChildScrollView( child: DataTable( @@ -54,14 +55,19 @@ class _MysqlPageState extends State { DataColumn(label: Text('Username')), ], rows: vm.instances - .map((itemRow) => - DataRow(onSelectChanged: (bool? selected) {}, cells: [ - DataCell(Text(itemRow.id.toString())), - DataCell(Text(itemRow.name)), - DataCell(Text(itemRow.host)), - DataCell(Text(itemRow.port.toString())), - DataCell(Text(itemRow.username)), - ])) + .map((itemRow) => DataRow( + onSelectChanged: (bool? selected) { + Navigator.pushNamed( + context, PageRouteConst.MysqlInstance, + arguments: itemRow.deepCopy()); + }, + cells: [ + DataCell(Text(itemRow.id.toString())), + DataCell(Text(itemRow.name)), + DataCell(Text(itemRow.host)), + DataCell(Text(itemRow.port.toString())), + DataCell(Text(itemRow.username)), + ])) .toList(), ), ), @@ -69,7 +75,7 @@ class _MysqlPageState extends State { ); return Scaffold( appBar: AppBar( - title: Text('Mongo Dashboard'), + title: Text('Mysql Dashboard'), ), body: body); } diff --git a/lib/vm/mysql/mysql_instance_list_view_model.dart b/lib/vm/mysql/mysql_instance_list_view_model.dart index e5f2fe9..843ef65 100644 --- a/lib/vm/mysql/mysql_instance_list_view_model.dart +++ b/lib/vm/mysql/mysql_instance_list_view_model.dart @@ -5,7 +5,7 @@ import 'package:paas_dashboard_flutter/vm/mysql/mysql_instance_view_model.dart'; class MysqlInstanceListViewModel extends ChangeNotifier { List instances = []; - Future fetchMongoInstances() async { + Future fetchMysqlInstances() async { final results = await Persistent.mysqlInstances(); this.instances = results.map((e) => MysqlInstanceViewModel(e)).toList(); notifyListeners(); @@ -14,11 +14,11 @@ class MysqlInstanceListViewModel extends ChangeNotifier { Future createMysql(String name, String host, int port, String username, String password) async { Persistent.saveMysql(name, host, port, username, password); - fetchMongoInstances(); + fetchMysqlInstances(); } Future deleteMysql(int id) async { Persistent.deleteMysql(id); - fetchMongoInstances(); + fetchMysqlInstances(); } } diff --git a/lib/vm/mysql/mysql_instance_view_model.dart b/lib/vm/mysql/mysql_instance_view_model.dart index a464a45..ea4b8df 100644 --- a/lib/vm/mysql/mysql_instance_view_model.dart +++ b/lib/vm/mysql/mysql_instance_view_model.dart @@ -5,6 +5,10 @@ class MysqlInstanceViewModel { MysqlInstanceViewModel(this.mysqlInstancePo); + MysqlInstanceViewModel deepCopy() { + return new MysqlInstanceViewModel(mysqlInstancePo.deepCopy()); + } + int get id { return this.mysqlInstancePo.id; } diff --git a/pubspec.lock b/pubspec.lock index 91342ea..d8473f6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -198,6 +198,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.0.2" + mysql1: + dependency: "direct main" + description: + name: mysql1 + url: "https://pub.dartlang.org" + source: hosted + version: "0.19.2" nested: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 24e3b9c..3dd5c1b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -29,6 +29,7 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 mongo_dart: ^0.7.4 + mysql1: ^0.19.2 http: ^0.13.3 clipboard: provider: ^6.0.1 diff --git a/test/api/mysql/mysql_databases_api_query_test.dart b/test/api/mysql/mysql_databases_api_query_test.dart new file mode 100644 index 0000000..479a9c5 --- /dev/null +++ b/test/api/mysql/mysql_databases_api_query_test.dart @@ -0,0 +1,14 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:paas_dashboard_flutter/api/mysql/mysql_databases_api.dart'; +import 'package:paas_dashboard_flutter/module/mysql/const.dart'; + +void main() { + test("test_query_databases", () async { + var list = await MysqlDatabaseApi.getDatabaseList( + MysqlConst.defaultHost, + MysqlConst.defaultPort, + MysqlConst.defaultUsername, + MysqlConst.defaultPassword); + print(list); + }); +} diff --git a/test/api/mysql/mysql_tables_api_query_test.dart b/test/api/mysql/mysql_tables_api_query_test.dart new file mode 100644 index 0000000..de3b5cc --- /dev/null +++ b/test/api/mysql/mysql_tables_api_query_test.dart @@ -0,0 +1,15 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:paas_dashboard_flutter/api/mysql/mysql_tables_api.dart'; +import 'package:paas_dashboard_flutter/module/mysql/const.dart'; + +void main() { + test("test_query_tables", () async { + var list = await MysqlTablesApi.getTableList( + MysqlConst.defaultHost, + MysqlConst.defaultPort, + MysqlConst.defaultUsername, + MysqlConst.defaultPassword, + MysqlConst.infoDb); + print(list); + }); +}