Skip to content

Commit

Permalink
Merge pull request #479 from A-fume/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
heesung6701 authored Feb 15, 2023
2 parents d54892c + 7475471 commit 6a81148
Show file tree
Hide file tree
Showing 31 changed files with 1,147 additions and 622 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/deploy-development.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
node-version: ${{ matrix.node-version }}
- run: cp ~/config-injection/ecosystem-${{ env.SERVER_PROFILE }}.json ${{ env.PROJECT_PATH }}/ecosystem.json
- run: cp ~/config-injection/envs/.env.${{ env.NODE_ENV }} ${{ env.PROJECT_PATH }}/.env
- run: sh ${{ env.PROJECT_PATH }}/script/prebuild.sh
- run: bash ${{ env.PROJECT_PATH }}/script/prebuild.sh
- run: sh ${{ env.PROJECT_PATH }}/script/reload.sh
env:
NODE_ENV: development
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-production-1.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
node-version: ${{ matrix.node-version }}
- run: cp ~/config-injection/ecosystem-${{ env.SERVER_PROFILE }}.json ${{ env.PROJECT_PATH }}/ecosystem.json
- run: cp ~/config-injection/envs/.env.${{ env.NODE_ENV }} ${{ env.PROJECT_PATH }}/.env
- run: sh ${{ env.PROJECT_PATH }}/script/prebuild.sh
- run: bash ${{ env.PROJECT_PATH }}/script/prebuild.sh
- run: sh ${{ env.PROJECT_PATH }}/script/reload.sh
env:
NODE_ENV: production
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-production-2.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
node-version: ${{ matrix.node-version }}
- run: cp ~/config-injection/ecosystem-${{ env.SERVER_PROFILE }}.json ${{ env.PROJECT_PATH }}/ecosystem.json
- run: cp ~/config-injection/envs/.env.${{ env.NODE_ENV }} ${{ env.PROJECT_PATH }}/.env
- run: sh ${{ env.PROJECT_PATH }}/script/prebuild.sh
- run: bash ${{ env.PROJECT_PATH }}/script/prebuild.sh
- run: sh ${{ env.PROJECT_PATH }}/script/reload.sh
env:
NODE_ENV: production
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-production.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
node-version: ${{ matrix.node-version }}
- run: cp ~/config-injection/ecosystem-${{ env.SERVER_PROFILE }}.json ${{ env.PROJECT_PATH }}/ecosystem.json
- run: cp ~/config-injection/envs/.env.${{ env.NODE_ENV }} ${{ env.PROJECT_PATH }}/.env
- run: sh ${{ env.PROJECT_PATH }}/script/prebuild.sh
- run: bash ${{ env.PROJECT_PATH }}/script/prebuild.sh
- run: sh ${{ env.PROJECT_PATH }}/script/reload.sh
env:
NODE_ENV: production
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/exec-mocha-integral-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
- run: sh ./script/setup-global.sh
- run: sh ./script/prebuild.sh
- run: bash ./script/prebuild.sh
- name: run integral test code
run: npm run test-integral
env:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/exec-mocha-unit-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
- run: sh ./script/setup-global.sh
- run: sh ./script/prebuild.sh
- run: bash ./script/prebuild.sh
- name: run unit test code
run: npm run test-unit
env:
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,9 @@ npm run test-each ./test/...

# 업데이트 내역

- 0.0.9
- User gender, birth nullable 로 변경
- 엔드포인트 변경 - `/system/supportable` 내 deviceOS 파라미터 추가
- 0.0.8
- ioredis 의존 추가
- 엔드포인트 추가 - 비슷한 향수 추천 데이터 DB 반영
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "a-fume-server",
"version": "0.0.4",
"version": "0.0.8",
"description": "향수 정보 서비스 A.fume Server Api 문서",
"main": "index.js",
"type": "commonjs",
Expand Down
2 changes: 1 addition & 1 deletion script/prebuild.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/sh
#!/bin/bash

if [[ -f "ecosystem.json" ]]; then
pm2 stop ecosystem.json
Expand Down
78 changes: 65 additions & 13 deletions src/controllers/System.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,14 @@ const LOG_TAG: string = '[System/Controller]';
* in: query
* type: string
* required: true
* - name: deviceOS
* in: query
* type: string
* required: false
* default: android
* enum:
* - android
* - iOS
* responses:
* 200:
* description: 성공
Expand All @@ -47,8 +55,14 @@ const getSupportable: RequestHandler = (
_: NextFunction
) => {
const apkVersion: string = req.query.apkversion?.toString() || '';
logger.debug(`${LOG_TAG} getSupportable(apkVersion = ${apkVersion})`);
if (isSupportVersion(apkVersion)) {
// 초기 안드로이드 apk의 경우 deviceOS를 보내주지 않고 있어서 기본 값을 안드로이드로 설정. deviceOS server v0.0.9에서 추가
const deviceOS: string = req.query.deviceOS?.toString() || 'android';
logger.debug(
`${LOG_TAG} getSupportable(apkVersion = ${apkVersion}, deviceOS = ${deviceOS})`
);
const versionChecker: IVersionChecker =
VersionCheckerFactory.factory(deviceOS);
if (versionChecker.isSupportVersion(apkVersion)) {
res.status(StatusCode.OK).json(
new ResponseDTO<Boolean>(MSG_GET_SUPPORTABLE_YES, true)
);
Expand Down Expand Up @@ -103,20 +117,58 @@ class Version {
}
}

const prevVersion: Version = new Version(1, 4, 0);
const latestVersion: Version = new Version(1, 4, 1);
class VersionCheckerFactory {
static factory(deviceOS: string): IVersionChecker {
if (deviceOS == 'iOS') {
return new VersionCheckeriOS();
}
return new VersionCheckerAndroid();
}
}

interface IVersionChecker {
isSupportVersion(apkVersion: string): Boolean;
}

class VersionCheckerAndroid implements IVersionChecker {
// TODO: prevVersion, latestVersion을 삭제하고 minimumVersion으로 변경
// 유연한 변경을 위해서 코드 레벨이 아닌 환경 변수 주입으로 변경 필요
prevVersion: Version = new Version(1, 4, 0);
latestVersion: Version = new Version(1, 4, 1);

function isSupportVersion(apkVersion: string): Boolean {
const version: Version = Version.create(apkVersion);
if (prevVersion.isEqual(version) || latestVersion.isEqual(version)) {
return true;
isSupportVersion(apkVersion: string): Boolean {
const version: Version = Version.create(apkVersion);
if (
this.prevVersion.isEqual(version) ||
this.latestVersion.isEqual(version)
) {
return true;
}
if (version.isOverThan(this.latestVersion)) {
return true;
}
return false;
}
if (version.isOverThan(latestVersion)) {
return true;
}

class VersionCheckeriOS implements IVersionChecker {
prevVersion: Version = new Version(1, 0, 0);
latestVersion: Version = new Version(1, 0, 1);

isSupportVersion(apkVersion: string): Boolean {
const version: Version = Version.create(apkVersion);
if (
this.prevVersion.isEqual(version) ||
this.latestVersion.isEqual(version)
) {
return true;
}
if (version.isOverThan(this.latestVersion)) {
return true;
}
return false;
}
return false;
}

module.exports.getSupportable = getSupportable;
module.exports.prevVersion = prevVersion;
module.exports.latestVersion = latestVersion;
module.exports.VersionCheckerFactory = VersionCheckerFactory;
16 changes: 12 additions & 4 deletions src/controllers/User.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,13 @@ import {
LoginResponse,
} from '@response/user';

import { UserAuthDTO, UserInputDTO, LoginInfoDTO, SurveyDTO } from '@dto/index';
import {
UserAuthDTO,
UserInputDTO,
LoginInfoDTO,
SurveyDTO,
UserDTO,
} from '@dto/index';

const LOG_TAG: string = '[User/Controller]';

Expand Down Expand Up @@ -671,9 +677,11 @@ const updateUser: RequestHandler = (
next(new UnAuthorizedError());
return;
}
const userEditRequest = UserEditRequest.createByJson(req.body);
User.updateUser(userEditRequest.toUserInputDTO(userIdx))
.then((result: UserResponse) => {
const userEditRequest = UserEditRequest.createByJson(
Object.assign({}, { userIdx }, req.body)
);
User.updateUser(userEditRequest.toUserInputDTO())
.then((result: UserDTO) => {
return UserResponse.createByJson(result);
})
.then((response: UserResponse) => {
Expand Down
96 changes: 45 additions & 51 deletions src/controllers/definitions/request/user.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,10 @@
import { logger } from '@modules/winston';

import { InvalidInputError } from '@src/utils/errors/errors';
import { GenderMap, GradeMap, GradeKey, GenderKey } from '@utils/enumType';
import { GenderMap, GradeMap, GradeKey } from '@utils/enumType';
import { GRADE_USER } from '@utils/constants';
import { UserInputDTO } from '@src/data/dto';

interface UserInputRequest {
grade?: GradeKey;
gender?: GenderKey;
nickname?: string;
password?: string;
email?: string;
birth?: number;
}

/**
* @swagger
* definitions:
Expand All @@ -35,21 +26,24 @@ interface UserInputRequest {
* type: string
* enum: [USER, MANAGER, SYSTEM_ADMIN]
* */
class UserEditRequest implements UserInputRequest {
class UserEditRequest {
readonly userIdx?: number;
readonly grade?: GradeKey;
readonly gender?: GenderKey;
readonly gender?: string | null;
readonly nickname?: string;
readonly password?: string;
readonly email?: string;
readonly birth?: number;
readonly birth?: number | null;
constructor(
userIdx?: number,
nickname?: string,
password?: string,
gender?: GenderKey,
gender?: string | null,
email?: string,
birth?: number,
birth?: number | null,
grade?: GradeKey
) {
this.userIdx = userIdx;
this.grade = grade;
this.gender = gender;
this.nickname = nickname;
Expand All @@ -62,12 +56,13 @@ class UserEditRequest implements UserInputRequest {
return `${this.constructor.name} (${JSON.stringify(this)})`;
}

public toUserInputDTO(userIdx: number): UserInputDTO {
return createByRequest(userIdx, this);
public toUserInputDTO(): UserInputDTO {
return createByRequest(this);
}

static createByJson(json: any): UserEditRequest {
return new UserEditRequest(
json.userIdx,
json.nickname,
json.password,
json.gender,
Expand Down Expand Up @@ -99,30 +94,32 @@ class UserEditRequest implements UserInputRequest {
* gender:
* type: string
* enum: [MAN, WOMAN]
* required: true
* required: false
* nullable: true
* example: MAN
* birth:
* type: integer
* required: true
* required: false
* nullable: true
* example: 1995
* grade:
* type: string
* enum: [USER, MANAGER, SYSTEM_ADMIN]
* example: USER
* */
class UserRegisterRequest implements UserInputRequest {
class UserRegisterRequest {
readonly nickname: string;
readonly password: string;
readonly gender: GenderKey;
readonly birth: number;
readonly gender: string | null;
readonly birth: number | null;
readonly email: string;
readonly grade: GradeKey;
constructor(
nickname: string,
password: string,
gender: GenderKey,
gender: string | null,
email: string,
birth: number,
birth: number | null,
grade: GradeKey
) {
this.grade = grade;
Expand All @@ -138,54 +135,51 @@ class UserRegisterRequest implements UserInputRequest {
}

public toUserInputDTO(): UserInputDTO {
return createByRequest(undefined, this);
return createByRequest(this);
}

static createByJson(json: any): UserRegisterRequest {
return new UserRegisterRequest(
json.nickname,
json.password,
json.gender,
json.gender || null,
json.email,
json.birth,
json.birth || null,
json.grade | GRADE_USER
);
}
}

const LOG_TAG: string = '[definition/UserInputRequest]';

function createByRequest(
userIdx: number | undefined,
request: UserInputRequest
): UserInputDTO {
let genderCode: any = undefined;
if (request.gender) {
if (GenderMap[request.gender] == undefined) {
logger.debug(`${LOG_TAG} invalid gender: ${request.gender}`);
function createByRequest(json: any): UserInputDTO {
let genderVal: number | null = null;
if (json.gender) {
if (GenderMap[json.gender] == undefined) {
logger.debug(`${LOG_TAG} invalid gender: ${json.gender}`);
throw new InvalidInputError();
}
genderCode = GenderMap[request.gender];
genderVal = GenderMap[json.gender];
}
let gradeCode: number = GRADE_USER;
if (request.grade) {
if (GradeMap[request.grade] == undefined) {
logger.debug(`${LOG_TAG} invalid grade: ${request.grade}`);
if (json.grade) {
if (GradeMap[json.grade] == undefined) {
logger.debug(`${LOG_TAG} invalid grade: ${json.grade}`);
throw new InvalidInputError();
}
gradeCode = GradeMap[request.grade];
gradeCode = GradeMap[json.grade];
}

return new UserInputDTO(
userIdx,
request.nickname,
request.password,
genderCode,
request.email,
request.birth,
gradeCode,
undefined
);
return {
userIdx: json!!.userIdx,
nickname: json!!.nickname,
password: json!!.password,
gender: genderVal || null,
email: json.email,
birth: json.birth || null,
grade: gradeCode,
accessTime: undefined,
};
}

export { UserInputRequest, UserEditRequest, UserRegisterRequest };
export { UserEditRequest, UserRegisterRequest };
Loading

0 comments on commit 6a81148

Please sign in to comment.