Skip to content

Commit

Permalink
✨ feat: generate api and common service
Browse files Browse the repository at this point in the history
  • Loading branch information
srizzon authored and gleisonkz committed May 28, 2022
1 parent fae3379 commit 687bfd7
Show file tree
Hide file tree
Showing 5 changed files with 174 additions and 0 deletions.
59 changes: 59 additions & 0 deletions src/commands/generate/service/api/api.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { GluegunCommand, GluegunToolbox } from 'gluegun';
import { GluegunAskResponse } from 'gluegun/build/types/toolbox/prompt-types';

import { printCreated } from '../../../../utils/functions.helper';

const COMMAND: GluegunCommand = {
name: 'api',
alias: ['a'],
description: 'cria um serviço Angular do tipo Api',
run: async (toolbox: GluegunToolbox) => {
const { parameters, print, prompt, template, strings } = toolbox;

let serviceName = parameters.first;

if (!serviceName) {
const response: GluegunAskResponse = await prompt.ask({
type: 'input',
name: 'serviceName',
message: 'Qual o nome do serviço?',
validate: (value: string) => {
if (!value) {
return 'O nome do serviço não pode ser vazio';
}

return true;
}
});

serviceName = response.serviceName;
}

const serviceNameKebab = strings.kebabCase(serviceName);

template.generate({
template: 'service.template.ts.ejs',
target: `./${serviceNameKebab}/${serviceNameKebab}.api.ts`,
props: {
type: 'api',
name: serviceName,
...strings
}
});

template.generate({
template: 'service.template.spec.ts.ejs',
target: `./${serviceNameKebab}/${serviceNameKebab}.api.spec.ts`,
props: {
type: 'api',
name: serviceName,
...strings
}
});

printCreated(print, `${serviceNameKebab}/${serviceNameKebab}.api.ts`);
printCreated(print, `${serviceNameKebab}/${serviceNameKebab}.api.spec.ts`);
}
};

module.exports = COMMAND;
59 changes: 59 additions & 0 deletions src/commands/generate/service/common/common.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { GluegunCommand, GluegunToolbox } from 'gluegun';
import { GluegunAskResponse } from 'gluegun/build/types/toolbox/prompt-types';

import { printCreated } from '../../../../utils/functions.helper';

const COMMAND: GluegunCommand = {
name: 'common',
alias: ['c'],
description: 'cria um serviço Angular',
run: async (toolbox: GluegunToolbox) => {
const { parameters, print, prompt, template, strings } = toolbox;

let serviceName = parameters.first;

if (!serviceName) {
const response: GluegunAskResponse = await prompt.ask({
type: 'input',
name: 'serviceName',
message: 'Qual o nome do serviço?',
validate: (value: string) => {
if (!value) {
return 'O nome do serviço não pode ser vazio';
}

return true;
}
});

serviceName = response.serviceName;
}

const serviceNameKebab = strings.kebabCase(serviceName);

template.generate({
template: 'service.template.ts.ejs',
target: `./${serviceNameKebab}/${serviceNameKebab}.service.ts`,
props: {
type: 'service',
name: serviceName,
...strings
}
});

template.generate({
template: 'service.template.spec.ts.ejs',
target: `./${serviceNameKebab}/${serviceNameKebab}.service.spec.ts`,
props: {
type: 'service',
name: serviceName,
...strings
}
});

printCreated(print, `${serviceNameKebab}/${serviceNameKebab}.service.ts`);
printCreated(print, `${serviceNameKebab}/${serviceNameKebab}.service.spec.ts`);
}
};

module.exports = COMMAND;
34 changes: 34 additions & 0 deletions src/commands/generate/service/service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { GluegunCommand, GluegunToolbox } from 'gluegun';
import { GluegunAskResponse } from 'gluegun/build/types/toolbox/prompt-types';

import { findCommand } from '../../../utils/functions.helper';

const COMMAND: GluegunCommand = {
name: 'service',
alias: ['s'],
description: 'Cria um serviço Angular de tipo específico',

run: async (toolbox: GluegunToolbox) => {
const { parameters, prompt } = toolbox;

let componentName = parameters.first;

const QUESTION = 'Qual tipo de serviço você deseja criar?';
const TYPES = ['common', 'api'];

const componentTypeResponse: GluegunAskResponse = await prompt.ask({
type: 'select',
name: 'type',
message: QUESTION,
choices: TYPES
});

const componentType = componentTypeResponse.type;
const command = findCommand(toolbox, componentType);

toolbox.parameters.first = componentName;
command.run(toolbox);
}
};

module.exports = COMMAND;
16 changes: 16 additions & 0 deletions src/templates/service.template.spec.ts.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { TestBed } from '@angular/core/testing';

import { <%= pascalCase(props.name) %><%= pascalCase(props.type) %> } from './<%= kebabCase(props.name) %>.<%= kebabCase(props.type) %>';

describe('<%= pascalCase(props.name) %><%= pascalCase(props.type) %>', () => {
let service: <%= pascalCase(props.name) %><%= pascalCase(props.type) %>;

beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(<%= pascalCase(props.name) %><%= pascalCase(props.type) %>);
});

it('should be created', () => {
expect(service).toBeTruthy();
});
});
6 changes: 6 additions & 0 deletions src/templates/service.template.ts.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { Injectable } from '@angular/core';

@Injectable({
providedIn: 'root'
})
export class <%= pascalCase(props.name) %><%= pascalCase(props.type) %> {}

0 comments on commit 687bfd7

Please sign in to comment.