SUPPORT-9104: remove redundant code and classes

This commit is contained in:
gulnaz 2025-04-11 14:14:49 +03:00
parent d957d33cc7
commit e3a7027350
24 changed files with 6 additions and 665 deletions

View file

@ -1,197 +1,29 @@
package ru.micord.ervu.account_applications.controller;
import java.net.URI;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import javax.validation.Valid;
import com.google.gson.Gson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.HttpServerErrorException;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.util.UriComponentsBuilder;
import ru.micord.ervu.account_applications.dto.Account;
import ru.micord.ervu.account_applications.dto.ProcessRequest;
import ru.micord.ervu.account_applications.dto.create.CreateProcessRequest;
import ru.micord.ervu.account_applications.dto.create.CreateUserDto;
import ru.micord.ervu.account_applications.dto.create.Credential;
import ru.micord.ervu.account_applications.dto.create.CreateData;
import ru.micord.ervu.account_applications.dto.Person;
import ru.micord.ervu.account_applications.dto.ProcessResponse;
import ru.micord.ervu.account_applications.dto.Role;
import ru.micord.ervu.account_applications.dto.Roles;
import ru.micord.ervu.account_applications.dto.activation.ChangeActivationData;
import ru.micord.ervu.account_applications.dto.activation.ChangeActivationDto;
import ru.micord.ervu.account_applications.dto.activation.ChangeActivationProcessRequest;
import ru.micord.ervu.account_applications.dto.edit.EditAccountDto;
import ru.micord.ervu.account_applications.dto.edit.EditData;
import ru.micord.ervu.account_applications.dto.edit.EditRolesDto;
import ru.micord.ervu.account_applications.dto.edit.EditPersonDto;
import ru.micord.ervu.account_applications.dto.edit.EditPersonProcessRequest;
import ru.micord.ervu.account_applications.dto.password.ResetPasswordData;
import ru.micord.ervu.account_applications.dto.password.ResetPasswordDto;
import ru.micord.ervu.account_applications.dto.password.ResetPasswordProcessRequest;
import ru.micord.ervu.account_applications.dto.password.UserIdInfo;
import ru.micord.ervu.account_applications.security.context.SecurityContext;
import ru.micord.ervu.account_applications.service.RoleServiceImpl;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import ru.micord.ervu.account_applications.service.UserApplicationListService;
import static ru.micord.ervu.account_applications.enums.ProcessKey.*;
/**
* @author gulnaz
*/
@RestController
@RequestMapping("/user")
public class AdminController {
private static final Logger LOGGER = LoggerFactory.getLogger(AdminController.class);
private static final String PROCESS_START_PATH = "/service/wf/service/start";
private final RestTemplate restTemplate;
private final SecurityContext securityContext;
private final UserApplicationListService applicationListService;
private final RoleServiceImpl roleService;
@Value("${ervu.url}")
private String ervuUrl;
public AdminController(RestTemplate restTemplate, SecurityContext securityContext,
UserApplicationListService applicationListService, RoleServiceImpl roleService) {
this.restTemplate = restTemplate;
this.securityContext = securityContext;
public AdminController(UserApplicationListService applicationListService) {
this.applicationListService = applicationListService;
this.roleService = roleService;
}
@PostMapping(value = "", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> create(@RequestBody @Valid CreateUserDto dto) {
Credential credential = new Credential(dto.username());
Account account = new Account(dto.userDomain(), dto.position());
Person person = new Person(dto.surname(), dto.firstname(), dto.middlename(), dto.sex(),
dto.email(), dto.birthdate(), dto.snils(), dto.ipAddresses());
List<Role> rolesList = dto.roles()
.stream()
.map(Role::new)
.collect(Collectors.toList());
Roles roles = new Roles(rolesList);
CreateProcessRequest request = new CreateProcessRequest(
CREATE.getValue(), getUserId(), new CreateData(credential, account, person, roles));
return doRequestAndSaveTraceId(request, dto.appNumber());
}
@PostMapping(value = "/person", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> editPerson(@RequestBody @Valid EditPersonDto dto) {
Person person = new Person(dto.id(), dto.surname(), dto.firstname(), dto.middlename(), dto.sex(),
dto.email(), dto.birthdate(), dto.snils(), dto.ipAddresses());
EditPersonProcessRequest request = new EditPersonProcessRequest(EDIT_PERSON.getValue(),
getUserId(), new EditData(dto.accountId(), person));
return doRequestAndSaveTraceId(request, dto.appNumber());
}
@PostMapping(value = "/account", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> editAccount(@RequestBody @Valid EditAccountDto dto) {
Account account = new Account(dto.accountId(), dto.userDomain(), dto.position());
EditPersonProcessRequest request = new EditPersonProcessRequest(EDIT_ACCOUNT.getValue(),
getUserId(), new EditData(account));
return doRequestAndSaveTraceId(request, dto.appNumber());
}
@PostMapping(value = "/roles", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> editRoles(@RequestBody @Valid EditRolesDto dto) {
List<Role> rolesList = dto.roles()
.stream()
.map(Role::new)
.collect(Collectors.toList());
List<String> removedRoleIds = roleService.fetchRemovedRoleIds(dto.accountId(), dto.roles());
Account account = new Account(dto.accountId(), removedRoleIds, rolesList);
EditPersonProcessRequest request = new EditPersonProcessRequest(EDIT_ROLES.getValue(),
getUserId(), new EditData(account));
return doRequestAndSaveTraceId(request, dto.appNumber());
}
@PostMapping(value = "/deactivation", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> deactivate(@RequestBody @Valid ChangeActivationDto dto) {
ChangeActivationProcessRequest request = new ChangeActivationProcessRequest(DEACTIVATE.getValue(),
getUserId(), new ChangeActivationData(Collections.singletonList(dto.accountId())));
return doRequestAndSaveTraceId(request, dto.appNumber());
}
@PostMapping(value = "/activation", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> activate(@RequestBody @Valid ChangeActivationDto dto) {
ChangeActivationProcessRequest request = new ChangeActivationProcessRequest(ACTIVATE.getValue(),
getUserId(), new ChangeActivationData(Collections.singletonList(dto.accountId())));
return doRequestAndSaveTraceId(request, dto.appNumber());
}
//TODO SUPPORT-9109 move to front
@GetMapping("/exists")
public ResponseEntity<Boolean> userExists(@RequestParam(name = "login") String login) {
boolean result = applicationListService.userExists(login);
return ResponseEntity.ok(result);
}
@PostMapping(value = "/password/reset")
public ResponseEntity<?> resetPassword(@RequestBody @Valid ResetPasswordDto dto) {
UserIdInfo userIdInfo = new UserIdInfo(dto.accountId());
ResetPasswordData resetPasswordData = new ResetPasswordData(userIdInfo);
ResetPasswordProcessRequest request = new ResetPasswordProcessRequest(
RESET_PASSWORD.getValue(),
getUserId(), resetPasswordData
);
return doRequestAndSaveTraceId(request, dto.appNumber());
}
private <R> ResponseEntity<?> doRequestAndSaveTraceId(ProcessRequest<R> request, long appNumber) {
LOGGER.info("making request for application {} with {}", appNumber, new Gson().toJson(request));
ResponseEntity<?> responseEntity = doRequest(request);
if (responseEntity.getStatusCode().equals(HttpStatus.OK)) {
String traceId = ((ProcessResponse) Objects.requireNonNull(responseEntity.getBody())).traceId();
LOGGER.info("saving traceId {}", traceId);
applicationListService.saveTraceId(traceId, appNumber);
}
return responseEntity;
}
private <R> ResponseEntity<?> doRequest(ProcessRequest<R> request) {
HttpEntity<ProcessRequest<R>> entity = setEntity(getToken(), request);
URI uri = UriComponentsBuilder.fromHttpUrl(ervuUrl)
.path(PROCESS_START_PATH)
.build()
.toUri();
try {
return restTemplate.postForEntity(uri, entity, ProcessResponse.class);
}
catch (HttpClientErrorException | HttpServerErrorException e) {
return new ResponseEntity<>(e.getMessage(), e.getStatusCode());
}
}
private <R> HttpEntity<R> setEntity(String token, R body) {
HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth(token);
headers.setContentType(MediaType.APPLICATION_JSON);
return new HttpEntity<>(body, headers);
}
private String getUserId() {
return securityContext.getUserId();
}
private String getToken() {
return securityContext.getToken();
}
}

View file

@ -1,143 +0,0 @@
package ru.micord.ervu.account_applications.dto;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
/**
* @author Emir Suleimanov
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class Account {
private final String schema = "Account";
@JsonProperty("user-domain")
private String userDomain;
private String position;
private boolean enabled = true;
private boolean esiaAccount;
private String start;
private String finish;
private String id;
private String accountId;
private List<String> removeRoles;
private List<Role> rolesList;
public Account(String userDomain, String position) {
this.userDomain = userDomain;
this.position = position;
}
public Account(String id, String userDomain, String position) {
this(userDomain, position);
this.id = id;
}
public Account(String accountId, List<String> removeRoles, List<Role> rolesList) {
this.accountId = accountId;
this.removeRoles = removeRoles;
this.rolesList = rolesList;
}
public String getSchema() {
return schema;
}
public String getUserDomain() {
return userDomain;
}
public void setUserDomain(String userDomain) {
this.userDomain = userDomain;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public boolean isEsiaAccount() {
return esiaAccount;
}
public void setEsiaAccount(boolean esiaAccount) {
this.esiaAccount = esiaAccount;
}
public String getStart() {
return start;
}
public void setStart(String start) {
this.start = start;
}
public String getFinish() {
return finish;
}
public void setFinish(String finish) {
this.finish = finish;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAccountId() {
return accountId;
}
public void setAccountId(String accountId) {
this.accountId = accountId;
}
public List<String> getRemoveRoles() {
return removeRoles;
}
public void setRemoveRoles(List<String> removeRoles) {
this.removeRoles = removeRoles;
}
public List<Role> getRolesList() {
return rolesList;
}
public void setRolesList(List<Role> rolesList) {
this.rolesList = rolesList;
}
@Override
public String toString() {
return "Account{" +
"schema='" + schema + '\'' +
", userDomain='" + userDomain + '\'' +
", position='" + position + '\'' +
", enabled=" + enabled +
", esiaAccount=" + esiaAccount +
", start='" + start + '\'' +
", finish='" + finish + '\'' +
", id='" + id + '\'' +
", accountId='" + accountId + '\'' +
", removeRoles=" + removeRoles +
", rolesList=" + rolesList +
'}';
}
}

View file

@ -1,21 +0,0 @@
package ru.micord.ervu.account_applications.dto;
import java.util.List;
/**
* @author gulnaz
*/
public record Person(String id, String surname, String firstname, String middlename, String sex,
String email, String birthdate, String snils, List<String> ipAddresses,
boolean secondFactorEnabled) {
public Person(String surname, String firstname, String middlename, String sex, String email,
String birthdate, String snils, List<String> ipAddresses) {
this("", surname, firstname, middlename, sex, email, birthdate, snils, ipAddresses);
}
public Person(String id, String surname, String firstname, String middlename, String sex,
String email, String birthdate, String snils, List<String> ipAddresses) {
this(id, surname, firstname, middlename, sex, email, birthdate, snils, ipAddresses, false);
}
}

View file

@ -1,38 +0,0 @@
package ru.micord.ervu.account_applications.dto;
/**
* @author gulnaz
*/
public abstract class ProcessRequest<T> {
protected final String processKey;
protected final String userId;
protected final T data;
public ProcessRequest(String processKey, String userId, T data) {
this.processKey = processKey;
this.userId = userId;
this.data = data;
}
public String getProcessKey() {
return processKey;
}
public String getUserId() {
return userId;
}
public T getData() {
return data;
}
@Override
public String toString() {
return "ProcessRequest{" +
"processKey='" + processKey + '\'' +
", userId='" + userId + '\'' +
", data=" + data +
'}';
}
}

View file

@ -1,7 +0,0 @@
package ru.micord.ervu.account_applications.dto;
/**
* @author gulnaz
*/
public record ProcessResponse(String code, String msg, String traceId) {
}

View file

@ -1,10 +0,0 @@
package ru.micord.ervu.account_applications.dto;
/**
* @author gulnaz
*/
public record Role(String id, String finish) {
public Role(String id) {
this(id, "");
}
}

View file

@ -1,9 +0,0 @@
package ru.micord.ervu.account_applications.dto;
import java.util.List;
/**
* @author gulnaz
*/
public record Roles(List<Role> rolesList) {
}

View file

@ -1,9 +0,0 @@
package ru.micord.ervu.account_applications.dto.activation;
import java.util.List;
/**
* @author gulnaz
*/
public record ChangeActivationData(List<String> accountIdList) {
}

View file

@ -1,12 +0,0 @@
package ru.micord.ervu.account_applications.dto.activation;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
/**
* @author gulnaz
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public record ChangeActivationDto(@NotNull long appNumber, @NotNull String accountId) {
}

View file

@ -1,13 +0,0 @@
package ru.micord.ervu.account_applications.dto.activation;
import ru.micord.ervu.account_applications.dto.ProcessRequest;
/**
* @author gulnaz
*/
public class ChangeActivationProcessRequest extends ProcessRequest<ChangeActivationData> {
public ChangeActivationProcessRequest(String processKey, String userId, ChangeActivationData data) {
super(processKey, userId, data);
}
}

View file

@ -1,11 +0,0 @@
package ru.micord.ervu.account_applications.dto.create;
import ru.micord.ervu.account_applications.dto.Account;
import ru.micord.ervu.account_applications.dto.Person;
import ru.micord.ervu.account_applications.dto.Roles;
/**
* @author gulnaz
*/
public record CreateData(Credential credential, Account account, Person person, Roles roles) {
}

View file

@ -1,13 +0,0 @@
package ru.micord.ervu.account_applications.dto.create;
import ru.micord.ervu.account_applications.dto.ProcessRequest;
/**
* @author gulnaz
*/
public class CreateProcessRequest extends ProcessRequest<CreateData> {
public CreateProcessRequest(String processKey, String userId, CreateData data) {
super(processKey, userId, data);
}
}

View file

@ -1,20 +0,0 @@
package ru.micord.ervu.account_applications.dto.create;
import java.util.List;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
/**
* @author gulnaz
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public record CreateUserDto(@NotNull long appNumber, @NotNull String firstname,
@NotNull String surname, String middlename,
String birthdate, String sex, String position, String email,
@NotNull String username, @NotNull String snils,
@NotNull @NotEmpty String userDomain,
String start, String finish,
List<String> roles, List<String> ipAddresses) {
}

View file

@ -1,7 +0,0 @@
package ru.micord.ervu.account_applications.dto.create;
/**
* @author gulnaz
*/
public record Credential(String userName) {
}

View file

@ -1,14 +0,0 @@
package ru.micord.ervu.account_applications.dto.edit;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
/**
* @author Emir Suleimanov
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public record EditAccountDto(@NotNull long appNumber, String username, @NotNull String position,
@NotNull @NotEmpty String accountId, @NotNull @NotEmpty String userDomain) {
}

View file

@ -1,57 +0,0 @@
package ru.micord.ervu.account_applications.dto.edit;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import ru.micord.ervu.account_applications.dto.Account;
import ru.micord.ervu.account_applications.dto.Person;
/**
* @author gulnaz
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class EditData {
private String accountId;
private Person personData;
private Account account;
public EditData(String accountId, Person personData) {
this.accountId = accountId;
this.personData = personData;
}
public EditData(Account account) {
this.account = account;
}
public String getAccountId() {
return accountId;
}
public void setAccountId(String accountId) {
this.accountId = accountId;
}
public Person getPersonData() {
return personData;
}
public void setPersonData(Person personData) {
this.personData = personData;
}
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
@Override
public String toString() {
return "EditData{" +
"accountId='" + accountId + '\'' +
", personData=" + personData +
", account=" + account +
'}';
}
}

View file

@ -1,16 +0,0 @@
package ru.micord.ervu.account_applications.dto.edit;
import java.util.List;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
/**
* @author gulnaz
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public record EditPersonDto(@NotNull long appNumber, @NotNull String accountId, @NotNull String id,
@NotNull String firstname, @NotNull String surname, String middlename,
String birthdate, String sex, String position, String email,
@NotNull String snils, List<String> ipAddresses) {
}

View file

@ -1,13 +0,0 @@
package ru.micord.ervu.account_applications.dto.edit;
import ru.micord.ervu.account_applications.dto.ProcessRequest;
/**
* @author gulnaz
*/
public class EditPersonProcessRequest extends ProcessRequest<EditData> {
public EditPersonProcessRequest(String processKey, String userId, EditData data) {
super(processKey, userId, data);
}
}

View file

@ -1,13 +0,0 @@
package ru.micord.ervu.account_applications.dto.edit;
import java.util.Set;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.validation.constraints.NotNull;
/**
* @author Emir Suleimanov
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public record EditRolesDto(@NotNull long appNumber, @NotNull String accountId, Set<String> roles) {
}

View file

@ -1,8 +0,0 @@
package ru.micord.ervu.account_applications.dto.password;
/**
* @author Adel Kalimullin
*/
public record ResetPasswordData(UserIdInfo account) {
}

View file

@ -1,13 +0,0 @@
package ru.micord.ervu.account_applications.dto.password;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
/**
* @author Adel Kalimullin
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public record ResetPasswordDto(@NotNull long appNumber, @NotNull @NotEmpty String accountId) {
}

View file

@ -1,13 +0,0 @@
package ru.micord.ervu.account_applications.dto.password;
import ru.micord.ervu.account_applications.dto.ProcessRequest;
/**
* @author Adel Kalimullin
*/
public class ResetPasswordProcessRequest extends ProcessRequest<ResetPasswordData> {
public ResetPasswordProcessRequest(String processKey, String userId, ResetPasswordData data) {
super(processKey, userId, data);
}
}

View file

@ -1,7 +0,0 @@
package ru.micord.ervu.account_applications.dto.password;
/**
* @author Adel Kalimullin
*/
public record UserIdInfo(String id){
}

View file

@ -1,24 +0,0 @@
package ru.micord.ervu.account_applications.enums;
/**
* @author gulnaz
*/
public enum ProcessKey {
CREATE("milBaseCreateAccountProcess"),
EDIT_PERSON("milBaseEditAccountPersonIDMProcess"),
EDIT_ACCOUNT("milBaseEditAccountIDMProcess"),
EDIT_ROLES("milBaseEditAccountRolesIDMSubProcess"),
DEACTIVATE("milBaseMassDeActivateAccountIDMProcess"),
ACTIVATE("milBaseMassActivateAccountIDMProcess"),
RESET_PASSWORD("milBaseResetPasswordProcess");
private final String value;
ProcessKey(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}