Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added Request form api #28

Closed
wants to merge 8 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,7 @@ services:
- 'MYSQL_USER=myuser'
ports:
- '3306'
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.ieeervce.gatekeeper;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

@ResponseStatus(HttpStatus.BAD_REQUEST)
public class PDFNotConversionException extends Exception{
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FailedFileConversionException?

If you want to keep the same name, pls add a javadoc mentioning what this exception means

public PDFNotConversionException(String message){
super(message);
}
}




Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ private static void getCustomizedHttpAuthorization(AuthorizeHttpRequestsConfigur
.requestMatchers(HttpMethod.POST,"/society").hasRole("ADMIN")
.requestMatchers(HttpMethod.PUT,"/society/**").hasRole("ADMIN")
.requestMatchers(HttpMethod.DELETE,"/society/**").hasRole("ADMIN")
.anyRequest().permitAll();
.anyRequest().authenticated();

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package org.ieeervce.gatekeeper.controller;

import jakarta.mail.Multipart;
import org.ieeervce.gatekeeper.InvalidDataException;
import org.ieeervce.gatekeeper.ItemNotFoundException;
import org.ieeervce.gatekeeper.PDFNotConversionException;
import org.ieeervce.gatekeeper.dto.RequestDTO;
import org.ieeervce.gatekeeper.entity.RequestForm;
import org.ieeervce.gatekeeper.entity.Role;
import org.ieeervce.gatekeeper.entity.Society;
import org.ieeervce.gatekeeper.entity.User;
import org.ieeervce.gatekeeper.service.RequestFormService;
import org.ieeervce.gatekeeper.service.UserService;
import org.modelmapper.ModelMapper;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.awt.*;
import java.util.List;

@RestController
@RequestMapping("/requestForm")
public class RequestFormController {

private final ModelMapper modelMapper;
private final RequestFormService requestFormService;

private final UserService userService;
RequestFormController(RequestFormService requestFormService, ModelMapper modelMapper, UserService userService){
this.requestFormService = requestFormService;
this.modelMapper= modelMapper;
this.userService = userService;
}

@GetMapping
public List<RequestForm> getAll(){
return requestFormService.list();
}

@GetMapping("/{requestFormId}")
public RequestForm getOne(@PathVariable Long requestFormId) throws ItemNotFoundException {
return requestFormService.findOne(requestFormId);
}

@DeleteMapping("/{requestFormID}")
public void deleteRequestForm(@PathVariable Long requestFormId) throws ItemNotFoundException{
requestFormService.delete(requestFormId);
}

@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public RequestForm postRequestForm(@RequestParam("eventTitle") String eventTitle, @RequestParam("isFinance") boolean isFinance , @RequestParam("requesterUserId") Integer requesterUserId, @RequestParam("formPDF") MultipartFile formPDF ) throws InvalidDataException,PDFNotConversionException{
RequestForm requestForm = new RequestForm();
requestForm.setEventTitle(eventTitle);
requestForm.setFinance(isFinance);

try {
requestForm.setFormPDF(formPDF.getBytes());
if (requesterUserId != null) {
User user = userService.getUserById(requesterUserId);
requestForm.setRequester(user);
}
}
catch(ItemNotFoundException e ){
throw new InvalidDataException("Invalid user Id");
}
catch (java.io.IOException e){
throw new PDFNotConversionException("Could not store pdf");
}

return requestFormService.save(requestForm);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This returns the entire thing as JSON. how is the file returned?
If as a json array, that will make the response too huge, could you check?

}

@PutMapping("/{requestFormId}")
public RequestForm editRequestForm(@RequestBody RequestDTO requestDTO,@PathVariable Long requestFormId) throws ItemNotFoundException{
RequestForm editedRequestForm = modelMapper.map(requestDTO, RequestForm.class);
return requestFormService.edit(requestFormId, editedRequestForm);
}
}
46 changes: 46 additions & 0 deletions src/main/java/org/ieeervce/gatekeeper/dto/RequestDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package org.ieeervce.gatekeeper.dto;

import org.ieeervce.gatekeeper.entity.FinalStatus;
import org.springframework.web.multipart.MultipartFile;

public class RequestDTO {
private String eventTitle;
private Integer requesterUserId;

private boolean isFinance ;
private MultipartFile formPDF ;


public String getEventTitle() {
return eventTitle;
}

public void setEventTitle(String eventTitle) {
this.eventTitle = eventTitle;
}

public Integer getRequesterUserId() {
return requesterUserId;
}

public void setRequesterUserId(Integer requesterUserId) {
this.requesterUserId = requesterUserId;
}


public boolean isFinance() {
return isFinance;
}

public void setFinance(boolean finance) {
isFinance = finance;
}

public MultipartFile getFormPDF() {
return formPDF;
}

public void setFormPDF(MultipartFile formPDF) {
this.formPDF = formPDF;
}
}
97 changes: 94 additions & 3 deletions src/main/java/org/ieeervce/gatekeeper/entity/RequestForm.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package org.ieeervce.gatekeeper.entity;

import jakarta.persistence.*;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;

import java.time.LocalDateTime;
import java.util.List;

Expand All @@ -13,14 +16,19 @@ public class RequestForm {
@Column(nullable = false)
private String eventTitle;

@Column(nullable = false, columnDefinition = "integer default 0")
private int formValue;

@ManyToOne
@JoinColumn(name = "requester",referencedColumnName = "userId")
private User requester;

@CreationTimestamp
@Column(nullable = false)
private LocalDateTime dateTime;

private LocalDateTime createdAt;

@UpdateTimestamp
@Column(nullable = false)
private LocalDateTime updatedAt;

@Enumerated(EnumType.STRING)
private FinalStatus status;
Expand All @@ -31,5 +39,88 @@ public class RequestForm {
@OneToMany(mappedBy = "formId", cascade = CascadeType.ALL)
private List<ReviewLog> reviewLogs;

@Column(nullable = false)
private boolean isFinance;

public boolean isFinance() {
return isFinance;
}

public void setFinance(boolean finance) {
isFinance = finance;
}


public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getEventTitle() {
return eventTitle;
}

public void setEventTitle(String eventTitle) {
this.eventTitle = eventTitle;
}

public User getRequester() {
return requester;
}

public void setRequester(User requester) {
this.requester = requester;
}


public FinalStatus getStatus() {
return status;
}

public void setStatus(FinalStatus status) {
this.status = status;
}

public void setFormValue(int formValue) {
this.formValue = formValue;
}

public int getFormValue() {
return formValue;
}

public byte[] getFormPDF() {
return formPDF;
}

public void setFormPDF(byte[] formPDF) {
this.formPDF = formPDF;
}

public List<ReviewLog> getReviewLogs() {
return reviewLogs;
}

public void setReviewLogs(List<ReviewLog> reviewLogs) {
this.reviewLogs = reviewLogs;
}

public LocalDateTime getCreatedAt() {
return createdAt;
}

public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}

public LocalDateTime getUpdatedAt() {
return updatedAt;
}

public void setUpdatedAt(LocalDateTime updatedAt) {
this.updatedAt = updatedAt;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.ieeervce.gatekeeper.repository;

import org.ieeervce.gatekeeper.entity.RequestForm;
import org.springframework.data.jpa.repository.JpaRepository;

public interface RequestFormRepository extends JpaRepository<RequestForm,Long> {
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ public interface UserRepository extends JpaRepository<User,Integer> {
Optional<User> findByEmail(String email);

User findByName(String name);

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package org.ieeervce.gatekeeper.service;

import jakarta.transaction.Transactional;
import org.ieeervce.gatekeeper.ItemNotFoundException;
import org.ieeervce.gatekeeper.entity.RequestForm;
import org.ieeervce.gatekeeper.repository.RequestFormRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class RequestFormService {

static final String ITEM_NOT_FOUND="Request Form Not Found";
private final RequestFormRepository requestFormRepository;
@Autowired
RequestFormService(RequestFormRepository requestFormRepository){
this.requestFormRepository= requestFormRepository;
}
public RequestForm findOne(Long requestFormId)throws ItemNotFoundException{
return requestFormRepository.findById(requestFormId).orElseThrow(()-> new ItemNotFoundException(ITEM_NOT_FOUND + requestFormId));
}
public RequestForm add(RequestForm requestForm){
return requestFormRepository.save(requestForm);
}
public List<RequestForm> list(){
return requestFormRepository.findAll();
}

public RequestForm save(RequestForm requestForm){
return requestFormRepository.save(requestForm);
}
public void delete(Long requestFormId){
requestFormRepository.deleteById(requestFormId);
}
@Transactional
public RequestForm edit(Long requestFormId, RequestForm editedRequestForm) throws ItemNotFoundException{
Optional<RequestForm> existingRequestForm = requestFormRepository.findById(requestFormId);
return existingRequestForm.map((requestForm)->{
editedRequestForm.setId(requestFormId);
editedRequestForm.setCreatedAt(requestForm.getCreatedAt());
return requestFormRepository.save(editedRequestForm);
}).orElseThrow(()-> new ItemNotFoundException(ITEM_NOT_FOUND+requestFormId));
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.ieeervce.gatekeeper.service;

import org.ieeervce.gatekeeper.ItemNotFoundException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.*;
import org.ieeervce.gatekeeper.repository.UserRepository;
Expand All @@ -9,6 +10,7 @@

@Service
public class UserService {
private final String ITEM_NOT_FOUND = "User Id not found";

private final UserRepository repository;
@Autowired
Expand All @@ -31,7 +33,9 @@ public User getUserByName(String name)
{
return repository.findByName(name);
}

public User getUserById(Integer userId) throws ItemNotFoundException {
return repository.findById(userId).orElseThrow(()-> new ItemNotFoundException(ITEM_NOT_FOUND+userId));
}


}