initial commit for nestjs api
This commit is contained in:
parent
e0a0d07bd6
commit
72a539b720
2
api/.gitignore
vendored
Normal file
2
api/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/node_modules
|
||||
/yarn.lock
|
||||
4
api/.prettierrc
Normal file
4
api/.prettierrc
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"singleQuote": true,
|
||||
"trailingComma": "all"
|
||||
}
|
||||
55
api/README.md
Normal file
55
api/README.md
Normal file
@ -0,0 +1,55 @@
|
||||
<p align="center">
|
||||
<a href="http://ohmyform.com/" target="blank"><img src="https://ohmyform.com/img/logo_text.svg" width="320" alt="OhMyForm Logo" /></a>
|
||||
</p>
|
||||
|
||||
## Description
|
||||
|
||||
[OhMyForm](https://github.com/ohmyforn) api backend
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
$ yarn install
|
||||
```
|
||||
|
||||
## Running the app
|
||||
|
||||
```bash
|
||||
# development
|
||||
$ npm run start
|
||||
|
||||
# watch mode
|
||||
$ npm run start:dev
|
||||
|
||||
# incremental rebuild (webpack)
|
||||
$ npm run webpack
|
||||
$ npm run start:hmr
|
||||
|
||||
# production mode
|
||||
$ npm run start:prod
|
||||
```
|
||||
|
||||
## Test
|
||||
|
||||
```bash
|
||||
# unit tests
|
||||
$ npm run test
|
||||
|
||||
# e2e tests
|
||||
$ npm run test:e2e
|
||||
|
||||
# test coverage
|
||||
$ npm run test:cov
|
||||
```
|
||||
|
||||
## Support
|
||||
|
||||
TODO
|
||||
|
||||
## Stay in touch
|
||||
|
||||
- Website - [https://ohmyform.com](https://ohmyform.com/)
|
||||
|
||||
## License
|
||||
|
||||
TODO
|
||||
5
api/nest-cli.json
Normal file
5
api/nest-cli.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"language": "ts",
|
||||
"collection": "@nestjs/schematics",
|
||||
"sourceRoot": "src"
|
||||
}
|
||||
6
api/nodemon-debug.json
Normal file
6
api/nodemon-debug.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"watch": ["src"],
|
||||
"ext": "ts",
|
||||
"ignore": ["src/**/*.spec.ts"],
|
||||
"exec": "node --inspect-brk -r ts-node/register src/main.ts"
|
||||
}
|
||||
6
api/nodemon.json
Normal file
6
api/nodemon.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"watch": ["src"],
|
||||
"ext": "ts",
|
||||
"ignore": ["src/**/*.spec.ts"],
|
||||
"exec": "ts-node -r tsconfig-paths/register src/main.ts"
|
||||
}
|
||||
66
api/package.json
Normal file
66
api/package.json
Normal file
@ -0,0 +1,66 @@
|
||||
{
|
||||
"name": "ohmyform",
|
||||
"version": "0.1.0",
|
||||
"description": "Opensource alternative to TypeForm",
|
||||
"author": "multiple",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"build": "rimraf dist && tsc -p tsconfig.build.json",
|
||||
"format": "prettier --write \"src/**/*.ts\"",
|
||||
"start": "ts-node -r tsconfig-paths/register src/main.ts",
|
||||
"start:dev": "tsc-watch -p tsconfig.build.json --onSuccess \"node dist/main.js\"",
|
||||
"start:debug": "tsc-watch -p tsconfig.build.json --onSuccess \"node --inspect-brk dist/main.js\"",
|
||||
"start:prod": "node dist/main.js",
|
||||
"lint": "tslint -p tsconfig.json -c tslint.json",
|
||||
"test": "jest",
|
||||
"test:watch": "jest --watch",
|
||||
"test:cov": "jest --coverage",
|
||||
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
|
||||
"test:e2e": "jest --config ./test/jest-e2e.json"
|
||||
},
|
||||
"dependencies": {
|
||||
"@godaddy/terminus": "^4.1.2",
|
||||
"@nestjs/common": "^6.0.0",
|
||||
"@nestjs/core": "^6.0.0",
|
||||
"@nestjs/mongoose": "^6.1.2",
|
||||
"@nestjs/platform-express": "^6.0.0",
|
||||
"@nestjs/swagger": "^3.1.0",
|
||||
"@nestjs/terminus": "^6.5.0",
|
||||
"@types/mongoose": "^5.5.11",
|
||||
"mongoose": "^5.6.7",
|
||||
"reflect-metadata": "^0.1.12",
|
||||
"rimraf": "^2.6.2",
|
||||
"rxjs": "^6.3.3",
|
||||
"swagger-ui-express": "^4.0.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@nestjs/testing": "6.1.1",
|
||||
"@types/express": "4.16.1",
|
||||
"@types/jest": "24.0.11",
|
||||
"@types/node": "11.13.4",
|
||||
"@types/supertest": "2.0.7",
|
||||
"jest": "24.7.1",
|
||||
"prettier": "1.17.0",
|
||||
"supertest": "4.0.2",
|
||||
"ts-jest": "24.0.2",
|
||||
"ts-node": "8.1.0",
|
||||
"tsc-watch": "2.2.1",
|
||||
"tsconfig-paths": "3.8.0",
|
||||
"tslint": "5.16.0",
|
||||
"typescript": "3.4.3"
|
||||
},
|
||||
"jest": {
|
||||
"moduleFileExtensions": [
|
||||
"js",
|
||||
"json",
|
||||
"ts"
|
||||
],
|
||||
"rootDir": "src",
|
||||
"testRegex": ".spec.ts$",
|
||||
"transform": {
|
||||
"^.+\\.(t|j)s$": "ts-jest"
|
||||
},
|
||||
"coverageDirectory": "../coverage",
|
||||
"testEnvironment": "node"
|
||||
}
|
||||
}
|
||||
22
api/src/app.controller.spec.ts
Normal file
22
api/src/app.controller.spec.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import { Test, TestingModule } from '@nestjs/testing';
|
||||
import { AppController } from './app.controller';
|
||||
import { AppService } from './app.service';
|
||||
|
||||
describe('AppController', () => {
|
||||
let appController: AppController;
|
||||
|
||||
beforeEach(async () => {
|
||||
const app: TestingModule = await Test.createTestingModule({
|
||||
controllers: [AppController],
|
||||
providers: [AppService],
|
||||
}).compile();
|
||||
|
||||
appController = app.get<AppController>(AppController);
|
||||
});
|
||||
|
||||
describe('root', () => {
|
||||
it('should return "Hello World!"', () => {
|
||||
expect(appController.getHello()).toBe('Hello World!');
|
||||
});
|
||||
});
|
||||
});
|
||||
12
api/src/app.controller.ts
Normal file
12
api/src/app.controller.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { Controller, Get } from '@nestjs/common';
|
||||
import { AppService } from './app.service';
|
||||
|
||||
@Controller()
|
||||
export class AppController {
|
||||
constructor(private readonly appService: AppService) {}
|
||||
|
||||
@Get()
|
||||
getHello(): string {
|
||||
return this.appService.getHello();
|
||||
}
|
||||
}
|
||||
22
api/src/app.module.ts
Normal file
22
api/src/app.module.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { TerminusModule } from '@nestjs/terminus';
|
||||
import { MongooseModule } from '@nestjs/mongoose';
|
||||
import { TerminusOptionsService } from './terminus-options.service';
|
||||
import { AppController } from './app.controller';
|
||||
import { AppService } from './app.service';
|
||||
import {UsersModule} from "./users/users.module"
|
||||
import {FormsModule} from "./forms/forms.module"
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
MongooseModule.forRoot('mongodb://localhost/nest'),
|
||||
TerminusModule.forRootAsync({
|
||||
useClass: TerminusOptionsService,
|
||||
}),
|
||||
UsersModule,
|
||||
FormsModule,
|
||||
],
|
||||
controllers: [AppController],
|
||||
providers: [AppService],
|
||||
})
|
||||
export class AppModule {}
|
||||
8
api/src/app.service.ts
Normal file
8
api/src/app.service.ts
Normal file
@ -0,0 +1,8 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
@Injectable()
|
||||
export class AppService {
|
||||
getHello(): string {
|
||||
return 'Hello World!';
|
||||
}
|
||||
}
|
||||
7
api/src/forms/forms.module.ts
Normal file
7
api/src/forms/forms.module.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
|
||||
@Module({
|
||||
providers: [],
|
||||
exports: [],
|
||||
})
|
||||
export class FormsModule {}
|
||||
22
api/src/main.ts
Normal file
22
api/src/main.ts
Normal file
@ -0,0 +1,22 @@
|
||||
import { NestFactory } from '@nestjs/core';
|
||||
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
|
||||
import { AppModule } from './app.module';
|
||||
|
||||
const pkg = require('../package.json')
|
||||
|
||||
async function bootstrap() {
|
||||
const app = await NestFactory.create(AppModule);
|
||||
|
||||
const options = new DocumentBuilder()
|
||||
.setTitle('OhMyForm')
|
||||
.setDescription('API documentation')
|
||||
.setVersion(pkg.version)
|
||||
.build();
|
||||
|
||||
const document = SwaggerModule.createDocument(app, options);
|
||||
SwaggerModule.setup('doc', app, document);
|
||||
|
||||
await app.listen(3000);
|
||||
}
|
||||
|
||||
bootstrap();
|
||||
29
api/src/terminus-options.service.ts
Normal file
29
api/src/terminus-options.service.ts
Normal file
@ -0,0 +1,29 @@
|
||||
import {
|
||||
TerminusEndpoint,
|
||||
TerminusOptionsFactory,
|
||||
DNSHealthIndicator,
|
||||
MongooseHealthIndicator,
|
||||
TerminusModuleOptions
|
||||
} from '@nestjs/terminus';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
@Injectable()
|
||||
export class TerminusOptionsService implements TerminusOptionsFactory {
|
||||
constructor(
|
||||
private readonly dns: DNSHealthIndicator,
|
||||
private readonly mongoose: MongooseHealthIndicator
|
||||
) {}
|
||||
|
||||
createTerminusOptions(): TerminusModuleOptions {
|
||||
const healthEndpoint: TerminusEndpoint = {
|
||||
url: '/health',
|
||||
healthIndicators: [
|
||||
async () => this.dns.pingCheck('mail', 'https://google.com'),
|
||||
async () => this.mongoose.pingCheck('mongo')
|
||||
],
|
||||
};
|
||||
return {
|
||||
endpoints: [healthEndpoint],
|
||||
};
|
||||
}
|
||||
}
|
||||
7
api/src/users/users.module.ts
Normal file
7
api/src/users/users.module.ts
Normal file
@ -0,0 +1,7 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
|
||||
@Module({
|
||||
providers: [],
|
||||
exports: [],
|
||||
})
|
||||
export class UsersModule {}
|
||||
4
api/tsconfig.build.json
Normal file
4
api/tsconfig.build.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"extends": "./tsconfig.json",
|
||||
"exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
|
||||
}
|
||||
15
api/tsconfig.json
Normal file
15
api/tsconfig.json
Normal file
@ -0,0 +1,15 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"declaration": true,
|
||||
"removeComments": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"experimentalDecorators": true,
|
||||
"target": "es2017",
|
||||
"sourceMap": true,
|
||||
"outDir": "./dist",
|
||||
"baseUrl": "./",
|
||||
"incremental": true
|
||||
},
|
||||
"exclude": ["node_modules", "dist"]
|
||||
}
|
||||
55
api/tslint.json
Normal file
55
api/tslint.json
Normal file
@ -0,0 +1,55 @@
|
||||
{
|
||||
"defaultSeverity": "error",
|
||||
"extends": [
|
||||
"tslint:recommended"
|
||||
],
|
||||
"jsRules": {
|
||||
"no-unused-expression": true
|
||||
},
|
||||
"rules": {
|
||||
"eofline": false,
|
||||
"quotemark": [
|
||||
true,
|
||||
"single"
|
||||
],
|
||||
"indent": false,
|
||||
"member-access": [
|
||||
false
|
||||
],
|
||||
"ordered-imports": [
|
||||
false
|
||||
],
|
||||
"max-line-length": [
|
||||
true,
|
||||
150
|
||||
],
|
||||
"member-ordering": [
|
||||
false
|
||||
],
|
||||
"curly": false,
|
||||
"interface-name": [
|
||||
false
|
||||
],
|
||||
"array-type": [
|
||||
false
|
||||
],
|
||||
"no-empty-interface": false,
|
||||
"no-empty": false,
|
||||
"arrow-parens": false,
|
||||
"object-literal-sort-keys": false,
|
||||
"no-unused-expression": false,
|
||||
"max-classes-per-file": [
|
||||
false
|
||||
],
|
||||
"variable-name": [
|
||||
false
|
||||
],
|
||||
"one-line": [
|
||||
false
|
||||
],
|
||||
"one-variable-per-declaration": [
|
||||
false
|
||||
]
|
||||
},
|
||||
"rulesDirectory": []
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user