Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
f60bd89
feat(mongoose): add list, create, delete, update actions
Scra3 May 17, 2022
0deab1b
feat: first aggregation
Scra3 May 17, 2022
574272b
feat: operator month
Scra3 May 17, 2022
0266d14
fix: refactor conditions
Scra3 May 17, 2022
c864603
feat: implements all operators
Scra3 May 17, 2022
37e4361
feat: nested fields
Scra3 May 17, 2022
0393639
feat: add rating
Scra3 May 17, 2022
777f710
refactor: aggregator
Scra3 May 18, 2022
e857515
feat: wip
Scra3 May 18, 2022
7977c43
fix: replace | by -
Scra3 May 19, 2022
63de52f
refactor: list
Scra3 May 19, 2022
9e92c7e
fix: adding schema
Scra3 May 19, 2022
6d811a5
test: adding a test to focus the bug with two many to many
Scra3 May 20, 2022
ff81e09
fix: wip
Scra3 May 23, 2022
3c61d36
fix: test and refacto
Scra3 May 23, 2022
ed50d69
fix: wip
Scra3 May 23, 2022
7db6803
fix: a bug
Scra3 May 23, 2022
6ef2359
fix: update case
Scra3 May 24, 2022
cdb996c
fix: create
Scra3 May 24, 2022
9863348
fix: delete
Scra3 May 24, 2022
7091613
fix: generator
Scra3 May 24, 2022
e8c0297
fix: wip
Scra3 May 24, 2022
799f49d
fix: huge refacto
Scra3 May 24, 2022
1120db8
fix: refacto for many to many
Scra3 May 24, 2022
99e3449
fix: refacto
Scra3 May 24, 2022
09401f6
refactor: code
Scra3 May 25, 2022
cabf359
fix: remove typo
Scra3 May 25, 2022
1492c92
fix: review
Scra3 May 25, 2022
0d6858c
fix: wip
Scra3 May 25, 2022
c1fc812
fix: adding
Scra3 May 25, 2022
949ebe7
feat: wip
Scra3 May 25, 2022
ea89777
feat: add one to one
Scra3 May 27, 2022
5c735d5
fix: refactor
Scra3 May 27, 2022
a26075b
fix: allow to generate relation when adding a collection after create…
Scra3 May 27, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions docs/datasources/provided/orm/mongoose.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
The sequelize data source allows to import collections from a sequelize instance.

Note that:

- Sequelize scopes will be mapped to Forest Admin segments
- Sequelize hooks will run
- Sequelize association, field aliasing, relationships and validation will be respected

```javascript
const { createAgent } = require('@forestadmin/agent');
const { createSequelizeDataSource } = require('@forestadmin/datasource-sequelize');
const { Sequelize, Model, DataTypes } = require('@sequelize/core');

// Create a sequelize instance
const sequelize = new Sequelize('sqlite::memory:');

class User extends Model {}
User.init(
{
username: DataTypes.STRING,
birthday: DataTypes.DATE,
},
{ sequelize, modelName: 'user' },
);

// Create agent and import collections from sequelize
const agent = createAgent(options).addDataSource(createSequelizeDataSource(sequelize));
```
1 change: 1 addition & 0 deletions packages/_example/scripts/db-seed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ async function createReviewRecords(connection: Connection, storeRecords: any[]):
for (let i = 0; i < 30; i += 1) {
reviewsRecords.push({
title: faker.word.adjective(),
rating: faker.datatype.number({ min: 1, max: 5 }),
message: faker.lorem.paragraphs(1),
storeId: faker.helpers.randomize(storeRecords.map(({ id }) => id)),
});
Expand Down
2 changes: 1 addition & 1 deletion packages/_example/src/agent.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export default async function makeAgent(options: AgentOptions) {
.addDataSource(createSequelizeDataSource(sequelizePostgres))
.addDataSource(createSequelizeDataSource(sequelizeMySql))
.addDataSource(createSequelizeDataSource(sequelizeMsSql))
.addDataSource(createMongooseDataSource(mongoose))
.addDataSource(createMongooseDataSource(mongoose, ['review:rating']))

.addChart('numRentals', async (context, resultBuilder) => {
const rentals = context.dataSource.getCollection('rental');
Expand Down
25 changes: 24 additions & 1 deletion packages/_example/src/datasources/mongoose/mongodb.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import mongoose from 'mongoose';
import mongoose, { Schema } from 'mongoose';

const connectionString = 'mongodb://root:password@localhost:27017';
const connection = mongoose.createConnection(connectionString);
Expand All @@ -13,10 +13,33 @@ connection.model(
message: {
type: String,
},
rating: {
type: Number,
},
storeId: {
type: Number,
required: true,
},
testArrayIds: {
type: [Number],
},
ownerIds: {
type: [mongoose.Schema.Types.ObjectId],
ref: 'ownerMongo',
},
oldOwnerIds: {
type: [mongoose.Schema.Types.ObjectId],
ref: 'ownerMongo',
},
}),
);

connection.model(
'ownerMongo',
new Schema({
name: {
type: String,
},
}),
);

Expand Down
96 changes: 96 additions & 0 deletions packages/_example/src/typings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,14 @@ export type Schema = {
nested: {};
flat: {};
};
ownerMongo: {
plain: {
name: string;
_id: string;
};
nested: {};
flat: {};
};
post: {
plain: {
id: number;
Expand Down Expand Up @@ -199,12 +207,18 @@ export type Schema = {
title: string;
message: string;
storeId: number;
testArrayIds: Array<number>;
ownerIds: string;
oldOwnerIds: string;
_id: string;
};
nested: {
rating__review__oneToOne: Schema['review__rating']['plain'] & Schema['review__rating']['nested'];
store: Schema['store']['plain'] & Schema['store']['nested'];
};
flat: {
'rating__review__oneToOne:_id': string;
'rating__review__oneToOne:rating': number;
'store:id': number;
'store:name': string;
'store:ownerId': number;
Expand All @@ -221,6 +235,88 @@ export type Schema = {
'store:address:updatedAt': string;
};
};
review__ownerMongo__oldOwnerIds: {
plain: {
review_id: string;
ownerMongo_id: string;
};
nested: {
review_id__oldOwnerIds__manyToOne: Schema['review']['plain'] & Schema['review']['nested'];
ownerMongo_id__oldOwnerIds__manyToOne: Schema['ownerMongo']['plain'] & Schema['ownerMongo']['nested'];
};
flat: {
'review_id__oldOwnerIds__manyToOne:title': string;
'review_id__oldOwnerIds__manyToOne:message': string;
'review_id__oldOwnerIds__manyToOne:storeId': number;
'review_id__oldOwnerIds__manyToOne:testArrayIds': Array<number>;
'review_id__oldOwnerIds__manyToOne:ownerIds': string;
'review_id__oldOwnerIds__manyToOne:oldOwnerIds': string;
'review_id__oldOwnerIds__manyToOne:_id': string;
'review_id__oldOwnerIds__manyToOne:rating__review__oneToOne:_id': string;
'review_id__oldOwnerIds__manyToOne:rating__review__oneToOne:rating': number;
'review_id__oldOwnerIds__manyToOne:store:id': number;
'review_id__oldOwnerIds__manyToOne:store:name': string;
'review_id__oldOwnerIds__manyToOne:store:ownerId': number;
'review_id__oldOwnerIds__manyToOne:store:ownerFullName': string;
'review_id__oldOwnerIds__manyToOne:store:owner:id': number;
'review_id__oldOwnerIds__manyToOne:store:owner:firstName': string;
'review_id__oldOwnerIds__manyToOne:store:owner:lastName': string;
'review_id__oldOwnerIds__manyToOne:store:owner:fullName': string;
'review_id__oldOwnerIds__manyToOne:store:address:id': number;
'review_id__oldOwnerIds__manyToOne:store:address:zipCode': string;
'review_id__oldOwnerIds__manyToOne:store:address:address': string;
'review_id__oldOwnerIds__manyToOne:store:address:storeId': number;
'review_id__oldOwnerIds__manyToOne:store:address:createdAt': string;
'review_id__oldOwnerIds__manyToOne:store:address:updatedAt': string;
'ownerMongo_id__oldOwnerIds__manyToOne:name': string;
'ownerMongo_id__oldOwnerIds__manyToOne:_id': string;
};
};
review__ownerMongo__ownerIds: {
plain: {
review_id: string;
ownerMongo_id: string;
};
nested: {
review_id__ownerIds__manyToOne: Schema['review']['plain'] & Schema['review']['nested'];
ownerMongo_id__ownerIds__manyToOne: Schema['ownerMongo']['plain'] & Schema['ownerMongo']['nested'];
};
flat: {
'review_id__ownerIds__manyToOne:title': string;
'review_id__ownerIds__manyToOne:message': string;
'review_id__ownerIds__manyToOne:storeId': number;
'review_id__ownerIds__manyToOne:testArrayIds': Array<number>;
'review_id__ownerIds__manyToOne:ownerIds': string;
'review_id__ownerIds__manyToOne:oldOwnerIds': string;
'review_id__ownerIds__manyToOne:_id': string;
'review_id__ownerIds__manyToOne:rating__review__oneToOne:_id': string;
'review_id__ownerIds__manyToOne:rating__review__oneToOne:rating': number;
'review_id__ownerIds__manyToOne:store:id': number;
'review_id__ownerIds__manyToOne:store:name': string;
'review_id__ownerIds__manyToOne:store:ownerId': number;
'review_id__ownerIds__manyToOne:store:ownerFullName': string;
'review_id__ownerIds__manyToOne:store:owner:id': number;
'review_id__ownerIds__manyToOne:store:owner:firstName': string;
'review_id__ownerIds__manyToOne:store:owner:lastName': string;
'review_id__ownerIds__manyToOne:store:owner:fullName': string;
'review_id__ownerIds__manyToOne:store:address:id': number;
'review_id__ownerIds__manyToOne:store:address:zipCode': string;
'review_id__ownerIds__manyToOne:store:address:address': string;
'review_id__ownerIds__manyToOne:store:address:storeId': number;
'review_id__ownerIds__manyToOne:store:address:createdAt': string;
'review_id__ownerIds__manyToOne:store:address:updatedAt': string;
'ownerMongo_id__ownerIds__manyToOne:name': string;
'ownerMongo_id__ownerIds__manyToOne:_id': string;
};
};
review__rating: {
plain: {
_id: string;
rating: number;
};
nested: {};
flat: {};
};
store: {
plain: {
id: number;
Expand Down
3 changes: 2 additions & 1 deletion packages/datasource-mongoose/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
],
"dependencies": {
"@forestadmin/datasource-toolkit": "1.0.0-beta.16",
"mongoose": "^6.3.2"
"mongoose": "^6.3.2",
"luxon": "^2.3.0"
},
"peerDependencies": {},
"scripts": {
Expand Down
Loading