-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata-mapper-basic-example.js
More file actions
131 lines (105 loc) · 3.03 KB
/
Copy pathdata-mapper-basic-example.js
File metadata and controls
131 lines (105 loc) · 3.03 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
123
124
125
126
127
128
129
const { createDataMapperEntity, DataSource, createRepository } = 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 user your repo
class UserService {
constructor(userRepository) {
this.userRepository = userRepository;
}
async saveUser(userData) {
// Create a new user using the UserRepository
return await this.userRepository.save(userData);
}
async findUserByName(name) {
return await this.userRepository.findByName(name);
}
async findUserByEmailAndName(email, name) {
return await this.userRepository.findOne({
"$and": [
{ "name": name },
{ "email": email }
]
}
)
}
async getUserById(id) {
// Fetch a user by ID
return await this.userRepository.find(id);
}
async deleteUser(id) {
// Delete a user by ID
return await this.userRepository.delete(id);
}
}
async function main() {
// Create the User class using the helper
const User = await createDataMapperEntity(
"User",
"user",
schema,
{})
// Instanciate a user
const user = new User({ name: "John" });
user.address = { "city": "Lyon" }
// { name: 'John', address: { city: 'Lyon' } }
console.log(user.toJSON())
const userRepository = createRepository(
User,
ds,
{
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
}
}
}
)
// instantiate service
const myService = new UserService(userRepository);
await myService.saveUser(user);
// Document like this will be created in DB:
/* {
"_id": "f9d62b31017e03b71fb0a84a5e000a08",
"_rev": "1-8d43f9216da5ae302f393886daa52765",
"name": "John",
"address": {
"city": "Lyon"
},
"type": "user"
} */
const found = await myService.findUserByName("John");
console.log(found.toJSON());
/* {
name: 'John',
address: { city: 'Lyon' },
_id: 'f9d62b31017e03b71fb0a84a5e000a08',
_rev: '1-8d43f9216da5ae302f393886daa52765'
} */
}
main();