Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
123 commits
Select commit Hold shift + click to select a range
1b245e6
refactor: useModalStore 삭제 및 사용하는 곳 수정
yiseungyun Nov 29, 2024
f0c6fa0
feat: react-query 오류시 출력할 에러 블럭 컴포넌트 구현
ShipFriend0516 Nov 29, 2024
0f14d4a
chore: 에러블럭 컴포넌트 components/common/Error로 이동
ShipFriend0516 Nov 29, 2024
ba8e792
feat: axios에 401 에러에 대한 처리를 일관적으로 할 수 있게 axios instance 생성
ShipFriend0516 Nov 29, 2024
2635b25
chore: import시 ts 확장자 제거
ShipFriend0516 Nov 29, 2024
cb9f47d
feat: 세션리스트를 불러오는 api를 react-query 훅으로 분리
ShipFriend0516 Nov 29, 2024
9d5cc17
refactor: 세션 리스트 페이지를 react-query를 사용하도록 리팩토링 및 폴더 구조 변경
ShipFriend0516 Nov 29, 2024
a5f5345
fix: session 타입 id 값을 number이 아닌 string으로 변경
ShipFriend0516 Nov 29, 2024
c466c33
refactor: 사이드바 레이아웃에서 컨텐츠의 y축이 스크롤 되도록 수정
ShipFriend0516 Nov 29, 2024
682fa52
refactor: 세션 제목을 눌러도 참가할 수 있도록 변경
ShipFriend0516 Nov 29, 2024
43f3ed7
refactor: 세션 리스트 목록이 화면이 넓어지면 2열로 되도록 반응성 추가
ShipFriend0516 Nov 29, 2024
5d7cdf9
feat: 세션리스트 페이지 열린 세션 없을 경우에 NotFound 애니메이션 컴포넌트 구현
ShipFriend0516 Nov 29, 2024
68d89a4
refactor: 구분선 Divider 컴포넌트 props로 여러 타입 지원
ShipFriend0516 Nov 29, 2024
f3c9a83
refactor: 세션 리스트 사이에 구분선 추가
ShipFriend0516 Nov 29, 2024
83cebc3
feat: 세션 리스트가 빈 배열일 경우 NotFound 컴포넌트 렌더링
ShipFriend0516 Nov 29, 2024
cb37f03
refactor: 에러블럭 컴포넌트에 error 객체를 받아서 있다면 렌더링하도록 수정
ShipFriend0516 Nov 29, 2024
4fe2410
feat: 로그인한 유저만 접근가능한 페이지를 감싸는 레이아웃 컴포넌트 구현
ShipFriend0516 Nov 29, 2024
34c796a
refactor: button -> Link로 변경
ShipFriend0516 Nov 29, 2024
e236aa8
refactor: createButton 컴포넌트를 버튼에서 Link로 리팩토링
ShipFriend0516 Nov 29, 2024
02e57a7
refactor: notfound 컴포넌트에 redirect 속성으로 이후 동작을 대비할 수 있도록 수정
ShipFriend0516 Nov 29, 2024
ea35219
style: 카드 호버시 그림자 진하게
ShipFriend0516 Nov 29, 2024
e2fbe2e
refactor: session card에 질문지 이름 prop 추가
ShipFriend0516 Nov 29, 2024
7e8130f
feat: 세션 리스트 API 에 질문지 이름 항목 추가
blu3fishez Nov 30, 2024
d9f55d6
Merge pull request #287 from blu3piece/feature/add-session-list
ShipFriend0516 Nov 30, 2024
b53e1ff
Merge branch 'dev' into refactor/session-list-page
ShipFriend0516 Nov 30, 2024
95e4f8a
refactor: 세션카드에 질문지 이름이 띄워지도록 수정
ShipFriend0516 Nov 30, 2024
68b6774
refactor: 다크모드를 지원하도록 수정
ShipFriend0516 Nov 30, 2024
c3737d8
chore: 종속적인 컴포넌트 view 폴더 내로 이동
ShipFriend0516 Nov 30, 2024
7f2e12c
fix: input창만 운영체제 다크모드가 적용되던 문제 해결
ShipFriend0516 Nov 30, 2024
578af3a
style: not found animation 다크모드 지원
ShipFriend0516 Nov 30, 2024
c8d95ce
refactor: staleTime과 refetch 옵션 추가
ShipFriend0516 Nov 30, 2024
e0721e9
Merge pull request #288 from ShipFriend0516/refactor/session-list-page
ShipFriend0516 Nov 30, 2024
01a5e8c
feat: 비디오 개수에 따라 레이아웃 설정
yiseungyun Nov 30, 2024
4d53f88
Merge branch 'dev' of https://github.com/boostcampwm-2024/web27-Previ…
yiseungyun Nov 30, 2024
1f81b71
refactor: 질문지 QuestionList 타입을 분리
ShipFriend0516 Nov 30, 2024
86f2c97
refactor: 질문지 리스트 페이지 조회 API 리액트 쿼리로
ShipFriend0516 Nov 30, 2024
23edf6b
refactor: 질문지 리스트 페이지 위치를 pages/QuestionListPage 내로 이동
ShipFriend0516 Nov 30, 2024
0c8ea2a
refactor: 질문지리스트 페이지 이름 변경
ShipFriend0516 Nov 30, 2024
45fd8c0
refactor: 질문지 상세페이지로 이동 방식 navigate에서 Link로 변경
ShipFriend0516 Nov 30, 2024
56c6dae
refactor: 질문지 리스트 컴포넌트 분리
ShipFriend0516 Nov 30, 2024
1837eb7
refactor: 카테고리 선택과 searchParams 기능을 useCategory에 위임
ShipFriend0516 Nov 30, 2024
9236032
fix: 카테고리가 전체일때 searchParams 없애도록 수정
ShipFriend0516 Nov 30, 2024
0c53f19
style: 호버시 그림자 추가
ShipFriend0516 Nov 30, 2024
269f0c3
feat: 질문지 생성 페이지에 사이드바 레이아웃 래핑
ShipFriend0516 Nov 30, 2024
82520e2
feat: 질문지 상세 페이지에 사이드바 레이아웃 래핑
ShipFriend0516 Nov 30, 2024
fb1760f
chore: 콘솔제거
ShipFriend0516 Nov 30, 2024
f298c41
feat: 스터디 세션 생성 시 사용량 업데이트 로직 추가
blu3fishez Nov 30, 2024
d158efa
feat: button 컴포넌트 호버시 투명도 살짝 추가
ShipFriend0516 Nov 30, 2024
f27d12c
Merge pull request #289 from blu3piece/feature/session-incr-usage
ShipFriend0516 Nov 30, 2024
6ce96e7
Merge remote-tracking branch 'upstream/dev' into refactor/question-li…
ShipFriend0516 Nov 30, 2024
04eec6e
feat: 작성자 닉네임 옆에 아이콘 추가
ShipFriend0516 Nov 30, 2024
4c870c2
style: 질문 아이템 flex direction col -> row로 변경
ShipFriend0516 Nov 30, 2024
5ca9f7f
feat: 스크랩 기능 및 폴더 구조 변경
ShipFriend0516 Nov 30, 2024
54c4299
fix: 언스크랩 API params를 쓰도록 수정
ShipFriend0516 Nov 30, 2024
b8c460c
refactor: isScrapped 생길때까지만 일회성 상태 사용
ShipFriend0516 Nov 30, 2024
0041474
feat: 공유하기 버튼 기능 구현
ShipFriend0516 Nov 30, 2024
dcc32a4
refactor: 로딩, 에러처리 강화
ShipFriend0516 Nov 30, 2024
9466b6f
chore: 질문지 타이틀 로딩처리 제거
ShipFriend0516 Nov 30, 2024
a1a2bb6
style: 상세보기 페이지 다크모드 지원
ShipFriend0516 Nov 30, 2024
6665d90
refactor: 로그인페이지 관련 폴더구조 변경
ShipFriend0516 Nov 30, 2024
a794662
feat: 로컬 로그인 기능 구현
ShipFriend0516 Nov 30, 2024
f820ccb
refactor: 타이틀 컴포넌트 분리
ShipFriend0516 Nov 30, 2024
9cd7eb3
refactor: 로그인 관련 로직 useValidate 훅으로 분리
ShipFriend0516 Nov 30, 2024
790de9e
style: divider 가운데 문구 배경색 변경
ShipFriend0516 Nov 30, 2024
c932d6f
style: 로그인페이지 다크모드 지원
ShipFriend0516 Nov 30, 2024
410c86d
feat: 로그인 버튼에 로딩 스피너 추가
ShipFriend0516 Nov 30, 2024
0eea8b5
style: 로딩 스피너 크기 변경
ShipFriend0516 Nov 30, 2024
f5d3a65
refactor: 로그인 폼 컴포넌트로 분리
ShipFriend0516 Nov 30, 2024
329c113
feat: 게스트 닉네임 생성 함수 구현
ShipFriend0516 Nov 30, 2024
d579f61
fix: 인풋 email -> id로 수정
ShipFriend0516 Nov 30, 2024
1853b29
fix: 회원가입 성공해도 실패로 뜨는 이슈 수정
ShipFriend0516 Nov 30, 2024
bcd1f7e
style: 사이드바 버튼 변경
yiseungyun Nov 30, 2024
913af03
feat: 비디오 레이아웃 비디오 개수에 따른 계산 로직 추가
yiseungyun Nov 30, 2024
f5943fa
refactor: 세션 페이지 hooks, view 생성
yiseungyun Nov 30, 2024
25d828e
fix: 레이아웃 오류 수정
yiseungyun Nov 30, 2024
81eaa11
feat: 툴팁 컴포넌트 생성
yiseungyun Dec 1, 2024
58fc443
feat: 모달창 닫기 버튼 생성
yiseungyun Dec 1, 2024
16391cb
style: 세션 페이지 하단 종료 버튼 이동 및 카메라, 오디오 선택 버튼 합치기
yiseungyun Dec 1, 2024
32b3ffd
Merge pull request #291 from ShipFriend0516/refactor/question-list-page
yiseungyun Dec 1, 2024
71e9c9e
Merge pull request #292 from ShipFriend0516/feature/local-login
yiseungyun Dec 1, 2024
5cf5861
Merge branch 'dev' of https://github.com/boostcampwm-2024/web27-Previ…
yiseungyun Dec 1, 2024
77f0517
fix: 마이페이지 최대 너비 수정
yiseungyun Dec 1, 2024
1b39de8
fix: 만든 질문지, 저장 질문지 데이터 요청시 페이지 값 누락 수정
yiseungyun Dec 1, 2024
c3b2deb
style: 카테고리 컴포넌트 수정
yiseungyun Dec 1, 2024
a9b7546
fix: 유저 생성 시 에러코드 출력되도록 수정
blu3fishez Dec 1, 2024
3222dd7
fix: 닉네임 중복 시 반환 상태코드 수정
blu3fishez Dec 1, 2024
f265a5f
Merge pull request #293 from boostcampwm-2024/feature/video-layout
yiseungyun Dec 1, 2024
098950a
fix: 잘못된 경로 수정
yiseungyun Dec 1, 2024
0d49d19
refactor: question, category repository 분리
twalla26 Dec 1, 2024
5607bd2
refactor: 전체 조회와 카테고리별 조회 기능 함수 하나로 처리하기
twalla26 Dec 1, 2024
d296209
feat: 비디오 끄기시 화면에 닉네임 표시 오버레이 구현
ShipFriend0516 Dec 1, 2024
33a5ebf
fix: 내가 만든 비공개 질문 조회 가능하도록 개선
twalla26 Dec 1, 2024
4a11c7f
refactor: index.html에 og image 배너로 변경
ShipFriend0516 Dec 1, 2024
52d4181
refactor: 리액션 박스 컴포넌트 분리
ShipFriend0516 Dec 1, 2024
7af6f08
feat: 비디오 꺼졌을시 프로필사진이 있다면 이름 대신 렌더링하도록 구현
ShipFriend0516 Dec 1, 2024
42d7320
fix: 이미지 눌리던 현상 수정
ShipFriend0516 Dec 1, 2024
251484d
fix: 닉네임 중복 시 사유 추가
blu3fishez Dec 1, 2024
b6691c1
feat: 마이페이지 비밀번호 변경시 값 보여주고 숨기기 기능 추가
yiseungyun Dec 1, 2024
e8c4b08
feat: 닉네임 변경 기능 추가
yiseungyun Dec 1, 2024
3636129
fix: 명세서에 맞게 로그인 타입 반환값 수정
blu3fishez Dec 1, 2024
d1d5ca4
feat: 일반 로그인 비밀번호 변경 기능 추가
yiseungyun Dec 1, 2024
b80ecff
Merge pull request #296 from blu3piece/fix/login-type
yiseungyun Dec 1, 2024
04139ad
Merge pull request #294 from blu3piece/fix/nickname-unique
ShipFriend0516 Dec 1, 2024
904dd23
fix: 백엔드 수정에 따라 native인지 확인으로 수정
yiseungyun Dec 1, 2024
2731c23
fix: 질문지 생성 후 폼 초기화
yiseungyun Dec 1, 2024
9fc70ee
Merge pull request #295 from ShipFriend0516/feature/video-profile-ove…
ShipFriend0516 Dec 1, 2024
0f37cb1
fix: 로그인 필드 중복 오류 처리
ShipFriend0516 Dec 1, 2024
f9ee8b2
fix: useValidate 내부 훅 호출 방식 변경
ShipFriend0516 Dec 1, 2024
925e3fa
refactor: pagination 구현
twalla26 Dec 1, 2024
39c922c
fix: merge conflict 해결
twalla26 Dec 1, 2024
a660113
fix: 닉네임 표시 안되는 문제 해결
yiseungyun Dec 1, 2024
f6bb7f7
fix: 모달창 닫아도 남아있는 인풋 제거
yiseungyun Dec 1, 2024
0177e30
docs: readme update
ShipFriend0516 Dec 1, 2024
4abcd1d
Update README.md
ShipFriend0516 Dec 1, 2024
f9a357d
Update README.md
ShipFriend0516 Dec 1, 2024
e83d481
Update README.md
ShipFriend0516 Dec 1, 2024
70b188b
Merge pull request #299 from boostcampwm-2024/docs/update-readme
ShipFriend0516 Dec 1, 2024
436a204
fix: 닉네임 변경하지 않아도 입력 값 남아있는 문제 수정
yiseungyun Dec 1, 2024
96d2505
Merge branch 'dev' into feature/mypage
yiseungyun Dec 1, 2024
4ed58d8
docs: nginx 배지 추가
blu3fishez Dec 2, 2024
843ad10
Merge pull request #297 from ShipFriend0516/fix/login-duplicate-error
ShipFriend0516 Dec 2, 2024
88a1e20
Merge pull request #301 from boostcampwm-2024/feature/mypage
ShipFriend0516 Dec 2, 2024
b963cc1
Merge pull request #298 from twalla26/dev
ShipFriend0516 Dec 2, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
141 changes: 59 additions & 82 deletions README.md

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
"dotenv": "^16.4.5",
"ioredis": "^5.4.1",
"mysql2": "^3.11.4",
"nestjs-paginate": "^10.0.0",
"nestjs-redis-om": "^0.1.2",
"passport": "^0.7.0",
"passport-custom": "^1.1.1",
Expand Down
2 changes: 2 additions & 0 deletions backend/src/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { createDataSource, typeOrmConfig } from "./config/typeorm.config";
import { QuestionListModule } from "./question-list/question-list.module";
import { RedisOmModule } from "@moozeh/nestjs-redis-om";
import { SigServerModule } from "@/signaling-server/sig-server.module";
import { QuestionModule } from './question/question.module';

@Module({
imports: [
Expand All @@ -29,6 +30,7 @@ import { SigServerModule } from "@/signaling-server/sig-server.module";
UserModule,
QuestionListModule,
SigServerModule,
QuestionModule,
],
controllers: [AppController],
providers: [AppService],
Expand Down
6 changes: 3 additions & 3 deletions backend/src/config/typeorm.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ import { SnakeNamingStrategy } from "typeorm-naming-strategies";
import { User } from "@/user/user.entity";
import "dotenv/config";
import { addTransactionalDataSource } from "typeorm-transactional";
import { QuestionList } from "@/question-list/question-list.entity";
import { Question } from "@/question-list/question.entity";
import { Category } from "@/question-list/category.entity";
import { QuestionList } from "@/question-list/entity/question-list.entity";
import { Question } from "@/question-list/entity/question.entity";
import { Category } from "@/question-list/entity/category.entity";

export const typeOrmConfig: DataSourceOptions = {
type: "mysql",
Expand Down
24 changes: 24 additions & 0 deletions backend/src/question-list/dto/paginate-meta.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { IsInt, IsNumberString, IsString } from "class-validator";
import { Expose } from "class-transformer";

export class PaginateMetaDto {
@Expose()
@IsInt()
itemsPerPage: number;

@Expose()
@IsInt()
totalItems: number;

@Expose()
@IsNumberString()
currentPage: string;

@Expose()
@IsInt()
totalPages: number;

@Expose()
@IsString()
sortBy: string;
}
29 changes: 29 additions & 0 deletions backend/src/question-list/dto/paginate-query.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { IsInt, IsOptional, IsString, Min } from "class-validator";
import { Expose, Transform } from "class-transformer";

export class PaginateQueryDto {
@Expose()
@IsOptional()
@IsInt()
@Min(1)
@Transform(({ value }) => (value ? parseInt(value) : 1))
page?: number;

@Expose()
@IsOptional()
@IsInt()
@Min(1)
@Transform(({ value }) => (value ? parseInt(value) : 4))
limit?: number;

@Expose()
@IsOptional()
@IsString()
@Transform(({ value }) => value || "usage:DESC")
sortBy?: string;

@Expose()
@IsOptional()
@IsString()
category?: string;
}
9 changes: 9 additions & 0 deletions backend/src/question-list/dto/paginate.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { SelectQueryBuilder } from "typeorm";

export class PaginateDto {
queryBuilder: SelectQueryBuilder<any>;
skip: number;
take: number;
field: string;
direction: "ASC" | "DESC";
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Question } from "../question.entity";
import { Question } from "../entity/question.entity";

export interface QuestionListContentsDto {
id: number;
Expand Down
81 changes: 44 additions & 37 deletions backend/src/question-list/question-list.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import {
Query,
Req,
UseGuards,
UsePipes,
ValidationPipe,
} from "@nestjs/common";
import { QuestionListService } from "./question-list.service";
import { CreateQuestionListDto } from "./dto/create-question-list.dto";
Expand All @@ -19,14 +21,15 @@ import { IJwtPayload } from "@/auth/jwt/jwt.model";
import { UpdateQuestionListDto } from "@/question-list/dto/update-question-list.dto";
import { QuestionDto } from "@/question-list/dto/question.dto";
import { DeleteQuestionDto } from "@/question-list/dto/delete-question.dto";
import { PaginateQuery } from "nestjs-paginate";
import { PaginateQueryDto } from "@/question-list/dto/paginate-query.dto";

@Controller("question-list")
export class QuestionListController {
constructor(private readonly questionListService: QuestionListService) {}

@Get()
async getAllQuestionLists(@Query() query: PaginateQuery) {
@UsePipes(new ValidationPipe({ transform: true }))
async getAllQuestionLists(@Query() query: PaginateQueryDto) {
try {
const { allQuestionLists, meta } =
await this.questionListService.getAllQuestionLists(query);
Expand All @@ -47,6 +50,37 @@ export class QuestionListController {
}
}

@Post("category")
@UsePipes(new ValidationPipe({ transform: true }))
async getAllQuestionListsByCategoryName(
@Query() query: PaginateQueryDto,
@Body()
body: {
categoryName: string;
}
) {
try {
const { categoryName } = body;
query.category = categoryName;
const { allQuestionLists, meta } =
await this.questionListService.getAllQuestionLists(query);
return {
success: true,
message: "All question lists received successfully.",
data: {
allQuestionLists,
meta,
},
};
} catch (error) {
return {
success: false,
message: "Failed to get all question lists.",
error: error.message,
};
}
}

@Post()
@UseGuards(AuthGuard("jwt"))
async createQuestionList(
Expand Down Expand Up @@ -92,49 +126,20 @@ export class QuestionListController {
}
}

@Post("category")
async getAllQuestionListsByCategoryName(
@Query() query: PaginateQuery,
@Body()
body: {
categoryName: string;
}
) {
try {
const { categoryName } = body;
const { allQuestionLists, meta } =
await this.questionListService.getAllQuestionListsByCategoryName(
categoryName,
query
);
return {
success: true,
message: "All question lists received successfully.",
data: {
allQuestionLists,
meta,
},
};
} catch (error) {
return {
success: false,
message: "Failed to get all question lists.",
error: error.message,
};
}
}

@Post("contents")
@UseGuards(AuthGuard("jwt"))
async getQuestionListContents(
@JwtPayload() token: IJwtPayload,
@Body()
body: {
questionListId: number;
}
) {
try {
const userId = token.userId;
const { questionListId } = body;
const questionListContents: QuestionListContentsDto =
await this.questionListService.getQuestionListContents(questionListId);
await this.questionListService.getQuestionListContents(questionListId, userId);
return {
success: true,
message: "Question list contents received successfully.",
Expand All @@ -153,7 +158,8 @@ export class QuestionListController {

@Get("my")
@UseGuards(AuthGuard("jwt"))
async getMyQuestionLists(@Query() query: PaginateQuery, @JwtPayload() token: IJwtPayload) {
@UsePipes(new ValidationPipe({ transform: true }))
async getMyQuestionLists(@Query() query: PaginateQueryDto, @JwtPayload() token: IJwtPayload) {
try {
const userId = token.userId;
const { myQuestionLists, meta } = await this.questionListService.getMyQuestionLists(
Expand Down Expand Up @@ -353,8 +359,9 @@ export class QuestionListController {

@Get("scrap")
@UseGuards(AuthGuard("jwt"))
@UsePipes(new ValidationPipe({ transform: true }))
async getScrappedQuestionLists(
@Query() query: PaginateQuery,
@Query() query: PaginateQueryDto,
@JwtPayload() token: IJwtPayload
) {
try {
Expand Down
14 changes: 11 additions & 3 deletions backend/src/question-list/question-list.module.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
import { Module } from "@nestjs/common";
import { QuestionListController } from "./question-list.controller";
import { QuestionListService } from "./question-list.service";
import { QuestionListRepository } from "./question-list.repository";
import { QuestionListRepository } from "./repository/question-list.repository";
import { UserRepository } from "@/user/user.repository";
import { QuestionRepository } from "@/question-list/repository/question.respository";
import { CategoryRepository } from "@/question-list/repository/category.repository";

@Module({
controllers: [QuestionListController],
providers: [QuestionListService, QuestionListRepository, UserRepository],
exports: [QuestionListRepository],
providers: [
QuestionListService,
QuestionListRepository,
QuestionRepository,
UserRepository,
CategoryRepository,
],
exports: [QuestionListRepository, QuestionRepository],
})
export class QuestionListModule {}
Loading