Skip to content

Commit

Permalink
update project CURD
Browse files Browse the repository at this point in the history
  • Loading branch information
minji02 committed May 4, 2024
1 parent 7bbcc0b commit b251c5d
Show file tree
Hide file tree
Showing 5 changed files with 153 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.com.cnu.devlog_springboot.controller;

import com.com.cnu.devlog_springboot.model.Project;
import com.com.cnu.devlog_springboot.model.request.ProjectRequest;
import com.com.cnu.devlog_springboot.service.ProjectService;
import java.util.List;
import lombok.AllArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/projects")
@AllArgsConstructor
public class ProjectController {

private final ProjectService projectService;

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

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

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

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

@DeleteMapping("{projectId}")
public ResponseEntity<Void> deleteProject(@PathVariable Integer projectId) {
projectService.deleteProject(projectId);
return ResponseEntity.noContent().build();
}
}
26 changes: 26 additions & 0 deletions src/main/java/com/com/cnu/devlog_springboot/model/Project.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.com.cnu.devlog_springboot.model;

import com.com.cnu.devlog_springboot.model.request.ProjectRequest;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.*;

import java.time.LocalDate;

@Getter
@Setter
@Entity(name = "projects")
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED, force = true)
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id;
String title;
String summary;
String contents;
LocalDate startDate;
LocalDate endDate;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.com.cnu.devlog_springboot.model.request;

import java.time.LocalDate;

public record ProjectRequest(
String title,
String summary,
String contents,
LocalDate startDate,
LocalDate endDate
) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.com.cnu.devlog_springboot.repository;

import com.com.cnu.devlog_springboot.model.Project;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ProjectRepository extends JpaRepository<Project, Integer> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.com.cnu.devlog_springboot.service;

import com.com.cnu.devlog_springboot.exception.DevlogException;
import com.com.cnu.devlog_springboot.model.Project;
import com.com.cnu.devlog_springboot.model.request.ProjectRequest;
import com.com.cnu.devlog_springboot.repository.ProjectRepository;
import com.com.cnu.devlog_springboot.type.ErrorCode;

import java.util.List;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@AllArgsConstructor
public class ProjectService {
private final ProjectRepository projectRepository;

public List<Project> getProjects() {
return projectRepository.findAll();
}

public Project createProject(ProjectRequest projectRequest) {
return projectRepository.save(
new Project(
null,
projectRequest.title(),
projectRequest.summary(),
projectRequest.contents(),
projectRequest.startDate(),
projectRequest.endDate()
)
);
}

public Project updateProject(Integer projectId, ProjectRequest projectRequest) {
return projectRepository.findById(projectId)
.map(project -> {
project.setTitle(projectRequest.title());
project.setContents(projectRequest.contents());
project.setSummary(projectRequest.summary());
project.setStartDate(projectRequest.startDate());
project.setEndDate(projectRequest.endDate());
return projectRepository.save(project);
}).orElseThrow(() -> new DevlogException(ErrorCode.PROJECT_NOT_FOUND));
}

public Project getProject(Integer projectId) {
return projectRepository.findById(projectId)
.orElseThrow(() -> new DevlogException(ErrorCode.PROJECT_NOT_FOUND));
}

public void deleteProject(Integer projectId) {
projectRepository.findById(projectId)
.ifPresent(projectRepository::delete);
}
}

0 comments on commit b251c5d

Please sign in to comment.