All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.gustavovitor.maker.resource.ResourceMaker Maven / Gradle / Ivy

There is a newer version: 1.7.3
Show newest version
package com.github.gustavovitor.maker.resource;

import com.github.gustavovitor.interfaces.ResourceInterface;
import com.github.gustavovitor.maker.service.ServiceMaker;
import com.github.gustavovitor.util.ObjectPageableRequest;
import com.github.gustavovitor.util.RequestPageable;
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.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import javax.management.ReflectionException;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;

import static java.util.Objects.nonNull;

@SuppressWarnings({"unchecked"})
public class ResourceMaker implements ResourceInterface {

    @Autowired
    private S service;

    protected S getService() {
        return service;
    }

    @Override
    @GetMapping("{objectId}")
    public ResponseEntity findById(@PathVariable("objectId") ID objectId) {
        return (ResponseEntity) ResponseEntity.ok(service.findById(objectId));
    }

    @Override
    @PutMapping("/search")
    public ResponseEntity> findAll(@RequestBody SPO object) throws ReflectionException {
        return ResponseEntity.ok(service.findAll(object));
    }

    @Override
    @PutMapping("/search/page")
    public ResponseEntity> findAllPageable(@RequestBody ObjectPageableRequest request) throws ReflectionException {
        return ResponseEntity.ok(service.findAllPageable(request.getObject(), getPageable(request.getPageable())));
    }

    @Override
    @PostMapping
    public ResponseEntity insert(@RequestBody @Valid T object) {
        return (ResponseEntity) ResponseEntity.status(HttpStatus.CREATED).body(service.insert(object));
    }

    @Override
    @PutMapping("/{objectId}")
    public ResponseEntity update(@PathVariable ID objectId, @RequestBody @Valid T object) {
        return (ResponseEntity) ResponseEntity.ok(service.update(objectId, object));
    }

    @Override
    @PatchMapping("/{objectId}")
    public ResponseEntity patch(@PathVariable ID objectId, @RequestBody Map object) {
        return (ResponseEntity) ResponseEntity.ok(service.patch(objectId, object));
    }

    @Override
    @DeleteMapping("/{objectId}")
    @ResponseStatus(HttpStatus.NO_CONTENT)
    public void delete(@PathVariable ID objectId) {
        service.delete(objectId);
    }

    protected Pageable getPageable(RequestPageable pageable) {
        if (nonNull(pageable.getSort()))
            return PageRequest.of(pageable.getPage(), pageable.getSize(), pageable.getSort());
        else
            return PageRequest.of(pageable.getPage(), pageable.getSize());
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy