Skip to content

Commit

Permalink
[settting] seminar 6 기본 베이스 세팅
Browse files Browse the repository at this point in the history
  • Loading branch information
rlarlgnszx committed May 27, 2024
1 parent 3bc8229 commit e40a9db
Show file tree
Hide file tree
Showing 20 changed files with 414 additions and 37 deletions.
2 changes: 2 additions & 0 deletions week2/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ bin/
out/
!**/src/main/**/out/
!**/src/test/**/out/
!**/src/main/resources/*.yml
!**/src/main/resources/*.yaml

### NetBeans ###
/nbproject/private/
Expand Down
21 changes: 17 additions & 4 deletions week2/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,31 @@ repositories {
}

dependencies {
// implementation group 'org.postgresql', name:'postgresql',version: '42.7.3'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
compileOnly 'org.projectlombok:lombok'
// runtimeOnly 'com.h2database:h2'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation group: 'org.postgresql', name: 'postgresql', version: '42.7.3'
testImplementation 'io.rest-assured:rest-assured'
runtimeOnly 'org.postgresql:postgresql'
implementation 'org.springframework.boot:spring-boot-starter-actuator'

//JWT
implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
implementation group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
implementation group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'

//Multipart file
implementation("software.amazon.awssdk:bom:2.21.0")
implementation("software.amazon.awssdk:s3:2.21.0")

//Security
implementation 'org.springframework.boot:spring-boot-starter-security'
}


tasks.named('test') {
useJUnitPlatform()
}
2 changes: 0 additions & 2 deletions week2/src/main/java/server/sopt/week2/Week2Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@

@SpringBootApplication
public class Week2Application {

public static void main(String[] args) {
SpringApplication.run(Week2Application.class, args);
}

}
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
package server.sopt.week2.controller;
package server.sopt.week2.controller.blog;

import jakarta.transaction.Transactional;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.apache.coyote.Response;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import server.sopt.week2.auth.PrincipalHandler;
import server.sopt.week2.dto.blog.BlogCreateRequest;
import server.sopt.week2.dto.blog.BlogFindDto;
import server.sopt.week2.dto.blog.BlogTitleUpdateRequeset;
import server.sopt.week2.service.BlogService;
import server.sopt.week2.success.SuccessMessage;
import server.sopt.week2.success.SuccessStatusResponse;

import java.io.IOException;
import java.net.URI;
import java.util.List;

@RestController
Expand All @@ -21,6 +25,7 @@
public class BlogController {

private final BlogService blogService;
private final PrincipalHandler principalHandler;

@GetMapping("/blogs")
public List<BlogFindDto> getAllBlog(){
Expand All @@ -30,18 +35,14 @@ public List<BlogFindDto> getAllBlog(){
@Transactional
@PostMapping("/blog")
public ResponseEntity<SuccessStatusResponse> createBlog(
@RequestHeader Long memberId,
@RequestBody BlogCreateRequest blogCreateRequest) {
return ResponseEntity.status(
HttpStatus.CREATED
)
.header("Location", blogService.create(memberId, blogCreateRequest))
.body(SuccessStatusResponse.of(SuccessMessage.BLOG_CREATE_SUCCESS));

@ModelAttribute BlogCreateRequest blogCreateRequest
) {
return ResponseEntity.created(URI.create(blogService.create(
principalHandler.getUserIdFromPrincipal(), blogCreateRequest))).build();
}

@Transactional
@PatchMapping("/blog/{blogId}/title")
@PatchMapping("/{blogId}/title")
public ResponseEntity updateBlogTitle(
@PathVariable Long blogId,
@RequestBody @Valid BlogTitleUpdateRequeset blogTitleUpdateRequeset
Expand All @@ -55,4 +56,12 @@ public ResponseEntity updateBlogTitle(
);
}

@Transactional
@DeleteMapping("blog/{blogId}")
public ResponseEntity<Void> deleteBlogImageUrl(
@PathVariable Long blogId
) throws IOException {
blogService.deleteBlogImageUrl(blogId);
return ResponseEntity.ok().build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
//package server.sopt.week2.controller.blog;
//
//
//import io.swagger.v3.oas.annotations.Operation;
//import io.swagger.v3.oas.annotations.media.Content;
//import io.swagger.v3.oas.annotations.media.Schema;
//import io.swagger.v3.oas.annotations.responses.ApiResponse;
//import io.swagger.v3.oas.annotations.responses.ApiResponses;
//import io.swagger.v3.oas.annotations.tags.Tag;
//import org.springframework.web.bind.annotation.PathVariable;
//import org.springframework.web.bind.annotation.RequestHeader;
//import org.springframework.web.bind.annotation.RequestParam;
//
//@Tag(name = "상품", description = "상품 관련 API 입니다.")
//public interface ProductControllerSwagger {
// @Operation(summary = "세부 상품 조회 API")
//// @ApiResponses(value = {
// @ApiResponse(responseCode = "200", description = "세부 상품 조회에 성공했습니다."),
// @ApiResponse(responseCode = "404",
// description = "1. ID에 해당하는 사용자가 존재하지 않습니다.\n" +
// "2. ID에 해당하는 상품이 존재하지 않습니다.",
// content = @Content(schema = @Schema(implementation = CommonResponse.class))),
// @ApiResponse(responseCode = "500", description = "서버 내부 오류입니다.", content = @Content(schema = @Schema(implementation = CommonResponse.class)))
// })
// CommonResponse<DetailProductResponse> getDetailProduct(
// @RequestHeader final Long memberId,
// @PathVariable final Long productId
// );
//
// @Operation(summary = "발매정보 조회 API")
// @ApiResponses(value = {
// @ApiResponse(responseCode = "200", description = "발매 상품 정보 조회에 성공했습니다."),
// @ApiResponse(responseCode = "500", description = "서버 내부 오류입니다.", content = @Content(schema = @Schema(implementation = CommonResponse.class)))
// })
// CommonResponse<ReleaseProductResponse> getReleaseProduct(
// @RequestHeader final Long memberId
// );
//
// @Operation(summary = "추천 상품 조회 API")
// @ApiResponses(value = {
// @ApiResponse(responseCode = "200", description = "추천 상품 조회에 성공했습니다."),
// @ApiResponse(responseCode = "500", description = "서버 내부 오류입니다.", content = @Content(schema = @Schema(implementation = CommonResponse.class)))
// })
// CommonResponse<RecommendProductResponse> getRecommendProduct(
// @RequestHeader final Long memberId
// );
//
// @Operation(summary = "검색 상품 조회 API")
// @ApiResponses(value = {
// @ApiResponse(responseCode = "200", description = "검색 상품 조회에 성공했습니다."),
// @ApiResponse(responseCode = "500", description = "서버 내부 오류입니다.", content = @Content(schema = @Schema(implementation = CommonResponse.class)))
// })
// CommonResponse<SearchProductResponse> getFindProduct(
// @RequestParam(value = "findName") String findName
// );
//}
Original file line number Diff line number Diff line change
@@ -1,24 +1,35 @@
package server.sopt.week2.controller;
package server.sopt.week2.controller.member;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import server.sopt.week2.dto.UserJoinResponse;
import server.sopt.week2.dto.member.MemberCreateDto;
import server.sopt.week2.dto.member.MemberFindDto;
import server.sopt.week2.service.MemberService;

import java.net.URI;
import java.io.IOException;
import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/member")
public class MemberController {
private final MemberService memberService;

// private final LogoutService authService;
@PostMapping
public ResponseEntity createMember(@RequestBody MemberCreateDto memberCreateDto) {
return ResponseEntity.created(URI.create(memberService.createMember(memberCreateDto))).build();
public ResponseEntity<UserJoinResponse> postMember(
@RequestBody MemberCreateDto memberCreate
) {
UserJoinResponse userJoinResponse = memberService.createMember(memberCreate);
return ResponseEntity.status(HttpStatus.CREATED)
.header("Location", userJoinResponse.userId())
.body(
userJoinResponse
);
}

@GetMapping("/{memberId}")
Expand All @@ -40,4 +51,9 @@ public List<MemberFindDto> getAllMember(){
return memberService.getAllMember();
}

// @PostMapping("/refreshs")
// public ResponseEntity logout(HttpServletRequest request, HttpServletResponse response) throws IOException {
// LogoutService.logout(request, response);
// return ResponseEntity.noContent().build();
// }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
//package server.sopt.week2.controller.member;
//
//
//import io.swagger.v3.oas.annotations.Operation;
//import io.swagger.v3.oas.annotations.media.Content;
//import io.swagger.v3.oas.annotations.media.Schema;
//import io.swagger.v3.oas.annotations.responses.ApiResponse;
//import io.swagger.v3.oas.annotations.responses.ApiResponses;
//import io.swagger.v3.oas.annotations.tags.Tag;
//import org.springframework.web.bind.annotation.PathVariable;
//import org.springframework.web.bind.annotation.RequestHeader;
//import org.springframework.web.bind.annotation.RequestParam;
//
//@Tag(name = "멤버", description = "멤버 관련 API 입니다.")
//public interface MemberControllerSwagger {
// @Operation(summary = "세부 상품 조회 API")
// @ApiResponses(value = {
// @ApiResponse(responseCode = "200", description = "세부 상품 조회에 성공했습니다."),
// @ApiResponse(responseCode = "404",
// description = "1. ID에 해당하는 사용자가 존재하지 않습니다.\n" +
// "2. ID에 해당하는 상품이 존재하지 않습니다.",
// content = @Content(schema = @Schema(implementation = CommonResponse.class))),
// @ApiResponse(responseCode = "500", description = "서버 내부 오류입니다.", content = @Content(schema = @Schema(implementation = CommonResponse.class)))
// })
// CommonResponse<DetailProductResponse> getDetailProduct(
// @aRequestHeader final Long memberId,
// @PathVariable final Long productId
// );
//
// @Operation(summary = "발매정보 조회 API")
// @ApiResponses(value = {
// @ApiResponse(responseCode = "200", description = "발매 상품 정보 조회에 성공했습니다."),
// @ApiResponse(responseCode = "500", description = "서버 내부 오류입니다.", content = @Content(schema = @Schema(implementation = CommonResponse.class)))
// })
// CommonResponse<ReleaseProductResponse> getReleaseProduct(
// @RequestHeader final Long memberId
// );
//
// @Operation(summary = "추천 상품 조회 API")
// @ApiResponses(value = {
// @ApiResponse(responseCode = "200", description = "추천 상품 조회에 성공했습니다."),
// @ApiResponse(responseCode = "500", description = "서버 내부 오류입니다.", content = @Content(schema = @Schema(implementation = CommonResponse.class)))
// })
// CommonResponse<RecommendProductResponse> getRecommendProduct(
// @RequestHeader final Long memberId
// );
//
// @Operation(summary = "검색 상품 조회 API")
// @ApiResponses(value = {
// @ApiResponse(responseCode = "200", description = "검색 상품 조회에 성공했습니다."),
// @ApiResponse(responseCode = "500", description = "서버 내부 오류입니다.", content = @Content(schema = @Schema(implementation = CommonResponse.class)))
// })
// CommonResponse<SearchProductResponse> getFindProduct(
// @RequestParam(value = "findName") String findName
// );
//}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package server.sopt.week2.controller;
package server.sopt.week2.controller.post;

import jakarta.transaction.Transactional;
import jakarta.validation.Valid;
Expand All @@ -21,7 +21,6 @@
public class PostController {

private final PostService postService;

@Transactional
@PostMapping("/post")
public ResponseEntity<SuccessStatusResponse> createPost(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
//package server.sopt.week2.controller.product;
//
//
//import server.sopt.week2.controller.blog.ProductControllerSwagger;
//
//@RestController
//@RequestMapping("/product")
//@RequiredArgsConstructor
//public class ProductController implements ProductControllerSwagger {
//
// private final ProductService productService;
//
// @Override
// @GetMapping("/{productId}")
// public CommonResponse<DetailProductResponse> getDetailProduct(
// @RequestHeader final Long memberId,
// @PathVariable final Long productId
// ) {
// return CommonResponse.success(SuccessMessage.GET_DETAIL_PRODUCT_SUCCESS, productService.findDetailProductById(memberId, productId));
// }
//
// @Override
// @GetMapping("/release")
// public CommonResponse<ReleaseProductResponse> getReleaseProduct(
// @RequestHeader final Long memberId
// ) {
// return CommonResponse.success(SuccessMessage.GET_RELEASE_PRODUCT_SUCCESS, productService.findReleaseProduct(memberId));
// }
//
// @Override
// @GetMapping("/recommend")
// public CommonResponse<RecommendProductResponse> getRecommendProduct(
// @RequestHeader final Long memberId
// ) {
// return CommonResponse.success(SuccessMessage.GET_RECOMMEND_PRODUCT_SUCCESS, productService.findRecommendProduct(memberId));
// }
//
// @Override
// @GetMapping
// public CommonResponse<SearchProductResponse> getFindProduct(
// @RequestParam(value = "findName") String findName
// ) {
// return CommonResponse.success(SuccessMessage.GET_FIND_PRODUCT_BY_NAME, productService.findSearchProduct(findName));
// }
//}
16 changes: 12 additions & 4 deletions week2/src/main/java/server/sopt/week2/domain/Blog.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,24 @@ public class Blog extends BaseTimeEntity {
@OneToMany(mappedBy = "blog",cascade = CascadeType.REMOVE, orphanRemoval = true)
private List<Post> posts = new ArrayList<>();

private Blog(Member member, String title, String description) {
@Setter
private String imageUrl;

private Blog(Member member, String title, String imageUrl, String description) {
this.member = member;
this.title = title;
this.imageUrl = imageUrl;
this.description = description;
}
public static Blog create(Member member, BlogCreateRequest blogCreateRequest) {
return new Blog(member, blogCreateRequest.title(), blogCreateRequest.description());
}

public static Blog create(
Member member,
String title,
String description,
String imageUrl
) {
return new Blog(member, title, imageUrl, description);
}

//
// @CreatedDate
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package server.sopt.week2.dto.blog;

import jakarta.validation.constraints.Size;
import org.springframework.web.multipart.MultipartFile;

public record BlogCreateRequest(
@Size(max = 10, message = "최대 글자 10글자")
String title,String description
) {
String title, String description , MultipartFile image
) {
}
Loading

0 comments on commit e40a9db

Please sign in to comment.