package net.gepafin.tendermanagement.dao; import jakarta.servlet.http.HttpServletRequest; import net.gepafin.tendermanagement.config.Translator; import net.gepafin.tendermanagement.constants.GepafinConstant; import net.gepafin.tendermanagement.entities.LoginAttemptEntity; import net.gepafin.tendermanagement.entities.UserEntity; import net.gepafin.tendermanagement.enums.VersionActionTypeEnum; import net.gepafin.tendermanagement.model.request.VersionHistoryRequest; import net.gepafin.tendermanagement.model.response.LoginAttemptPageableResponseBean; import net.gepafin.tendermanagement.repositories.LoginAttemptRepository; import net.gepafin.tendermanagement.util.DateTimeUtil; import net.gepafin.tendermanagement.util.LoggingUtil; import net.gepafin.tendermanagement.util.Utils; import net.gepafin.tendermanagement.web.rest.api.errors.Status; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @Component public class LoginAttemptDao { @Autowired LoginAttemptRepository loginAttemptRepository; @Autowired private LoggingUtil loggingUtil; @Autowired private HttpServletRequest request; public LoginAttemptEntity createLoginAttempt(LoginAttemptEntity loginAttemptEntity) { VersionActionTypeEnum actionType; loginAttemptEntity.setAttemptDate(DateTimeUtil.DateServerToUTC(LocalDateTime.now())); loginAttemptEntity = loginAttemptRepository.save(loginAttemptEntity); /** This code is responsible for adding a version history log for "Create Login Attempt" operation. **/ loggingUtil.addVersionHistoryWithoutToken( VersionHistoryRequest.builder().actionType(VersionActionTypeEnum.INSERT).request(request).oldData(null).newData(loginAttemptEntity).build()); return loginAttemptEntity; } public LoginAttemptPageableResponseBean> getLoginAttemptsList(UserEntity userEntity, Integer pageNo, Integer pageLimit) { if (pageLimit == null || pageLimit <= 0) { pageLimit = GepafinConstant.DEFAULT_PAGE_LIMIT; } if (pageNo == null || pageNo <= 0) { pageNo = GepafinConstant.DEFAULT_PAGE; } Page page = loginAttemptRepository.findByHubId(userEntity.getHub().getId(), PageRequest.of(pageNo - 1, pageLimit, Sort.by(GepafinConstant.ATTEMPT_DATE).descending())); List list = new ArrayList<>(); for (LoginAttemptEntity loginAttemptEntity : page.getContent()) { list.add(loginAttemptEntity); } LoginAttemptPageableResponseBean> pageableResponseBean = new LoginAttemptPageableResponseBean<>(); pageableResponseBean.setBody(list); pageableResponseBean.setCurrentPage(page.getNumber() + 1); pageableResponseBean.setTotalPages(page.getTotalPages()); pageableResponseBean.setTotalRecords(page.getTotalElements()); pageableResponseBean.setPageSize(page.getSize()); pageableResponseBean.setStatus(Status.SUCCESS); pageableResponseBean.setMessage(Translator.toLocale(GepafinConstant.GET_LOGIN_ATTEMPT_MSG)); return pageableResponseBean; } }