sequelize-adapter
Version:
Use Unit Of Wrok pattern to wrap sequelize up.
90 lines (81 loc) • 2.35 kB
text/typescript
import { v4 as uuid4 } from 'uuid';
import { IUserEntity } from './IUserEntity';
import { MyUnitOfWork } from './myUnitOfWork';
import { QueryTypes } from 'sequelize';
import { from } from 'rxjs';
import { map, switchMap, tap } from 'rxjs/operators';
const fun = () => {
const addDataSub = from(MyUnitOfWork.getInstance())
.pipe(
switchMap((mydb) => from(mydb.syncModels()).pipe(map(() => mydb))),
// add data
map((mydb) => {
for (let i = 0; i < 5; i += 1) {
mydb.reps.user.add({
id: uuid4(),
name: `Bibby_${i}`,
age: 21 + i,
birthday: new Date(),
});
}
return mydb;
}),
switchMap((mydb) => from(mydb.saveChange())
.pipe(
map(() => mydb)
)
),
// select where
switchMap((mydb) => {
const criteria = { order: ['name'] };
return from(mydb.reps.user.getFirstOrDefault<IUserEntity, IUserEntity>(criteria))
.pipe(map((one) => ({
one,
mydb,
})))
}),
map(a => {
a.one.name = 'Bibby_999999999999999';
const uOne: any = a.one;
console.log(uOne._previousDataValues);
console.log(uOne.dataValues);
console.log(uOne.constructor.options.name.plural);
return a.mydb;
}),
switchMap((mydb) => {
const q = `
select *
from users u
where u.age = :age
`;
return from(mydb.query(q, {
replacements: {
age: 22
},
type: QueryTypes.SELECT
}));
}),
tap(console.log)
).subscribe(() => addDataSub.unsubscribe());
// const criteria = { order: ['name'] };
// const uOne: any = await mydb.reps.user.getFirstOrDefault<IUserEntity, IUserEntity>(criteria);
// uOne.name = 'Bibby_999999999999999';
// console.log(uOne._previousDataValues);
// console.log(uOne.dataValues);
// console.log(uOne.constructor.options.name.plural);
// console.log('-----');
// const q = `
// select *
// from users u
// where u.age = :age
// `;
// const data: IUserEntity = await mydb.query(q, {
// replacements: {
// age: 22
// },
// type: QueryTypes.SELECT
// });
// console.log(data);
// console.log('-----');
};
fun();