Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feat/#140] 회원탈퇴 controller 단위 테스트 & 구현 #145

Merged
merged 9 commits into from
Aug 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 5 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -50,18 +50,20 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation("io.jsonwebtoken:jjwt-api:0.11.5")
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0'
implementation 'io.jsonwebtoken:jjwt-api:0.11.5'

compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
runtimeOnly("io.jsonwebtoken:jjwt-impl:0.11.5")
runtimeOnly("io.jsonwebtoken:jjwt-jackson:0.11.5")
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'

testImplementation 'com.h2database:h2:2.1.214'
testImplementation 'org.springframework.security:spring-security-test'
testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:2.2.0'
testImplementation 'com.h2database:h2'
asciidoctorExtensions 'org.springframework.restdocs:spring-restdocs-asciidoctor'
}
Expand Down
157 changes: 156 additions & 1 deletion src/docs/asciidoc/ohdab.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,16 @@ include::{snippets}/members/join/http-request.adoc[]

include::{snippets}/members/join/http-response.adoc[]

=== 회원탈퇴

==== Request

include::{snippets}/members/withdrawl/http-request.adoc[]

==== Response

include::{snippets}/members/withdrawl/http-response.adoc[]

=== 로그인

==== Request
Expand All @@ -25,7 +35,7 @@ include::{snippets}/members/login/http-request.adoc[]

==== Response

include::{snippets}/members/login/http-response.adoc
include::{snippets}/members/login/http-response.adoc[]

=== 선생님 목록 조회

Expand Down Expand Up @@ -57,3 +67,148 @@ include::{snippets}/members/teachers/expulsion/{teacher-id}/http-request.adoc[]

include::{snippets}/members/teachers/expulsion/{teacher-id}/http-response.adoc[]

== MistakeNote

=== 교재 상세조회(전체 학생에 대한 오답노트 조회)

==== Request

include::{snippets}/mistake_note/getAllMistakeNoteInfo/http-request.adoc[]

==== Response

include::{snippets}/mistake_note/getAllMistakeNoteInfo/http-response.adoc[]

=== 학생별 N번 틀린 문제 문자열 출력

==== Request

include::{snippets}/mistake_note/getNumberWrongNTimes/http-request.adoc[]

==== Response

include::{snippets}/mistake_note/getNumberWrongNTimes/http-response.adoc[]

=== 학생별 오답노트 조회

==== Request

include::{snippets}/mistake_note/getMistakeNoteInfoByStudent/http-request.adoc[]

==== Response

include::{snippets}/mistake_note/getMistakeNoteInfoByStudent/http-response.adoc[]

=== 오답 기록하기

==== Request

include::{snippets}/mistake_note/saveMistakeNoteInfo/http-request.adoc[]

==== Response

include::{snippets}/mistake_note/saveMistakeNoteInfo/http-response.adoc[]

== Classroom

=== 반 추가

==== Request

include::{snippets}/classrooms/enrollment/http-request.adoc[]

==== Response

include::{snippets}/classrooms/enrollment/http-response.adoc[]

=== 반 목록 조회

==== Request

include::{snippets}/classrooms/http-request.adoc[]

==== Response

include::{snippets}/classrooms/http-response.adoc[]

=== 반 상세 조회

==== Request

include::{snippets}/classrooms/{classroom-id}/http-request.adoc[]

==== Response

include::{snippets}/classrooms/{classroom-id}/http-response.adoc[]

=== 반 정보 수정

==== Request

include::{snippets}/classrooms/info/{classroom-id}/http-request.adoc[]

==== Response

include::{snippets}/classrooms/info/{classroom-id}/http-response.adoc[]

=== 반 삭제

==== Request

include::{snippets}/classrooms/expulsion/{classroom-id}/http-request.adoc[]

==== Response

include::{snippets}/classrooms/expulsion/{classroom-id}/http-response.adoc[]

=== 학생 추가

==== Request

include::{snippets}/classrooms/addStudent/http-request.adoc[]

==== Response

include::{snippets}/classrooms/addStudent/http-response.adoc[]

=== 학생 삭제

==== Request

include::{snippets}/classrooms/deleteStudent/http-request.adoc[]

==== Response

include::{snippets}/classrooms/deleteStudent/http-response.adoc[]

=== 교재 목록 조회

==== Request

include::{snippets}/classrooms/{classroom-id}/workbooks/http-request.adoc[]

==== Response

include::{snippets}/classrooms/{classroom-id}/workbooks/http-response.adoc[]

=== 교재 추가

==== Request

include::{snippets}/classrooms/{classroom-id}/addWorkbooks/http-request.adoc[]

==== Response

include::{snippets}/classrooms/{classroom-id}/addWorkbooks/http-response.adoc[]

=== 교재 정보 수정

==== Request

include::{snippets}/classrooms/workbooks/info/{workbook-id}/http-request.adoc[]

==== Response

include::{snippets}/classrooms/workbooks/info/{workbook-id}/http-response.adoc[]


133 changes: 133 additions & 0 deletions src/main/java/com/ohdab/classroom/controller/ClassroomController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
package com.ohdab.classroom.controller;

import static com.ohdab.classroom.service.dto.ClassroomDetailDto.ClassroomDetailDtoResponse;
import static com.ohdab.classroom.service.dto.ClassroomUpdateDto.ClassroomUpdateDtoRequest;

import com.ohdab.classroom.controller.mapper.ClassroomMapper;
import com.ohdab.classroom.controller.request.AddClassroomReq;
import com.ohdab.classroom.controller.request.AddStudentReq;
import com.ohdab.classroom.controller.request.AddWorkbookReq;
import com.ohdab.classroom.controller.request.UpdateClassroomReq;
import com.ohdab.classroom.controller.request.UpdateWorkbookInfoReq;
import com.ohdab.classroom.controller.response.*;
import com.ohdab.classroom.service.dto.ClassroomAddWorkbookDto;
import com.ohdab.classroom.service.dto.ClassroomDto;
import com.ohdab.classroom.service.dto.ClassroomWorkbookDto;
import com.ohdab.classroom.service.dto.ClassroomWorkbookUpdateDto;
import com.ohdab.classroom.service.usecase.*;
import com.ohdab.member.controller.response.DeleteStudentRes;
import java.util.List;
import javax.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/classrooms")
public class ClassroomController {

private final AddClassroomUsecase addClassroomUsecase;
private final FindClassroomListUsecase findClassroomListUsecase;
private final FindClassroomDetailUsecase findClassroomDetailUsecase;
private final UpdateClassroomInfoUsecase updateClassroomInfoUsecase;
private final DeleteClassroomUsecase deleteClassroomUsecase;
private final DeleteStudentUsecase deleteStudentUsecase;
private final GetWorkbookListUsecase getWorkbookListUsecase;
private final AddWorkbookUsecase addWorkbookUsecase;
private final UpdateWorkbookInfoUsecase updateWorkbookInfoUsecase;
private final AddStudentUsecase addStudentUsecase;

@PostMapping("/enrollment")
public ResponseEntity<AddClassroomRes> addClassroom(
@Valid @RequestBody AddClassroomReq addClassroomReq) {
ClassroomDto.Request classroomReqDto =
ClassroomMapper.classroomReqToClassroomDtoRequest(addClassroomReq);
addClassroomUsecase.addClassroom(classroomReqDto);
return ResponseEntity.ok(ClassroomMapper.createClassRoomRes());
}

@GetMapping("")
public ResponseEntity<ClassroomResList> getClassroomListByTeacherId(
@RequestParam(name = "teacherId") long teacherId) {
List<ClassroomDto.Response> responses =
findClassroomListUsecase.findClassroomListByTeacherId(teacherId);
return ResponseEntity.ok(ClassroomMapper.classroomDtoListToClassroomResList(responses));
}

@GetMapping("/{classroom-id}")
public ResponseEntity<ClassroomDetailRes> getClassroomDetailById(
@PathVariable("classroom-id") long id) {
ClassroomDetailDtoResponse classroomDetail =
findClassroomDetailUsecase.getClassroomDetailById(id);
ClassroomDetailRes classroomDetailRes =
ClassroomMapper.ClassroomDetailToClassroomDetailRes(classroomDetail);
return ResponseEntity.ok(classroomDetailRes);
}

@PatchMapping("/info/{classroom-id}")
public ResponseEntity<UpdateClassroomRes> updateClassroom(
@PathVariable(name = "classroom-id") long classroomId,
@RequestBody @Valid UpdateClassroomReq request) {
ClassroomUpdateDtoRequest classroomUpdateDto =
ClassroomMapper.classroomUpdateDtoReqToClassroomUpdateDtoRequest(
classroomId, request);
updateClassroomInfoUsecase.updateClassroomInfo(classroomUpdateDto);
return ResponseEntity.ok(UpdateClassroomRes.builder().message("반 정보 수정 성공").build());
}

@DeleteMapping("/expulsion/{classroom-id}")
public ResponseEntity<DeleteClassroomRes> deleteClassroom(
@PathVariable(name = "classroom-id") long classroomId) {
deleteClassroomUsecase.deleteClassroomById(classroomId);
return ResponseEntity.ok(DeleteClassroomRes.builder().message("반 삭제 성공").build());
}

@PatchMapping("/{classroom-id}/expulsion/students/{student-id}")
public ResponseEntity<DeleteStudentRes> deleteStudent(
@PathVariable("classroom-id") long classroomId,
@PathVariable("student-id") long studentId) {
deleteStudentUsecase.deleteStudent(classroomId, studentId);
return ResponseEntity.ok(DeleteStudentRes.builder().message("학생을 삭제하였습니다.").build());
}

@GetMapping("/{classroom-id}/workbooks")
public ResponseEntity<ClassroomWorkbookListRes> getWorkbookListByClassroomId(
@PathVariable(name = "classroom-id") long classroomId) {
List<ClassroomWorkbookDto.Response> classroomWorkbookDtoList =
getWorkbookListUsecase.getWorkbookListByClassroomId(classroomId);
return ResponseEntity.ok(
ClassroomMapper.classroomWorkbookDtoListToResponseList(classroomWorkbookDtoList));
}

@PostMapping("/{classroom-id}/workbooks")
public ResponseEntity<AddWorkbookRes> getWorkbookListByClassroomId(
@PathVariable(name = "classroom-id") long classroomId,
@RequestBody @Valid AddWorkbookReq addWorkbookReq) {
ClassroomAddWorkbookDto.Request addWorkbookDto =
ClassroomMapper.addWorkbookRequestToDto(addWorkbookReq);
addWorkbookUsecase.addWorkbookByClassroomId(classroomId, addWorkbookDto);
return ResponseEntity.ok(
AddWorkbookRes.builder().message("해당 반에 교재 및 오답노트가 추가되었습니다.").build());
}

@PatchMapping("/workbooks/info/{workbook-id}")
public ResponseEntity<UpdateWorkbookInfoRes> updateWorkInfobook(
@PathVariable(name = "workbook-id") long workbookId,
UpdateWorkbookInfoReq updateWorkbookInfoReq) {
ClassroomWorkbookUpdateDto.Request workbookUpdateDtoReq =
ClassroomMapper.updateWorkbookRequestToDto(workbookId, updateWorkbookInfoReq);
updateWorkbookInfoUsecase.updateWorkbookInfo(workbookUpdateDtoReq);
return ResponseEntity.ok(
UpdateWorkbookInfoRes.builder().message("교재 정보가 수정 되었습니다.").build());
}

@PostMapping("/{classroom-id}/students/enrollment")
public ResponseEntity<AddStudentRes> addStudent(
@PathVariable(name = "classroom-id") long classroomId,
@RequestBody @Valid AddStudentReq addStudentReq) {
addStudentUsecase.addStudent(
ClassroomMapper.toAddStudentDtoRequest(classroomId, addStudentReq));
return ResponseEntity.ok(AddStudentRes.builder().message("해당 반에 학생이 추가되었습니다.").build());
}
}
Loading
Loading