Skip to content

Commit 43aa6ba

Browse files
committed
refactor: rename resource module to rest crud module
1 parent c024305 commit 43aa6ba

19 files changed

+128
-109
lines changed

scripts/rename.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const fs = require("fs");
2+
const pathLib = require("path");
3+
4+
function rename(dirPath, replaceFrom, replaceTo) {
5+
const names = fs.readdirSync(dirPath);
6+
names.forEach((name) => {
7+
const path = pathLib.join(dirPath, name);
8+
const stat = fs.statSync(path);
9+
const newPath = pathLib.join(dirPath, name.replace(replaceFrom, replaceTo));
10+
if (path == newPath) return;
11+
if (stat.isDirectory()) rename(path, replaceFrom, replaceTo);
12+
console.debug(`${path} -> ${newPath}`);
13+
fs.renameSync(path, newPath);
14+
});
15+
}
16+
17+
const [, , ...args] = process.argv;
18+
19+
rename(...args);

src/file/file-record.adapter.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import * as orm from "@deepkit/orm"; // temporary workaround: we have to use namespace import here as a temporary workaround, otherwise the application will not be able to bootstrap
22
import { RequestContext } from "src/core/request-context";
33
import { InjectDatabaseSession } from "src/database/database.tokens";
4-
import { ResourceCrudAdapter } from "src/resource/resource-crud-adapter.interface";
4+
import { RestCrudAdapter } from "src/rest-crud/rest-crud-crud-adapter.interface";
55
import { User } from "src/user/user.entity";
66

77
import { FileRecord } from "./file-record.entity";
88

9-
export class FileRecordAdapter implements ResourceCrudAdapter<FileRecord> {
9+
export class FileRecordAdapter implements RestCrudAdapter<FileRecord> {
1010
constructor(
1111
private db: InjectDatabaseSession,
1212
private context: RequestContext,

src/file/file.controller.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ import { HttpRangeParser } from "src/common/http-range-parser.service";
1515
import { RequestContext } from "src/core/request-context";
1616
import { InjectDatabaseSession } from "src/database/database.tokens";
1717
import { FileEngine } from "src/file-engine/file-engine.interface";
18-
import { ResourceFilterMapFactory } from "src/resource/models/resource-filter-map-factory";
18+
import { RestCrudFilterMapFactory } from "src/rest-crud/models/rest-crud-filter-map-factory";
1919
import {
2020
ResourceList,
2121
ResourcePagination,
22-
} from "src/resource/models/resource-list";
23-
import { ResourceOrderMap } from "src/resource/models/resource-order-map";
24-
import { ResourceCrudHandler } from "src/resource/resource-crud-handler.service";
22+
} from "src/rest-crud/models/rest-crud-list";
23+
import { ResourceOrderMap } from "src/rest-crud/models/rest-crud-order-map";
24+
import { ResourceCrudHandler } from "src/rest-crud/rest-crud-crud-handler.service";
2525
import { User } from "src/user/user.entity";
2626

2727
import { FileRecord } from "./file-record.entity";
@@ -168,7 +168,7 @@ export class FileController {
168168
}
169169

170170
const models = {
171-
filter: ResourceFilterMapFactory.build<FileRecord>([]),
171+
filter: RestCrudFilterMapFactory.build<FileRecord>([]),
172172
};
173173

174174
interface FileRecordListParameters {

src/file/file.module.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { createModule } from "@deepkit/app";
22
import { HttpRangeParser } from "src/common/http-range-parser.service";
3-
import { ResourceModule } from "src/resource/resource.module";
3+
import { ResourceModule } from "src/rest-crud/resource.module";
44

55
import { FileController } from "./file.controller";
66
import { FileRecordAdapter } from "./file-record.adapter";

src/resource/resource.module.ts

-26
This file was deleted.

src/resource/models/resource-filter-map-factory.spec.ts renamed to src/rest-crud/models/rest-crud-filter-map-factory.spec.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import {
77
ReflectionProperty,
88
} from "@deepkit/type";
99

10-
import { ResourceFilterMapFactory } from "./resource-filter-map-factory";
10+
import { RestCrudFilterMapFactory } from "./rest-crud-filter-map-factory";
1111

12-
describe("ResourceFilterMapFactory", () => {
12+
describe("RestCrudFilterMapFactory", () => {
1313
class MyEntity {
1414
id: number & AutoIncrement & PrimaryKey = 0;
1515
ref1!: MyEntity & Reference;
@@ -19,7 +19,7 @@ describe("ResourceFilterMapFactory", () => {
1919
}
2020

2121
it("should work", async () => {
22-
const s = ResourceFilterMapFactory.build<MyEntity>("all", "include");
22+
const s = RestCrudFilterMapFactory.build<MyEntity>("all", "include");
2323
expect(s.getPropertyNames()).toEqual(["id", "ref1"]);
2424
expectOperatorMap(s.getProperty("id"), ReflectionKind.number);
2525
expectOperatorMap(s.getProperty("ref1"), ReflectionKind.number);

src/resource/models/resource-filter-map-factory.ts renamed to src/rest-crud/models/rest-crud-filter-map-factory.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ import {
1010

1111
import {
1212
AddPropertyOptions,
13-
ResourceQueryModelFactory,
14-
} from "./resource-query-model-factory";
13+
RestCrudQueryModelFactory,
14+
} from "./rest-crud-query-model-factory";
1515

16-
export class ResourceFilterMapFactory extends ResourceQueryModelFactory {
16+
export class RestCrudFilterMapFactory extends RestCrudQueryModelFactory {
1717
static override build<Entity>(
1818
fields: FilterableField<Entity>[] | "all",
1919
strategy?: "include" | "exclude",
@@ -46,7 +46,7 @@ export class ResourceFilterMapFactory extends ResourceQueryModelFactory {
4646
: fieldSchema;
4747
return {
4848
name: fieldSchema.name,
49-
type: ResourceFilterMapFactory.buildOperatorMap(fieldSchemaToUse),
49+
type: RestCrudFilterMapFactory.buildOperatorMap(fieldSchemaToUse),
5050
optional: true,
5151
};
5252
}

src/resource/models/resource-filter-map.ts renamed to src/rest-crud/models/rest-crud-filter-map.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { FieldName, QuerySelector } from "@deepkit/orm";
22

3-
import { ResourceFilterMapFactory } from "./resource-filter-map-factory";
3+
import { RestCrudFilterMapFactory } from "./rest-crud-filter-map-factory";
44

5-
export type ResourceFilterOperator = Extract<
5+
export type RestCrudFilterOperator = Extract<
66
keyof QuerySelector<unknown>,
77
| "$eq"
88
| "$gt"
@@ -16,26 +16,26 @@ export type ResourceFilterOperator = Extract<
1616
| "$regex"
1717
>;
1818

19-
export type ResourceFilterOperatorMultiValue = Extract<
20-
ResourceFilterOperator,
19+
export type RestCrudFilterOperatorMultiValue = Extract<
20+
RestCrudFilterOperator,
2121
"$in" | "$nin"
2222
>;
2323

2424
// jsdoc link
2525
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
26-
ResourceFilterMapFactory;
26+
RestCrudFilterMapFactory;
2727

2828
/**
29-
* @deprecated - Use {@link ResourceFilterMapFactory} instead. It's
29+
* @deprecated - Use {@link RestCrudFilterMapFactory} instead. It's
3030
* impossible to implement relation field filtering via pure-types because
3131
* DeepKit removes the types of type-decorators at runtime.
3232
*/
33-
export type ResourceFilterMap<
33+
export type RestCrudFilterMap<
3434
Entity,
3535
Field extends FieldName<Entity> = FieldName<Entity>,
3636
> = {
3737
[Key in Field]?: {
38-
[Operator in ResourceFilterOperator]?: Operator extends ResourceFilterOperatorMultiValue
38+
[Operator in RestCrudFilterOperator]?: Operator extends RestCrudFilterOperatorMultiValue
3939
? Entity[Key][]
4040
: Entity[Key];
4141
};
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { Positive, PositiveNoZero } from "@deepkit/type";
22

3-
export interface ResourceList<Entity> {
3+
export interface RestCrudList<Entity> {
44
total: number;
55
items: Entity[];
66
}
77

8-
export interface ResourcePagination {
8+
export interface RestCrudPagination {
99
limit: number & PositiveNoZero;
1010
offset: number & Positive;
1111
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { FieldName } from "@deepkit/orm";
22

3-
export type ResourceOrder = "asc" | "desc";
3+
export type RestCrudOrder = "asc" | "desc";
44

5-
export type ResourceOrderMap<
5+
export type RestCrudOrderMap<
66
Entity,
77
Field extends FieldName<Entity> = FieldName<Entity>,
88
> = {
9-
[Key in Field]?: ResourceOrder;
9+
[Key in Field]?: RestCrudOrder;
1010
};

src/resource/models/resource-query-model-factory.spec.ts renamed to src/rest-crud/models/rest-crud-query-model-factory.spec.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ import {
77

88
import {
99
AddPropertyOptions,
10-
ResourceQueryModelFactory,
11-
} from "./resource-query-model-factory";
10+
RestCrudQueryModelFactory,
11+
} from "./rest-crud-query-model-factory";
1212

13-
describe("ResourceQueryModelFactory", () => {
14-
class TestingFactory extends ResourceQueryModelFactory {
13+
describe("RestCrudQueryModelFactory", () => {
14+
class TestingFactory extends RestCrudQueryModelFactory {
1515
protected static override selectValidFields<Entity>(
1616
entitySchema: ReflectionClass<any>,
1717
): FieldName<Entity>[] {

src/resource/models/resource-query-model-factory.ts renamed to src/rest-crud/models/rest-crud-query-model-factory.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import {
66
ReflectionProperty,
77
} from "@deepkit/type";
88

9-
class ResourceQueryModel {}
9+
class RestCrudQueryModel {}
1010

11-
export abstract class ResourceQueryModelFactory {
11+
export abstract class RestCrudQueryModelFactory {
1212
protected constructor() {}
1313

1414
static build<Entity>(
@@ -17,7 +17,7 @@ export abstract class ResourceQueryModelFactory {
1717
entityType?: ReceiveType<Entity>,
1818
): ReflectionClass<any> {
1919
const entitySchema = ReflectionClass.from(entityType);
20-
const modelSchema = ReflectionClass.from(ResourceQueryModel).clone();
20+
const modelSchema = ReflectionClass.from(RestCrudQueryModel).clone();
2121
fields = this.selectFields(entitySchema, fields, strategy);
2222
fields.forEach((field) => {
2323
const fieldSchema = entitySchema.getProperty(field);
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as orm from "@deepkit/orm"; // We have to use namespace import here as a temporary workaround, otherwise the application will not be able to bootstrap. This will be fixed in the next release.
22

3-
export abstract class ResourceCrudAdapter<Entity> {
3+
export abstract class RestCrudAdapter<Entity> {
44
abstract query(): orm.Query<Entity>;
55
}

src/resource/resource-crud-handler.service.ts renamed to src/rest-crud/rest-crud-crud-handler.service.ts

+12-12
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ import { FieldName, FilterQuery } from "@deepkit/orm";
55
import { ReflectionClass, TypeClass } from "@deepkit/type";
66
import { appendFilter } from "src/common/orm";
77

8-
import { ResourceList, ResourcePagination } from "./models/resource-list";
9-
import { ResourceOrderMap } from "./models/resource-order-map";
10-
import { ResourceCrudAdapter } from "./resource-crud-adapter.interface";
8+
import { RestCrudList, RestCrudPagination } from "./models/rest-crud-list";
9+
import { RestCrudOrderMap } from "./models/rest-crud-order-map";
10+
import { RestCrudAdapter } from "./rest-crud-crud-adapter.interface";
1111

12-
export class ResourceCrudHandler<Entity> {
12+
export class RestCrudHandler<Entity> {
1313
private adapterSchema;
1414
private entitySchema;
15-
constructor(private adapter: ResourceCrudAdapter<Entity>) {
15+
constructor(private adapter: RestCrudAdapter<Entity>) {
1616
const adapterClassType = adapter.constructor as ClassType<typeof adapter>;
1717
this.adapterSchema = ReflectionClass.from(adapterClassType);
1818
const adapterType = this.adapterSchema.type as TypeClass;
@@ -21,8 +21,8 @@ export class ResourceCrudHandler<Entity> {
2121
}
2222

2323
async list(
24-
{ pagination, filter, order }: ResourceListingOptions<Entity>, //
25-
): Promise<ResourceList<Entity>> {
24+
{ pagination, filter, order }: RestCrudListingOptions<Entity>, //
25+
): Promise<RestCrudList<Entity>> {
2626
let query = this.adapter.query();
2727
if (filter) query = this.applyFilterMap(query, filter);
2828
const total = await query.count();
@@ -42,7 +42,7 @@ export class ResourceCrudHandler<Entity> {
4242

4343
applyPagination(
4444
query: orm.Query<Entity>,
45-
{ limit, offset }: ResourcePagination,
45+
{ limit, offset }: RestCrudPagination,
4646
): orm.Query<Entity> {
4747
if (limit) query = query.limit(limit);
4848
if (offset) query = query.skip(offset);
@@ -74,7 +74,7 @@ export class ResourceCrudHandler<Entity> {
7474

7575
applyOrderMap<Entity>(
7676
query: orm.Query<Entity>,
77-
orderMap: ResourceOrderMap<Entity, any>,
77+
orderMap: RestCrudOrderMap<Entity, any>,
7878
): orm.Query<Entity> {
7979
Object.entries(orderMap).forEach(([field, order]) => {
8080
query = query.orderBy(field as FieldName<Entity>, order);
@@ -83,8 +83,8 @@ export class ResourceCrudHandler<Entity> {
8383
}
8484
}
8585

86-
export interface ResourceListingOptions<Entity> {
87-
pagination: ResourcePagination;
86+
export interface RestCrudListingOptions<Entity> {
87+
pagination: RestCrudPagination;
8888
filter?: object;
89-
order?: ResourceOrderMap<Entity>;
89+
order?: RestCrudOrderMap<Entity>;
9090
}

src/rest-crud/rest-crud.module.ts

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { createModule } from "@deepkit/app";
2+
import { ClassType } from "@deepkit/core";
3+
4+
import { RestCrudAdapter } from "./rest-crud-crud-adapter.interface";
5+
import { RestCrudHandler } from "./rest-crud-crud-handler.service";
6+
7+
export class RestCrudModule<Entity> extends createModule({
8+
providers: [{ provide: RestCrudHandler, scope: "http" }],
9+
exports: [RestCrudHandler],
10+
}) {
11+
adapter?: ClassType<RestCrudAdapter<Entity>>;
12+
13+
withAdapter(adapter: this["adapter"]): this {
14+
this.adapter = adapter;
15+
return this;
16+
}
17+
18+
override process(): void {
19+
if (!this.adapter) throw new Error("Adapter not specified");
20+
this.addProvider({
21+
provide: RestCrudAdapter,
22+
useClass: this.adapter,
23+
scope: "http",
24+
});
25+
}
26+
}

0 commit comments

Comments
 (0)