Skip to content
Open
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
12 changes: 12 additions & 0 deletions ad/src/main/java/com/cnu/ad/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.cnu.ad;

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

@SpringBootApplication
public class Main {

public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
18 changes: 18 additions & 0 deletions ad/src/main/java/com/cnu/ad/controller/AdController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.cnu.ad.controller;

import com.cnu.ad.model.Advertisement;
import com.cnu.ad.service.AdService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/ads")
@RequiredArgsConstructor
public class AdController {

private final AdService adService;
@GetMapping
public Advertisement getAd(){return adService.getAd();}
}
9 changes: 9 additions & 0 deletions ad/src/main/java/com/cnu/ad/model/Advertisement.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.cnu.ad.model;

public record Advertisement(
String title,
String description,
String imageUrl,
String siteUrl
) {
}
22 changes: 22 additions & 0 deletions ad/src/main/java/com/cnu/ad/service/AdService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.cnu.ad.service;

import com.cnu.ad.model.Advertisement;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Random;

@Service
public class AdService {
private final List<Advertisement> ads = List.of(
new Advertisement("구글 개발자 채용", "구글코리아에서 우수한 인재들을 모집합니다", "https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png", "https://www.google.com"),
new Advertisement("나이키 멤버십 빅 세일", "오직 나이키 멤버십을 위한 단 3일! 새학기 설레는 마음을 조던과 함께", "https://www.google.com/imgres?imgurl=https%3A%2F%2Fcdn.eyesmag.com%2Fcontent%2Fuploads%2FsliderImages%2F2020%2F12%2F24%2Fair-jordan-1-ko-chicago-01-406abe1e-0ef2-4b71-b479-7716fdb60630.jpg&tbnid=QyvBKpDwO_UoBM&vet=12ahUKEwjA0KXhva7-AhXnplYBHaWYA2cQMygAegUIARCMAg..i&imgrefurl=https%3A%2F%2Fwww.eyesmag.com%2Fposts%2F133372%2Fair-jordan-1-ko-chicago&docid=sYwmVvloa4MEMM&w=903&h=600&q=%EC%A1%B0%EB%8D%98&ved=2ahUKEwjA0KXhva7-AhXnplYBHaWYA2cQMygAegUIARCMAg", "https://www.nike.com/kr"),
new Advertisement("충남대학교 컴퓨터공학 대학원생 상반기 모집", "충남대학교 컴퓨터공학 대학원생 상반기 모집을 시작합니다. 자세한 사항은 홈페이지를 참고해주세요.", "https://www.google.com/imgres?imgurl=https%3A%2F%2Fplus.cnu.ac.kr%2FUpl%2F_board%2Fsub07_0703%2Fsub07_0703_0_1625820900.jpg&tbnid=25yHUTidQqon-M&vet=12ahUKEwinxujGva7-AhVVplYBHfSXBE4QMygDegUIARDMAQ..i&imgrefurl=https%3A%2F%2Fplus.cnu.ac.kr%2F_prog%2F_board%2F%3Fmode%3DV%26no%3D2480211%26code%3Dsub07_0703%26site_dvs_cd%3Dkr%26menu_dvs_cd%3D0703%26skey%3D%26sval%3D%26site_dvs%3D%26ntt_tag%3D%26GotoPage%3D&docid=nUktNpfW-pncMM&w=2048&h=1215&q=%EC%B6%A9%EB%82%A8%EB%8C%80%ED%95%99%EA%B5%90&ved=2ahUKEwinxujGva7-AhVVplYBHfSXBE4QMygDegUIARDMAQ", "https://plus.cnu.ac.kr/html/kr/"),
new Advertisement("쿠팡 와우회원 1만원 할인", "오직 쿠팡 와우회원에게만 주어지는 마지막 기회! 1만원 할인 쿠폰을 받아보세요.", "https://www.google.com/imgres?imgurl=https%3A%2F%2Fimage10.coupangcdn.com%2Fimage%2Fmobile%2Fv3%2Fimg_fb_like.png&tbnid=9tak8zDG-dGaMM&vet=12ahUKEwip6-2Rvq7-AhVflFYBHRiADfwQMygAegUIARDbAQ..i&imgrefurl=https%3A%2F%2Fwww.coupang.com%2F&docid=Qqxdvidhpoqf-M&w=512&h=512&itg=1&q=%EC%BF%A0%ED%8C%A1&ved=2ahUKEwip6-2Rvq7-AhVflFYBHRiADfwQMygAegUIARDbAQ", "https://www.coupang.com/"),
new Advertisement("네이버 쇼핑에서 후기쓰고 포인트 적립하자~", "믿고보는 네이버 쇼핑 후기! 후기쓰고 포인트 적립하자~", "https://www.google.com/imgres?imgurl=https%3A%2F%2Fcenter.shopping.naver.com%2Fimg%2Fimg_main_carousel.jpg&tbnid=4w-j7Xc4PzwJ5M&vet=12ahUKEwjw--fKvq7-AhV9klYBHQ8QAZYQMygAegUIARCIAQ..i&imgrefurl=https%3A%2F%2Fcenter.shopping.naver.com%2F&docid=oZ5oXq3Zhw_iFM&w=2050&h=1478&q=%EB%84%A4%EC%9D%B4%EB%B2%84%20%EC%87%BC%ED%95%91&ved=2ahUKEwjw--fKvq7-AhV9klYBHQ8QAZYQMygAegUIARCIAQ", "https://www.naver.com/"),
new Advertisement("시험기간 이벤트 참여하고 간식받자!", "공부하기도 힘든데 배는 고프지 말아야지! 시험기간 이벤트 참여하고 간식받자!", "https://www.google.com/imgres?imgurl=https%3A%2F%2Fcenter.shopping.naver.com%2Fimg%2Fimg_main_carousel.jpg&tbnid=4w-j7Xc4PzwJ5M&vet=12ahUKEwjw--fKvq7-AhV9klYBHQ8QAZYQMygAegUIARCIAQ..i&imgrefurl=https%3A%2F%2Fcenter.shopping.naver.com%2F&docid=oZ5oXq3Zhw_iFM&w=2050&h=1478&q=%EB%84%A4%EC%9D%B4%EB%B2%84%20%EC%87%BC%ED%95%91&ved=2ahUKEwjw--fKvq7-AhV9klYBHQ8QAZYQMygAegUIARCIAQ", "https://www.naver.com/")
);
public Advertisement getAd(){
int randomIndex = new Random().nextInt(ads.size());
return ads.get(randomIndex);
}
}
2 changes: 2 additions & 0 deletions ad/src/main/resources/application.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
server:
port: 9090
39 changes: 22 additions & 17 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,30 @@ configurations {
}
}

repositories {
mavenCentral()
allprojects {
repositories {
mavenCentral()
}
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok' //TODO: annotation build 활성화 언급하기
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2'
implementation 'org.springframework.boot:spring-boot-starter-validation:3.0.5'
subprojects {
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'com.h2database:h2'
group = 'com.cnu'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
dependencies {
// lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok' //TODO: annotation build 활성화 언급하기

tasks.named('test') {
useJUnitPlatform()
}
// test
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.cnu.real_coding_server;
package com.cnu.post;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
Expand Down
29 changes: 29 additions & 0 deletions post/src/main/java/com/cnu/post/client/AdvertisementClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.cnu.post.client;

import com.cnu.post.model.Advertisement;
import io.github.resilience4j.circuitbreaker.CallNotPermittedException;
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

@Component

public class AdvertisementClient {
RestTemplate restTemplate = new RestTemplate();
private static final Advertisement AD_FALLBACK = new Advertisement(
"Devblog로 개발 블로그를 만들어보자",
"Devblog는 개발자들을 위한 블로그 플랫폼입니다. Devblog로 개발 블로그를 만들어보세요!",
"https://devblog.com/images/og-image.png",
"https://devblog.com"
);


@CircuitBreaker(name = "ad",fallbackMethod = "fallback")
public Advertisement getAd() {
return restTemplate.getForObject("http://localhost:9090/ads", Advertisement.class);
}

private Advertisement fallback(CallNotPermittedException e) {
return AD_FALLBACK;
}
}
41 changes: 41 additions & 0 deletions post/src/main/java/com/cnu/post/controller/PostController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.cnu.post.controller;

import com.cnu.post.entity.Post;
import com.cnu.post.model.request.PostRequest;
import com.cnu.post.model.response.PostResponse;
import com.cnu.post.service.PostService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/posts")
@RequiredArgsConstructor
public class PostController {

private final PostService postService;
@PostMapping
public ResponseEntity<Post> createPost(@RequestBody PostRequest postRequest){
return ResponseEntity.ok(postService.createPost(postRequest));
}
@GetMapping
public ResponseEntity<List<Post>> getPosts(){
return ResponseEntity.ok(postService.getPosts());
}
@GetMapping("/{postId}")
public ResponseEntity<PostResponse> getPost(@PathVariable("postId") Integer postId){
return ResponseEntity.ok(postService.getPost(postId).orElse(null));
}
@PutMapping("/{postId}")
public ResponseEntity<Post> updatePost(@PathVariable("postId") Integer postId,@RequestBody PostRequest postRequest){
return ResponseEntity.ok(postService.updatePost(postId, postRequest).orElse(null));
}

@DeleteMapping("/{postId}")
public ResponseEntity<Void> deletePost(@PathVariable("postId") Integer postId){
postService.deletePost(postId);
return ResponseEntity.noContent().build();
}
}
46 changes: 46 additions & 0 deletions post/src/main/java/com/cnu/post/controller/ProjectController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.cnu.post.controller;

import com.cnu.post.entity.Project;
import com.cnu.post.model.request.ProjectRequest;
//import com.cnu.post.model.response.ProjectResponse;
import com.cnu.post.service.ProjectService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/projects")
@RequiredArgsConstructor
public class ProjectController {
private final ProjectService projectService;

@PostMapping
public ResponseEntity<Project> createProject(@RequestBody ProjectRequest projectRequest) {
return ResponseEntity.ok(projectService.createProject(projectRequest));
}

@GetMapping
public ResponseEntity<List<Project>> getProjects() {
return ResponseEntity.ok(projectService.getProjects());
}

@GetMapping("/{projectId}")
public ResponseEntity<Project> getProject(@PathVariable("projectId") Integer projectId) {
return ResponseEntity.ok(projectService.getProject(projectId).orElse(null));
}

@PutMapping("/{projectId}")
public ResponseEntity<Project> updatePost(@PathVariable("projectId")Integer projectId,
@RequestBody ProjectRequest projectRequest) {
return ResponseEntity.ok(projectService.updateProject(projectId, projectRequest).orElse(null));
}

@DeleteMapping("/{projecttId}")
public ResponseEntity<Void> deleteProject(@PathVariable("projectId") Integer projectId) {
projectService.deleteProject(projectId);

return ResponseEntity.noContent().build();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.cnu.real_coding_server.entity;
package com.cnu.post.entity;

import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.cnu.real_coding_server.entity;
package com.cnu.post.entity;

import com.cnu.real_coding_server.model.type.Tag;
import com.cnu.post.model.type.Tag;
import jakarta.persistence.*;
import lombok.*;

Expand All @@ -20,6 +20,7 @@ public class Post extends BaseEntity {
@Setter
private String contents;

@Setter
@Enumerated(EnumType.STRING)
private Tag tag;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.cnu.real_coding_server.entity;
package com.cnu.post.entity;

import jakarta.persistence.*;
import lombok.*;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.cnu.real_coding_server.model.request;
package com.cnu.post.model.request;


import com.cnu.real_coding_server.entity.Post;
import com.cnu.real_coding_server.model.type.Tag;
import com.cnu.post.entity.Post;
import com.cnu.post.model.type.Tag;
import lombok.Getter;

@Getter
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.cnu.real_coding_server.model.request;
package com.cnu.post.model.request;

import com.cnu.real_coding_server.entity.Project;
import com.cnu.post.entity.Project;
import lombok.Getter;

import java.time.LocalDateTime;
Expand Down
10 changes: 10 additions & 0 deletions post/src/main/java/com/cnu/post/model/response/PostResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.cnu.post.model.response;

import com.cnu.post.entity.Post;
import com.cnu.post.model.Advertisement;

public record PostResponse(
Post post,
Advertisement advertisement
) {
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.cnu.real_coding_server.model.type;
package com.cnu.post.model.type;

public enum Tag {
JAVA,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.cnu.real_coding_server.repository;
package com.cnu.post.repository;

import com.cnu.real_coding_server.entity.Post;
import com.cnu.post.entity.Post;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

Expand Down
13 changes: 13 additions & 0 deletions post/src/main/java/com/cnu/post/repository/ProjectRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.cnu.post.repository;

import com.cnu.post.entity.Project;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ProjectRepository extends JpaRepository<Project, Integer> {
// Project save(Project post);
// List<Project> findAll();
// Optional<Project> findById(Integer projectId);
// void delete(Project projectId);
}
45 changes: 45 additions & 0 deletions post/src/main/java/com/cnu/post/service/PostService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.cnu.post.service;

import com.cnu.post.client.AdvertisementClient;
import com.cnu.post.entity.Post;
import com.cnu.post.model.request.PostRequest;
import com.cnu.post.model.response.PostResponse;
import com.cnu.post.repository.PostRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

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

@Service
@RequiredArgsConstructor
public class PostService {
private final PostRepository postRepository;
private final AdvertisementClient advertisementClient;
public Post createPost(PostRequest postRequest){
return postRepository.save(postRequest.toEntity());
}

public List<Post> getPosts(){
return postRepository.findAll();
}

public Optional<PostResponse> getPost(Integer postId){
return postRepository.findById(postId).map(post -> new PostResponse(post,advertisementClient.getAd()));
}

public Optional<Post> updatePost(Integer postId, PostRequest postRequest){
return postRepository.findById((postId))
.map(post -> {
post.setTitle(postRequest.getTitle());
post.setContents(postRequest.getContents());
post.setTag(postRequest.getTag());
return postRepository.save(post);
});
}

public void deletePost(Integer postId){
postRepository.findById(postId).ifPresent(postRepository::delete);

}
}
Loading