1 module deepmagic.orm.models.prototype.model;
2 
3 import deepmagic.orm;
4 
5 class PrototypeModel(DBConfigTemplate, RecordTemplate, PuppetTemplate, PuppetsTemplate){
6 	DBConfigTemplate database;
7 
8 	this(DBConfigTemplate database){
9 		this.database = database;
10 	}
11 
12 	RecordTemplate[] find(ORM_Query query){
13 		query.record_name = __traits(identifier, RecordTemplate);
14 		Query result = this.database.session.createQuery(query.toString());
15 		return result.list!(RecordTemplate)();
16 	}
17 
18 	void populate(PuppetsTemplate _puppets){
19 		if(_puppets != null){
20 			foreach(int i, PuppetTemplate puppet; _puppets){
21 				RecordTemplate record = new RecordTemplate(this.database, puppet);
22 				record.save();
23 			}
24 		}
25 	}
26 
27 	//take
28 	RecordTemplate first(ORM_Query query){
29 		return this.find(query)[0];
30 	}
31 	RecordTemplate last(ORM_Query query){
32 		return this.find(query)[$-1];
33 	}
34 	//find_by
35 	//find_each
36 	//find_in_batches
37 	//where
38 	//not
39 	//order
40 	//select
41 	//limit
42 	//group
43 	//count
44 	//having
45 	//reorder
46 	//reverse_order
47 	/+
48 	RecordTemplate[] reverse_order(ORM_Query query){
49 		import std.algorithm;
50 		return reverse(this.find(query));
51 	}
52 	+/
53 	//none
54 	//create
55 	//find_or_create_by
56 	//find_by_sql
57 	//select_all
58 	//pluck
59 	//ids
60 	//exists
61 	//includes
62 	//average
63 	//minimum
64 	//maximum
65 	//sum
66 	//explain
67 	/+
68 	//callbacks
69 	3.1 Creating an Object
70 		before_validation
71 		after_validation
72 		before_save
73 		around_save
74 		before_create
75 		around_create
76 		after_create
77 		after_save
78 		after_commit/after_rollback
79 
80 	3.2 Updating an Object
81 		before_validation
82 		after_validation
83 		before_save
84 		around_save
85 		before_update
86 		around_update
87 		after_update
88 		after_save
89 		after_commit/after_rollback
90 
91 	3.3 Destroying an Object
92 		before_destroy
93 		around_destroy
94 		after_destroy
95 		after_commit/after_rollback
96 	+/
97 }