Skip to content

Commit

Permalink
add: #113 search module
Browse files Browse the repository at this point in the history
  • Loading branch information
joohongpark committed Nov 5, 2022
1 parent 933d03f commit 16253d3
Show file tree
Hide file tree
Showing 14 changed files with 836 additions and 10 deletions.
27 changes: 27 additions & 0 deletions backend/src/v3/search/dto/blocked-user-info.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { ApiProperty } from '@nestjs/swagger';

export class BlockedUserInfoDto {
@ApiProperty({
description: '42 고유 ID',
example: 12345,
})
user_id: number; // 42 고유 ID

@ApiProperty({
description: '42 로그인 ID',
example: 'joopark',
})
intra_id: string; // 42 로그인 ID

@ApiProperty({
description: '차단당한 시간',
example: new Date(),
})
banned_date: Date; // 차단당한 시간

@ApiProperty({
description: '차단 풀리는 시간',
example: new Date(),
})
unbanned_date: Date; // 차단 풀리는 시간
}
16 changes: 16 additions & 0 deletions backend/src/v3/search/dto/blocked-user-info.pagenation.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { ApiProperty } from '@nestjs/swagger';
import { BlockedUserInfoDto } from './blocked-user-info.dto';

export class BlockedUserInfoPagenationDto {
@ApiProperty({
description: '차단당한 유저 정보 배열',
type: [BlockedUserInfoDto],
})
result: BlockedUserInfoDto[]; // 차단당한 유저 정보 배열

@ApiProperty({
description: 'DB에 저장된 총 결과의 길이',
example: 42,
})
total_length: number; // DB에 저장된 총 결과의 길이
}
41 changes: 41 additions & 0 deletions backend/src/v3/search/dto/broken-cabinet-info.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import LentType from 'src/enums/lent.type.enum';

export class BrokenCabinetInfoDto {
@ApiProperty({
description: '캐비넷 고유 ID',
example: 1234,
})
cabinet_id: number; // 캐비넷 고유 ID

@ApiProperty({
description: '사물함에 붙어있는 숫자',
example: 12,
})
cabinet_num: number; // 사물함에 붙어있는 숫자

@ApiProperty({
description: '사물함의 종류 (개인, 공유, 동아리)',
enum: LentType,
example: 'PRIVATE',
})
lent_type: LentType; // 사물함의 종류 (개인, 공유, 동아리)

@ApiProperty({
description: '고장 사유',
example: '잠금장치 고장',
})
note: string; // 고장 사유

@ApiProperty({
description: '해당 사물함을 대여할 수 있는 최대 유저 수',
example: 3,
})
max_user: number; // 해당 사물함을 대여할 수 있는 최대 유저 수

@ApiProperty({
description: '사물함의 섹션 종류 (오아시스 등)',
example: 'Oasis',
})
section: string; // 사물함의 섹션 종류 (오아시스 등)
}
16 changes: 16 additions & 0 deletions backend/src/v3/search/dto/broken-cabinet-info.pagenation.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { ApiProperty } from '@nestjs/swagger';
import { BrokenCabinetInfoDto } from './broken-cabinet-info.dto';

export class BrokenCabinetInfoPagenationDto {
@ApiProperty({
description: '캐비넷 정보 배열',
type: [BrokenCabinetInfoDto],
})
result: BrokenCabinetInfoDto[]; // 캐비넷 정보 배열

@ApiProperty({
description: 'DB에 저장된 총 결과의 길이',
example: 42,
})
total_length: number; // DB에 저장된 총 결과의 길이
}
56 changes: 56 additions & 0 deletions backend/src/v3/search/dto/cabinet-info.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import CabinetStatusType from 'src/enums/cabinet.status.type.enum';
import LentType from 'src/enums/lent.type.enum';
import { LentDto } from './lent.dto';

export class CabinetInfoDto {
@ApiProperty({
description: '캐비넷 고유 ID',
example: 1234,
})
cabinet_id: number; // 캐비넷 고유 ID

@ApiProperty({
description: '사물함에 붙어있는 숫자',
example: 12,
})
cabinet_num: number; // 사물함에 붙어있는 숫자

@ApiProperty({
description: '사물함의 종류 (개인, 공유, 동아리)',
enum: LentType,
example: 'PRIVATE',
})
lent_type: LentType; // 사물함의 종류 (개인, 공유, 동아리)

@ApiProperty({
description: '사물함에 대한 설명',
example: '푸주와 아이들이 사용하는 사물함입니다',
})
cabinet_title: string; // 사물함에 대한 설명

@ApiProperty({
description: '해당 사물함을 대여할 수 있는 최대 유저 수',
example: 3,
})
max_user: number; // 해당 사물함을 대여할 수 있는 최대 유저 수

@ApiProperty({
description: '사물함 상태',
enum: CabinetStatusType,
example: 'PRIVATE',
})
status: CabinetStatusType; // 사물함의 현재 상태

@ApiProperty({
description: '사물함의 섹션 종류 (오아시스 등)',
example: 'Oasis',
})
section: string; // 사물함의 섹션 종류 (오아시스 등)

@ApiPropertyOptional({
description: '대여되어 있을 경우 대여 정보',
type: [LentDto],
})
lent_info?: LentDto[]; // 대여 정보 (optional)
}
16 changes: 16 additions & 0 deletions backend/src/v3/search/dto/cabinet-info.pagenation.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { ApiProperty } from '@nestjs/swagger';
import { CabinetInfoDto } from './cabinet-info.dto';

export class CabinetInfoPagenationDto {
@ApiProperty({
description: '캐비넷 정보 배열',
type: [CabinetInfoDto],
})
result: CabinetInfoDto[]; // 캐비넷 정보 배열

@ApiProperty({
description: 'DB에 저장된 총 결과의 길이',
example: 42,
})
total_length: number; // DB에 저장된 총 결과의 길이
}
36 changes: 36 additions & 0 deletions backend/src/v3/search/dto/lent.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { ApiProperty } from '@nestjs/swagger';

/**
* 기본적인 사물함 대여 정보
*/
export class LentDto {
@ApiProperty({
description: '42 고유 ID',
example: 12345,
})
user_id: number; // 42 고유 ID

@ApiProperty({
description: '42 로그인 ID',
example: 'joopark',
})
intra_id: string; // 42 로그인 ID

@ApiProperty({
description: '대여 고유 ID',
example: 1234,
})
lent_id: number; // 대여 고유 ID

@ApiProperty({
description: '대여한 시간',
example: '2022-08-24 13:03:03',
})
lent_time: Date; // 대여한 시간

@ApiProperty({
description: '대여한 시간',
example: '2022-08-24 13:03:03',
})
expire_time: Date; // 만료 시간
}
15 changes: 15 additions & 0 deletions backend/src/v3/search/dto/user-info.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { ApiProperty } from '@nestjs/swagger';

export class UserInfoDto {
@ApiProperty({
description: '42 고유 ID',
example: 12345,
})
user_id: number; // 42 고유 ID

@ApiProperty({
description: '42 로그인 ID',
example: 'joopark',
})
intra_id: string; // 42 로그인 ID
}
16 changes: 16 additions & 0 deletions backend/src/v3/search/dto/user-info.pagenation.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { ApiProperty } from '@nestjs/swagger';
import { UserInfoDto } from './user-info.dto';

export class UserInfoPagenationDto {
@ApiProperty({
description: '유저 정보 배열',
type: [UserInfoDto],
})
result: UserInfoDto[]; // 유저 정보 배열

@ApiProperty({
description: 'DB에 저장된 총 결과의 길이',
example: 42,
})
total_length: number; // DB에 저장된 총 결과의 길이
}
82 changes: 80 additions & 2 deletions backend/src/v3/search/repository/search.repository.interface.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,80 @@
// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface ISearchRepository {}
import LentType from 'src/enums/lent.type.enum';
import { BlockedUserInfoPagenationDto } from '../dto/blocked-user-info.pagenation.dto';
import { BrokenCabinetInfoPagenationDto } from '../dto/broken-cabinet-info.pagenation.dto';
import { CabinetInfoPagenationDto } from '../dto/cabinet-info.pagenation.dto';
import { UserInfoPagenationDto } from '../dto/user-info.pagenation.dto';

export interface ISearchRepository {
/**
* 인트라 아이디에 대한 검색결과를 가지고 옵니다.
*
* @param intra_id 인트라 아이디
* @param index 가져올 데이터 인덱스
* @param length 가져올 데이터 길이
* @returns CabinetInfoPagenationDto
*/
searchByIntraId(
intra_id: string,
index: number,
length: number,
): Promise<UserInfoPagenationDto>;

/**
* 특정 캐비넷 타입인 사물함 리스트를 가지고 옵니다.
*
* @param lent_type 대여 타입
* @param index 가져올 데이터 인덱스
* @param length 가져올 데이터 길이
* @returns CabinetInfoPagenationDto
*/
searchByLentType(
lent_type: LentType,
index: number,
length: number,
): Promise<CabinetInfoPagenationDto>;

/**
* 해당 사물함 번호를 가진 사물함 리스트를 반환합니다.
*
* @param visible_num 사물함 번호
* @returns CabinetInfoPagenationDto
*/
searchByCabinetNumber(visible_num: number): Promise<CabinetInfoPagenationDto>;

/**
* 정지당한 사물함 리스트를 반환합니다.
*
* @param index 가져올 데이터 인덱스
* @param length 가져올 데이터 길이
* @returns CabinetInfoPagenationDto
*/
searchByBannedCabinet(
index: number,
length: number,
): Promise<CabinetInfoPagenationDto>;

/**
* 고장난 사물함 리스트를 반환합니다.
*
* @param index 가져올 데이터 인덱스
* @param length 가져올 데이터 길이
* @returns BrokenCabinetInfoPagenationDto
*/
searchByBrokenCabinet(
index: number,
length: number,
): Promise<BrokenCabinetInfoPagenationDto>;

/**
* 밴 당한 유저 리스트를 반환합니다.
*
* @param user_id 유저 고유 ID
* @param index 가져올 데이터 인덱스
* @param length 가져올 데이터 길이
* @returns LogPagenationDto
*/
searchByBanUser(
index: number,
length: number,
): Promise<BlockedUserInfoPagenationDto>;
}
Loading

0 comments on commit 16253d3

Please sign in to comment.