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 com.example.apispringgradleb2boost.service.PartnerService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*;
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 com.google.gson.Gson; import com.google.gson.Gson;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.Min;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.Optional; import java.util.Optional;
@RestController @RestController
@Validated
public class PartnerController { public class PartnerController {
@Autowired @Autowired
PartnerService partnerService; PartnerService partnerService;
/**
* Read - Get all partners
*
* @return - An Iterable object of Partner
*/
@GetMapping("/partners") @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) { if (from != null && size != null) {
return partnerService.getPartners(from, size); return partnerService.getPartners(from, size);
} }
return partnerService.getPartners(); return partnerService.getPartners();
} }
/**
* Read - Get one partner
*
* @param Id The id of the partner
* @param response
* @return A Partner object
*/
@GetMapping("/partner/{id}") @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); Optional<Partner> partner = partnerService.getPartnerById(Id);
if (partner.isPresent()) { if (partner.isPresent()) {
return partner.get(); return partner.get();
} else { } 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() // Error handling when !partner.isPresent()
response.setStatus(HttpStatus.NOT_FOUND.value()); response.setStatus(HttpStatus.NOT_FOUND.value());
response.setContentType(String.valueOf(MediaType.APPLICATION_JSON)); response.setContentType(String.valueOf(MediaType.APPLICATION_JSON));
@ -56,8 +143,6 @@ public class PartnerController {
String.format("Partner with id %d not found!", Id)) String.format("Partner with id %d not found!", Id))
)); ));
out.flush(); 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 lombok.Data;
import javax.persistence.Column; import javax.persistence.*;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Data @Data
@Entity @Entity
@Table(name = "partners") @Table(name = "partners")
public class Partner { public class Partner {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
@Column(name = "company_name") @Column(name = "company_name")
private String name; private String name;
@Column(name = "ref") @Column(name = "ref", unique=true)
private String reference; private String reference;
private String locale; 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 com.example.apispringgradleb2boost.repository.PartnerRepository;
import lombok.Data; import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Min;
import java.util.Optional; import java.util.Optional;
@Data @Data
@Service @Service
@Validated
public class PartnerService { public class PartnerService {
// TODO : service layer will be transactional and encapsulate all validation and database interactions
@Autowired @Autowired
private PartnerRepository partnerRepository; private PartnerRepository partnerRepository;
@ -24,12 +24,20 @@ public class PartnerService {
return partnerRepository.findAll(); 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); Pageable pageable = PageRequest.of(from, size);
return partnerRepository.findAll(pageable); return partnerRepository.findAll(pageable);
} }
public Optional<Partner> getPartnerById(Long Id) { public Optional<Partner> getPartnerById(@Min(1) final Long Id) {
return partnerRepository.findById(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, id INT AUTO_INCREMENT PRIMARY KEY,
company_name VARCHAR(250) NOT NULL, company_name VARCHAR(250) NOT NULL,
ref VARCHAR(250) NOT NULL, ref VARCHAR(250) UNIQUE NOT NULL,
locale VARCHAR(250) NOT NULL, locale VARCHAR(250) NOT NULL,
expires DATETIME NOT NULL expires DATETIME NOT NULL
); );
Loading…
Cancel
Save