Skip to content

Commit

Permalink
Merge pull request #514 from COS301-SE-2023/backend/improvements
Browse files Browse the repository at this point in the history
Backend/improvements Into Dev
  • Loading branch information
P3TROOS authored Oct 21, 2023
2 parents b222b24 + b5b2cfc commit 52dca17
Show file tree
Hide file tree
Showing 26 changed files with 654 additions and 589 deletions.
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package com.fragile.infosafe.delete.deletemodel;

import com.fragile.infosafe.primary.model.User;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

@Data
@Builder
Expand All @@ -24,4 +27,9 @@ public class DeletedTask {
private String date_created;
private String completionStatus;

@ElementCollection
@CollectionTable(name = "delete_task_users", joinColumns = @JoinColumn(name = "task_id"))
@Column(name = "user_id")
private Set<Integer> userIds = new HashSet<>();

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import com.fragile.infosafe.delete.deletemodel.DeletedTask;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

@Repository
public interface DeletedTaskRepository extends JpaRepository<DeletedTask, Integer> {

@Query("SELECT COUNT(dt) FROM DeletedTask dt JOIN dt.userIds u WHERE u = :userId")
long countByUserId(int userId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import lombok.extern.slf4j.Slf4j;
import org.hibernate.sql.Delete;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.*;

import java.util.List;
Expand Down Expand Up @@ -50,4 +52,16 @@ public ResponseEntity<String> setCompletedTasks(@RequestBody TaskCompleteRequest
public ResponseEntity<List<String>> getUsersOfTask(@PathVariable("id") int task_id){
return ResponseEntity.ok(service.findUsersOfTask(task_id));
}

@GetMapping("/getCompleted")
public ResponseEntity<Long> getCompletedTasks(){
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null && authentication.getPrincipal() instanceof User authenticatedUser) {
long count = service.getCompletedTasks(authenticatedUser.getUser_id());
return ResponseEntity.ok(count);
}else {
return ResponseEntity.notFound().build();
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public class Task {
inverseJoinColumns = @JoinColumn(name = "user_id")
)
private Set<User> users = new HashSet<>();

@Column(nullable = true)
private int daysUntilDue;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,18 @@ public class User implements UserDetails {
@OneToMany(mappedBy = "user_id", fetch = FetchType.LAZY)
private List<AccessRequest> accessRequests;

@JsonIgnore
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private List<Notifications> notifications;

@JsonIgnore
@ManyToMany(mappedBy = "users", fetch = FetchType.LAZY)
private List<Task> tasks;

@JsonIgnore
@ManyToMany(mappedBy = "users", fetch = FetchType.LAZY)
private List<DataScope> dataScopes;

@Override
public String toString() {
return "User{" +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public List<Asset> getAllAssets() {
decryptedCurrentAssignee.setUser_id(currentAssignee.getUser_id());
decryptedCurrentAssignee.setFirst_name(encryptionService.decryptString(currentAssignee.getFirst_name()));
decryptedCurrentAssignee.setLast_name(encryptionService.decryptString(currentAssignee.getLast_name()));
decryptedCurrentAssignee.setEmail(encryptionService.decryptString(currentAssignee.getEmail()));
decryptedCurrentAssignee.setRole(currentAssignee.getRole());
asset.setCurrent_assignee(decryptedCurrentAssignee);
}
Expand All @@ -42,6 +43,7 @@ public List<Asset> getAllAssets() {
decryptedPreviousAssignee.setUser_id(previousAssignee.getUser_id());
decryptedPreviousAssignee.setFirst_name(encryptionService.decryptString(previousAssignee.getFirst_name()));
decryptedPreviousAssignee.setLast_name(encryptionService.decryptString(previousAssignee.getLast_name()));
decryptedPreviousAssignee.setEmail(encryptionService.decryptString(previousAssignee.getEmail()));
decryptedPreviousAssignee.setRole(previousAssignee.getRole());
asset.setPrevious_assignee(decryptedPreviousAssignee);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.springframework.stereotype.Service;

import javax.persistence.EntityManager;
import java.util.Collections;
import java.util.Optional;

@Service
Expand All @@ -37,6 +38,7 @@ public class DeleteService {
private final DeletedAccessRequestRepository deletedAccessRequestRepository;
private final DeletedSupportRequestRepository deletedSupportRequestRepository;
private final DeletedRiskRepository deletedRiskRepository;
private final NotificationsRepository notificationsRepository;

public void deleteUserAndSaveToSecondary(String email) {
Optional<User> entityOptional = userRepository.findByEmail(encryptionService.encryptString(email));
Expand All @@ -63,6 +65,22 @@ public void deleteUserAndSaveToSecondary(String email) {
asset.setCurrent_assignee(null);
asset.setAvailability("Yes");
}
for(Task task : entityToDelete.getTasks()){
task.getUsers().remove(entityToDelete);
if(task.getUsers().size() == 0){
deleteTaskAndSaveToSecondary(task.getTask_id(), "Users Deleted");
}else{
taskRepository.save(task);
}
}
for(DataScope ds : entityToDelete.getDataScopes()){
if(entityToDelete != ds.getDataCustodian()){
ds.getUsers().remove(entityToDelete);
}else{
return;
}
}
notificationsRepository.deleteAll(entityToDelete.getNotifications());
deletedUserRepository.save(de);
userRepository.delete(entityToDelete);
}
Expand Down Expand Up @@ -125,6 +143,9 @@ public void deleteTaskAndSaveToSecondary(int task_id, String completion) {
de.setTask_description(entityToDelete.getTask_description());
de.setDue_date(entityToDelete.getDue_date());
de.setDate_created(entityToDelete.getDate_created());
for(User us : entityToDelete.getUsers()){
de.setUserIds(Collections.singleton(us.getUser_id()));
}
de.setCompletionStatus(completion);
deletedTaskRepository.save(de);
taskRepository.delete(entityToDelete);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,15 +76,15 @@ public void reviewRisk(ReviewRiskRequest riskRequest){
}
public Risk updateRisk(RiskRequest riskRequest, int risk_id) {
Risk risk = riskRepository.findRiskByRiskId(risk_id).get();
risk.setRisk_description(risk.getRisk_description());
risk.setRisk_name(risk.getRisk_name());
risk.setRisk_status(risk.getRisk_status());
risk.setImpact_rating(risk.getImpact_rating());
risk.setProbability_rating(risk.getProbability_rating());
risk.setSuggested_mitigation(risk.getSuggested_mitigation());
risk.setRisk_description(riskRequest.getRisk_description());
risk.setRisk_name(riskRequest.getRisk_name());
risk.setRisk_status(riskRequest.getRisk_status());
risk.setImpact_rating(riskRequest.getImpact_rating());
risk.setProbability_rating(riskRequest.getProbability_rating());
risk.setSuggested_mitigation(riskRequest.getSuggested_mitigation());
risk.setDataScope(dataScopeRepository.findByDataScopeId(riskRequest.getDataScope_id()).get());

return riskRepository.save(risk);}
return riskRepository.save(risk);
}

private void emailUser(String email, String risk_name, String ds_name){
String subject = "New Risk Alert";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ public SupportRequest updateSupportRequest(SupportRequestRequest supportRequest)
updated.setSupport_description(supportRequest.getSupport_description());
updated.setSupport_status(supportRequest.getSupport_status());
updated.setSupport_type(supportRequest.getSupport_type());
updated.setUser_id(userRepository.findByEmail(encryptionService.encryptString(supportRequest.getUser_email())).isPresent() ? userRepository.findByEmail(encryptionService.encryptString(supportRequest.getUser_email())).get() :null);
updated.setUser_id(userRepository.findByEmail(supportRequest.getUser_email()).isPresent() ? userRepository.findByEmail(supportRequest.getUser_email()).get() :null);
updated.setTask_id(taskRepository.findByTaskId(supportRequest.getTask_id()).isPresent() ? taskRepository.findByTaskId(supportRequest.getTask_id()).get() : null);
updated.setAsset_id(assetRepository.findByAssetId(supportRequest.getAsset_id()).isPresent() ? assetRepository.findByAssetId(supportRequest.getAsset_id()).get() : null);
updated.setDataScope_id(dataScopeRepository.findByDataScopeId(supportRequest.getDataScope_id()).isPresent() ? dataScopeRepository.findByDataScopeId(supportRequest.getDataScope_id()).get() : null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fragile.infosafe.delete.deleterepository.DeletedTaskRepository;
import com.fragile.infosafe.primary.model.DataScope;
import com.fragile.infosafe.primary.model.Task;
import com.fragile.infosafe.primary.model.User;
Expand Down Expand Up @@ -34,6 +35,7 @@ public class TaskService {
private final DeleteService deleteService;
private final NotificationsService notificationsService;
private final EncryptionService encryptionService;
private final DeletedTaskRepository deletedTaskRepository;
public ResponseEntity<String> createTask(TaskRequest request) {
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Expand Down Expand Up @@ -192,4 +194,8 @@ public List<String> findUsersOfTask(int task_id) {
userEmails.replaceAll(encryptionService::decryptString);
return userEmails;
}

public long getCompletedTasks(int user_id){
return deletedTaskRepository.countByUserId(user_id);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,10 @@ public List<String> getAllUsersEmails() {

public User updateUser(User user) {
user.setRole(roleRepository.findByRole_name(user.getRole().getRole_name()));
user.setFirst_name(encryptionService.decryptString(user.getFirst_name()));
user.setLast_name(encryptionService.decryptString(user.getLast_name()));
user.setEmail(encryptionService.decryptString(user.getEmail()));
user.setPassword(encryptionService.decryptString(user.getPassword()));
user.setFirst_name(encryptionService.encryptString(user.getFirst_name()));
user.setLast_name(encryptionService.encryptString(user.getLast_name()));
user.setEmail(encryptionService.encryptString(user.getEmail()));
user.setPassword(user.getPassword());
return repository.save(user);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ const SystemAnalyticsChart = () => {
Authorization: "Bearer " + accessToken,
},
}),

];

try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ export const CreateTask = ({popupClose, popupOpen, onTaskAdded}) => {
value={task_description}
id="taskDescIn"
/>
<p className="createTaskInputLabels">Task Status</p>
<p className="createTaskInputLabels">Task Priority</p>
<Dropdown
options={statusOptions}
value={statusOptions.find((option) => option.value === task_status)}
Expand Down
4 changes: 1 addition & 3 deletions frontend/infosafe_frontend/src/components/Edit/EditRisk.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,7 @@ export const EditRisk = ({risk, popupClose, popupOpen, onRiskEdited}) => {

const handleSubmit = (e) => {
e.preventDefault();

console.log(values)
//console.log(values)
fetch('https://infosafe.live/api/risk/update/' + risk.risk_id, {
method: "POST",
headers: {
Expand All @@ -50,7 +49,6 @@ export const EditRisk = ({risk, popupClose, popupOpen, onRiskEdited}) => {
console.log("Updated Risk")
onRiskEdited()
})
//console.log(JSON.stringify(values))
popupClose()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,12 @@ const EditSupportRequest = ({ support, popupOpen, popupClose, editAllSupport, ed
body:JSON.stringify(values)
}).then(()=>{
console.log("Updated AccessRequest")
editAllSupport()
editMySupport()
if(editAllSupport !== null){
editAllSupport();
}else{
editMySupport();
}

})
popupClose()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ export const UpdateTask = ({ task, popupClose, popupOpen, onTaskEdited }) => {
<p className="editTaskLabels">Add More Assignees</p>
{users && users.length > 0 ? (
<Select
options={users.map((data) => ({value: data.user_id, label: data.email}))}
options={users.map((email) => ({value: email, label: email}))}
value={selectedUsers.map((email) => ({ label: email }))}
className="editTaskAssignees"
name="editTaskAssignees"
Expand All @@ -160,7 +160,7 @@ export const UpdateTask = ({ task, popupClose, popupOpen, onTaskEdited }) => {
/> ) : (
<p className="editTaskLoading">Loading...</p>
)}
<p className="editTaskLabels">Status</p>
<p className="editTaskLabels">Priority</p>
<Dropdown
options={statusOptions}
value={statusOptions.find((option) => option.value === task.task_status)}
Expand Down
8 changes: 3 additions & 5 deletions frontend/infosafe_frontend/src/components/Edit/EditUser.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ const EditUser = ({ user, popupClose, popupOpen , onUserEdited}) => {

const handleSubmit = (e) => {
e.preventDefault();
//console.log(values)
console.log(values)
fetch('https://infosafe.live/api/user/update/' + user.user_id, {
method:"PUT",
headers:{"Content-Type":"application/json",
Expand All @@ -62,10 +62,6 @@ const EditUser = ({ user, popupClose, popupOpen , onUserEdited}) => {
Authorization: "Bearer " + sessionStorage.getItem('accessToken')
},
});
// }).then((res) => res.json())
// .then((result) => {
// setRoleNames(result);
// });
const roles = await response.json();
setRoleNames(roles);
}
Expand Down Expand Up @@ -118,6 +114,7 @@ const EditUser = ({ user, popupClose, popupOpen , onUserEdited}) => {
readOnly={true}
/>
</div>
{user.role.role_name !== "ADMIN" ? (
<div className="roleEdit">
<p className="roleTitle">System Role</p>
{roleNames && roleNames.length > 0 ? (
Expand All @@ -132,6 +129,7 @@ const EditUser = ({ user, popupClose, popupOpen , onUserEdited}) => {
<p className="editUserRolesLoading">Loading...</p>
)}
</div>
) : null}
<button className="editUserFinishButton" data-testid="finish">
Finish
</button>
Expand Down
Loading

0 comments on commit 52dca17

Please sign in to comment.