변경 5번째..

This commit is contained in:
최준흠 2022-08-24 18:13:40 +09:00
parent f7e941d6aa
commit c77808b9fc
20 changed files with 163 additions and 137 deletions

View File

@ -1,22 +1,22 @@
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { Test, TestingModule } from '@nestjs/testing'
import { AppController } from './app.controller'
import { AppService } from './app.service'
describe('AppController', () => {
let appController: AppController;
let appController: AppController
beforeEach(async () => {
const app: TestingModule = await Test.createTestingModule({
controllers: [AppController],
providers: [AppService],
}).compile();
providers: [AppService]
}).compile()
appController = app.get<AppController>(AppController);
});
appController = app.get<AppController>(AppController)
})
describe('root', () => {
it('should return "Hello World!"', () => {
expect(appController.getHello()).toBe('Hello World!');
});
});
});
expect(appController.getHello()).toBe('Hello World!')
})
})
})

View File

@ -1,5 +1,5 @@
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
import { Controller, Get } from '@nestjs/common'
import { AppService } from './app.service'
@Controller()
export class AppController {
@ -7,6 +7,6 @@ export class AppController {
@Get()
getHello(): string {
return this.appService.getHello();
return this.appService.getHello()
}
}

View File

@ -1,8 +1,8 @@
import { Injectable } from '@nestjs/common';
import { Injectable } from '@nestjs/common'
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
return 'Hello World!'
}
}

View File

@ -1,18 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { AuthController } from './auth.controller';
import { Test, TestingModule } from '@nestjs/testing'
import { AuthController } from './auth.controller'
describe('AuthController', () => {
let controller: AuthController;
let controller: AuthController
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [AuthController],
}).compile();
controllers: [AuthController]
}).compile()
controller = module.get<AuthController>(AuthController);
});
controller = module.get<AuthController>(AuthController)
})
it('should be defined', () => {
expect(controller).toBeDefined();
});
});
expect(controller).toBeDefined()
})
})

View File

@ -1,18 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { AuthService } from './auth.service';
import { Test, TestingModule } from '@nestjs/testing'
import { AuthService } from './auth.service'
describe('AuthService', () => {
let service: AuthService;
let service: AuthService
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [AuthService],
}).compile();
providers: [AuthService]
}).compile()
service = module.get<AuthService>(AuthService);
});
service = module.get<AuthService>(AuthService)
})
it('should be defined', () => {
expect(service).toBeDefined();
});
});
expect(service).toBeDefined()
})
})

View File

@ -1,23 +1,23 @@
import {
ExecutionContext,
Injectable,
UnauthorizedException,
} from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
UnauthorizedException
} from '@nestjs/common'
import { AuthGuard } from '@nestjs/passport'
@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {
canActivate(context: ExecutionContext) {
// Add your custom authentication logic here
// for example, call super.logIn(request) to establish a session.
return super.canActivate(context);
return super.canActivate(context)
}
handleRequest(err, user, info) {
// You can throw an exception based on either "info" or "err" arguments
if (err || !user) {
throw err || new UnauthorizedException();
throw err || new UnauthorizedException()
}
return user;
return user
}
}

View File

@ -1,5 +1,5 @@
import { Injectable } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { Injectable } from '@nestjs/common'
import { AuthGuard } from '@nestjs/passport'
@Injectable()
export class LocalAuthGuard extends AuthGuard('local') {}

View File

@ -1,7 +1,7 @@
import { RolesGuard } from './roles.guard';
import { RolesGuard } from './roles.guard'
describe('RolesGuard', () => {
it('should be defined', () => {
expect(new RolesGuard()).toBeDefined();
});
});
expect(new RolesGuard()).toBeDefined()
})
})

View File

@ -1,17 +1,15 @@
//참고 : https://wikidocs.net/book/7059
import { NestFactory } from '@nestjs/core'
import { env } from 'process'
import { AppModule } from './app.module'
var cors = require('cors')
async function bootstrap() {
const app = await NestFactory.create(AppModule)
//Enable All CORS Requests : https://github.com/expressjs/cors#enable-cors-for-a-single-route
var corsOptions = function (req, callback) {
//Enable All CORS Requests : https://docs.nestjs.com/security/cors
const corsOptions = function (req, callback) {
const origin = req.header('Origin')
var corsOptions
if (env.CORS_ALLOW_LIST.indexOf(origin) !== -1) {
let corsOptions
if (process.env.CORS_ALLOW_LIST.indexOf(origin) !== -1) {
corsOptions = { origin: true } // reflect (enable) the requested origin in the CORS response
console.log('Allowed Origin URL: ' + origin)
} else {
@ -20,7 +18,7 @@ async function bootstrap() {
}
callback(null, corsOptions) // callback expects two parameters: error and options
}
app.use(cors(corsOptions))
app.enableCors(corsOptions)
await app.listen(3000, function () {
console.log(
'[CORS-enabled->npm install -g webpack webpack-cli] web server listening on port 3000'

View File

@ -1,15 +1,15 @@
import { INestApplication, Injectable, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';
import { INestApplication, Injectable, OnModuleInit } from '@nestjs/common'
import { PrismaClient } from '@prisma/client'
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit {
async onModuleInit() {
await this.$connect();
await this.$connect()
}
async enableShutdownHooks(app: INestApplication) {
this.$on('beforeExit', async () => {
await app.close();
});
await app.close()
})
}
}

View File

@ -1,5 +1,5 @@
export class TodoDTO {
title: string;
content: string;
is_done: boolean;
title: string
content: string
is_done: boolean
}

View File

@ -1,18 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { TodoController } from './todo.controller';
import { Test, TestingModule } from '@nestjs/testing'
import { TodoController } from './todo.controller'
describe('TodoController', () => {
let controller: TodoController;
let controller: TodoController
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [TodoController],
}).compile();
controllers: [TodoController]
}).compile()
controller = module.get<TodoController>(TodoController);
});
controller = module.get<TodoController>(TodoController)
})
it('should be defined', () => {
expect(controller).toBeDefined();
});
});
expect(controller).toBeDefined()
})
})

View File

@ -21,15 +21,15 @@ import { TodoService } from './todo.service'
export class TodoController {
constructor(private readonly todoService: TodoService) {}
@Get()
async fetchAll(@Query() query): Promise<{}> {
@Get('/vue3')
async fetchAllVue3(@Query() query): Promise<{ total: number; rows: Todo[] }> {
//Sql용
console.log(query)
const searchSql = query.searchString
const searchSql = query.search
? {
OR: [
{ title: { contains: query.searchString as string } },
{ content: { contains: query.searchString as string } }
{ title: { contains: query.search as string } },
{ content: { contains: query.search as string } }
]
}
: {}
@ -68,6 +68,34 @@ export class TodoController {
return data
}
@Get('/vue2')
async fetchAllVue2(@Query() query): Promise<{ total: number; rows: Todo[] }> {
//Sql용
console.log(query)
const searchSql = query.search
? {
OR: [
{ title: { contains: query.search as string } },
{ content: { contains: query.search as string } }
]
}
: {}
const fetchSQL = {
where: {
//is_done: true,
...searchSql
},
orderBy: { id: 'desc' }
}
console.log(fetchSQL)
const rows = await this.todoService.fetchAll(fetchSQL)
const data = {
total: rows.length,
rows: rows
}
return data
}
@HasRoles(Role.USER)
@UseGuards(JwtAuthGuard, RolesGuard)
@Get(':id')

View File

@ -1,10 +1,10 @@
import { Module } from '@nestjs/common';
import { PrismaService } from 'src/prisma.service';
import { TodoController } from './todo.controller';
import { TodoService } from './todo.service';
import { Module } from '@nestjs/common'
import { PrismaService } from 'src/prisma.service'
import { TodoController } from './todo.controller'
import { TodoService } from './todo.service'
@Module({
controllers: [TodoController],
providers: [TodoService, PrismaService],
providers: [TodoService, PrismaService]
})
export class TodoModule {}

View File

@ -1,18 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { TodoService } from './todo.service';
import { Test, TestingModule } from '@nestjs/testing'
import { TodoService } from './todo.service'
describe('TodoService', () => {
let service: TodoService;
let service: TodoService
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [TodoService],
}).compile();
providers: [TodoService]
}).compile()
service = module.get<TodoService>(TodoService);
});
service = module.get<TodoService>(TodoService)
})
it('should be defined', () => {
expect(service).toBeDefined();
});
});
expect(service).toBeDefined()
})
})

View File

@ -1,5 +1,5 @@
import { Injectable } from '@nestjs/common'
import { Todo, Prisma } from '@prisma/client'
import { Todo } from '@prisma/client'
import { PrismaService } from 'src/prisma.service'
import { TodoDTO } from './dtos/todo.dto'
@ -11,7 +11,7 @@ export class TodoService {
//참고: https://intrepidgeeks.com/tutorial/05-instagram-clone-code-5-user-summary
//전체조회
async count(sql: any): Promise<number> {
return this.prismaService.todo.count()
return this.prismaService.todo.count(sql)
}
async fetchAll(sql: any): Promise<Todo[]> {

View File

@ -1,18 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { UserController } from './user.controller';
import { Test, TestingModule } from '@nestjs/testing'
import { UserController } from './user.controller'
describe('UserController', () => {
let controller: UserController;
let controller: UserController
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [UserController],
}).compile();
controllers: [UserController]
}).compile()
controller = module.get<UserController>(UserController);
});
controller = module.get<UserController>(UserController)
})
it('should be defined', () => {
expect(controller).toBeDefined();
});
});
expect(controller).toBeDefined()
})
})

View File

@ -1,11 +1,11 @@
import { Module } from '@nestjs/common';
import { PrismaService } from 'src/prisma.service';
import { UserService } from './user.service';
import { UserController } from './user.controller';
import { Module } from '@nestjs/common'
import { PrismaService } from 'src/prisma.service'
import { UserService } from './user.service'
import { UserController } from './user.controller'
@Module({
controllers: [UserController],
providers: [UserService, PrismaService],
exports: [UserService],
exports: [UserService]
})
export class UsersModule {}

View File

@ -1,18 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { UserService } from './user.service';
import { Test, TestingModule } from '@nestjs/testing'
import { UserService } from './user.service'
describe('UserService', () => {
let service: UserService;
let service: UserService
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [UserService],
}).compile();
providers: [UserService]
}).compile()
service = module.get<UserService>(UserService);
});
service = module.get<UserService>(UserService)
})
it('should be defined', () => {
expect(service).toBeDefined();
});
});
expect(service).toBeDefined()
})
})

View File

@ -1,24 +1,24 @@
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';
import { Test, TestingModule } from '@nestjs/testing'
import { INestApplication } from '@nestjs/common'
import * as request from 'supertest'
import { AppModule } from './../src/app.module'
describe('AppController (e2e)', () => {
let app: INestApplication;
let app: INestApplication
beforeEach(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule],
}).compile();
imports: [AppModule]
}).compile()
app = moduleFixture.createNestApplication();
await app.init();
});
app = moduleFixture.createNestApplication()
await app.init()
})
it('/ (GET)', () => {
return request(app.getHttpServer())
.get('/')
.expect(200)
.expect('Hello World!');
});
});
.expect('Hello World!')
})
})