Skip to content

Commit

Permalink
feat: make middleware in nukak-browser package return the affected ID…
Browse files Browse the repository at this point in the history
…s and the count for all operations
  • Loading branch information
rogerpadilla committed Mar 26, 2023
1 parent 286dbb1 commit 907c51b
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 28 deletions.
6 changes: 3 additions & 3 deletions packages/nukak-browser/src/querier/httpQuerier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export class HttpQuerier implements ClientQuerier {

updateOneById<E>(entity: Type<E>, id: IdValue<E>, payload: E, opts?: RequestOptions) {
const basePath = this.getBasePath(entity);
return patch<number>(`${basePath}/${id}`, payload, opts);
return patch<typeof id>(`${basePath}/${id}`, payload, opts);
}

saveOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions) {
Expand All @@ -65,13 +65,13 @@ export class HttpQuerier implements ClientQuerier {
deleteOneById<E>(entity: Type<E>, id: IdValue<E>, opts: QueryOptions & RequestOptions = {}) {
const basePath = this.getBasePath(entity);
const qs = opts.softDelete ? stringifyQuery({ softDelete: opts.softDelete }) : '';
return remove<number>(`${basePath}/${id}${qs}`, opts);
return remove<typeof id>(`${basePath}/${id}${qs}`, opts);
}

deleteMany<E>(entity: Type<E>, qm: QuerySearch<E>, opts: QueryOptions & RequestOptions = {}) {
const basePath = this.getBasePath(entity);
const qs = stringifyQuery(opts.softDelete ? { ...qm, softDelete: opts.softDelete } : qm);
return remove<number>(`${basePath}${qs}`, opts);
return remove<IdValue<E>[]>(`${basePath}${qs}`, opts);
}

getRepository<E>(entity: Type<E>): ClientRepository<E> {
Expand Down
12 changes: 3 additions & 9 deletions packages/nukak-browser/src/type/clientQuerier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,19 +35,13 @@ export interface ClientQuerier extends UniversalQuerier {

insertOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<IdValue<E>>>;

insertMany?<E>(entity: Type<E>, payload: E[], opts?: RequestOptions): Promise<RequestSuccessResponse<IdValue<E>[]>>;

updateOneById<E>(entity: Type<E>, id: IdValue<E>, payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<number>>;

updateMany?<E>(entity: Type<E>, qm: QuerySearch<E>, payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<number>>;
updateOneById<E>(entity: Type<E>, id: IdValue<E>, payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<IdValue<E>>>;

saveOne<E>(entity: Type<E>, payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<IdValue<E>>>;

saveMany?<E>(entity: Type<E>, payload: E[]): Promise<RequestSuccessResponse<IdValue<E>[]>>;

deleteOneById<E>(entity: Type<E>, id: IdValue<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<number>>;
deleteOneById<E>(entity: Type<E>, id: IdValue<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<IdValue<E>>>;

deleteMany<E>(entity: Type<E>, qm: QuerySearch<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<number>>;
deleteMany<E>(entity: Type<E>, qm: QuerySearch<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<IdValue<E>[]>>;

getRepository<E>(entity: Type<E>): ClientRepository<E>;
}
10 changes: 2 additions & 8 deletions packages/nukak-browser/src/type/clientRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,9 @@ export interface ClientRepository<E> extends UniversalRepository<E> {

insertOne(payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<IdValue<E>>>;

insertMany?(payload: E[], opts?: RequestOptions): Promise<RequestSuccessResponse<IdValue<E>[]>>;

updateMany?(payload: E, qm: QuerySearch<E>, opts?: RequestOptions): Promise<RequestSuccessResponse<number>>;

saveOne(payload: E, opts?: RequestOptions): Promise<RequestSuccessResponse<IdValue<E>>>;

saveMany?(payload: E[], opts?: RequestOptions): Promise<RequestSuccessResponse<IdValue<E>[]>>;

deleteOneById(id: IdValue<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<number>>;
deleteOneById(id: IdValue<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<IdValue<E>>>;

deleteMany(qm: QuerySearch<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<number>>;
deleteMany(qm: QuerySearch<E>, opts?: QueryOptions & RequestOptions): Promise<RequestSuccessResponse<IdValue<E>[]>>;
}
16 changes: 9 additions & 7 deletions packages/nukak-express/src/querierMiddleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ export function buildQuerierRouter<E>(entity: Type<E>, opts: ExtraOptions) {
const querier = await getQuerier();
try {
const data = await querier.findOne(entity, qm, project);
res.json({ data });
res.json({ data, count: data ? 1 : 0 });
} catch (err: any) {
next(err);
} finally {
Expand All @@ -58,7 +58,7 @@ export function buildQuerierRouter<E>(entity: Type<E>, opts: ExtraOptions) {
const querier = await getQuerier();
try {
const data = await querier.findOne(entity, qm, project);
res.json({ data });
res.json({ data, count: data ? 1 : 0 });
} catch (err: any) {
next(err);
} finally {
Expand All @@ -85,7 +85,7 @@ export function buildQuerierRouter<E>(entity: Type<E>, opts: ExtraOptions) {
const querier = await getQuerier();
try {
const count = await querier.count(entity, req.query);
res.json({ count });
res.json({ data: count, count });
} catch (err: any) {
next(err);
} finally {
Expand All @@ -97,9 +97,9 @@ export function buildQuerierRouter<E>(entity: Type<E>, opts: ExtraOptions) {
const querier = await getQuerier();
try {
await querier.beginTransaction();
const data = await querier.insertOne(entity, req.body);
const id = await querier.insertOne(entity, req.body);
await querier.commitTransaction();
res.json({ data });
res.json({ data: id, count: id ? 1 : 0 });
} catch (err: any) {
await querier.rollbackTransaction();
next(err);
Expand Down Expand Up @@ -146,9 +146,11 @@ export function buildQuerierRouter<E>(entity: Type<E>, opts: ExtraOptions) {
const querier = await getQuerier();
try {
await querier.beginTransaction();
const count = await querier.deleteMany(entity, req.query, { softDelete: !!req.query.softDelete });
const founds = await querier.findMany(entity, req.query, [meta.id]);
const ids = founds.map((found) => found[meta.id]);
const count = await querier.deleteMany(entity, { $filter: { [meta.id]: ids } }, { softDelete: !!req.query.softDelete });
await querier.commitTransaction();
res.json({ count });
res.json({ data: ids, count });
} catch (err: any) {
await querier.rollbackTransaction();
next(err);
Expand Down
2 changes: 1 addition & 1 deletion packages/nukak/src/querier/decorator/injectQuerier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { Key, Type } from '../../type/index.js';
const metadataKey = Symbol('InjectQuerier');

export function InjectQuerier() {
return (proto: { [k: string | symbol]: WeakMap<object, any> }, key: string, index: number) => {
return (proto: object, key: string, index: number) => {
const { constructor } = proto;

if (!proto[metadataKey]) {
Expand Down

0 comments on commit 907c51b

Please sign in to comment.