Skip to content

Commit 965a679

Browse files
committed
refactor(tools): granulariza geradores de entidades e casos de uso
1 parent a6a3122 commit 965a679

25 files changed

+292
-15
lines changed

tools/plugin/dx-dev/generators.json

+5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44
"factory": "./src/generators/entity/generator",
55
"schema": "./src/generators/entity/schema.json",
66
"description": "Entity generator"
7+
},
8+
"use-cases": {
9+
"factory": "./src/generators/use-cases/generator",
10+
"schema": "./src/generators/use-cases/schema.json",
11+
"description": "Use Cases"
712
}
813
}
914
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/client';
2+
import { <%= className %>Service } from '../services';
3+
import {
4+
UseCase,
5+
<%= className %>,
6+
Editable<%= className %>,
7+
} from '@devmx/shared-api-interfaces';
8+
9+
export class Create<%= className %>UseCase
10+
implements UseCase<Editable<%= className %>, <%= className %>>
11+
{
12+
constructor(private <%= propertyName %>Service: <%= className %>Service) {}
13+
14+
execute(data: Editable<%= className %>) {
15+
return this.<%= propertyName %>Service.create(data);
16+
}
17+
}
18+
19+
export function provideCreate<%= className %>UseCase() {
20+
return createUseCaseProvider(Create<%= className %>UseCase, [<%= className %>Service]);
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/client';
2+
import { <%= className %>, UseCase } from '@devmx/shared-api-interfaces';
3+
import { <%= className %>Service } from '../services';
4+
5+
export class Delete<%= className %>UseCase implements UseCase<string, <%= className %> | null> {
6+
constructor(private <%= propertyName %>Service: <%= className %>Service) {}
7+
8+
execute(id: string) {
9+
return this.<%= propertyName %>Service.delete(id);
10+
}
11+
}
12+
13+
export function provideDelete<%= className %>UseCase() {
14+
return createUseCaseProvider(Delete<%= className %>UseCase, [<%= className %>Service]);
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/client';
2+
import { <%= className %>Service } from '../services';
3+
import {
4+
Page,
5+
UseCase,
6+
<%= className %>,
7+
QueryParams,
8+
} from '@devmx/shared-api-interfaces';
9+
10+
export class Find<%= classNamePlural %>UseCase
11+
implements UseCase<QueryParams<<%= className %>>, Page<<%= className %>>>
12+
{
13+
constructor(private <%= propertyName %>Service: <%= className %>Service) {}
14+
15+
execute(params: QueryParams<<%= className %>>) {
16+
return this.<%= propertyName %>Service.find(params);
17+
}
18+
}
19+
20+
export function provideFind<%= classNamePlural %>UseCase() {
21+
return createUseCaseProvider(Find<%= classNamePlural %>UseCase, [<%= className %>Service]);
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/client';
2+
import { <%= className %>, UseCase } from '@devmx/shared-api-interfaces';
3+
import { <%= className %>Service } from '../services';
4+
5+
export class Find<%= className %>ByIDUseCase
6+
implements UseCase<string, <%= className %> | null>
7+
{
8+
constructor(private <%= propertyName %>Service: <%= className %>Service) {}
9+
10+
execute(id: string) {
11+
return this.<%= propertyName %>Service.findOne(id);
12+
}
13+
}
14+
15+
export function provideFind<%= className %>ByIDUseCase() {
16+
return createUseCaseProvider(Find<%= className %>ByIDUseCase, [<%= className %>Service]);
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { UseCase, <%= className %>, Editable<%= className %> } from '@devmx/shared-api-interfaces';
2+
import { createUseCaseProvider } from '@devmx/shared-util-data/client';
3+
import { <%= className %>Service } from '../services';
4+
5+
export class Update<%= className %>UseCase implements UseCase<Editable<%= className %>, <%= className %>> {
6+
constructor(private <%= propertyName %>Service: <%= className %>Service) {}
7+
8+
execute(data: Editable<%= className %>) {
9+
return this.<%= propertyName %>Service.update(data.id, data);
10+
}
11+
}
12+
13+
export function provideUpdate<%= className %>UseCase() {
14+
return createUseCaseProvider(Update<%= className %>UseCase, [<%= className %>Service]);
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/server';
2+
import { UseCase, <%= className %>, Editable<%= className %> } from '@devmx/shared-api-interfaces';
3+
import { <%= classNamePlural %>Service } from '../services';
4+
5+
export class Create<%= className %>UseCase implements UseCase<Editable<%= className %>, <%= className %>> {
6+
constructor(private <%= propertyNamePlural %>Service: <%= classNamePlural %>Service) {}
7+
8+
execute(data: Editable<%= className %>) {
9+
return this.<%= propertyNamePlural %>Service.create(data);
10+
}
11+
}
12+
13+
export function provideCreate<%= className %>UseCase() {
14+
return createUseCaseProvider(Create<%= className %>UseCase, [<%= classNamePlural %>Service]);
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/server';
2+
import { <%= className %>, UseCase } from '@devmx/shared-api-interfaces';
3+
import { <%= classNamePlural %>Service } from '../services';
4+
5+
export class Delete<%= className %>UseCase implements UseCase<string, <%= className %>> {
6+
constructor(private <%= propertyNamePlural %>Service: <%= classNamePlural %>Service) {}
7+
8+
async execute(id: string) {
9+
return this.<%= propertyNamePlural %>Service.delete(id);
10+
}
11+
}
12+
13+
export function provideDelete<%= className %>UseCase() {
14+
return createUseCaseProvider(Delete<%= className %>UseCase, [<%= classNamePlural %>Service])
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/server';
2+
import { <%= classNamePlural %>Service } from '../services';
3+
import {
4+
Page,
5+
UseCase,
6+
<%= className %>,
7+
QueryParams,
8+
} from '@devmx/shared-api-interfaces';
9+
10+
export class Find<%= classNamePlural %>UseCase
11+
implements UseCase<QueryParams<<%= className %>>, Page<<%= className %>>>
12+
{
13+
constructor(private <%= propertyNamePlural %>Service: <%= classNamePlural %>Service) {}
14+
15+
async execute(params: QueryParams<<%= className %>>) {
16+
return this.<%= propertyNamePlural %>Service.find(params);
17+
}
18+
}
19+
20+
export function provideFind<%= classNamePlural %>UseCase() {
21+
return createUseCaseProvider(Find<%= classNamePlural %>UseCase, [<%= classNamePlural %>Service])
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/server';
2+
import { <%= className %>, UseCase } from '@devmx/shared-api-interfaces';
3+
import { <%= classNamePlural %>Service } from '../services';
4+
5+
export class Find<%= className %>ByIDUseCase implements UseCase<string, <%= className %> | null> {
6+
constructor(private <%= propertyNamePlural %>Service: <%= classNamePlural %>Service) {}
7+
8+
async execute(id: string) {
9+
return this.<%= propertyNamePlural %>Service.findOne(id);
10+
}
11+
}
12+
13+
export function provideFind<%= className %>ByIDUseCase() {
14+
return createUseCaseProvider(Find<%= className %>ByIDUseCase, [<%= classNamePlural %>Service])
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/server';
2+
import { UseCase, <%= className %>, Editable<%= className %> } from '@devmx/shared-api-interfaces';
3+
import { <%= classNamePlural %>Service } from '../services';
4+
5+
export class Update<%= className %>UseCase implements UseCase<Editable<%= className %>, <%= className %>> {
6+
constructor(private <%= propertyNamePlural %>Service: <%= classNamePlural %>Service) {}
7+
8+
async execute(data: Editable<%= className %>) {
9+
return this.<%= propertyNamePlural %>Service.update(data.id, data);
10+
}
11+
}
12+
13+
export function provideUpdate<%= className %>UseCase() {
14+
return createUseCaseProvider(Update<%= className %>UseCase, [<%= classNamePlural %>Service])
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
const variable = "<%= name %>";

tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/create-__fileName__.ts.template

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/server';
12
import { UseCase, <%= className %>, Editable<%= className %> } from '@devmx/shared-api-interfaces';
23
import { <%= classNamePlural %>Service } from '../services';
34

@@ -8,3 +9,7 @@ export class Create<%= className %>UseCase implements UseCase<Editable<%= classN
89
return this.<%= propertyNamePlural %>Service.create(data);
910
}
1011
}
12+
13+
export function provideCreate<%= className %>UseCase() {
14+
return createUseCaseProvider(Create<%= className %>UseCase, [<%= classNamePlural %>Service]);
15+
}

tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/delete-__fileName__.ts.template

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/server';
12
import { <%= className %>, UseCase } from '@devmx/shared-api-interfaces';
23
import { <%= classNamePlural %>Service } from '../services';
34

@@ -8,3 +9,7 @@ export class Delete<%= className %>UseCase implements UseCase<string, <%= classN
89
return this.<%= propertyNamePlural %>Service.delete(id);
910
}
1011
}
12+
13+
export function provideDelete<%= className %>UseCase() {
14+
return createUseCaseProvider(Delete<%= className %>UseCase, [<%= classNamePlural %>Service])
15+
}

tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/find-__fileNamePlural__.ts.template

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/server';
12
import { <%= classNamePlural %>Service } from '../services';
23
import {
34
Page,
@@ -15,3 +16,7 @@ export class Find<%= classNamePlural %>UseCase
1516
return this.<%= propertyNamePlural %>Service.find(params);
1617
}
1718
}
19+
20+
export function provideFind<%= classNamePlural %>UseCase() {
21+
return createUseCaseProvider(Find<%= classNamePlural %>UseCase, [<%= classNamePlural %>Service])
22+
}

tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/find-__fileName__-by-id.ts.template

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/server';
12
import { <%= className %>, UseCase } from '@devmx/shared-api-interfaces';
23
import { <%= classNamePlural %>Service } from '../services';
34

@@ -8,3 +9,7 @@ export class Find<%= className %>ByIDUseCase implements UseCase<string, <%= clas
89
return this.<%= propertyNamePlural %>Service.findOne(id);
910
}
1011
}
12+
13+
export function provideFind<%= className %>ByIDUseCase() {
14+
return createUseCaseProvider(Find<%= className %>ByIDUseCase, [<%= classNamePlural %>Service])
15+
}

tools/plugin/dx-dev/src/generators/entity/files/__scope__/domain/src/server/use-cases/update-__fileName__.ts.template

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { createUseCaseProvider } from '@devmx/shared-util-data/server';
12
import { UseCase, <%= className %>, Editable<%= className %> } from '@devmx/shared-api-interfaces';
23
import { <%= classNamePlural %>Service } from '../services';
34

@@ -8,3 +9,7 @@ export class Update<%= className %>UseCase implements UseCase<Editable<%= classN
89
return this.<%= propertyNamePlural %>Service.update(data.id, data);
910
}
1011
}
12+
13+
export function provideUpdate<%= className %>UseCase() {
14+
return createUseCaseProvider(Update<%= className %>UseCase, [<%= classNamePlural %>Service])
15+
}

tools/plugin/dx-dev/src/generators/entity/lib/normalize-options.ts

+1-14
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,9 @@
1-
import { pluralize } from '../../../utils';
2-
import { names } from '@nx/devkit';
1+
import { getAllNames } from '../../../utils';
32
import {
43
EntityGeneratorSchema,
54
NormalizedEntityGeneratorSchema,
65
} from '../schema';
76

8-
function getAllNames(original: string) {
9-
const normalized = names(original);
10-
const pluralNames = {
11-
namePlural: pluralize(normalized.name, 2),
12-
classNamePlural: pluralize(normalized.className, 2),
13-
fileNamePlural: pluralize(normalized.fileName, 2),
14-
propertyNamePlural: pluralize(normalized.propertyName, 2),
15-
constantNamePlural: pluralize(normalized.constantName, 2),
16-
};
17-
return { ...normalized, ...pluralNames };
18-
}
19-
207
export function normalizeOptions(
218
options: EntityGeneratorSchema
229
): NormalizedEntityGeneratorSchema {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { Tree, formatFiles, generateFiles } from '@nx/devkit';
2+
import { UseCasesGeneratorSchema } from './schema';
3+
import { normalizeOptions } from './lib';
4+
import { join } from 'path';
5+
6+
export async function useCasesGenerator(
7+
tree: Tree,
8+
options: UseCasesGeneratorSchema
9+
) {
10+
const normalizedOptions = normalizeOptions(options);
11+
12+
const srcFolder = join(__dirname, '..', '..', 'files', 'use-cases');
13+
14+
generateFiles(tree, srcFolder, 'packages', normalizedOptions);
15+
16+
await formatFiles(tree);
17+
}
18+
19+
export default useCasesGenerator;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './normalize-options';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { getAllNames } from '../../../utils';
2+
import {
3+
UseCasesGeneratorSchema,
4+
NormalizedUseCasesGeneratorSchema,
5+
} from '../schema';
6+
7+
export function normalizeOptions(
8+
options: UseCasesGeneratorSchema
9+
): NormalizedUseCasesGeneratorSchema {
10+
const allNames = getAllNames(options.name);
11+
return { ...options, ...allNames };
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
export interface UseCasesGeneratorSchema {
2+
name: string;
3+
scope: string;
4+
}
5+
6+
export interface NormalizedUseCasesGeneratorSchema
7+
extends EntityGeneratorSchema {
8+
constantName: string;
9+
propertyName: string;
10+
className: string;
11+
fileName: string;
12+
namePlural: string;
13+
classNamePlural: string;
14+
fileNamePlural: string;
15+
propertyNamePlural: string;
16+
constantNamePlural: string;
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"$schema": "https://json-schema.org/schema",
3+
"$id": "UseCases",
4+
"title": "",
5+
"type": "object",
6+
"properties": {
7+
"name": {
8+
"type": "string",
9+
"description": "",
10+
"$default": {
11+
"$source": "argv",
12+
"index": 0
13+
},
14+
"x-prompt": "What name would you like to use?"
15+
},
16+
"scope": {
17+
"type": "string",
18+
"description": ""
19+
},
20+
"x-prompt": "What scope would you like to place files?"
21+
},
22+
"required": ["name", "scope"]
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { pluralize } from './pluralize';
2+
import { names } from '@nx/devkit';
3+
4+
export function getAllNames(original: string) {
5+
const normalized = names(original);
6+
const pluralNames = {
7+
namePlural: pluralize(normalized.name, 2),
8+
classNamePlural: pluralize(normalized.className, 2),
9+
fileNamePlural: pluralize(normalized.fileName, 2),
10+
propertyNamePlural: pluralize(normalized.propertyName, 2),
11+
constantNamePlural: pluralize(normalized.constantName, 2),
12+
};
13+
return { ...normalized, ...pluralNames };
14+
}
+2-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
export * from './pluralize';
1+
export * from './get-all-names';
2+
export * from './pluralize';

0 commit comments

Comments
 (0)