feat: auto categories full competition
This commit is contained in:
@@ -29,6 +29,7 @@ import lombok.Data;
|
||||
import org.hibernate.reactive.mutiny.Mutiny;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@WithSession
|
||||
@@ -130,9 +131,39 @@ public class RCategorie {
|
||||
.map(CategoryModel::getId);
|
||||
}
|
||||
|
||||
@WSReceiver(code = "createOrReplaceCategory", permission = PermLevel.ADMIN)
|
||||
public Uni<Long> createOrReplaceCategory(WebSocketConnection connection, JustCategorie categorie) {
|
||||
return matchRepository.list("category.compet.uuid = ?1 AND category.name = ?2", connection.pathParam("uuid"),
|
||||
categorie.name)
|
||||
.chain(existing -> {
|
||||
if (existing.isEmpty())
|
||||
return createCategory(connection, categorie);
|
||||
|
||||
Map<Long, List<MatchModel>> matchesByCategory = existing.stream()
|
||||
.filter(m -> m.getCategory() != null)
|
||||
.collect(Collectors.groupingBy(m -> m.getCategory().getId()));
|
||||
|
||||
for (Map.Entry<Long, List<MatchModel>> entry : matchesByCategory.entrySet()) {
|
||||
Long categoryId = entry.getKey();
|
||||
List<MatchModel> matches = entry.getValue();
|
||||
|
||||
if (matches.stream().noneMatch(m -> !m.getScores().isEmpty() || m.isEnd()))
|
||||
return Panache.withTransaction(() -> updateCategory(connection, categorie, categoryId)
|
||||
.call(__ -> treeRepository.delete("category = ?1", categoryId))
|
||||
.call(__ -> matchRepository.delete("category.id = ?1", categoryId)))
|
||||
.replaceWith(categoryId);
|
||||
}
|
||||
return createCategory(connection, categorie);
|
||||
});
|
||||
}
|
||||
|
||||
@WSReceiver(code = "updateCategory", permission = PermLevel.ADMIN)
|
||||
public Uni<Void> updateCategory(WebSocketConnection connection, JustCategorie categorie) {
|
||||
return getById(categorie.id, connection)
|
||||
return updateCategory(connection, categorie, categorie.id);
|
||||
}
|
||||
|
||||
private Uni<Void> updateCategory(WebSocketConnection connection, JustCategorie categorie, Long id) {
|
||||
return getById(id, connection)
|
||||
.call(cat -> {
|
||||
if (categorie.preset() == null) {
|
||||
cat.setPreset(null);
|
||||
|
||||
Reference in New Issue
Block a user