Skip to content

Commit

Permalink
feat(server): 기간 필터링 처리 로직 수정, 보완
Browse files Browse the repository at this point in the history
기간 필터링 처리 로직을 수정 보완하였스니다
  • Loading branch information
hunjin-choi committed Aug 7, 2022
1 parent c8b6977 commit 4b37ba5
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 82 deletions.
10 changes: 10 additions & 0 deletions packages/server/src/auth/auth.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,14 @@ export class AuthController {
await this.authService.logoutUser(req.user);
return req.user;
}

@Get('/getError')
@ApiCreatedResponse({
description: '에러점검',
type: Bocal,
})
@UseGuards(AuthGuard('jwt'))
async getError(@Req() req) {
return await this.authService.getError(req.user);
}
}
8 changes: 8 additions & 0 deletions packages/server/src/auth/auth.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,12 @@ export class AuthService {
await queryRunner.commitTransaction(); //rollback 해버리는 실수
await queryRunner.release();
}

async getError(user) {
const ret = await this.dataSource
.getRepository(Bocal)
.findOneBy({ id: user.id });
if (!ret) return null;
return JSON.parse(ret.errObject);
}
}
3 changes: 3 additions & 0 deletions packages/server/src/auth/entity/bocal.entity.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ export class Bocal {
@Column({ name: 'image_url', nullable: false })
image_url: string;

@ApiProperty()
@Column({ name: 'errObject', nullable: true })
errObject: string;
/**
* api에서 오는 스태프 정보중에서 식별정보가 무엇무엇이 있는지 알아내서 column 추가하기
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@ export class FilterArgs {
take: number;
@Field((type) => Int, { nullable: true })
skip: number;
@Field((type) => Boolean, { nullable: true, defaultValue: false })
@Field((type) => Boolean, { nullable: true, defaultValue: true })
accumulate: boolean;
}
142 changes: 65 additions & 77 deletions packages/server/src/user_information/user_information.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ import { JoinedTable } from './argstype/joinedTable';
import { Filter } from './filter';
import {
entityColumnMapping,
exceptCase,
getExpireColumn,
getRawQuery,
getValidateColumn,
halfAndHalf,
Expand Down Expand Up @@ -241,62 +243,62 @@ export class UserInformationService {
}
}
// 한 시점을 특정
if (
startDateString &&
endDateString &&
startDateString == endDateString &&
entityName in entityColumnMapping &&
accumulate
) {
const referenceDate = new Date(startDateString); // Date 타입으로 변환해줘야함
ret['where'][entityName][getValidateColumn(entityName, column)] =
getRawQuery(referenceDate);
ret['where'][entityName][
entityColumnMapping[entityName]['expired_date']
] = MoreThanOrEqual(referenceDate);
} else if (
startDateString &&
endDateString &&
startDateString == endDateString &&
entityName in entityColumnMapping &&
!accumulate
) {
const referenceDate = new Date(startDateString); // Date 타입으로 변환해줘야함
ret['where'][entityName][getValidateColumn(entityName, column)] =
Equal(referenceDate);
// ret['where'][entityName][getValidateColumn(entityName, column)] =
// getRawQuery(referenceDate);
// ret['where'][entityName][
// entityColumnMapping[entityName]['expired_date']
// ] = MoreThanOrEqual(referenceDate);
} else if (
startDateString &&
endDateString &&
startDateString == endDateString &&
entityName in halfAndHalf &&
accumulate
) {
const referenceDate = new Date(startDateString); // Date 타입으로 변환해줘야함
ret['where'][entityName][getValidateColumn(entityName, column)] =
getRawQuery(referenceDate);
} else if (
startDateString &&
endDateString &&
startDateString == endDateString &&
entityName in halfAndHalf &&
!accumulate
) {
const referenceDate = new Date(startDateString); // Date 타입으로 변환해줘야함
ret['where'][entityName][getValidateColumn(entityName, column)] =
Equal(referenceDate);
// ret['where'][entityName][getValidateColumn(entityName, column)] =
// getRawQuery(referenceDate);
// ret['where'][entityName][
// entityColumnMapping[entityName]['expired_date']
// ] = MoreThanOrEqual(referenceDate);
}
// if (
// startDateString &&
// endDateString &&
// startDateString == endDateString &&
// entityName in entityColumnMapping &&
// accumulate
// ) {
// const referenceDate = new Date(startDateString); // Date 타입으로 변환해줘야함
// ret['where'][entityName][getValidateColumn(entityName, column)] =
// getRawQuery(referenceDate);
// ret['where'][entityName][
// entityColumnMapping[entityName]['expired_date']
// ] = MoreThanOrEqual(referenceDate);
// } else if (
// startDateString &&
// endDateString &&
// startDateString == endDateString &&
// entityName in entityColumnMapping &&
// !accumulate
// ) {
// const referenceDate = new Date(startDateString); // Date 타입으로 변환해줘야함
// ret['where'][entityName][getValidateColumn(entityName, column)] =
// Equal(referenceDate);
// // ret['where'][entityName][getValidateColumn(entityName, column)] =
// // getRawQuery(referenceDate);
// // ret['where'][entityName][
// // entityColumnMapping[entityName]['expired_date']
// // ] = MoreThanOrEqual(referenceDate);
// } else if (
// startDateString &&
// endDateString &&
// startDateString == endDateString &&
// entityName in halfAndHalf &&
// accumulate
// ) {
// const referenceDate = new Date(startDateString); // Date 타입으로 변환해줘야함
// ret['where'][entityName][getValidateColumn(entityName, column)] =
// getRawQuery(referenceDate);
// } else if (
// startDateString &&
// endDateString &&
// startDateString == endDateString &&
// entityName in halfAndHalf &&
// !accumulate
// ) {
// const referenceDate = new Date(startDateString); // Date 타입으로 변환해줘야함
// ret['where'][entityName][getValidateColumn(entityName, column)] =
// Equal(referenceDate);
// // ret['where'][entityName][getValidateColumn(entityName, column)] =
// // getRawQuery(referenceDate);
// // ret['where'][entityName][
// // entityColumnMapping[entityName]['expired_date']
// // ] = MoreThanOrEqual(referenceDate);
// }
// 아래 부터는 시점 Range 조건
else if (
if (
startDateString &&
endDateString &&
entityName in entityColumnMapping &&
Expand All @@ -307,7 +309,7 @@ export class UserInformationService {
ret['where'][entityName][getValidateColumn(entityName, column)] =
getRawQuery(endDate); //ok
ret['where'][entityName][
entityColumnMapping[entityName]['expired_date']
entityColumnMapping[entityName][getExpireColumn(entityName)]
] = MoreThanOrEqual(startDate); //ok
} else if (
startDateString &&
Expand All @@ -320,44 +322,30 @@ export class UserInformationService {
} else if (
startDateString &&
endDateString &&
entityName in halfAndHalf &&
(entityName in halfAndHalf || exceptCase(entityName, column)) &&
accumulate
) {
const startDate = new Date(startDateString);
const endDate = new Date(endDateString);
ret['where'][entityName][getValidateColumn(entityName, column)] =
getRawQuery(endDate); //ok
// 한번 더 걸러야하는데 그건 make_limit에서 처리함
} else if (
startDateString &&
endDateString &&
entityName in halfAndHalf &&
(entityName in halfAndHalf || exceptCase(entityName, column)) &&
!accumulate
) {
ret['where'][entityName][getValidateColumn(entityName, column)] =
Between(startDateString, endDateString);
}
// startDate는 주어지고, endDate는 주어지지 않는 경우
// else if (startDateString && entityName in entityColumnMapping) {
// ret['where'][entityName][
// entityColumnMapping[entityName]['expired_date']
// ] = MoreThanOrEqual(startDateString); //ok
// ret['where'][entityName][getValidateColumn(entityName, column)] =
// LessThan('9999-12-31'); //ok
// }
// endDate는 주어지고, startDate는 주어지지 않는 경우
// else if (endDateString && entityName in entityColumnMapping) {
// const endDate = new Date(endDateString);
// ret['where'][entityName][getValidateColumn(entityName, column)] =
// getRawQuery(endDate); //ok
// }
else if ('latest' in filter && filter['latest'] == true) {
} else if ('latest' in filter && filter['latest'] == true) {
// ***********************************************************************************************
// 애시당초 filter조건에 validate column, expired column을 줄 필요가 없는거 -> entity 수정, common에 수정 필요
// 프론트에 date 관련된 컬럼 사용자에게 보여주지 말아 달라고 요청하기 -> 도메인 보내주는건 백엔드니까 중한님께 요청드리는게 맞을듯?
// ***********************************************************************************************
// 아래 주석 풀면 테스트 코드 페일나옴 (validate_date = '9999-12-31'의 의미는???)
// 아래 주석 풀면 테스트 코드 페일나옴 (validate_date = '9999-12-31')
ret['where'][entityName][getValidateColumn(entityName, column)] =
LessThan('9999-12-31'); // 디폴트값이 달라지면 이 부분 수정 필요 //덮어쓰는 이슈가 있는지 확인
LessThan('9999-12-20'); // 디폴트값이 달라지면 이 부분 수정 필요 //덮어쓰는 이슈가 있는지 확인
} else {
// do nothing
}
Expand Down Expand Up @@ -411,7 +399,7 @@ export class UserInformationService {
if (
'latest' in filter &&
filter['latest'] == true &&
(row[joinedTable].length == 0 || //.....
(row[joinedTable].length == 0 || //에러가 터졌으면 안됐는데...?
(row[joinedTable].length > 0 &&
!operatorDict[filter['operator']](
filter['givenValue'],
Expand Down
24 changes: 20 additions & 4 deletions packages/server/src/user_information/utils/entityArray.utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -218,15 +218,22 @@ const entityColumnMapping = {
};

function getValidateColumn(entityName, column) {
if (entityName == 'userLearningDataAPI')
const columns = ['coalition_score', 'circle', 'level', 'outcircle'];
if (entityName == 'userLearningDataAPI' && column in columns) {
const index = columns.indexOf(column);
return entityColumnNotMapping[entityName]['validate_date'][index];
} else if (entityName == 'userLearningDataAPI')
return entityColumnMapping[entityName]['validate_date'][column];
else {
else if (entityName == 'user' || entityName == 'userOtherEmploymentStatus') {
return halfAndHalf[entityName]['validate_date'];
} else {
return entityColumnMapping[entityName]['validate_date'];
}
}

// 아래 함수는 굳이 필요없음
//function getExpireColumn(entityName, column) {}
function getExpireColumn(entityName, column = null) {
return entityColumnMapping[entityName]['validate_date'];
}

function getRawQuery(refDate) {
// if (entityName in entityColumnNotMapping) return Not(IsNull()); <- 필요없는 조건문
Expand All @@ -236,11 +243,20 @@ function getRawQuery(refDate) {
});
}

function exceptCase(entityName, column) {
const columns = ['coalition_score', 'circle', 'level', 'outcircle'];
if (entityName == 'userLearningDataAPI' && column in columns) {
return true;
} else return false;
}

export {
NonValExColumnEntity,
valExColumnEntity,
entityColumnMapping,
halfAndHalf,
getValidateColumn,
getRawQuery,
getExpireColumn,
exceptCase,
};

0 comments on commit 4b37ba5

Please sign in to comment.