SUPPORT-8696: Fix

This commit is contained in:
Eduard Tihomirov 2025-03-28 15:48:20 +03:00
parent ff852fd44a
commit 20690cc919
4 changed files with 70 additions and 17 deletions

View file

@ -7,7 +7,6 @@ import org.jooq.DSLContext;
import org.jooq.Record2;
import org.jooq.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Repository;
import ru.micord.ervu.account_applications.db_beans.public_.tables.records.RecruitmentRecord;
import ru.micord.ervu.account_applications.db_beans.public_.tables.records.UserApplicationRoleRecord;
@ -24,14 +23,12 @@ public class ErvuDirectoriesDao {
@Autowired
private DSLContext dsl;
@Cacheable(value = "role-ids", unless = "#result == null")
public List<String> getRoleIds() {
return dsl.select(USER_APPLICATION_ROLE.USER_ROLE_ID)
.from(USER_APPLICATION_ROLE)
.fetch(USER_APPLICATION_ROLE.USER_ROLE_ID);
}
@Cacheable(value = "domain-ids", unless = "#result == null")
public Result<Record2<UUID, String>> getDomainIds() {
return dsl.select(RECRUITMENT.ID, RECRUITMENT.IDM_ID)
.from(RECRUITMENT)

View file

@ -0,0 +1,57 @@
package ru.micord.ervu.account_applications.service;
import java.util.List;
import java.util.UUID;
import org.jooq.Record2;
import org.jooq.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import ru.micord.ervu.account_applications.dao.ErvuDirectoriesDao;
import ru.micord.ervu.account_applications.db_beans.public_.tables.records.RecruitmentRecord;
import ru.micord.ervu.account_applications.db_beans.public_.tables.records.UserApplicationRoleRecord;
/**
* @author Eduard Tihomirov
*/
@Service
public class ErvuDirectoriesDaoService {
@Autowired
private ErvuDirectoriesDao ervuDirectoriesDao;
public List<String> getRoleIds() {
return ervuDirectoriesDao.getRoleIds();
}
@Cacheable(value = "domain-ids", unless = "#result == null")
public Result<Record2<UUID, String>> getDomainIds() {
return ervuDirectoriesDao.getDomainIds();
}
@Cacheable(value = "role-ids", unless = "#result == null")
public UserApplicationRoleRecord getRoleRecord() {
return ervuDirectoriesDao.getRoleRecord();
}
public RecruitmentRecord getRecruitmentRecord() {
return ervuDirectoriesDao.getRecruitmentRecord();
}
public void insertRecruitmentRecords(List<RecruitmentRecord> newRecruitmentRecords) {
ervuDirectoriesDao.insertRecruitmentRecords(newRecruitmentRecords);
}
public void updateRecruitmentRecords(List<RecruitmentRecord> recruitmentRecords) {
ervuDirectoriesDao.updateRecruitmentRecords(recruitmentRecords);
}
public void insertRoleRecords(List<UserApplicationRoleRecord> newRoleRecords) {
ervuDirectoriesDao.insertRoleRecords(newRoleRecords);
}
public void updateRoleRecords(List<UserApplicationRoleRecord> roleRecords ) {
ervuDirectoriesDao.updateRoleRecords(roleRecords);
}
}

View file

@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Caching;
import org.springframework.context.annotation.DependsOn;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
@ -25,7 +26,6 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import ru.micord.ervu.account_applications.dao.ErvuDirectoriesDao;
import ru.micord.ervu.account_applications.db_beans.public_.tables.records.RecruitmentRecord;
import ru.micord.ervu.account_applications.db_beans.public_.tables.records.UserApplicationRoleRecord;
import ru.micord.ervu.account_applications.model.RecruitmentResponse;
@ -37,6 +37,7 @@ import static ru.micord.ervu.account_applications.db_beans.public_.tables.Recrui
* @author Eduard Tihomirov
*/
@Service
@DependsOn({"liquibase", "ervuDirectoriesListner"})
public class ErvuDirectoriesService {
private static final Logger LOGGER = LoggerFactory.getLogger(
MethodHandles.lookup().lookupClass());
@ -49,7 +50,7 @@ public class ErvuDirectoriesService {
@Autowired
private ObjectMapper objectMapper;
@Autowired
private ErvuDirectoriesDao ervuDirectoriesDao;
private ErvuDirectoriesDaoService ervuDirectoriesDaoService;
@Caching(evict = {
@ -75,6 +76,8 @@ public class ErvuDirectoriesService {
}
catch (Exception e) {
LOGGER.error(e.getMessage());
//trow error for clean cache
throw new RuntimeException(e);
}
}
@ -110,11 +113,11 @@ public class ErvuDirectoriesService {
private void upsertRecruitmentData(List<RecruitmentResponse.Data> dataList) {
List<RecruitmentRecord> newRecruitmentRecords = new ArrayList<>();
List<RecruitmentRecord> recruitmentRecords = new ArrayList<>();
Result<Record2<UUID, String>> ids = ervuDirectoriesDao.getDomainIds();
Result<Record2<UUID, String>> ids = ervuDirectoriesDaoService.getDomainIds();
dataList.forEach(data -> {
Timestamp updatedAt = Timestamp.from(Instant.ofEpochSecond(data.getModified()));
Timestamp createdAt = Timestamp.from(Instant.ofEpochSecond(data.getCreateDate()));
RecruitmentRecord recruitmentRecord = ervuDirectoriesDao.getRecruitmentRecord();
RecruitmentRecord recruitmentRecord = ervuDirectoriesDaoService.getRecruitmentRecord();
recruitmentRecord.setIdmId(data.getId());
recruitmentRecord.setVersion(data.getVersion());
recruitmentRecord.setSchema(data.getSchema());
@ -162,14 +165,14 @@ public class ErvuDirectoriesService {
newRecruitmentRecords.add(recruitmentRecord);
}
});
ervuDirectoriesDao.insertRecruitmentRecords(newRecruitmentRecords);
ervuDirectoriesDao.updateRecruitmentRecords(recruitmentRecords);
ervuDirectoriesDaoService.insertRecruitmentRecords(newRecruitmentRecords);
ervuDirectoriesDaoService.updateRecruitmentRecords(recruitmentRecords);
}
private void upsertRoleData(List<RoleResponse.Data> dataList) {
List<UserApplicationRoleRecord> newRoleRecords = new ArrayList<>();
List<UserApplicationRoleRecord> roleRecords = new ArrayList<>();
List<String> ids = ervuDirectoriesDao.getRoleIds();
List<String> ids = ervuDirectoriesDaoService.getRoleIds();
dataList.forEach(data -> {
Timestamp updatedAt = Timestamp.from(Instant.ofEpochSecond(data.getModified()));
Timestamp createdAt = Timestamp.from(Instant.ofEpochSecond(data.getCreateDate()));
@ -177,7 +180,7 @@ public class ErvuDirectoriesService {
if (data.getFinish() != null) {
finishAt = Timestamp.from(Instant.ofEpochSecond(data.getFinish()));
}
UserApplicationRoleRecord roleRecord = ervuDirectoriesDao.getRoleRecord();
UserApplicationRoleRecord roleRecord = ervuDirectoriesDaoService.getRoleRecord();
roleRecord.setUserRoleId(data.getId());
roleRecord.setRoleName(data.getDisplayName());
roleRecord.setCreated(createdAt);
@ -190,7 +193,7 @@ public class ErvuDirectoriesService {
newRoleRecords.add(roleRecord);
}
});
ervuDirectoriesDao.insertRoleRecords(newRoleRecords);
ervuDirectoriesDao.updateRoleRecords(roleRecords);
ervuDirectoriesDaoService.insertRoleRecords(newRoleRecords);
ervuDirectoriesDaoService.updateRoleRecords(roleRecords);
}
}

View file

@ -1,13 +1,10 @@
package ru.micord.ervu.account_applications.service;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.annotation.PostConstruct;
import net.javacrumbs.shedlock.core.SchedulerLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.DependsOn;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
@ -17,7 +14,6 @@ import static org.springframework.scheduling.config.ScheduledTaskRegistrar.CRON_
* @author Eduard Tihomirov
*/
@Service
@DependsOn({"liquibase", "ervuDirectoriesListner"})
public class ErvuDirectoriesUpdateShedulerService {
@Autowired