0.0.18 • Published 2 years ago
@theogonic/gaea v0.0.18
Gaea
A general entity library written in Typescript, powered by TypeORM and PostgreSQL(JSONB), best to be used with Nestjs
Features
- No need to write SQL schema, everything is defined in Typescript
- No need to run SQL migration if schema change
- Powerful listing and filtering, including full text search
Motivation
This project aims to provide an out-of-box entity library (an easy way talking to the database) used in rapid development/prototype stage considered to the highly fuzzy demands and usecases.
Usage
Migration (only required in first-time)
export TYPEORM_CONNECTION=postgres
export TYPEORM_URL="<your postgres database>"
export TYPEORM_MIGRATIONS="node_modules/@theogonic/gaea/assets/migrations/*.ts"
# run migration (powered by Typeorm)
$ node -r ts-node/register ./node_modules/typeorm/cli.js migration:run
Declare Entity
import { BaseGeneralObject } from '@theogonic/gaea';
export class UserEntity extends BaseGeneralObject {
name: string
profile: {
email: string
phoneNumber: string
};
}
Declare DAO (Data Access Object)
import { BaseGeneralObjectDao } from '@theogonic/gaea';
export class UserEntityDao extends BaseGeneralObjectDao<UserEntity> {
target = UserEntity;
}
Manipulate it
Nestjs
import { GeneralObjectModule } from '@theogonic/gaea';
import { TypeOrmModule } from "@nestjs/typeorm";
@Module({
imports: [
TypeOrmModule,
// since GeneralObjectModule only used TypeOrmModule.forFeature, so TypeOrmModle is required (epected to have proper database connection)
GeneralObjectModule
],
providers: [
UserService,
UserEntityDao
]
})
export class UserModule {}
import { Injectable } from "@nestjs/common";
@Injectable()
export class UserService {
constructor(private readonly userDao: UserEntityDao){}
getUserById(id: string): UserEntity {
return this.userDao.listOne(id);
}
}
Manually
const userDao = new UserEntityDao(/* Typeorm Entity Manager*/)
userDao.listOne(...)