@itemku/general-repository
v0.7.10
Published
General Repository for common tasks and adding query helper in Laravel style
Downloads
163
Keywords
Readme
itemku TypeORM General Repository
General Repository for common tasks and adding query helper in Laravel style
How to use
Install
yarn install @itemku/general-repository
Quickstart
Extends Model & Add Scope
- always extends CommonModel, this will have standard properties on created_at and updated_at also some default scope for searching
@Entity()
export class TestModel extends CommonModel {
.
.
.
}
- Add column & scope for filter , format should be : scopeXXXX(query: ProxyQuery, id) ex :
public scopeUserId(query: ProxyQuery<TestModel>, id: number) {{
return query.andWhere('user_id = :user_id', { user_id: id });
}
- You could also have more than 1 parameter or no parameter at all ex :
public scopeUserActive(query: ProxyQuery<TestModel>) {{
return query.andWhere('is_active= :is_active', { is_active: true});
}
public scopeUserTest(query: ProxyQuery<TestModel>, id1: number, id2: number) {{
let query = query.andWhere('user_id = :user_id', { user_id: id1 });
query = query.andWhere('id_transaction = :id_transaction ', { id_transaction: id2 });
return query;
}
Extends General Repository
- Extends General Repository
export class TestRepository extends GeneralRepository<TestModel> {
constructor(entity: EntityManager) {
super(TestModel, entity);
}
}
- Override Common Filter
protected commonFilter(queryBuilder: ProxyQuery<TestModel>, filter) {
super.commonFilter(queryBuilder, filter);
const userId = getDefault(filter['user_id']);
if (userId != undefined) {
queryBuilder = queryBuilder.UserId(userId);
}
}
API - Standard Scope
This scope already included in CommonModel no need to create again
1) scopeId(query: ProxyQuery, id: any)
if there's any primary key that's different (not ID) you could override primaryKey() and return the correct Primary Key
public scopeId(query: ProxyQuery<CommonModel>, id: any) {
return query.andWhere(this.constructor.name + '.' + this.primaryKey() + ' = :id', {id: id});
}
2) scopeIds(query: ProxyQuery, ids: Array)
if there's any primary key that's different (not ID) you could override primaryKey() and return the correct Primary Key
public scopeIds(query: ProxyQuery<CommonModel>, ids: Array<any>) {
return query.andWhere(this.constructor.name + '.' + this.primaryKey() + ' IN (:...ids)', {ids: ids});
}
3) scopeExcludeIds(query: ProxyQuery, ids: Array)
if there's any primary key that's different (not ID) you could override primaryKey() and return the correct Primary Key
public scopeExcludeIds(query: ProxyQuery<CommonModel>, ids: Array<any>) {
return query.andWhere(this.constructor.name + '.' + this.primaryKey() + ' NOT IN (:...ids)', {ids: ids});
}
4) scopeIsActive(query: ProxyQuery, is_active = true)
public scopeIsActive(query: ProxyQuery<CommonModel>, is_active = true) {
return query.andWhere(this.constructor.name + '.' + 'is_active = :is_active', {is_active: is_active});
}
5) scopeIsFinished(query: ProxyQuery, is_finished = false)
public scopeIsFinished(query: ProxyQuery<CommonModel>, is_finished = false) {
return query.andWhere(this.constructor.name + '.' + 'is_finished = :is_finished', {is_finished: is_finished});
}
6) scopeStatus(query: ProxyQuery, is_finished = false)
public scopeStatus(query: ProxyQuery<CommonModel>, status: number) {
return query.andWhere(this.constructor.name + '.' + 'status = :status', {status: status});
}
7) scopeStartDate(query: ProxyQuery, date: string)
public scopeStartDate(query: ProxyQuery<CommonModel>, date: string) {
return query.andWhere(this.constructor.name + '.' + 'created_at >= :start_date', {start_date: date + ' 00:00:00'});
}
8) scopeStartDate(query: ProxyQuery, date: string)
public scopeStartDate(query: ProxyQuery<CommonModel>, date: string) {
return query.andWhere(this.constructor.name + '.' + 'created_at >= :start_date', {start_date: date + ' 00:00:00'});
}
9) scopeEndDate(query: ProxyQuery, date: string)
public scopeEndDate(query: ProxyQuery<CommonModel>, date: string) {
return query.andWhere(this.constructor.name + '.' + 'created_at <= :end_date', {end_date: date + ' 23:59:59'});
}
10) scopeUpdateStartDate(query: ProxyQuery, date: string)
public scopeUpdateStartDate(query: ProxyQuery<CommonModel>, date: string) {
return query.andWhere(this.constructor.name + '.' + 'updated_at >= :update_start_date', {update_start_date: date + ' 00:00:00'});
}
10) scopeUpdateEndDate(query: ProxyQuery, date: string)
public scopeUpdateEndDate(query: ProxyQuery<CommonModel>, date: string) {
return query.andWhere(this.constructor.name + '.' + 'updated_at <= :update_end_date', {update_end_date: date + ' 23:59:59'});
}
11) scopeOrderByLatest(query: ProxyQuery)
public scopeOrderByLatest(query: ProxyQuery<CommonModel>) {
return query.addOrderBy(this.constructor.name + '.' + 'created_at', 'DESC');
}
11) scopeOrderByOldest(query: ProxyQuery)
public scopeOrderByOldest(query: ProxyQuery<CommonModel>) {
return query.addOrderBy(this.constructor.name + '.' + 'created_at', 'ASC');
}
12) scopeOrderByLatestUpdate(query: ProxyQuery)
public scopeOrderByLatestUpdate(query: ProxyQuery<CommonModel>) {
return query.addOrderBy(this.constructor.name + '.' + 'updated_at', 'DESC');
}
13) scopeLastModifiedBy(query: ProxyQuery, id: any)
public scopeLastModifiedBy(query: ProxyQuery<CommonModel>, id: any) {
return query.andWhere(this.constructor.name + '.' + 'last_modified_by = :last_modified_by', {last_modified_by: id});
}
13) scopeLastModifiedById(query: ProxyQuery, id: any)
public (query: ProxyQuery<CommonModel>, id: any) {
return query.andWhere(this.constructor.name + '.' + 'last_modified_by_id = :last_modified_by_id', {last_modified_by_id: id});
}
Full Example
Model
@Entity()
export class TestModel extends CommonModel {
@PrimaryColumn()
@Generated()
id: string;
@Column()
user_id: number;
@Column()
balance: number;
@Column()
withdraw_balance: number;
public scopeUserId(query: ProxyQuery<TestModel>, id: number) {{
return query.andWhere('user_id = :user_id', { user_id: id });
}
}
Repository
export class TestRepository extends GeneralRepository<TestModel> {
constructor(entity: EntityManager) {
super(TestModel, entity);
}
protected commonFilter(queryBuilder: ProxyQuery<TestModel>, filter) {
super.commonFilter(queryBuilder, filter);
const userId = getDefault(filter['user_id']);
if (userId != undefined) {
queryBuilder = queryBuilder.UserId(userId);
}
}
}