fix: merge
This commit is contained in:
@ -115,4 +115,15 @@ public class AdminApi {
|
||||
public Iterable<User> validateEntrepreneurAcc() {
|
||||
return this.adminApiService.getPendingUsers();
|
||||
}
|
||||
|
||||
@PostMapping("/admin/create-account")
|
||||
public void createAccount(@AuthenticationPrincipal Jwt principal) {
|
||||
String userSurname = principal.getClaimAsString("userSurname");
|
||||
String username = principal.getClaimAsString("preferred_username");
|
||||
String primaryMail = principal.getClaimAsString("email");
|
||||
String secondaryMail = principal.getClaimAsString("secondaryMail");
|
||||
String phoneNumber = principal.getClaimAsString("phoneNumber");
|
||||
this.adminApiService.createAccount(
|
||||
userSurname, username, primaryMail, secondaryMail, phoneNumber);
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.security.core.annotation.AuthenticationPrincipal;
|
||||
import org.springframework.security.oauth2.jwt.Jwt;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
@ -42,6 +43,19 @@ public class EntrepreneurApi {
|
||||
sectionCellId, content, principal.getClaimAsString("email"));
|
||||
}
|
||||
|
||||
/**
|
||||
* Endpoint used to update a LC section.
|
||||
*
|
||||
* @return status code
|
||||
*/
|
||||
@GetMapping("/entrepreneur/projects")
|
||||
public Iterable<Project> getEntrepreneurProjectId(
|
||||
@PathVariable Long sectionCellId,
|
||||
@RequestBody String content,
|
||||
@AuthenticationPrincipal Jwt principal) {
|
||||
return entrepreneurApiService.getProjectIdViaClaim(principal.getClaimAsString("email"));
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: checkReturn Type
|
||||
*
|
||||
|
@ -207,6 +207,17 @@ public class AdminApiService {
|
||||
return this.userService.getPendingAccounts();
|
||||
}
|
||||
|
||||
public void createAccount(
|
||||
String username,
|
||||
String userSurname,
|
||||
String primaryMail,
|
||||
String secondaryMail,
|
||||
String phoneNumber) {
|
||||
Administrator a =
|
||||
new Administrator(username, userSurname, primaryMail, secondaryMail, phoneNumber);
|
||||
this.administratorService.addAdministrator(a);
|
||||
}
|
||||
|
||||
public Iterable<Administrator> getAllAdmins() {
|
||||
return this.administratorService.allAdministrators();
|
||||
}
|
||||
|
@ -15,6 +15,8 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.server.ResponseStatusException;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class EntrepreneurApiService {
|
||||
@ -220,6 +222,15 @@ public class EntrepreneurApiService {
|
||||
throw new ResponseStatusException(HttpStatus.CONFLICT, "User already exists in the system");
|
||||
}
|
||||
|
||||
public Iterable<Project> getProjectIdViaClaim(String email) {
|
||||
Long UserId = this.userService.getUserByEmail(email).getIdUser();
|
||||
Entrepreneur entrepreneur = this.entrepreneurService.getEntrepreneurById(UserId);
|
||||
List<Project> Project_List = new ArrayList<>();
|
||||
|
||||
Project_List.add(entrepreneur.getProjectParticipation());
|
||||
return Project_List;
|
||||
}
|
||||
|
||||
public Iterable<Entrepreneur> getAllEntrepreneurs() {
|
||||
return entrepreneurService.getAllEntrepreneurs();
|
||||
}
|
||||
|
@ -25,8 +25,9 @@ import java.nio.file.StandardCopyOption;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.Map;
|
||||
|
||||
@Service
|
||||
public class SharedApiService {
|
||||
@ -79,7 +80,7 @@ public class SharedApiService {
|
||||
LocalDateTime dateTime = LocalDateTime.parse(date, formatter);
|
||||
|
||||
Project project = this.projectService.getProjectById(projectId);
|
||||
return this.sectionCellService.getSectionCellsByProjectAndSectionIdBeforeDate(
|
||||
return this.sectionCellService.getLatestSectionCellsByIdReferenceBeforeDate(
|
||||
project, sectionId, dateTime);
|
||||
}
|
||||
|
||||
@ -95,31 +96,36 @@ public class SharedApiService {
|
||||
}
|
||||
|
||||
Project project = this.projectService.getProjectById(projectId);
|
||||
List<SectionCell> allSectionCells = new ArrayList<SectionCell>();
|
||||
project.getListSectionCell()
|
||||
|
||||
Map<Long, SectionCell> latestSectionCellsMap =
|
||||
new HashMap<>(); // List for the intermediate result
|
||||
|
||||
// Iterate through all SectionCells associated with the project
|
||||
// This loop iterates over project.getListSectionCell() but does NOT modify it which causes
|
||||
// ConcurrentModificationException.
|
||||
// Modifications are done only on the latestSectionCellsMap (which is safe).
|
||||
project.getListSectionCell() // <-- Iterating over the original list (read-only)
|
||||
.forEach(
|
||||
projectCell -> {
|
||||
AtomicBoolean sameReferenceId =
|
||||
new AtomicBoolean(false); // side effect lambdas
|
||||
allSectionCells.forEach(
|
||||
selectedCell -> {
|
||||
if (projectCell
|
||||
.getIdReference()
|
||||
.equals(selectedCell.getIdReference())) {
|
||||
sameReferenceId.set(true);
|
||||
if (projectCell
|
||||
.getModificationDate()
|
||||
.isAfter(selectedCell.getModificationDate())) {
|
||||
allSectionCells.remove(selectedCell);
|
||||
allSectionCells.add(projectCell);
|
||||
}
|
||||
}
|
||||
});
|
||||
if (!sameReferenceId.get()) {
|
||||
allSectionCells.add(projectCell);
|
||||
Long idReference = projectCell.getIdReference();
|
||||
// Check if we have already seen a SectionCell with this idReference in
|
||||
// our map
|
||||
if (latestSectionCellsMap.containsKey(idReference)) {
|
||||
SectionCell existingCell = latestSectionCellsMap.get(idReference);
|
||||
// Compare modification dates. If the current cell is newer, replace
|
||||
// the one in the map.
|
||||
if (projectCell
|
||||
.getModificationDate()
|
||||
.isAfter(existingCell.getModificationDate())) {
|
||||
latestSectionCellsMap.put(idReference, projectCell);
|
||||
}
|
||||
} else {
|
||||
// If this is the first time we encounter this idReference, add the
|
||||
// cell to the map.
|
||||
latestSectionCellsMap.put(idReference, projectCell);
|
||||
}
|
||||
});
|
||||
return allSectionCells;
|
||||
return new ArrayList<>(latestSectionCellsMap.values());
|
||||
}
|
||||
|
||||
// TODO: test
|
||||
|
@ -14,7 +14,9 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.server.ResponseStatusException;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
@ -132,4 +134,37 @@ public class SectionCellService {
|
||||
return sectionCellRepository.findByProjectSectionCellAndSectionIdAndModificationDateBefore(
|
||||
project, sectionId, date);
|
||||
}
|
||||
|
||||
public Iterable<SectionCell> getLatestSectionCellsByIdReferenceBeforeDate(
|
||||
Project project, long sectionId, LocalDateTime date) {
|
||||
|
||||
// 1. Fetch ALL relevant SectionCells modified before the date
|
||||
Iterable<SectionCell> allMatchingCells =
|
||||
sectionCellRepository.findByProjectSectionCellAndSectionIdAndModificationDateBefore(
|
||||
project, sectionId, date);
|
||||
|
||||
// 2. Find the latest for each idReference
|
||||
Map<Long, SectionCell> latestCellsByIdReference = new HashMap<>();
|
||||
|
||||
for (SectionCell cell : allMatchingCells) {
|
||||
Long idReference = cell.getIdReference();
|
||||
|
||||
// Check if we've seen this idReference before
|
||||
if (latestCellsByIdReference.containsKey(idReference)) {
|
||||
// If yes, compare modification dates
|
||||
SectionCell existingLatest = latestCellsByIdReference.get(idReference);
|
||||
|
||||
// If the current cell is more recent, update the map
|
||||
if (cell.getModificationDate().isAfter(existingLatest.getModificationDate())) {
|
||||
latestCellsByIdReference.put(idReference, cell);
|
||||
}
|
||||
} else {
|
||||
// If this is the first time we see this idReference, add it to the map
|
||||
latestCellsByIdReference.put(idReference, cell);
|
||||
}
|
||||
}
|
||||
|
||||
// 3. Return the collection of the latest cells (the values from the map)
|
||||
return latestCellsByIdReference.values();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user