Skip to content

Commit 9a6c652

Browse files
feat(orm): updated api structure and dir structure
1 parent 1dc065f commit 9a6c652

File tree

7 files changed

+1107
-332
lines changed

7 files changed

+1107
-332
lines changed
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
import 'package:dartseid_orm/dartseid_orm.dart';
2+
3+
class DormMockAdapter implements DormAdapterBase {
4+
final dynamic _connection;
5+
6+
DormMockAdapter({
7+
required dynamic connection,
8+
}) : _connection = connection;
9+
10+
@override
11+
Future<void> init() {
12+
// TODO: implement init
13+
throw UnimplementedError();
14+
}
15+
16+
@override
17+
Future<Map<String, dynamic>> operate({
18+
required TableOperator operator,
19+
required DormTransaction? transaction,
20+
required bool isExplain,
21+
String? rawSql,
22+
Map<String, dynamic>? rawNoSql,
23+
List<Map<String, WhereParam>> whereParams = const [],
24+
List<Map<String, WhereParam>> havingParams = const [],
25+
List<Map<String, SelectParam>> selectParams = const [],
26+
List<IncludeParam> includeParams = const [],
27+
List<String> groupParams = const [],
28+
List<Map<String, int>> sortParams = const [],
29+
List<Map<String, dynamic>> updateWithParams = const [],
30+
List<Map<String, dynamic>> createWithParams = const [],
31+
int? limit,
32+
int? skip,
33+
}) {
34+
throw UnimplementedError();
35+
}
36+
37+
@override
38+
DormTransaction transaction() {
39+
// TODO: implement transaction
40+
throw UnimplementedError();
41+
}
42+
}
43+
44+
Future<dynamic> dorming() async {
45+
final a = await Dorm.init(
46+
adapter: DormMockAdapter(connection: ""),
47+
);
48+
49+
final t = a.table(
50+
"users",
51+
{
52+
"id": ColumnInt(),
53+
"name": ColumnString(),
54+
},
55+
converter: (
56+
fromJson: (Map<String, dynamic> j) {},
57+
toJson: () => {},
58+
),
59+
);
60+
61+
t.index({"id": 1, "name": 1});
62+
63+
// final trx = t.transaction();
64+
// final b = await trx.start();
65+
// trx.commit();
66+
// trx.rollback();
67+
68+
final data = await t.transaction().start(
69+
(trx) async {
70+
final r = t.findOne(transaction: trx)
71+
..where(
72+
and([
73+
{
74+
"name": like("%aa"),
75+
"id": array([1, 2, 4]),
76+
},
77+
{"name": eq("2")}
78+
]),
79+
)
80+
..where(
81+
or([
82+
{
83+
"name": like("%aa"),
84+
"id": between(1, 200),
85+
}
86+
]),
87+
)
88+
..select({
89+
"id": show(),
90+
"_id": hide(),
91+
"nom": field("name"),
92+
"avg": avg("name"),
93+
"count": count("name"),
94+
"countD": count("DISTINCT(name)"),
95+
"x": distinct("name"),
96+
"max": max("name"),
97+
})
98+
..include(
99+
"profile",
100+
on: "profileId",
101+
where: and([
102+
{"bio": notEq(null)},
103+
{"bio": notEq("")},
104+
]),
105+
joinType: JoinOperation.left,
106+
)
107+
..limit(10)
108+
..skip(0);
109+
110+
Future<String> fromJsonFn(Map<String, dynamic> j) async {
111+
return "";
112+
}
113+
114+
final result = await r.exec(converter: (fromJson: fromJsonFn));
115+
116+
return switch (result) {
117+
ExecResultData(data: final data) => data,
118+
ExecResultFailure(exception: final _) => await () async {
119+
throw Exception("I am basic");
120+
}()
121+
};
122+
},
123+
);
124+
125+
// more dorming
126+
return data;
127+
}
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
export 'src/dartseid_orm_base.dart';
1+
export 'src/adapter.dart';
2+
export 'src/core.dart';
3+
export 'src/query.dart';
4+
export 'src/table.dart';
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
import 'dart:async';
2+
3+
import 'package:dartseid_orm/src/core.dart';
4+
import 'package:dartseid_orm/src/query.dart';
5+
6+
abstract interface class DormAdapterBase {
7+
final dynamic _connection;
8+
9+
DormAdapterBase({
10+
required dynamic connection,
11+
}) : _connection = connection;
12+
13+
Future<void> init();
14+
Future<Map<String, dynamic>> operate({
15+
required TableOperator operator,
16+
required DormTransaction? transaction,
17+
required bool isExplain,
18+
String? rawSql,
19+
Map<String, dynamic>? rawNoSql,
20+
List<Map<String, WhereParam>> whereParams = const [],
21+
List<Map<String, WhereParam>> havingParams = const [],
22+
List<Map<String, SelectParam>> selectParams = const [],
23+
List<IncludeParam> includeParams = const [],
24+
List<String> groupParams = const [],
25+
List<Map<String, int>> sortParams = const [],
26+
List<Map<String, dynamic>> updateWithParams = const [],
27+
List<Map<String, dynamic>> createWithParams = const [],
28+
int? limit,
29+
int? skip,
30+
});
31+
DormTransaction transaction();
32+
}
33+
34+
abstract class DormTransaction {
35+
bool isStarted = false;
36+
bool isCommitted = false;
37+
bool isRolledBack = false;
38+
39+
Future<void> commit() async {
40+
if (!isStarted) {
41+
throw DormException(
42+
message: "Cannot Commit a transaction that has not been started",
43+
originalError: null,
44+
);
45+
}
46+
if (isCommitted) {
47+
throw DormException(
48+
message: "Cannot Commit a transaction that is already committed",
49+
originalError: null,
50+
);
51+
}
52+
if (isRolledBack) {
53+
throw DormException(
54+
message: "Cannot Commit a transaction that has been rolled back",
55+
originalError: null,
56+
);
57+
}
58+
await _commit();
59+
isCommitted = true;
60+
}
61+
62+
Future<void> rollback() async {
63+
if (!isStarted) {
64+
throw DormException(
65+
message: "Cannot Rollback a transaction that has not been started",
66+
originalError: null,
67+
);
68+
}
69+
if (isCommitted) {
70+
throw DormException(
71+
message: "Cannot Rollback a transaction that is already committed",
72+
originalError: null,
73+
);
74+
}
75+
if (isRolledBack) {
76+
throw DormException(
77+
message: "Cannot Rollback a transaction that is already rolled back",
78+
originalError: null,
79+
);
80+
}
81+
await _rollback();
82+
isRolledBack = true;
83+
}
84+
85+
Future<T?> start<T>([
86+
FutureOr<T> Function(DormTransaction trx)? callback,
87+
]) async {
88+
try {
89+
await _start();
90+
isStarted = true;
91+
if (callback == null) {
92+
return null;
93+
}
94+
final data = await callback(this);
95+
await commit();
96+
return data;
97+
} catch (e) {
98+
if (callback != null) {
99+
await rollback();
100+
}
101+
rethrow;
102+
}
103+
}
104+
105+
Future<void> _commit();
106+
107+
Future<void> _rollback();
108+
109+
Future<void> _start();
110+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import 'dart:async';
2+
3+
import 'package:dartseid_orm/src/adapter.dart';
4+
import 'package:dartseid_orm/src/table.dart';
5+
6+
// This will be initialized with dart orm class after init method is called
7+
final Map<String, Dorm> _dorms = {};
8+
9+
Dorm getDormInstance([String? name]) {
10+
final dorm = _dorms[name ?? "__default"];
11+
if (dorm == null) {
12+
throw StateError(
13+
'Dartseid orm is not initialized. Please run Dorm.init',
14+
);
15+
}
16+
return dorm;
17+
}
18+
19+
class Dorm with DormTable {
20+
final DormAdapterBase adapter;
21+
22+
Dorm._({required this.adapter, String? name}) {
23+
this.name = name ?? "__default";
24+
_dorms[this.name] = this;
25+
}
26+
27+
DormTransaction transaction() {
28+
return adapter.transaction();
29+
}
30+
31+
static Future<Dorm> init({
32+
required DormAdapterBase adapter,
33+
String? name,
34+
}) async {
35+
await adapter.init();
36+
return Dorm._(adapter: adapter, name: name);
37+
}
38+
}
39+
40+
class DormException implements Exception {
41+
final Object? originalError;
42+
final String message;
43+
44+
DormException({required this.message, required this.originalError});
45+
}

0 commit comments

Comments
 (0)