-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathactive-record-basic-example.js
More file actions
122 lines (97 loc) · 2.85 KB
/
Copy pathactive-record-basic-example.js
File metadata and controls
122 lines (97 loc) · 2.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
const { createActiveRecordEntity, DataSource } = require('nosqlax');
const schema = {
"$id": "my-schema",
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"definitions": {
"address": {
"type": "object",
"properties": {
"city": { "type": "string" }
}
}
},
"properties": {
"name": { "type": "string" },
"address": {
"$ref": "#/definitions/address"
}
}
}
// Datasource (connexion)
const ds = new DataSource({
url: 'http://localhost:5984',
database: 'nosqlax-test'
})
// Define a service class using your entity
class UserService {
constructor(UserClass) {
this.UserClass = UserClass;
}
async findUserByName(name) {
return await this.UserClass.findByName(name);
}
async findUserByEmailAndName(email, name) {
return await this.UserClass.findOne({
"$and": [
{ "name": name },
{ "email": email }
]
}
)
}
async getUserById(id) {
// Fetch a user by ID
return await this.UserClass.find(id);
}
async deleteUser(id) {
// Delete a user by ID
return await this.UserClass.delete(id);
}
}
async function main() {
// Create the User class using the helper
const User = await createActiveRecordEntity(
"User", // class name
"user", // type
schema, // Schema or schema ID
ds, // Data source
{ // additional query methods
methods: {
async findByName(name) {
return this.findOne({ name: { $eq: name } });
},
async getViewA(options) {
return this.dbConnection.view('design', 'view', options)
// you can also process view results here to return User entities
}
}
})
// Instanciate a user
const user = new User({ name: "John Active" });
user.address = { "city": "Lyon" }
// { name: 'John', address: { city: 'Lyon' } }
console.log(user.toJSON())
await user.save();
// Document like this will be created in DB:
/* {
"_id": "f9d62b31017e03b71fb0a84a5e000a08",
"_rev": "1-8d43f9216da5ae302f393886daa52765",
"name": "John Active",
"address": {
"city": "Lyon"
},
"type": "user"
} */
// instantiate service
const myService = new UserService(User);
const found = await myService.findUserByName("John Active");
console.log(found.toJSON());
/* {
name: 'John Active',
address: { city: 'Lyon' },
_id: 'f9d62b31017e03b71fb0a84a5e000a08',
_rev: '1-8d43f9216da5ae302f393886daa52765'
} */
}
main();