diff --git a/build.gradle b/build.gradle index 34ece7c..96b3260 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ version = '0.0.1-SNAPSHOT' java { toolchain { - languageVersion = JavaLanguageVersion.of(21) + languageVersion = JavaLanguageVersion.of(23) } } diff --git a/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/controller/AnggimoddiController.java b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/controller/AnggimoddiController.java new file mode 100644 index 0000000..629fa63 --- /dev/null +++ b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/controller/AnggimoddiController.java @@ -0,0 +1,50 @@ +package com.gsm._8th.class4.backed.task._1._1.domain.controller; + +import com.gsm._8th.class4.backed.task._1._1.domain.dto.AnggimoddiDTO; +import com.gsm._8th.class4.backed.task._1._1.domain.entity.Ang; +import com.gsm._8th.class4.backed.task._1._1.domain.service.DeletePost; +import com.gsm._8th.class4.backed.task._1._1.domain.service.GetPost; +import com.gsm._8th.class4.backed.task._1._1.domain.service.Postpost; +import com.gsm._8th.class4.backed.task._1._1.domain.service.UpdatePost; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Optional; + +@RestController +@RequestMapping("/articles") +@RequiredArgsConstructor +public class AnggimoddiController { + + private final GetPost getPost; + private final Postpost postpost; + private final UpdatePost updatePost; + private final DeletePost deletePost; + + @GetMapping("/") + public ResponseEntity> getShitAll() { + return getPost.getAngs(); + } + + @GetMapping("/{id}") + public ResponseEntity> getThatShit(@PathVariable Long id) { + return getPost.getAngById(id); + } + + @PostMapping("/") + public ResponseEntity makeShit(Ang ang) { + return postpost.postPost(ang); + } + + @PatchMapping(("/{id}")) + public ResponseEntity editThatShit(AnggimoddiDTO anggimoddiDTO, @PathVariable Long id) { + return updatePost.updatePost(anggimoddiDTO, id); + } + + @DeleteMapping("/{id}") + public ResponseEntity removeThatShit(@PathVariable Long id) { + return deletePost.deleteAng(id); + } +} diff --git a/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/dto/AnggimoddiDTO.java b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/dto/AnggimoddiDTO.java new file mode 100644 index 0000000..a923240 --- /dev/null +++ b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/dto/AnggimoddiDTO.java @@ -0,0 +1,16 @@ +package com.gsm._8th.class4.backed.task._1._1.domain.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Builder +public class AnggimoddiDTO { + private Long id; + private String title; + private String content; +} diff --git a/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/entity/Ang.java b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/entity/Ang.java new file mode 100644 index 0000000..d12bdfa --- /dev/null +++ b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/entity/Ang.java @@ -0,0 +1,22 @@ +package com.gsm._8th.class4.backed.task._1._1.domain.entity; + +import jakarta.persistence.Entity; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Ang extends BaseIdxEntity{ + private String title; + private String content; + + @Builder + public Ang(Long idx, String title, String content){ + this.idx = idx; + this.title = title; + this.content = content; + } +} diff --git a/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/global/entity/BaseIdxEntity.java b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/entity/BaseIdxEntity.java similarity index 92% rename from src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/global/entity/BaseIdxEntity.java rename to src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/entity/BaseIdxEntity.java index 72bf006..570ea87 100644 --- a/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/global/entity/BaseIdxEntity.java +++ b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/entity/BaseIdxEntity.java @@ -1,4 +1,4 @@ -package com.gsm._8th.class4.backed.task._1._1.global.entity; +package com.gsm._8th.class4.backed.task._1._1.domain.entity; import jakarta.persistence.*; import lombok.Getter; diff --git a/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/repository/AngRepository.java b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/repository/AngRepository.java new file mode 100644 index 0000000..4fd3ab3 --- /dev/null +++ b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/repository/AngRepository.java @@ -0,0 +1,9 @@ +package com.gsm._8th.class4.backed.task._1._1.domain.repository; + +import com.gsm._8th.class4.backed.task._1._1.domain.entity.Ang; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface AngRepository extends JpaRepository { +} diff --git a/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/DeletePost.java b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/DeletePost.java new file mode 100644 index 0000000..447ae8e --- /dev/null +++ b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/DeletePost.java @@ -0,0 +1,10 @@ +package com.gsm._8th.class4.backed.task._1._1.domain.service; + +import com.gsm._8th.class4.backed.task._1._1.domain.entity.Ang; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +@Service +public interface DeletePost { + ResponseEntity deleteAng(Long id); +} diff --git a/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/GetPost.java b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/GetPost.java new file mode 100644 index 0000000..45fc680 --- /dev/null +++ b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/GetPost.java @@ -0,0 +1,14 @@ +package com.gsm._8th.class4.backed.task._1._1.domain.service; + +import com.gsm._8th.class4.backed.task._1._1.domain.entity.Ang; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public interface GetPost { + ResponseEntity> getAngs(); + ResponseEntity> getAngById(Long id); +} diff --git a/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/Postpost.java b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/Postpost.java new file mode 100644 index 0000000..4b48e90 --- /dev/null +++ b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/Postpost.java @@ -0,0 +1,10 @@ +package com.gsm._8th.class4.backed.task._1._1.domain.service; + +import com.gsm._8th.class4.backed.task._1._1.domain.entity.Ang; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +@Service +public interface Postpost { + ResponseEntity postPost(Ang ang); +} diff --git a/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/UpdatePost.java b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/UpdatePost.java new file mode 100644 index 0000000..967c006 --- /dev/null +++ b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/UpdatePost.java @@ -0,0 +1,11 @@ +package com.gsm._8th.class4.backed.task._1._1.domain.service; + +import com.gsm._8th.class4.backed.task._1._1.domain.dto.AnggimoddiDTO; +import com.gsm._8th.class4.backed.task._1._1.domain.entity.Ang; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +@Service +public interface UpdatePost { + ResponseEntity updatePost(AnggimoddiDTO angimoddiDTO, Long postId); +} diff --git a/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/impl/DeletePostImpl.java b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/impl/DeletePostImpl.java new file mode 100644 index 0000000..20e02c6 --- /dev/null +++ b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/impl/DeletePostImpl.java @@ -0,0 +1,17 @@ +package com.gsm._8th.class4.backed.task._1._1.domain.service.impl; + +import com.gsm._8th.class4.backed.task._1._1.domain.entity.Ang; +import com.gsm._8th.class4.backed.task._1._1.domain.repository.AngRepository; +import com.gsm._8th.class4.backed.task._1._1.domain.service.DeletePost; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; + +@RequiredArgsConstructor +public class DeletePostImpl implements DeletePost { + private final AngRepository angRepository; + + public ResponseEntity deleteAng(Long id) { + angRepository.deleteById(id); + return ResponseEntity.noContent().build(); + } +} diff --git a/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/impl/GetPostImpl.java b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/impl/GetPostImpl.java new file mode 100644 index 0000000..ec10f2f --- /dev/null +++ b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/impl/GetPostImpl.java @@ -0,0 +1,33 @@ +package com.gsm._8th.class4.backed.task._1._1.domain.service.impl; + +import com.gsm._8th.class4.backed.task._1._1.domain.entity.Ang; +import com.gsm._8th.class4.backed.task._1._1.domain.repository.AngRepository; +import com.gsm._8th.class4.backed.task._1._1.domain.service.GetPost; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +@RequiredArgsConstructor +public class GetPostImpl implements GetPost { + private final AngRepository angRepository; + + public ResponseEntity> getAngs() { + try { + return ResponseEntity.ok(angRepository.findAll()); + } catch (IllegalArgumentException e) { + List emptyList = Collections.emptyList(); + return ResponseEntity.ok(emptyList); + } + } + + public ResponseEntity> getAngById(Long id) { + try { + return ResponseEntity.ok(angRepository.findById(id)); + } catch (IllegalArgumentException e) { + return ResponseEntity.notFound().build(); + } + } +} diff --git a/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/impl/PostpostImpl.java b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/impl/PostpostImpl.java new file mode 100644 index 0000000..100ed5b --- /dev/null +++ b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/impl/PostpostImpl.java @@ -0,0 +1,18 @@ +package com.gsm._8th.class4.backed.task._1._1.domain.service.impl; + +import com.gsm._8th.class4.backed.task._1._1.domain.entity.Ang; +import com.gsm._8th.class4.backed.task._1._1.domain.repository.AngRepository; +import com.gsm._8th.class4.backed.task._1._1.domain.service.Postpost; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; + +import java.util.Optional; + +@RequiredArgsConstructor +public class PostpostImpl implements Postpost { + private final AngRepository angRepository; + + public ResponseEntity postPost(Ang ang) { + return ResponseEntity.ok(angRepository.save(ang)); + } +} diff --git a/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/impl/UpdatePostImpl.java b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/impl/UpdatePostImpl.java new file mode 100644 index 0000000..434ac55 --- /dev/null +++ b/src/main/java/com/gsm/_8th/class4/backed/task/_1/_1/domain/service/impl/UpdatePostImpl.java @@ -0,0 +1,34 @@ +package com.gsm._8th.class4.backed.task._1._1.domain.service.impl; + +import com.gsm._8th.class4.backed.task._1._1.domain.dto.AnggimoddiDTO; +import com.gsm._8th.class4.backed.task._1._1.domain.entity.Ang; +import com.gsm._8th.class4.backed.task._1._1.domain.repository.AngRepository; +import com.gsm._8th.class4.backed.task._1._1.domain.service.UpdatePost; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; + + +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class UpdatePostImpl implements UpdatePost { + private final AngRepository angRepository; + + public ResponseEntity updatePost(AnggimoddiDTO anggimoddiDTO, Long postId) { + try { + Optional ang = angRepository.findById(postId); + Ang upAng = ang.get(); + upAng.builder() + .idx(anggimoddiDTO.getId()) + .title(anggimoddiDTO.getTitle()) + .content(anggimoddiDTO.getContent()) + .build(); + angRepository.save(upAng); + return ResponseEntity.ok(upAng); + } catch (IllegalArgumentException e) { + return ResponseEntity.notFound().build(); + } + } +}