diff --git a/src/main/java/com/bloomtechlabs/coderheroesbea/controllers/ProfilesController.java b/src/main/java/com/bloomtechlabs/coderheroesbea/controllers/ProfilesController.java new file mode 100644 index 0000000..3e6d3bb --- /dev/null +++ b/src/main/java/com/bloomtechlabs/coderheroesbea/controllers/ProfilesController.java @@ -0,0 +1,66 @@ +package com.bloomtechlabs.coderheroesbea.controllers; + +import com.bloomtechlabs.coderheroesbea.entities.Profiles; +import com.bloomtechlabs.coderheroesbea.services.ProfilesService; +import net.bytebuddy.implementation.bytecode.Throw; +import org.apache.coyote.Response; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.support.ServletUriComponentsBuilder; + +import javax.validation.Valid; +import java.net.URI; +import java.util.List; +import java.util.Optional; + +@RestController +@RequestMapping("/profile") +public class ProfilesController { + + private ProfilesService service; + + public void ProfilesController(ProfilesService service) { + this.service = service; + } + + @GetMapping + public ResponseEntity> getAllProfiles() { + List profiles = service.findAll(); + return ResponseEntity.ok().body(profiles); + } + + @GetMapping(value = "/{profiles_id}") + public ResponseEntity getProfileByID(@PathVariable("profiles_id") Long profile_id) { + Optional profile = service.find(profile_id); + return ResponseEntity.of(Optional.ofNullable(profile)); + + } + + @GetMapping(value = "/role/{role_id}") + public ResponseEntity> getProfilesByRoleId(@PathVariable("role_id") Long role_id) { + List profiles = service.findProfilesByRoleId(role_id); + return ResponseEntity.ok().body(profiles); + } + + @PostMapping + public ResponseEntity createProfile(@Valid @RequestBody Profiles profile) { + Profiles newProfile = service.createProfile(profile); + URI location = ServletUriComponentsBuilder.fromCurrentRequest() + .path("/{id}") + .buildAndExpand(newProfile.getProfile_id()) + .toUri(); + return ResponseEntity.ok().build(); + + } + + @PutMapping(value = "/{profile_id}") + public ResponseEntity updateProfile(@PathVariable("profile_id") Long profile_id, + @Valid @RequestBody Profiles updateProfile) { + Optional updated = service.updateProfile(profile_id, updateProfile); + return ResponseEntity.of(updated); + } + + +} diff --git a/src/main/java/com/bloomtechlabs/coderheroesbea/repositories/ProfilesRepository.java b/src/main/java/com/bloomtechlabs/coderheroesbea/repositories/ProfilesRepository.java index 011ca9a..9f8f114 100644 --- a/src/main/java/com/bloomtechlabs/coderheroesbea/repositories/ProfilesRepository.java +++ b/src/main/java/com/bloomtechlabs/coderheroesbea/repositories/ProfilesRepository.java @@ -3,10 +3,14 @@ import com.bloomtechlabs.coderheroesbea.entities.Profiles; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; + +import java.util.List; + /** * Provides data exchange with the table 'profiles' */ @Repository public interface ProfilesRepository extends JpaRepository { + List findProfilesByRoleId(Long roleId); } diff --git a/src/main/java/com/bloomtechlabs/coderheroesbea/services/ProfilesService.java b/src/main/java/com/bloomtechlabs/coderheroesbea/services/ProfilesService.java new file mode 100644 index 0000000..4121cf9 --- /dev/null +++ b/src/main/java/com/bloomtechlabs/coderheroesbea/services/ProfilesService.java @@ -0,0 +1,53 @@ +package com.bloomtechlabs.coderheroesbea.services; + +import com.bloomtechlabs.coderheroesbea.entities.Profiles; +import com.bloomtechlabs.coderheroesbea.repositories.ProfilesRepository; +import net.bytebuddy.implementation.bytecode.Throw; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; +@Service +public class ProfilesService { + + private ProfilesRepository repository; + + public ProfilesService(ProfilesRepository repository) { + this.repository = repository; + } + + + public Profiles createProfile(Profiles profile) { + return repository.save(profile); + } + + public List findAll() { + return repository.findAll(); + } + + public Optional find(Long profileId) { + if (profileId == null) { + throw new RuntimeException(" Invalid Profile Id Cannot Be Null "); + } + return repository.findById(profileId); + } + + public List findProfilesByRoleId(Long roleID) { + if (roleID == null) { + throw new RuntimeException(" Invalid Role Id Cannot Be Null "); + } + return repository.findProfilesByRoleId(roleID); + } + + public Optional updateProfile(Long profileId,Profiles updateProfile) { + Optional profile = repository.findById(profileId); + if (profile.isPresent()) { + updateProfile.setProfile_id(Math.toIntExact(profileId)); + repository.save(updateProfile); + } + return profile; + } + +}