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

Seminar2 #4

Open
wants to merge 27 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
ed666f9
데이터 반영
paragon0107 Oct 14, 2024
671dc40
git toolbox 설정
paragon0107 Oct 15, 2024
04f5943
DiaryController api 추가
paragon0107 Oct 15, 2024
e3be08c
create request 추가
paragon0107 Oct 15, 2024
5da8f17
DiaryEntity getter setter 추가
paragon0107 Oct 15, 2024
43a14db
리스트 조회 sql 추가
paragon0107 Oct 15, 2024
a490716
response dto 네이밍 수정
paragon0107 Oct 15, 2024
cad19f0
CRUD 로직 추가
paragon0107 Oct 15, 2024
16b4be4
DiarySpecificResponse 추가
paragon0107 Oct 15, 2024
ac2ff28
DiaryUpdateRequest 추가
paragon0107 Oct 15, 2024
2d5376f
Catrgory추가
paragon0107 Oct 17, 2024
25b8daf
Getter 네이밍 수정
paragon0107 Oct 17, 2024
7ba79db
DiaryCreateRequest 추가
paragon0107 Oct 17, 2024
22dd113
카테고리 조회 API 추가
paragon0107 Oct 17, 2024
0c7707b
카테고리 조회 메서드 추가
paragon0107 Oct 17, 2024
2279ead
카테고리 조회 로직 추가
paragon0107 Oct 17, 2024
acbb2ad
DiarySpecificResponse 카테고리 추가
paragon0107 Oct 17, 2024
0b250b2
폴더링 리팩토링
paragon0107 Oct 21, 2024
3745c1a
Diary에 Body 추가
paragon0107 Oct 21, 2024
b71f693
DiaryController api추가
paragon0107 Oct 21, 2024
77084fd
어뎁터 추가 - DiaryDeleter
paragon0107 Oct 21, 2024
e2d4937
어뎁터 추가 - DiaryFinderF
paragon0107 Oct 21, 2024
87dcfd2
어뎁터 추가 - DiarySaver
paragon0107 Oct 21, 2024
8e5e643
카테고리별 조회 DTO 추가
paragon0107 Oct 21, 2024
ab9718b
다이어리 조회시 정렬 기준 수정
paragon0107 Oct 21, 2024
c5a9769
다이어리 조회시 Body 속성 추가
paragon0107 Oct 21, 2024
45e53c6
DiaryService 구현
paragon0107 Oct 21, 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
6 changes: 6 additions & 0 deletions .idea/git_toolbox_blame.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

124 changes: 124 additions & 0 deletions .idea/uiDesigner.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.4'
id 'io.spring.dependency-management' version '1.1.6'
}

group = 'org.example'
Expand All @@ -8,12 +10,24 @@ version = '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
java{
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation ' org.springframework.boot:sorubg-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

testImplementation platform('org.junit:junit-bom:5.9.1')
testImplementation 'org.junit.jupiter:junit-jupiter'

implementation 'com.ibm.icu:icu4j:72.1'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
}

test {
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/org/example/diary/DiaryApplication.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.example.diary;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DiaryApplication {
public static void main(String[] args) {
SpringApplication.run(DiaryApplication.class, args);
}
}
67 changes: 67 additions & 0 deletions src/main/java/org/example/diary/api/DiaryController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package org.example.diary.api;

import org.example.diary.api.dto.request.DiaryCreateRequest;
import org.example.diary.api.dto.request.DiaryGetByCategoryRequest;
import org.example.diary.api.dto.request.DiaryUpdateRequest;
import org.example.diary.api.dto.response.DiaryListResponse;
import org.example.diary.api.dto.response.DiaryResponse;
import org.example.diary.api.dto.response.DiarySpecificResponse;
import org.example.diary.repository.entity.DiaryEntity;
import org.example.diary.service.Diary;
import org.example.diary.service.DiaryService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
public class DiaryController {

private final DiaryService diaryService;

public DiaryController(DiaryService diaryService) {
this.diaryService = diaryService;
}

@PostMapping("/diaries")
void post(@RequestBody DiaryCreateRequest request) {
diaryService.createDiary(request);
}

@GetMapping("/diaries")
ResponseEntity<DiaryListResponse> get() {
List<Diary> diaryList = diaryService.getList();
List<DiaryResponse> diaryResponseList = new ArrayList<>();
for (Diary diary : diaryList) {
diaryResponseList.add(new DiaryResponse(diary.getId(), diary.getTitle(),diary.getBody()));
}
return ResponseEntity.ok(new DiaryListResponse(diaryResponseList));
}

@GetMapping("/diaries/category")
ResponseEntity<DiaryListResponse> getByCategory(@RequestBody final DiaryGetByCategoryRequest request){
List<DiaryEntity> diaryList = diaryService.getListByCategory(request.category());
List<DiaryResponse> diaryResponseList = new ArrayList<>();
for (DiaryEntity diary : diaryList) {
diaryResponseList.add(new DiaryResponse(diary.getId(), diary.getTitle(), diary.getBody()));
}
return ResponseEntity.ok(new DiaryListResponse(diaryResponseList));
}

@GetMapping("/diaries/{id}")
ResponseEntity<DiarySpecificResponse> getSpecific(@PathVariable final long id) {
DiarySpecificResponse response = diaryService.getDiarySpecific(id);
return ResponseEntity.ok(response);
}

@PatchMapping("/diaries/{id}")
void updateDiary(@PathVariable final long id,@RequestBody final DiaryUpdateRequest request) {
diaryService.updateDiary(id, request);
}

@DeleteMapping("/diaries/{id}")
void deleteDiary(@PathVariable final long id){
diaryService.deleteDiary(id);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.example.diary.api.dto.request;

import org.example.diary.repository.entity.Category;

public record DiaryCreateRequest(
String title,
String body,
Category category
){
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.example.diary.api.dto.request;

import org.example.diary.repository.entity.Category;

public record DiaryGetByCategoryRequest(
Category category
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package org.example.diary.api.dto.request;

public record DiaryUpdateRequest(String body) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.example.diary.api.dto.response;

import java.util.List;

public class DiaryListResponse {
private final List<DiaryResponse> diaryResponseList;

public List<DiaryResponse> getDiaryResponseList() {
return diaryResponseList;
}

public DiaryListResponse(List<DiaryResponse> diaryResponseList) {
this.diaryResponseList = diaryResponseList;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.example.diary.api.dto.response;

public class DiaryResponse {
private final long id;
private final String title;
private final String body;

public DiaryResponse(long id, String title, String body) {
this.id = id;
this.title = title;
this.body = body;
}

public long getId() {
return id;
}

public String getTitle() {
return title;
}

public String getBody(){
return body;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.example.diary.api.dto.response;

import org.example.diary.repository.entity.Category;

import java.time.LocalDateTime;

public record DiarySpecificResponse(
long id,
String title,
String body,
Category category,
LocalDateTime date
) {
}
21 changes: 21 additions & 0 deletions src/main/java/org/example/diary/repository/DiaryRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.example.diary.repository;

import org.example.diary.repository.entity.Category;
import org.example.diary.repository.entity.DiaryEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Optional;

@Component
public interface DiaryRepository extends JpaRepository<DiaryEntity,Long> {

@Query("SELECT d FROM DiaryEntity d ORDER BY LENGTH(d.body) ASC ")
List<DiaryEntity> findAllOrderByBodyLengthDesc();

Optional<DiaryEntity> findByTitle(String title);

List<DiaryEntity> findAllByCategory(Category category);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.example.diary.repository.adapter;

import org.example.diary.repository.entity.DiaryEntity;
import org.example.diary.repository.DiaryRepository;
import org.springframework.stereotype.Component;

@Component
public class DiaryDeleter {
private final DiaryRepository diaryRepository;
private final DiaryFinder diaryFinder;

public DiaryDeleter (DiaryRepository diaryRepository,DiaryFinder diaryFinder) {

this.diaryRepository = diaryRepository;
this.diaryFinder = diaryFinder;
}

public void deleteDiary(final long id){
DiaryEntity diaryEntity = diaryFinder.getDiaryEntity(id);
diaryRepository.delete(diaryEntity);
}
}

Loading