Skip to content

Commit

Permalink
feat: add security module
Browse files Browse the repository at this point in the history
  • Loading branch information
KarmaPol committed Jan 20, 2024
1 parent 9217020 commit 5db951c
Show file tree
Hide file tree
Showing 15 changed files with 187 additions and 133 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ build/

### yml
**/application-infra-rdb.yml
**/application-security.yml

### STS ###
.apt_generated
Expand Down
116 changes: 0 additions & 116 deletions api/src/main/java/com/mm/api/Item/service/ItemService.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.mm.api.Item.controller;
package com.mm.api.item.controller;

import com.mm.api.Item.dto.request.ItemCreateRequest;
import com.mm.api.Item.dto.request.ItemUpdateRequest;
import com.mm.api.Item.dto.response.ItemDetailResponse;
import com.mm.api.Item.dto.response.ItemResponse;
import com.mm.api.Item.service.ItemService;
import com.mm.api.item.dto.request.ItemCreateRequest;
import com.mm.api.item.dto.request.ItemUpdateRequest;
import com.mm.api.item.dto.response.ItemDetailResponse;
import com.mm.api.item.dto.response.ItemResponse;
import com.mm.api.item.service.ItemService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mm.api.Item.dto.request;
package com.mm.api.item.dto.request;

import com.mm.coredomain.domain.Item;
import com.mm.coredomain.domain.ItemCategoryType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mm.api.Item.dto.request;
package com.mm.api.item.dto.request;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.mm.api.Item.dto.response;
package com.mm.api.item.dto.response;

import com.mm.coredomain.domain.Item;
import com.mm.coredomain.domain.ItemCategoryType;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
package com.mm.api.Item.dto.response;
package com.mm.api.item.dto.response;

import com.mm.coredomain.domain.Item;
import com.mm.coredomain.domain.ItemCategoryType;
import lombok.AllArgsConstructor;
import lombok.Builder;

import java.util.List;

public record ItemResponse(Long id,
String detail,
Expand Down
122 changes: 122 additions & 0 deletions api/src/main/java/com/mm/api/item/service/ItemService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
package com.mm.api.item.service;

import static com.mm.api.exception.ErrorCode.*;

import java.util.List;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.mm.api.exception.CustomException;
import com.mm.api.item.dto.request.ItemCreateRequest;
import com.mm.api.item.dto.request.ItemUpdateRequest;
import com.mm.api.item.dto.response.ItemDetailResponse;
import com.mm.api.item.dto.response.ItemResponse;
import com.mm.coredomain.domain.Item;
import com.mm.coredomain.domain.ItemCategoryType;
import com.mm.coredomain.domain.ItemImage;
import com.mm.coredomain.domain.ItemUpdate;
import com.mm.coredomain.domain.ItemVideo;
import com.mm.coredomain.repository.ItemRepository;
import com.mm.coreinfraqdsl.repository.ItemCustomRepository;

import lombok.RequiredArgsConstructor;

@Service
@Transactional
@RequiredArgsConstructor
public class ItemService {
private final ItemRepository itemRepository;
private final ItemCustomRepository itemCustomRepository;

public ItemResponse createItem(ItemCreateRequest request) {
Item item = request.toEntity();

List<ItemImage> itemImages = getItemImages(request.imageUrls(), item);
List<ItemVideo> itemVideos = getItemVideos(request.videoUrls(), item);

item.setItemImages(itemImages);
item.setItemVideos(itemVideos);

Item savedItem = itemRepository.save(item);
return ItemResponse.of(savedItem);
}

@Transactional(readOnly = true)
public List<ItemResponse> getItems(Integer page) {
List<Item> items = itemCustomRepository.getItemsByPage(page);

return items.stream()
.map(ItemResponse::of)
.toList();
}

@Transactional(readOnly = true)
public ItemDetailResponse getItemDetail(Long id) {
Item item = itemRepository.findById(id)
.orElseThrow(() -> new CustomException(ITEM_NOT_FOUND));

List<String> images = item.getItemImages().stream()
.map(ItemImage::getUrl)
.toList();
List<String> videos = item.getItemVideos().stream()
.map(ItemVideo::getUrl)
.toList();

return ItemDetailResponse.of(item, images, videos);
}

public ItemResponse updateItem(Long id, ItemUpdateRequest request) {
Item item = itemRepository.findById(id)
.orElseThrow(() -> new CustomException(ITEM_NOT_FOUND));

ItemUpdate itemUpdate = getItemUpdate(request);
item.updateItem(itemUpdate);

List<ItemImage> itemImages = getItemImages(request.imageUrls(), item);
List<ItemVideo> itemVideos = getItemVideos(request.videoUrls(), item);

item.setItemImages(itemImages);
item.setItemVideos(itemVideos);

return ItemResponse.of(item);
}

public void deleteItem(Long id) {
itemRepository.deleteById(id);
}

private ItemUpdate getItemUpdate(ItemUpdateRequest request) {
return ItemUpdate.builder()
.detail(request.detail())
.redirectUrl(request.redirectUrl())
.categoryType(ItemCategoryType.of(request.categoryType()))
.price(request.price())
.refund(request.refund())
.rating(request.rating())
.thumbnailUrl(request.thumbnailUrl())
.build();
}

private List<ItemVideo> getItemVideos(List<String> videoUrls, Item item) {
return videoUrls
.stream()
.map(url ->
ItemVideo.builder()
.url(url)
.item(item)
.build())
.toList();
}

private List<ItemImage> getItemImages(List<String> imageUrls, Item item) {
return imageUrls
.stream()
.map(url ->
ItemImage.builder()
.url(url)
.item(item)
.build())
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ public class Item extends BaseEntity {
@OneToMany(mappedBy = "item", cascade = CascadeType.ALL, orphanRemoval = true)
private List<ItemVideo> itemVideos;

public void setItemImages(List<ItemImage> itemImages){
public void setItemImages(List<ItemImage> itemImages) {
this.itemImages = itemImages;
}

public void setItemVideos(List<ItemVideo> itemVideos){
public void setItemVideos(List<ItemVideo> itemVideos) {
this.itemVideos = itemVideos;
}

public void updateItem(ItemUpdate itemUpdate){
public void updateItem(ItemUpdate itemUpdate) {
this.detail = itemUpdate.detail();
this.redirectUrl = itemUpdate.redirectUrl();
this.categoryType = itemUpdate.categoryType();
Expand Down
17 changes: 17 additions & 0 deletions core/core-security/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// 실행가능한 jar로 생성하는 옵션, main이 없는 라이브러리에서는 false로 비활성화함
// 스프링 부트 2.0 이상이라면 bootRepackage.enabled를 사용해야 함
bootJar { enabled = false }

// 외부에서 의존하기 위한 jar로 생성하는 옵션, main이 없는 라이브러리에서는 true로 비활성화함
jar { enabled = true }

dependencies {
implementation project(':core:core-domain');

// security
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'
}
Binary file not shown.
7 changes: 7 additions & 0 deletions core/core-security/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.example.coresecurity;

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

@SpringBootApplication
public class CoreSecurityApplication {

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

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.example.coresecurity;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class CoreSecurityApplicationTests {

@Test
void contextLoads() {
}

}
1 change: 1 addition & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ rootProject.name = 'daldal'
include 'api'
include 'core:core-domain'
include 'core:core-infra:core-infra-qdsl'
include 'core:core-security'

0 comments on commit 5db951c

Please sign in to comment.