Peace 2 weeks ago
parent afa9c4fe39
commit a3f591ab3a
  1. 2
      backend/dist/app.controller.js
  2. 2
      backend/dist/app.controller.js.map
  3. 8
      backend/dist/auth/auth.controller.d.ts
  4. 29
      backend/dist/auth/auth.controller.js
  5. 2
      backend/dist/auth/auth.controller.js.map
  6. 30
      backend/dist/auth/dto/login-response.dto.js
  7. 2
      backend/dist/auth/dto/login-response.dto.js.map
  8. 7
      backend/dist/auth/dto/login-user.dto.js
  9. 2
      backend/dist/auth/dto/login-user.dto.js.map
  10. 4
      backend/dist/common/dto/sucees-response.dto.js
  11. 2
      backend/dist/common/dto/sucees-response.dto.js.map
  12. 4
      backend/dist/common/entities/timestamped.entity.js
  13. 2
      backend/dist/common/entities/timestamped.entity.js.map
  14. 2
      backend/dist/tsconfig.build.tsbuildinfo
  15. 7
      backend/dist/users/dto/change-password.dto.js
  16. 2
      backend/dist/users/dto/change-password.dto.js.map
  17. 9
      backend/dist/users/dto/create-user.dto.js
  18. 2
      backend/dist/users/dto/create-user.dto.js.map
  19. 26
      backend/dist/users/dto/user-info-response.dto.js
  20. 2
      backend/dist/users/dto/user-info-response.dto.js.map
  21. 4
      backend/dist/users/user.entity.js
  22. 2
      backend/dist/users/user.entity.js.map
  23. 4
      backend/dist/users/users.controller.d.ts
  24. 12
      backend/dist/users/users.controller.js
  25. 2
      backend/dist/users/users.controller.js.map
  26. 3
      backend/nest-cli.json
  27. 29
      backend/src/auth/auth.controller.ts
  28. 11
      backend/src/auth/dto/login-response.dto.ts
  29. 3
      backend/src/auth/dto/login-user.dto.ts
  30. 20
      backend/src/common/dto/sucees-response.dto.ts
  31. 3
      backend/src/users/dto/change-password.dto.ts
  32. 9
      backend/src/users/dto/create-user-response.dto.ts
  33. 7
      backend/src/users/dto/create-user.dto.ts
  34. 7
      backend/src/users/dto/user-info-response.dto.ts
  35. 12
      backend/src/users/users.controller.ts

@ -10,6 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.AppController = void 0; exports.AppController = void 0;
const openapi = require("@nestjs/swagger");
const common_1 = require("@nestjs/common"); const common_1 = require("@nestjs/common");
const app_service_1 = require("./app.service"); const app_service_1 = require("./app.service");
let AppController = class AppController { let AppController = class AppController {
@ -24,6 +25,7 @@ let AppController = class AppController {
exports.AppController = AppController; exports.AppController = AppController;
__decorate([ __decorate([
(0, common_1.Get)(), (0, common_1.Get)(),
openapi.ApiResponse({ status: 200, type: String }),
__metadata("design:type", Function), __metadata("design:type", Function),
__metadata("design:paramtypes", []), __metadata("design:paramtypes", []),
__metadata("design:returntype", String) __metadata("design:returntype", String)

@ -1 +1 @@
{"version":3,"file":"app.controller.js","sourceRoot":"","sources":["../src/app.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAiD;AACjD,+CAA2C;AAGpC,IAAM,aAAa,GAAnB,MAAM,aAAa;IACK;IAA7B,YAA6B,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAGvD,QAAQ;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IACpC,CAAC;CACF,CAAA;AAPY,sCAAa;AAIxB;IADC,IAAA,YAAG,GAAE;;;;6CAGL;wBANU,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAE8B,wBAAU;GADxC,aAAa,CAOzB"} {"version":3,"file":"app.controller.js","sourceRoot":"","sources":["../src/app.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAiD;AACjD,+CAA2C;AAGpC,IAAM,aAAa,GAAnB,MAAM,aAAa;IACK;IAA7B,YAA6B,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAGvD,QAAQ;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IACpC,CAAC;CACF,CAAA;AAPY,sCAAa;AAIxB;IADC,IAAA,YAAG,GAAE;;;;;6CAGL;wBANU,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAE8B,wBAAU;GADxC,aAAa,CAOzB"}

@ -1,16 +1,16 @@
import { AuthService } from './auth.service'; import { AuthService } from './auth.service';
import { CreateUserDto } from 'src/users/dto/create-user.dto'; import { CreateUserDto } from 'src/users/dto/create-user.dto';
import { LoginUserDto } from 'src/auth/dto/login-user.dto'; import { LoginUserDto } from 'src/auth/dto/login-user.dto';
import { SuccessResponseDto } from 'src/common/dto/sucees-response.dto';
import { LoginResponseDto } from './dto/login-response.dto'; import { LoginResponseDto } from './dto/login-response.dto';
import { UsersService } from 'src/users/users.service'; import { UsersService } from 'src/users/users.service';
import { UserInfoResponseDto } from 'src/users/dto/user-info-response.dto'; import { UserInfoResponseDto } from 'src/users/dto/user-info-response.dto';
import { AuthRequest } from 'src/common/interfaces/auth-request.interface'; import { AuthRequest } from 'src/common/interfaces/auth-request.interface';
import { CreateUserResponse } from 'src/users/dto/create-user-response.dto';
export declare class AuthController { export declare class AuthController {
private readonly authService; private readonly authService;
private userService; private userService;
constructor(authService: AuthService, userService: UsersService); constructor(authService: AuthService, userService: UsersService);
signup(dto: CreateUserDto): Promise<SuccessResponseDto>; signup(dto: CreateUserDto): Promise<CreateUserResponse>;
login(dto: LoginUserDto): Promise<SuccessResponseDto<LoginResponseDto>>; login(dto: LoginUserDto): Promise<LoginResponseDto>;
getMe(req: AuthRequest): Promise<SuccessResponseDto<UserInfoResponseDto>>; getMe(req: AuthRequest): Promise<UserInfoResponseDto>;
} }

@ -13,13 +13,17 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.AuthController = void 0; exports.AuthController = void 0;
const openapi = require("@nestjs/swagger");
const common_1 = require("@nestjs/common"); const common_1 = require("@nestjs/common");
const auth_service_1 = require("./auth.service"); const auth_service_1 = require("./auth.service");
const create_user_dto_1 = require("../users/dto/create-user.dto"); const create_user_dto_1 = require("../users/dto/create-user.dto");
const login_user_dto_1 = require("./dto/login-user.dto"); const login_user_dto_1 = require("./dto/login-user.dto");
const sucees_response_dto_1 = require("../common/dto/sucees-response.dto"); const login_response_dto_1 = require("./dto/login-response.dto");
const users_service_1 = require("../users/users.service"); const users_service_1 = require("../users/users.service");
const jwt_auth_guard_1 = require("./jwt-auth.guard"); const jwt_auth_guard_1 = require("./jwt-auth.guard");
const user_info_response_dto_1 = require("../users/dto/user-info-response.dto");
const swagger_1 = require("@nestjs/swagger");
const create_user_response_dto_1 = require("../users/dto/create-user-response.dto");
let AuthController = class AuthController { let AuthController = class AuthController {
authService; authService;
userService; userService;
@ -28,21 +32,25 @@ let AuthController = class AuthController {
this.userService = userService; this.userService = userService;
} }
async signup(dto) { async signup(dto) {
await this.authService.signup(dto); const user = await this.authService.signup(dto);
return sucees_response_dto_1.SuccessResponseDto.ok(); return {
name: user.name,
email: user.email,
};
} }
async login(dto) { async login(dto) {
const loginUser = await this.authService.login(dto); return await this.authService.login(dto);
return sucees_response_dto_1.SuccessResponseDto.of(loginUser);
} }
async getMe(req) { async getMe(req) {
const userInfo = await this.userService.findUserInfoByIdOrFail(req.user.userId); return await this.userService.findUserInfoByIdOrFail(req.user.userId);
return sucees_response_dto_1.SuccessResponseDto.of(userInfo);
} }
}; };
exports.AuthController = AuthController; exports.AuthController = AuthController;
__decorate([ __decorate([
(0, common_1.Post)('signup'), (0, common_1.Post)('signup'),
(0, swagger_1.ApiOperation)({ summary: '회원가입' }),
(0, swagger_1.ApiOkResponse)({ description: '성공', type: create_user_response_dto_1.CreateUserResponse }),
openapi.ApiResponse({ status: 201, type: require("../users/dto/create-user-response.dto").CreateUserResponse }),
__param(0, (0, common_1.Body)()), __param(0, (0, common_1.Body)()),
__metadata("design:type", Function), __metadata("design:type", Function),
__metadata("design:paramtypes", [create_user_dto_1.CreateUserDto]), __metadata("design:paramtypes", [create_user_dto_1.CreateUserDto]),
@ -50,6 +58,9 @@ __decorate([
], AuthController.prototype, "signup", null); ], AuthController.prototype, "signup", null);
__decorate([ __decorate([
(0, common_1.Post)('login'), (0, common_1.Post)('login'),
(0, swagger_1.ApiOperation)({ summary: '로그인' }),
(0, swagger_1.ApiOkResponse)({ description: '성공', type: login_response_dto_1.LoginResponseDto }),
openapi.ApiResponse({ status: 201, type: require("./dto/login-response.dto").LoginResponseDto }),
__param(0, (0, common_1.Body)()), __param(0, (0, common_1.Body)()),
__metadata("design:type", Function), __metadata("design:type", Function),
__metadata("design:paramtypes", [login_user_dto_1.LoginUserDto]), __metadata("design:paramtypes", [login_user_dto_1.LoginUserDto]),
@ -58,12 +69,16 @@ __decorate([
__decorate([ __decorate([
(0, common_1.Get)('me'), (0, common_1.Get)('me'),
(0, common_1.UseGuards)(jwt_auth_guard_1.JwtAuthGuard), (0, common_1.UseGuards)(jwt_auth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
(0, swagger_1.ApiOkResponse)({ description: '성공', type: user_info_response_dto_1.UserInfoResponseDto }),
openapi.ApiResponse({ status: 200, type: require("../users/dto/user-info-response.dto").UserInfoResponseDto }),
__param(0, (0, common_1.Request)()), __param(0, (0, common_1.Request)()),
__metadata("design:type", Function), __metadata("design:type", Function),
__metadata("design:paramtypes", [Object]), __metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise) __metadata("design:returntype", Promise)
], AuthController.prototype, "getMe", null); ], AuthController.prototype, "getMe", null);
exports.AuthController = AuthController = __decorate([ exports.AuthController = AuthController = __decorate([
(0, swagger_1.ApiTags)('인증'),
(0, common_1.Controller)('auth'), (0, common_1.Controller)('auth'),
__metadata("design:paramtypes", [auth_service_1.AuthService, __metadata("design:paramtypes", [auth_service_1.AuthService,
users_service_1.UsersService]) users_service_1.UsersService])

@ -1 +1 @@
{"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../src/auth/auth.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAiF;AACjF,iDAA6C;AAC7C,kEAA8D;AAC9D,yDAA2D;AAC3D,2EAAwE;AAExE,0DAAuD;AACvD,qDAAgD;AAKzC,IAAM,cAAc,GAApB,MAAM,cAAc;IAEN;IACT;IAFV,YACmB,WAAwB,EACjC,WAAyB;QADhB,gBAAW,GAAX,WAAW,CAAa;QACjC,gBAAW,GAAX,WAAW,CAAc;IAChC,CAAC;IAGE,AAAN,KAAK,CAAC,MAAM,CAAS,GAAkB;QACrC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,wCAAkB,CAAC,EAAE,EAAE,CAAC;IACjC,CAAC;IAGK,AAAN,KAAK,CAAC,KAAK,CAAS,GAAiB;QACnC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpD,OAAO,wCAAkB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAIK,AAAN,KAAK,CAAC,KAAK,CAAY,GAAgB;QACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChF,OAAO,wCAAkB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;CACF,CAAA;AAxBY,wCAAc;AAOnB;IADL,IAAA,aAAI,EAAC,QAAQ,CAAC;IACD,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAM,+BAAa;;4CAGtC;AAGK;IADL,IAAA,aAAI,EAAC,OAAO,CAAC;IACD,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAM,6BAAY;;2CAGpC;AAIK;IAFL,IAAA,YAAG,EAAC,IAAI,CAAC;IACT,IAAA,kBAAS,EAAC,6BAAY,CAAC;IACX,WAAA,IAAA,gBAAO,GAAE,CAAA;;;;2CAGrB;yBAvBU,cAAc;IAD1B,IAAA,mBAAU,EAAC,MAAM,CAAC;qCAGe,0BAAW;QACpB,4BAAY;GAHxB,cAAc,CAwB1B"} {"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../src/auth/auth.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAiF;AACjF,iDAA6C;AAC7C,kEAA8D;AAC9D,yDAA2D;AAC3D,iEAA4D;AAC5D,0DAAuD;AACvD,qDAAgD;AAChD,gFAA2E;AAE3E,6CAAsF;AACtF,oFAA4E;AAIrE,IAAM,cAAc,GAApB,MAAM,cAAc;IAEN;IACT;IAFV,YACmB,WAAwB,EACjC,WAAyB;QADhB,gBAAW,GAAX,WAAW,CAAa;QACjC,gBAAW,GAAX,WAAW,CAAc;IAChC,CAAC;IAKE,AAAN,KAAK,CAAC,MAAM,CAAS,GAAkB;QACrC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChD,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;IACJ,CAAC;IAKK,AAAN,KAAK,CAAC,KAAK,CAAS,GAAiB;QACnC,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAMK,AAAN,KAAK,CAAC,KAAK,CAAY,GAAgB;QACrC,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC;CACF,CAAA;AA/BY,wCAAc;AASnB;IAHL,IAAA,aAAI,EAAC,QAAQ,CAAC;IACd,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACjC,IAAA,uBAAa,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,6CAAkB,EAAE,CAAC;;IACjD,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAM,+BAAa;;4CAMtC;AAKK;IAHL,IAAA,aAAI,EAAC,OAAO,CAAC;IACb,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAChC,IAAA,uBAAa,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,qCAAgB,EAAE,CAAC;;IAChD,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAM,6BAAY;;2CAEpC;AAMK;IAJL,IAAA,YAAG,EAAC,IAAI,CAAC;IACT,IAAA,kBAAS,EAAC,6BAAY,CAAC;IACvB,IAAA,uBAAa,GAAE;IACf,IAAA,uBAAa,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,4CAAmB,EAAE,CAAC;;IACnD,WAAA,IAAA,gBAAO,GAAE,CAAA;;;;2CAErB;yBA9BU,cAAc;IAF1B,IAAA,iBAAO,EAAC,IAAI,CAAC;IACb,IAAA,mBAAU,EAAC,MAAM,CAAC;qCAGe,0BAAW;QACpB,4BAAY;GAHxB,cAAc,CA+B1B"}

@ -1,9 +1,39 @@
"use strict"; "use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.LoginResponseDto = void 0; exports.LoginResponseDto = void 0;
const openapi = require("@nestjs/swagger");
const swagger_1 = require("@nestjs/swagger");
const user_info_response_dto_1 = require("../../users/dto/user-info-response.dto");
class LoginResponseDto { class LoginResponseDto {
access_token; access_token;
user; user;
static _OPENAPI_METADATA_FACTORY() {
return { access_token: { required: true, type: () => String }, user: { required: true, type: () => require("../../users/dto/user-info-response.dto").UserInfoResponseDto } };
}
} }
exports.LoginResponseDto = LoginResponseDto; exports.LoginResponseDto = LoginResponseDto;
__decorate([
(0, swagger_1.ApiProperty)({ description: '토큰', example: 'eyJsfFdfdDSddss...' }),
__metadata("design:type", String)
], LoginResponseDto.prototype, "access_token", void 0);
__decorate([
(0, swagger_1.ApiProperty)({
description: '사용자 정보',
example: {
id: '1',
name: 'username',
email: 'user@email.com',
},
}),
__metadata("design:type", user_info_response_dto_1.UserInfoResponseDto)
], LoginResponseDto.prototype, "user", void 0);
//# sourceMappingURL=login-response.dto.js.map //# sourceMappingURL=login-response.dto.js.map

@ -1 +1 @@
{"version":3,"file":"login-response.dto.js","sourceRoot":"","sources":["../../../src/auth/dto/login-response.dto.ts"],"names":[],"mappings":";;;AAEA,MAAa,gBAAgB;IAC3B,YAAY,CAAS;IACrB,IAAI,CAAsB;CAC3B;AAHD,4CAGC"} {"version":3,"file":"login-response.dto.js","sourceRoot":"","sources":["../../../src/auth/dto/login-response.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,6CAA8C;AAC9C,mFAA2E;AAE3E,MAAa,gBAAgB;IAE3B,YAAY,CAAS;IAUrB,IAAI,CAAsB;;;;CAC3B;AAbD,4CAaC;AAXC;IADC,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC;;sDAC7C;AAUrB;IARC,IAAA,qBAAW,EAAC;QACX,WAAW,EAAE,QAAQ;QACrB,OAAO,EAAE;YACP,EAAE,EAAE,GAAG;YACP,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,gBAAgB;SACxB;KACF,CAAC;8BACI,4CAAmB;8CAAC"}

@ -10,17 +10,24 @@ var __metadata = (this && this.__metadata) || function (k, v) {
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.LoginUserDto = void 0; exports.LoginUserDto = void 0;
const openapi = require("@nestjs/swagger");
const swagger_1 = require("@nestjs/swagger");
const class_validator_1 = require("class-validator"); const class_validator_1 = require("class-validator");
class LoginUserDto { class LoginUserDto {
name; name;
password; password;
static _OPENAPI_METADATA_FACTORY() {
return { name: { required: true, type: () => String }, password: { required: true, type: () => String, minLength: 4 } };
}
} }
exports.LoginUserDto = LoginUserDto; exports.LoginUserDto = LoginUserDto;
__decorate([ __decorate([
(0, swagger_1.ApiProperty)({ description: '사용자 이름', example: 'username' }),
(0, class_validator_1.IsString)(), (0, class_validator_1.IsString)(),
__metadata("design:type", String) __metadata("design:type", String)
], LoginUserDto.prototype, "name", void 0); ], LoginUserDto.prototype, "name", void 0);
__decorate([ __decorate([
(0, swagger_1.ApiProperty)({ description: '비밀번호', example: 'password' }),
(0, class_validator_1.IsString)(), (0, class_validator_1.IsString)(),
(0, class_validator_1.MinLength)(4), (0, class_validator_1.MinLength)(4),
__metadata("design:type", String) __metadata("design:type", String)

@ -1 +1 @@
{"version":3,"file":"login-user.dto.js","sourceRoot":"","sources":["../../../src/auth/dto/login-user.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAsD;AAEtD,MAAa,YAAY;IAEd,IAAI,CAAS;IAIb,QAAQ,CAAS;CAC3B;AAPD,oCAOC;AALU;IADR,IAAA,0BAAQ,GAAE;;0CACW;AAIb;IAFR,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,EAAC,CAAC,CAAC;;8CACa"} {"version":3,"file":"login-user.dto.js","sourceRoot":"","sources":["../../../src/auth/dto/login-user.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAAsD;AAEtD,MAAa,YAAY;IAGd,IAAI,CAAS;IAKb,QAAQ,CAAS;;;;CAC3B;AATD,oCASC;AANU;IAFR,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAC3D,IAAA,0BAAQ,GAAE;;0CACW;AAKb;IAHR,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACzD,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,EAAC,CAAC,CAAC;;8CACa"}

@ -1,6 +1,7 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.SuccessResponseDto = void 0; exports.SuccessResponseDto = void 0;
const openapi = require("@nestjs/swagger");
class SuccessResponseDto { class SuccessResponseDto {
success; success;
message; message;
@ -18,6 +19,9 @@ class SuccessResponseDto {
message, message,
}; };
} }
static _OPENAPI_METADATA_FACTORY() {
return { success: { required: true, type: () => Boolean }, message: { required: false, type: () => String }, data: { required: false } };
}
} }
exports.SuccessResponseDto = SuccessResponseDto; exports.SuccessResponseDto = SuccessResponseDto;
//# sourceMappingURL=sucees-response.dto.js.map //# sourceMappingURL=sucees-response.dto.js.map

@ -1 +1 @@
{"version":3,"file":"sucees-response.dto.js","sourceRoot":"","sources":["../../../src/common/dto/sucees-response.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,kBAAkB;IAC7B,OAAO,CAAU;IACjB,OAAO,CAAU;IACjB,IAAI,CAAK;IAET,MAAM,CAAC,EAAE,CAAI,IAAO,EAAE,OAAgB;QACpC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI;YACJ,OAAO;SACR,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,OAAgB;QACxB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO;SACR,CAAC;IACJ,CAAC;CACF;AAnBD,gDAmBC"} {"version":3,"file":"sucees-response.dto.js","sourceRoot":"","sources":["../../../src/common/dto/sucees-response.dto.ts"],"names":[],"mappings":";;;;AAAA,MAAa,kBAAkB;IAC7B,OAAO,CAAU;IACjB,OAAO,CAAU;IACjB,IAAI,CAAK;IAET,MAAM,CAAC,EAAE,CAAI,IAAO,EAAE,OAAgB;QACpC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI;YACJ,OAAO;SACR,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,EAAE,CAAC,OAAgB;QACxB,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO;SACR,CAAC;IACJ,CAAC;;;;CACF;AAnBD,gDAmBC"}

@ -10,10 +10,14 @@ var __metadata = (this && this.__metadata) || function (k, v) {
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.TimestampedEntity = void 0; exports.TimestampedEntity = void 0;
const openapi = require("@nestjs/swagger");
const typeorm_1 = require("typeorm"); const typeorm_1 = require("typeorm");
class TimestampedEntity { class TimestampedEntity {
createdAt; createdAt;
updatedAt; updatedAt;
static _OPENAPI_METADATA_FACTORY() {
return { createdAt: { required: true, type: () => Date }, updatedAt: { required: true, type: () => Date } };
}
} }
exports.TimestampedEntity = TimestampedEntity; exports.TimestampedEntity = TimestampedEntity;
__decorate([ __decorate([

@ -1 +1 @@
{"version":3,"file":"timestamped.entity.js","sourceRoot":"","sources":["../../../src/common/entities/timestamped.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA6D;AAE7D,MAAsB,iBAAiB;IAErC,SAAS,CAAO;IAGhB,SAAS,CAAO;CACjB;AAND,8CAMC;AAJC;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BAC7B,IAAI;oDAAC;AAGhB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BAC7B,IAAI;oDAAC"} {"version":3,"file":"timestamped.entity.js","sourceRoot":"","sources":["../../../src/common/entities/timestamped.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qCAA6D;AAE7D,MAAsB,iBAAiB;IAErC,SAAS,CAAO;IAGhB,SAAS,CAAO;;;;CACjB;AAND,8CAMC;AAJC;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BAC7B,IAAI;oDAAC;AAGhB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;8BAC7B,IAAI;oDAAC"}

File diff suppressed because one or more lines are too long

@ -10,17 +10,24 @@ var __metadata = (this && this.__metadata) || function (k, v) {
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.ChangePasswordDto = void 0; exports.ChangePasswordDto = void 0;
const openapi = require("@nestjs/swagger");
const swagger_1 = require("@nestjs/swagger");
const class_validator_1 = require("class-validator"); const class_validator_1 = require("class-validator");
class ChangePasswordDto { class ChangePasswordDto {
currentPassword; currentPassword;
newPassword; newPassword;
static _OPENAPI_METADATA_FACTORY() {
return { currentPassword: { required: true, type: () => String }, newPassword: { required: true, type: () => String, minLength: 4 } };
}
} }
exports.ChangePasswordDto = ChangePasswordDto; exports.ChangePasswordDto = ChangePasswordDto;
__decorate([ __decorate([
(0, swagger_1.ApiProperty)({ description: '기존 비밀번호', example: 'oldPassword' }),
(0, class_validator_1.IsString)(), (0, class_validator_1.IsString)(),
__metadata("design:type", String) __metadata("design:type", String)
], ChangePasswordDto.prototype, "currentPassword", void 0); ], ChangePasswordDto.prototype, "currentPassword", void 0);
__decorate([ __decorate([
(0, swagger_1.ApiProperty)({ description: '신규 비밀번호', example: 'newPassword' }),
(0, class_validator_1.IsString)(), (0, class_validator_1.IsString)(),
(0, class_validator_1.MinLength)(4), (0, class_validator_1.MinLength)(4),
__metadata("design:type", String) __metadata("design:type", String)

@ -1 +1 @@
{"version":3,"file":"change-password.dto.js","sourceRoot":"","sources":["../../../src/users/dto/change-password.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAAsD;AAEtD,MAAa,iBAAiB;IAEnB,eAAe,CAAS;IAIxB,WAAW,CAAS;CAC9B;AAPD,8CAOC;AALU;IADR,IAAA,0BAAQ,GAAE;;0DACsB;AAIxB;IAFR,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,EAAC,CAAC,CAAC;;sDACgB"} {"version":3,"file":"change-password.dto.js","sourceRoot":"","sources":["../../../src/users/dto/change-password.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAAsD;AAEtD,MAAa,iBAAiB;IAGnB,eAAe,CAAS;IAKxB,WAAW,CAAS;;;;CAC9B;AATD,8CASC;AANU;IAFR,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAC/D,IAAA,0BAAQ,GAAE;;0DACsB;AAKxB;IAHR,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAC/D,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,EAAC,CAAC,CAAC;;sDACgB"}

@ -10,23 +10,32 @@ var __metadata = (this && this.__metadata) || function (k, v) {
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateUserDto = void 0; exports.CreateUserDto = void 0;
const openapi = require("@nestjs/swagger");
const swagger_1 = require("@nestjs/swagger");
const class_validator_1 = require("class-validator"); const class_validator_1 = require("class-validator");
class CreateUserDto { class CreateUserDto {
name; name;
email; email;
password; password;
static _OPENAPI_METADATA_FACTORY() {
return { name: { required: true, type: () => String }, email: { required: false, type: () => String, format: "email" }, password: { required: true, type: () => String, minLength: 4 } };
}
} }
exports.CreateUserDto = CreateUserDto; exports.CreateUserDto = CreateUserDto;
__decorate([ __decorate([
(0, swagger_1.ApiProperty)({ description: '사용자 이름', example: 'username' }),
(0, class_validator_1.IsString)(), (0, class_validator_1.IsString)(),
(0, class_validator_1.IsNotEmpty)(),
__metadata("design:type", String) __metadata("design:type", String)
], CreateUserDto.prototype, "name", void 0); ], CreateUserDto.prototype, "name", void 0);
__decorate([ __decorate([
(0, swagger_1.ApiProperty)({ description: '사용자 이메일', example: 'user@email.com' }),
(0, class_validator_1.IsOptional)(), (0, class_validator_1.IsOptional)(),
(0, class_validator_1.IsEmail)(), (0, class_validator_1.IsEmail)(),
__metadata("design:type", String) __metadata("design:type", String)
], CreateUserDto.prototype, "email", void 0); ], CreateUserDto.prototype, "email", void 0);
__decorate([ __decorate([
(0, swagger_1.ApiProperty)({ description: '비밀번호', example: 'password' }),
(0, class_validator_1.IsString)(), (0, class_validator_1.IsString)(),
(0, class_validator_1.MinLength)(4), (0, class_validator_1.MinLength)(4),
__metadata("design:type", String) __metadata("design:type", String)

@ -1 +1 @@
{"version":3,"file":"create-user.dto.js","sourceRoot":"","sources":["../../../src/users/dto/create-user.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAA2E;AAE3E,MAAa,aAAa;IAEf,IAAI,CAAS;IAIb,KAAK,CAAU;IAIf,QAAQ,CAAS;CAC3B;AAXD,sCAWC;AATU;IADR,IAAA,0BAAQ,GAAE;;2CACW;AAIb;IAFR,IAAA,4BAAU,GAAE;IACZ,IAAA,yBAAO,GAAE;;4CACc;AAIf;IAFR,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,EAAC,CAAC,CAAC;;+CACa"} {"version":3,"file":"create-user.dto.js","sourceRoot":"","sources":["../../../src/users/dto/create-user.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAAuF;AAEvF,MAAa,aAAa;IAIf,IAAI,CAAS;IAKb,KAAK,CAAU;IAKf,QAAQ,CAAS;;;;CAC3B;AAfD,sCAeC;AAXU;IAHR,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IAC3D,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;2CACS;AAKb;IAHR,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAClE,IAAA,4BAAU,GAAE;IACZ,IAAA,yBAAO,GAAE;;4CACc;AAKf;IAHR,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;IACzD,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,EAAC,CAAC,CAAC;;+CACa"}

@ -1,10 +1,36 @@
"use strict"; "use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.UserInfoResponseDto = void 0; exports.UserInfoResponseDto = void 0;
const openapi = require("@nestjs/swagger");
const swagger_1 = require("@nestjs/swagger");
class UserInfoResponseDto { class UserInfoResponseDto {
id; id;
name; name;
email; email;
static _OPENAPI_METADATA_FACTORY() {
return { id: { required: true, type: () => Number }, name: { required: true, type: () => String }, email: { required: false, type: () => String } };
}
} }
exports.UserInfoResponseDto = UserInfoResponseDto; exports.UserInfoResponseDto = UserInfoResponseDto;
__decorate([
(0, swagger_1.ApiProperty)({ description: '사용자 아이디', example: 1 }),
__metadata("design:type", Number)
], UserInfoResponseDto.prototype, "id", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ description: '사용자 이름', example: 'username' }),
__metadata("design:type", String)
], UserInfoResponseDto.prototype, "name", void 0);
__decorate([
(0, swagger_1.ApiProperty)({ description: '사용자 이메일', example: 'user@email.com' }),
__metadata("design:type", String)
], UserInfoResponseDto.prototype, "email", void 0);
//# sourceMappingURL=user-info-response.dto.js.map //# sourceMappingURL=user-info-response.dto.js.map

@ -1 +1 @@
{"version":3,"file":"user-info-response.dto.js","sourceRoot":"","sources":["../../../src/users/dto/user-info-response.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,mBAAmB;IAC9B,EAAE,CAAS;IACX,IAAI,CAAS;IACb,KAAK,CAAU;CAChB;AAJD,kDAIC"} {"version":3,"file":"user-info-response.dto.js","sourceRoot":"","sources":["../../../src/users/dto/user-info-response.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,6CAA8C;AAE9C,MAAa,mBAAmB;IAE9B,EAAE,CAAS;IAGX,IAAI,CAAS;IAGb,KAAK,CAAU;;;;CAChB;AATD,kDASC;AAPC;IADC,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;+CACzC;AAGX;IADC,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;;iDAC/C;AAGb;IADC,IAAA,qBAAW,EAAC,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;;kDACpD"}

@ -10,6 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.User = void 0; exports.User = void 0;
const openapi = require("@nestjs/swagger");
const timestamped_entity_1 = require("../common/entities/timestamped.entity"); const timestamped_entity_1 = require("../common/entities/timestamped.entity");
const typeorm_1 = require("typeorm"); const typeorm_1 = require("typeorm");
let User = class User extends timestamped_entity_1.TimestampedEntity { let User = class User extends timestamped_entity_1.TimestampedEntity {
@ -17,6 +18,9 @@ let User = class User extends timestamped_entity_1.TimestampedEntity {
name; name;
email; email;
password; password;
static _OPENAPI_METADATA_FACTORY() {
return { id: { required: true, type: () => Number }, name: { required: true, type: () => String }, email: { required: false, type: () => String }, password: { required: true, type: () => String } };
}
}; };
exports.User = User; exports.User = User;
__decorate([ __decorate([

@ -1 +1 @@
{"version":3,"file":"user.entity.js","sourceRoot":"","sources":["../../src/users/user.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,8EAA2E;AAC3E,qCAAiE;AAG1D,IAAM,IAAI,GAAV,MAAM,IAAK,SAAQ,sCAAiB;IAEzC,EAAE,CAAS;IAGX,IAAI,CAAS;IAGb,KAAK,CAAU;IAGf,QAAQ,CAAS;CAClB,CAAA;AAZY,oBAAI;AAEf;IADC,IAAA,gCAAsB,GAAE;;gCACd;AAGX;IADC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;kCACZ;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mCAC1B;AAGf;IADC,IAAA,gBAAM,GAAE;;sCACQ;eAXN,IAAI;IADhB,IAAA,gBAAM,GAAE;GACI,IAAI,CAYhB"} {"version":3,"file":"user.entity.js","sourceRoot":"","sources":["../../src/users/user.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,8EAA2E;AAC3E,qCAAiE;AAG1D,IAAM,IAAI,GAAV,MAAM,IAAK,SAAQ,sCAAiB;IAEzC,EAAE,CAAS;IAGX,IAAI,CAAS;IAGb,KAAK,CAAU;IAGf,QAAQ,CAAS;;;;CAClB,CAAA;AAZY,oBAAI;AAEf;IADC,IAAA,gCAAsB,GAAE;;gCACd;AAGX;IADC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;kCACZ;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mCAC1B;AAGf;IADC,IAAA,gBAAM,GAAE;;sCACQ;eAXN,IAAI;IADhB,IAAA,gBAAM,GAAE;GACI,IAAI,CAYhB"}

@ -1,9 +1,9 @@
import { UsersService } from './users.service'; import { UsersService } from './users.service';
import { ChangePasswordDto } from './dto/change-password.dto'; import { ChangePasswordDto } from './dto/change-password.dto';
import { SuccessResponseDto } from 'src/common/dto/sucees-response.dto';
import { AuthRequest } from 'src/common/interfaces/auth-request.interface'; import { AuthRequest } from 'src/common/interfaces/auth-request.interface';
import { UserInfoResponseDto } from './dto/user-info-response.dto';
export declare class UsersController { export declare class UsersController {
private readonly userService; private readonly userService;
constructor(userService: UsersService); constructor(userService: UsersService);
changePassword(req: AuthRequest, dto: ChangePasswordDto): Promise<SuccessResponseDto>; changePassword(req: AuthRequest, dto: ChangePasswordDto): Promise<UserInfoResponseDto>;
} }

@ -13,11 +13,13 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
}; };
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.UsersController = void 0; exports.UsersController = void 0;
const openapi = require("@nestjs/swagger");
const common_1 = require("@nestjs/common"); const common_1 = require("@nestjs/common");
const users_service_1 = require("./users.service"); const users_service_1 = require("./users.service");
const change_password_dto_1 = require("./dto/change-password.dto"); const change_password_dto_1 = require("./dto/change-password.dto");
const jwt_auth_guard_1 = require("../auth/jwt-auth.guard"); const jwt_auth_guard_1 = require("../auth/jwt-auth.guard");
const sucees_response_dto_1 = require("../common/dto/sucees-response.dto"); const swagger_1 = require("@nestjs/swagger");
const user_info_response_dto_1 = require("./dto/user-info-response.dto");
let UsersController = class UsersController { let UsersController = class UsersController {
userService; userService;
constructor(userService) { constructor(userService) {
@ -25,13 +27,16 @@ let UsersController = class UsersController {
} }
async changePassword(req, dto) { async changePassword(req, dto) {
await this.userService.changePassword(req.user.userId, dto); await this.userService.changePassword(req.user.userId, dto);
return sucees_response_dto_1.SuccessResponseDto.ok(); return await this.userService.findUserInfoByIdOrFail(req.user.userId);
} }
}; };
exports.UsersController = UsersController; exports.UsersController = UsersController;
__decorate([ __decorate([
(0, common_1.UseGuards)(jwt_auth_guard_1.JwtAuthGuard),
(0, common_1.Patch)('password'), (0, common_1.Patch)('password'),
(0, common_1.UseGuards)(jwt_auth_guard_1.JwtAuthGuard),
(0, swagger_1.ApiBearerAuth)(),
(0, swagger_1.ApiOkResponse)({ description: '성공', type: user_info_response_dto_1.UserInfoResponseDto }),
openapi.ApiResponse({ status: 200, type: require("./dto/user-info-response.dto").UserInfoResponseDto }),
__param(0, (0, common_1.Request)()), __param(0, (0, common_1.Request)()),
__param(1, (0, common_1.Body)()), __param(1, (0, common_1.Body)()),
__metadata("design:type", Function), __metadata("design:type", Function),
@ -39,6 +44,7 @@ __decorate([
__metadata("design:returntype", Promise) __metadata("design:returntype", Promise)
], UsersController.prototype, "changePassword", null); ], UsersController.prototype, "changePassword", null);
exports.UsersController = UsersController = __decorate([ exports.UsersController = UsersController = __decorate([
(0, swagger_1.ApiTags)('사용자'),
(0, common_1.Controller)('users'), (0, common_1.Controller)('users'),
__metadata("design:paramtypes", [users_service_1.UsersService]) __metadata("design:paramtypes", [users_service_1.UsersService])
], UsersController); ], UsersController);

@ -1 +1 @@
{"version":3,"file":"users.controller.js","sourceRoot":"","sources":["../../src/users/users.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA6E;AAC7E,mDAA+C;AAC/C,mEAA8D;AAC9D,2DAAuD;AACvD,2EAAwE;AAIjE,IAAM,eAAe,GAArB,MAAM,eAAe;IACG;IAA7B,YAA6B,WAAyB;QAAzB,gBAAW,GAAX,WAAW,CAAc;IAAG,CAAC;IAIpD,AAAN,KAAK,CAAC,cAAc,CACP,GAAgB,EACnB,GAAsB;QAE9B,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5D,OAAO,wCAAkB,CAAC,EAAE,EAAE,CAAC;IACjC,CAAC;CACF,CAAA;AAZY,0CAAe;AAKpB;IAFL,IAAA,kBAAS,EAAC,6BAAY,CAAC;IACvB,IAAA,cAAK,EAAC,UAAU,CAAC;IAEf,WAAA,IAAA,gBAAO,GAAE,CAAA;IACT,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAM,uCAAiB;;qDAI/B;0BAXU,eAAe;IAD3B,IAAA,mBAAU,EAAC,OAAO,CAAC;qCAEwB,4BAAY;GAD3C,eAAe,CAY3B"} {"version":3,"file":"users.controller.js","sourceRoot":"","sources":["../../src/users/users.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA6E;AAC7E,mDAA+C;AAC/C,mEAA8D;AAC9D,2DAAuD;AAEvD,6CAAwE;AACxE,yEAAmE;AAI5D,IAAM,eAAe,GAArB,MAAM,eAAe;IACG;IAA7B,YAA6B,WAAyB;QAAzB,gBAAW,GAAX,WAAW,CAAc;IAAG,CAAC;IAMpD,AAAN,KAAK,CAAC,cAAc,CACP,GAAgB,EACnB,GAAsB;QAE9B,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5D,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC;CACF,CAAA;AAdY,0CAAe;AAOpB;IAJL,IAAA,cAAK,EAAC,UAAU,CAAC;IACjB,IAAA,kBAAS,EAAC,6BAAY,CAAC;IACvB,IAAA,uBAAa,GAAE;IACf,IAAA,uBAAa,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,4CAAmB,EAAE,CAAC;;IAE7D,WAAA,IAAA,gBAAO,GAAE,CAAA;IACT,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAM,uCAAiB;;qDAI/B;0BAbU,eAAe;IAF3B,IAAA,iBAAO,EAAC,KAAK,CAAC;IACd,IAAA,mBAAU,EAAC,OAAO,CAAC;qCAEwB,4BAAY;GAD3C,eAAe,CAc3B"}

@ -3,6 +3,7 @@
"collection": "@nestjs/schematics", "collection": "@nestjs/schematics",
"sourceRoot": "src", "sourceRoot": "src",
"compilerOptions": { "compilerOptions": {
"deleteOutDir": true "deleteOutDir": true,
"plugins": ["@nestjs/swagger/plugin"]
} }
} }

@ -2,13 +2,15 @@ import { Body, Controller, Get, Post, Request, UseGuards } from '@nestjs/common'
import { AuthService } from './auth.service'; import { AuthService } from './auth.service';
import { CreateUserDto } from 'src/users/dto/create-user.dto'; import { CreateUserDto } from 'src/users/dto/create-user.dto';
import { LoginUserDto } from 'src/auth/dto/login-user.dto'; import { LoginUserDto } from 'src/auth/dto/login-user.dto';
import { SuccessResponseDto } from 'src/common/dto/sucees-response.dto';
import { LoginResponseDto } from './dto/login-response.dto'; import { LoginResponseDto } from './dto/login-response.dto';
import { UsersService } from 'src/users/users.service'; import { UsersService } from 'src/users/users.service';
import { JwtAuthGuard } from './jwt-auth.guard'; import { JwtAuthGuard } from './jwt-auth.guard';
import { UserInfoResponseDto } from 'src/users/dto/user-info-response.dto'; import { UserInfoResponseDto } from 'src/users/dto/user-info-response.dto';
import { AuthRequest } from 'src/common/interfaces/auth-request.interface'; import { AuthRequest } from 'src/common/interfaces/auth-request.interface';
import { ApiBearerAuth, ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger';
import { CreateUserResponse } from 'src/users/dto/create-user-response.dto';
@ApiTags('인증')
@Controller('auth') @Controller('auth')
export class AuthController { export class AuthController {
constructor( constructor(
@ -17,21 +19,28 @@ export class AuthController {
) {} ) {}
@Post('signup') @Post('signup')
async signup(@Body() dto: CreateUserDto): Promise<SuccessResponseDto> { @ApiOperation({ summary: '회원가입' })
await this.authService.signup(dto); @ApiOkResponse({ description: '성공', type: CreateUserResponse })
return SuccessResponseDto.ok(); async signup(@Body() dto: CreateUserDto): Promise<CreateUserResponse> {
const user = await this.authService.signup(dto);
return {
name: user.name,
email: user.email,
};
} }
@Post('login') @Post('login')
async login(@Body() dto: LoginUserDto): Promise<SuccessResponseDto<LoginResponseDto>> { @ApiOperation({ summary: '로그인' })
const loginUser = await this.authService.login(dto); @ApiOkResponse({ description: '성공', type: LoginResponseDto })
return SuccessResponseDto.of(loginUser); async login(@Body() dto: LoginUserDto): Promise<LoginResponseDto> {
return await this.authService.login(dto);
} }
@Get('me') @Get('me')
@UseGuards(JwtAuthGuard) @UseGuards(JwtAuthGuard)
async getMe(@Request() req: AuthRequest): Promise<SuccessResponseDto<UserInfoResponseDto>> { @ApiBearerAuth()
const userInfo = await this.userService.findUserInfoByIdOrFail(req.user.userId); @ApiOkResponse({ description: '성공', type: UserInfoResponseDto })
return SuccessResponseDto.of(userInfo); async getMe(@Request() req: AuthRequest): Promise<UserInfoResponseDto> {
return await this.userService.findUserInfoByIdOrFail(req.user.userId);
} }
} }

@ -1,6 +1,17 @@
import { ApiProperty } from '@nestjs/swagger';
import { UserInfoResponseDto } from 'src/users/dto/user-info-response.dto'; import { UserInfoResponseDto } from 'src/users/dto/user-info-response.dto';
export class LoginResponseDto { export class LoginResponseDto {
@ApiProperty({ description: '토큰', example: 'eyJsfFdfdDSddss...' })
access_token: string; access_token: string;
@ApiProperty({
description: '사용자 정보',
example: {
id: '1',
name: 'username',
email: 'user@email.com',
},
})
user: UserInfoResponseDto; user: UserInfoResponseDto;
} }

@ -1,9 +1,12 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsString, MinLength } from 'class-validator'; import { IsString, MinLength } from 'class-validator';
export class LoginUserDto { export class LoginUserDto {
@ApiProperty({ description: '사용자 이름', example: 'username' })
@IsString() @IsString()
readonly name: string; readonly name: string;
@ApiProperty({ description: '비밀번호', example: 'password' })
@IsString() @IsString()
@MinLength(4) @MinLength(4)
readonly password: string; readonly password: string;

@ -1,20 +0,0 @@
export class SuccessResponseDto<T = any> {
success: boolean;
message?: string;
data?: T;
static of<T>(data: T, message?: string): SuccessResponseDto<T> {
return {
success: true,
data,
message,
};
}
static ok(message?: string): SuccessResponseDto<null> {
return {
success: true,
message,
};
}
}

@ -1,9 +1,12 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsString, MinLength } from 'class-validator'; import { IsString, MinLength } from 'class-validator';
export class ChangePasswordDto { export class ChangePasswordDto {
@ApiProperty({ description: '기존 비밀번호', example: 'oldPassword' })
@IsString() @IsString()
readonly currentPassword: string; readonly currentPassword: string;
@ApiProperty({ description: '신규 비밀번호', example: 'newPassword' })
@IsString() @IsString()
@MinLength(4) @MinLength(4)
readonly newPassword: string; readonly newPassword: string;

@ -0,0 +1,9 @@
import { ApiProperty } from '@nestjs/swagger';
export class CreateUserResponse {
@ApiProperty({ description: '사용자 이름', example: 'username' })
readonly name: string;
@ApiProperty({ description: '사용자 이메일', example: 'user@email.com' })
readonly email?: string;
}

@ -1,13 +1,18 @@
import { IsEmail, IsOptional, IsString, MinLength } from 'class-validator'; import { ApiProperty } from '@nestjs/swagger';
import { IsEmail, IsNotEmpty, IsOptional, IsString, MinLength } from 'class-validator';
export class CreateUserDto { export class CreateUserDto {
@ApiProperty({ description: '사용자 이름', example: 'username' })
@IsString() @IsString()
@IsNotEmpty()
readonly name: string; readonly name: string;
@ApiProperty({ description: '사용자 이메일', example: 'user@email.com' })
@IsOptional() @IsOptional()
@IsEmail() @IsEmail()
readonly email?: string; readonly email?: string;
@ApiProperty({ description: '비밀번호', example: 'password' })
@IsString() @IsString()
@MinLength(4) @MinLength(4)
readonly password: string; readonly password: string;

@ -1,5 +1,12 @@
import { ApiProperty } from '@nestjs/swagger';
export class UserInfoResponseDto { export class UserInfoResponseDto {
@ApiProperty({ description: '사용자 아이디', example: 1 })
id: number; id: number;
@ApiProperty({ description: '사용자 이름', example: 'username' })
name: string; name: string;
@ApiProperty({ description: '사용자 이메일', example: 'user@email.com' })
email?: string; email?: string;
} }

@ -2,20 +2,24 @@ import { Body, Controller, Patch, Request, UseGuards } from '@nestjs/common';
import { UsersService } from './users.service'; import { UsersService } from './users.service';
import { ChangePasswordDto } from './dto/change-password.dto'; import { ChangePasswordDto } from './dto/change-password.dto';
import { JwtAuthGuard } from 'src/auth/jwt-auth.guard'; import { JwtAuthGuard } from 'src/auth/jwt-auth.guard';
import { SuccessResponseDto } from 'src/common/dto/sucees-response.dto';
import { AuthRequest } from 'src/common/interfaces/auth-request.interface'; import { AuthRequest } from 'src/common/interfaces/auth-request.interface';
import { ApiBearerAuth, ApiOkResponse, ApiTags } from '@nestjs/swagger';
import { UserInfoResponseDto } from './dto/user-info-response.dto';
@ApiTags('사용자')
@Controller('users') @Controller('users')
export class UsersController { export class UsersController {
constructor(private readonly userService: UsersService) {} constructor(private readonly userService: UsersService) {}
@UseGuards(JwtAuthGuard)
@Patch('password') @Patch('password')
@UseGuards(JwtAuthGuard)
@ApiBearerAuth()
@ApiOkResponse({ description: '성공', type: UserInfoResponseDto })
async changePassword( async changePassword(
@Request() req: AuthRequest, @Request() req: AuthRequest,
@Body() dto: ChangePasswordDto, @Body() dto: ChangePasswordDto,
): Promise<SuccessResponseDto> { ): Promise<UserInfoResponseDto> {
await this.userService.changePassword(req.user.userId, dto); await this.userService.changePassword(req.user.userId, dto);
return SuccessResponseDto.ok(); return await this.userService.findUserInfoByIdOrFail(req.user.userId);
} }
} }

Loading…
Cancel
Save