GdprDataDeletingRestController.java
package sk.iway.iwcm.components.gdpr.rest;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import sk.iway.iwcm.Constants;
import sk.iway.iwcm.components.gdpr.GdprDataDeleting;
import sk.iway.iwcm.components.gdpr.GdprDataDeletingEntity;
import sk.iway.iwcm.i18n.Prop;
import sk.iway.iwcm.system.ConfDB;
import sk.iway.iwcm.system.datatable.Datatable;
import sk.iway.iwcm.system.datatable.DatatablePageImpl;
import sk.iway.iwcm.system.datatable.DatatableRestControllerV2;
@RestController
@RequestMapping("/admin/rest/gdpr/data_deleting")
@PreAuthorize("@WebjetSecurityService.hasPermission('menuGDPRDelete')")
@Datatable
public class GdprDataDeletingRestController extends DatatableRestControllerV2<GdprDataDeletingEntity, Long> {
private final HttpServletRequest request;
private static final String DELETE_USER_AFTER_DAYS = "gdprDeleteUserAfterDays";
private static final String DELETE_EMAILS_AFTER_DAYS = "gdprDeleteEmailsAfterDays";
private static final String DELETE_FORM_DATA_AFTER_DAYS = "gdprDeleteFormDataAfterDays";
private static final String DELETE_USER_BASKET_ORDERS_AFTER_YEARS = "gdprDeleteUserBasketOrdersAfterYears";
private static final String DAYS_KEY = "welcome.statBackTime.days";
@Autowired
public GdprDataDeletingRestController(HttpServletRequest request) {
super(null);
this.request = request;
}
//This page doesnt use repository or DB class, we will create 4 entities static (only two columns are from DB)
@Override
public Page<GdprDataDeletingEntity> getAllItems(Pageable pageable) {
List<GdprDataDeletingEntity> items = new ArrayList<>();
//Fill items list with 4 fix created items
items.add(getDataDeleteEntityById(1));
items.add(getDataDeleteEntityById(2));
items.add(getDataDeleteEntityById(3));
items.add(getDataDeleteEntityById(4));
return new DatatablePageImpl<>(items);
}
@Override
public GdprDataDeletingEntity getOneItem(long id) {
return getDataDeleteEntityById((int) id);
}
//Only statTime column can be changed (every entity use different method to update value)
@Override
public GdprDataDeletingEntity editItem(GdprDataDeletingEntity entity, long id) {
String newStatTimeString = "";
Prop prop = getProp();
if(id == 1) {
ConfDB.setName(DELETE_USER_AFTER_DAYS, entity.getStatTime() + "");
newStatTimeString = entity.getStatTime() + " " + prop.getText(DAYS_KEY);
} else if(id == 2) {
ConfDB.setName(DELETE_EMAILS_AFTER_DAYS, entity.getStatTime() + "");
newStatTimeString = entity.getStatTime() + " " + prop.getText(DAYS_KEY);
} else if(id == 3) {
ConfDB.setName(DELETE_FORM_DATA_AFTER_DAYS, entity.getStatTime() + "");
newStatTimeString = entity.getStatTime() + " " + prop.getText(DAYS_KEY);
} else if(id == 4) {
ConfDB.setName(DELETE_USER_BASKET_ORDERS_AFTER_YEARS, entity.getStatTime() + "");
newStatTimeString = entity.getStatTime() + " " + prop.getText("components.gdpr.rokov");
}
entity = getDataDeleteEntityById((int) id);
entity.setStatTimeString(newStatTimeString);
return entity;
}
@Override
public boolean processAction(GdprDataDeletingEntity entity, String action) {
//Custom delete (on front end its look like normal delete button)
if(action.equals("customDataDelete")) {
Long id = entity.getId();
GdprDataDeleting gdprdd = GdprDataDeleting.getInstance(request);
if(id == 1) {
gdprdd.deleteUnusedUsers();
} else if(id == 2) {
gdprdd.deleteSendedEmails();
}else if(id == 3) {
gdprdd.deleteOldFormData();
} else if(id == 4) {
gdprdd.deleteOldBasketOrders();
}
}
return true;
}
//Depending on id from 1 to 4 will create entity, fill its column and return it
GdprDataDeletingEntity getDataDeleteEntityById(int id) {
GdprDataDeletingEntity entity = new GdprDataDeletingEntity();
GdprDataDeleting gdprdd = GdprDataDeleting.getInstance(request);
Prop prop = getProp();
if(id == 1) {
entity.setId(Long.valueOf(1));
entity.setType(prop.getText("components.gdpr.type.users"));
entity.setStatTime(Constants.getInt(DELETE_USER_AFTER_DAYS));
entity.setStatTimeString(Constants.getInt(DELETE_USER_AFTER_DAYS) + " " + prop.getText(DAYS_KEY));
entity.setRecordCnt(GdprDataDeleting.getUnusedUsers().size());
entity.setAction(prop.getText("components.gdpr.admin_gdpr_data_deleting.zmazat_uzivatelov_za_dane_obdobie"));
} else if(id == 2) {
entity.setId(Long.valueOf(2));
entity.setType(prop.getText("components.gdpr.type.emails"));
entity.setStatTime(Constants.getInt(DELETE_EMAILS_AFTER_DAYS));
entity.setStatTimeString(Constants.getInt(DELETE_EMAILS_AFTER_DAYS) + " " + prop.getText(DAYS_KEY));
entity.setRecordCnt(gdprdd.getSendedEmailsCount());
entity.setAction(prop.getText("components.gdpr.admin_gdpr_data_deleting.zmazat_vsetky_odoslane_emaily"));
} else if(id == 3) {
entity.setId(Long.valueOf(3));
entity.setType(prop.getText("components.gdpr.type.forms"));
entity.setStatTime(Constants.getInt(DELETE_FORM_DATA_AFTER_DAYS));
entity.setStatTimeString(Constants.getInt(DELETE_FORM_DATA_AFTER_DAYS) + " " + prop.getText(DAYS_KEY));
entity.setRecordCnt(gdprdd.getOldFormDataCount());
entity.setAction(prop.getText("components.gdpr.admin_gdpr_data_deleting.zmazat_data_vo_formularoch_za_dane_obdobie"));
} else if(id == 4) {
entity.setId(Long.valueOf(4));
entity.setType(prop.getText("components.gdpr.type.eshop"));
entity.setStatTime(Constants.getInt(DELETE_USER_BASKET_ORDERS_AFTER_YEARS));
entity.setStatTimeString(Constants.getInt(DELETE_USER_BASKET_ORDERS_AFTER_YEARS) + " " + prop.getText("components.gdpr.rokov"));
entity.setRecordCnt((int)gdprdd.getOldBasketOrdersCount());
entity.setAction(prop.getText("components.gdpr.admin_gdpr_data_deleting.zmazat_objednavky_z_modulu_elektorincky_obchod_za_dane_obdobie"));
}
return entity;
}
}