Browse Source

delete update & refacto comments

master
art.dambrine 3 years ago
parent
commit
39915fa68e
  1. 109
      src/main/java/com/example/apispringgradleb2boost/controller/PartnerController.java
  2. 8
      src/main/java/com/example/apispringgradleb2boost/model/Partner.java
  3. 18
      src/main/java/com/example/apispringgradleb2boost/service/PartnerService.java
  4. 2
      src/main/resources/schema.sql

109
src/main/java/com/example/apispringgradleb2boost/controller/PartnerController.java

@ -5,46 +5,133 @@ import com.example.apispringgradleb2boost.model.Partner;
import com.example.apispringgradleb2boost.service.PartnerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.query.Param;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import com.google.gson.Gson;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.Min;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Optional;
@RestController
@Validated
public class PartnerController {
@Autowired
PartnerService partnerService;
/**
* Read - Get all partners
*
* @return - An Iterable object of Partner
*/
@GetMapping("/partners")
public Iterable<Partner> getPartners(@Param("from") @Min(0) final Integer from, @Param("size") @Min(1) final Integer size) {
public Iterable<Partner> getPartners(@Param("from") final Integer from, @Param("size") final Integer size) {
if (from != null && size != null) {
return partnerService.getPartners(from, size);
}
return partnerService.getPartners();
}
/**
* Read - Get one partner
*
* @param Id The id of the partner
* @param response
* @return A Partner object
*/
@GetMapping("/partner/{id}")
public Partner getPartnerById(@PathVariable("id") @Min(1) final Long Id, HttpServletResponse response) throws IOException {
public Partner getPartnerById(@PathVariable("id") final Long Id, HttpServletResponse response) throws IOException {
Optional<Partner> partner = partnerService.getPartnerById(Id);
if (partner.isPresent()) {
return partner.get();
} else {
// Error handling when !partner.isPresent()
handlePartnerResourceIsNotPresentReturnNotFound(Id, response);
return null;
}
}
/**
* Create - Add a new partner
*
* @param partner An object partner
* @return The partner object saved
*/
@PostMapping("/partner")
public Partner createPartner(@RequestBody Partner partner) {
return partnerService.savePartner(partner);
}
/**
* Update - Update an existing partner
*
* @param Id - The id of the partner to update
* @param partner - The partner object updated
* @param response
* @return The partner object updated
*/
@PutMapping("/partner/{id}")
public Partner updatePartner(@PathVariable("id") final Long Id, @RequestBody Partner partner,
HttpServletResponse response) throws IOException {
Optional<Partner> p = partnerService.getPartnerById(Id);
if (p.isPresent()) {
Partner currentPartner = p.get();
String name = partner.getName();
if (name != null) {
currentPartner.setName(name);
}
String reference = partner.getReference();
if (reference != null) {
currentPartner.setReference(reference);
}
String locale = partner.getLocale();
if (locale != null) {
currentPartner.setLocale(locale);
}
String expirationTime = partner.getExpirationTime();
if (expirationTime != null) {
currentPartner.setExpirationTime(expirationTime);
}
partnerService.savePartner(currentPartner);
return currentPartner;
} else {
handlePartnerResourceIsNotPresentReturnNotFound(Id, response);
return null;
}
}
/**
* Delete - Delete a partner
*
* @param response
* @param Id - The id of the partner to delete
*/
@DeleteMapping("/partner/{id}")
public void deletePartner(@PathVariable("id") final Long Id, HttpServletResponse response) throws IOException {
Optional<Partner> partner = partnerService.getPartnerById(Id);
if (partner.isPresent()) {
partnerService.deletePartner(Id);
} else {
handlePartnerResourceIsNotPresentReturnNotFound(Id, response);
}
}
/**
* Partner not found handling - Extraction of duplicated code for
*
* @param Id
* @param response
* @throws IOException
*/
private void handlePartnerResourceIsNotPresentReturnNotFound(@PathVariable("id") Long Id, HttpServletResponse response) throws IOException {
// Error handling when !partner.isPresent()
response.setStatus(HttpStatus.NOT_FOUND.value());
response.setContentType(String.valueOf(MediaType.APPLICATION_JSON));
@ -56,8 +143,6 @@ public class PartnerController {
String.format("Partner with id %d not found!", Id))
));
out.flush();
return null;
}
}
}

8
src/main/java/com/example/apispringgradleb2boost/model/Partner.java

@ -2,22 +2,20 @@ package com.example.apispringgradleb2boost.model;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.*;
@Data
@Entity
@Table(name = "partners")
public class Partner {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "company_name")
private String name;
@Column(name = "ref")
@Column(name = "ref", unique=true)
private String reference;
private String locale;

18
src/main/java/com/example/apispringgradleb2boost/service/PartnerService.java

@ -4,18 +4,18 @@ import com.example.apispringgradleb2boost.model.Partner;
import com.example.apispringgradleb2boost.repository.PartnerRepository;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Min;
import java.util.Optional;
@Data
@Service
@Validated
public class PartnerService {
// TODO : service layer will be transactional and encapsulate all validation and database interactions
@Autowired
private PartnerRepository partnerRepository;
@ -24,12 +24,20 @@ public class PartnerService {
return partnerRepository.findAll();
}
public Iterable<Partner> getPartners(int from, int size) {
public Iterable<Partner> getPartners(@Min(0) final int from, @Min(1) final int size) {
Pageable pageable = PageRequest.of(from, size);
return partnerRepository.findAll(pageable);
}
public Optional<Partner> getPartnerById(Long Id) {
public Optional<Partner> getPartnerById(@Min(1) final Long Id) {
return partnerRepository.findById(Id);
}
public Partner savePartner(Partner partner) {
return partnerRepository.save(partner);
}
public void deletePartner(@Min(0) final Long Id) {
partnerRepository.deleteById(Id);
}
}

2
src/main/resources/schema.sql

@ -2,7 +2,7 @@ CREATE TABLE partners
(
id INT AUTO_INCREMENT PRIMARY KEY,
company_name VARCHAR(250) NOT NULL,
ref VARCHAR(250) NOT NULL,
ref VARCHAR(250) UNIQUE NOT NULL,
locale VARCHAR(250) NOT NULL,
expires DATETIME NOT NULL
);
Loading…
Cancel
Save