From e8d2328fdc11c1a7dffaca1607061fcb570e583d Mon Sep 17 00:00:00 2001 From: gsd Date: Sat, 5 Apr 2025 23:22:44 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=B5=D0=BB=D1=8C=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=8C=20=D0=B0=D0=BF=D0=B4=D0=B5=D0=B9=D1=82=203.5.6a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/controllers/admin/BanController.java | 2 +- .../controllers/user/MessagesController.java | 4 +-- .../controllers/user/PublicController.java | 31 ++++++++++------ src/main/java/app/entities/PlayerProfile.java | 2 +- src/main/java/app/entities/SearchFilter.java | 17 ++++++--- .../java/app/entities/db/{ => ban}/Ban.java | 3 +- .../app/entities/db/ban/BanSearchFilter.java | 35 +++++++++++++++++++ .../java/app/repositories/BanRepository.java | 29 +++++++++++++++ .../app/repositories/MessageRepository.java | 2 +- .../java/app/services/ProfileService.java | 2 +- src/main/java/app/services/db/BanService.java | 5 +-- 11 files changed, 106 insertions(+), 26 deletions(-) rename src/main/java/app/entities/db/{ => ban}/Ban.java (98%) create mode 100644 src/main/java/app/entities/db/ban/BanSearchFilter.java create mode 100644 src/main/java/app/repositories/BanRepository.java diff --git a/src/main/java/app/controllers/admin/BanController.java b/src/main/java/app/controllers/admin/BanController.java index 9ad7f84..f17fa09 100644 --- a/src/main/java/app/controllers/admin/BanController.java +++ b/src/main/java/app/controllers/admin/BanController.java @@ -3,7 +3,7 @@ package app.controllers.admin; import app.annotations.enums.AuthMethod; import app.annotations.enums.CollectStages; import app.annotations.interfaces.*; -import app.entities.db.Ban; +import app.entities.db.ban.Ban; import app.services.ProfileService; import app.services.db.BanService; import app.services.db.PermitionService; diff --git a/src/main/java/app/controllers/user/MessagesController.java b/src/main/java/app/controllers/user/MessagesController.java index 20820ad..de31118 100644 --- a/src/main/java/app/controllers/user/MessagesController.java +++ b/src/main/java/app/controllers/user/MessagesController.java @@ -68,8 +68,8 @@ public class MessagesController { Page messages = messageRepository.getMessages( pageable, filter.getAccounts(profileService), - filter.getBegin(), - filter.getEnd(), + filter.getBeginUnixTime(), + filter.getEndUnixTime(), filter.getMessage(), filter.getServerId() ); diff --git a/src/main/java/app/controllers/user/PublicController.java b/src/main/java/app/controllers/user/PublicController.java index 9e73b6c..aa23aa1 100644 --- a/src/main/java/app/controllers/user/PublicController.java +++ b/src/main/java/app/controllers/user/PublicController.java @@ -4,7 +4,10 @@ import app.annotations.enums.AuthMethod; import app.annotations.interfaces.CheckWebAccess; import app.annotations.interfaces.CollectStatistic; import app.annotations.interfaces.WaitAfterNext; -import app.entities.db.Ban; +import app.entities.db.ban.Ban; +import app.entities.db.ban.BanSearchFilter; +import app.repositories.BanRepository; +import app.services.ProfileService; import app.services.db.BanService; import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; @@ -13,10 +16,7 @@ import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -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 org.springframework.web.bind.annotation.*; import java.util.HashMap; @@ -29,6 +29,12 @@ public class PublicController { BanService banService; + @Autowired + private BanRepository banRepository; + + @Autowired + private ProfileService profileService; + @Autowired public PublicController(BanService banService) { this.banService = banService; @@ -51,16 +57,19 @@ public class PublicController { }}, HttpStatus.OK); } - @GetMapping("/banlist/pages") + @PostMapping("/banlist") @CheckWebAccess(auth_method = AuthMethod.STEAM64) @WaitAfterNext(order = "banlist") @CollectStatistic - public ResponseEntity> getBanListWithFilters(Pageable pageable) { + public ResponseEntity> getBanListWithFilters(Pageable pageable, @RequestBody BanSearchFilter banSearchFilter) { return new ResponseEntity<>( - new PageImpl<>( - banService.getLastBans(pageable.getPageSize(), pageable.getOffset()), - pageable, - banService.getBansCount()) + banRepository.getBans(pageable, + banSearchFilter.getBan_ids(), + banSearchFilter.getAccounts(profileService), + banSearchFilter.getBeginTimestamp(), + banSearchFilter.getEndTimestamp(), + banSearchFilter.getActive(), + banSearchFilter.getAdminIds(profileService)) , HttpStatus.OK); } } diff --git a/src/main/java/app/entities/PlayerProfile.java b/src/main/java/app/entities/PlayerProfile.java index 77ee045..dd53b2d 100644 --- a/src/main/java/app/entities/PlayerProfile.java +++ b/src/main/java/app/entities/PlayerProfile.java @@ -1,6 +1,6 @@ package app.entities; -import app.entities.db.Ban; +import app.entities.db.ban.Ban; import app.entities.db.DonateStat; import app.entities.db.Permition; import app.entities.other.SteamID; diff --git a/src/main/java/app/entities/SearchFilter.java b/src/main/java/app/entities/SearchFilter.java index d2bb65f..dc2e72a 100644 --- a/src/main/java/app/entities/SearchFilter.java +++ b/src/main/java/app/entities/SearchFilter.java @@ -2,6 +2,7 @@ package app.entities; import app.services.ProfileService; +import java.sql.Timestamp; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.List; @@ -25,12 +26,20 @@ public abstract class SearchFilter { return filtered.isEmpty() ? null : filtered; } - public Long getBegin() { - return begin == null ? null : begin.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond(); + public Long getBeginUnixTime() { + return begin == null ? null : Timestamp.valueOf(begin).getTime()/1000; } - public Long getEnd() { - return end == null ? null : end.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond(); + public Long getEndUnixTime() { + return end == null ? null : Timestamp.valueOf(end).getTime()/1000; + } + + public Timestamp getBeginTimestamp() { + return begin == null ? null : Timestamp.valueOf(begin); + } + + public Timestamp getEndTimestamp() { + return end == null ? null : Timestamp.valueOf(end); } public String getServerId() { diff --git a/src/main/java/app/entities/db/Ban.java b/src/main/java/app/entities/db/ban/Ban.java similarity index 98% rename from src/main/java/app/entities/db/Ban.java rename to src/main/java/app/entities/db/ban/Ban.java index 0f485bb..fe6d303 100644 --- a/src/main/java/app/entities/db/Ban.java +++ b/src/main/java/app/entities/db/ban/Ban.java @@ -1,5 +1,6 @@ -package app.entities.db; +package app.entities.db.ban; +import app.entities.db.AdminInfo; import app.entities.other.SteamID; import app.services.db.PermitionService; import app.utils.CryptedCookie; diff --git a/src/main/java/app/entities/db/ban/BanSearchFilter.java b/src/main/java/app/entities/db/ban/BanSearchFilter.java new file mode 100644 index 0000000..f3ac78f --- /dev/null +++ b/src/main/java/app/entities/db/ban/BanSearchFilter.java @@ -0,0 +1,35 @@ +package app.entities.db.ban; + +import app.entities.SearchFilter; +import app.services.ProfileService; + +import java.util.List; +import java.util.Objects; + +public class BanSearchFilter extends SearchFilter { + private List ban_ids; + private Boolean active; + private List admin_ids; + + public BanSearchFilter() { + } + + public List getBan_ids() { + return ban_ids == null || ban_ids.isEmpty() ? null : ban_ids; + } + + public Boolean getActive() { + return active; + } + + public List getAdminIds(ProfileService profileService) { + if (admin_ids == null || admin_ids.isEmpty()) return null; + + List filtered = admin_ids.stream() + .map(profileService::GetSteamIDFromAnyData) + .filter(Objects::nonNull) + .map(sId -> sId.steam3) + .toList(); + return filtered.isEmpty() ? null : filtered; + } +} diff --git a/src/main/java/app/repositories/BanRepository.java b/src/main/java/app/repositories/BanRepository.java new file mode 100644 index 0000000..082d504 --- /dev/null +++ b/src/main/java/app/repositories/BanRepository.java @@ -0,0 +1,29 @@ +package app.repositories; + +import app.entities.db.ban.Ban; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.repository.query.Param; + +import java.sql.Timestamp; +import java.util.List; + +public interface BanRepository extends PagingAndSortingRepository { + + @Query(value = "select b from Ban b where " + + "(:ban_ids is null or b.id in :ban_ids) and " + + "(:account_ids is null or b.account_id in :accounts_ids) and " + + "(:begin_date is null or b.timestamp >= :begin_date) and " + + "(:end_date is null or :end_date <= b.timestamp) and " + + "(:active is null or b.active = :active) and " + + "(:admin_ids is null or b.unbanned_by_id in :admin_ids)") + Page getBans(Pageable pageable, + @Param(value = "ban_ids")List ban_ids, + @Param(value = "account_ids") List account_ids, + @Param(value = "begin_date") Timestamp begin_date, + @Param(value = "end_date") Timestamp end_date, + @Param(value = "active") Boolean active, + @Param(value = "admin_ids") List admin_ids); +} diff --git a/src/main/java/app/repositories/MessageRepository.java b/src/main/java/app/repositories/MessageRepository.java index 4a9549b..d49a6a6 100644 --- a/src/main/java/app/repositories/MessageRepository.java +++ b/src/main/java/app/repositories/MessageRepository.java @@ -13,7 +13,7 @@ public interface MessageRepository extends PagingAndSortingRepository= m.utime) and " + + "(:begin_date is null or m.utime >= :begin_date) and " + "(:end_date is null or :end_date <= m.utime) and " + "(:message_contain is null or m.message like :message_contain) and " + "(:server_id is null or m.server_id like :server_id) order by m.id desc ") diff --git a/src/main/java/app/services/ProfileService.java b/src/main/java/app/services/ProfileService.java index bd19126..324d1db 100644 --- a/src/main/java/app/services/ProfileService.java +++ b/src/main/java/app/services/ProfileService.java @@ -1,7 +1,7 @@ package app.services; import app.entities.PlayerProfile; -import app.entities.db.Ban; +import app.entities.db.ban.Ban; import app.entities.Killfeed; import app.entities.other.SteamID; import app.entities.report.ReportCount; diff --git a/src/main/java/app/services/db/BanService.java b/src/main/java/app/services/db/BanService.java index de17b64..6144f3e 100644 --- a/src/main/java/app/services/db/BanService.java +++ b/src/main/java/app/services/db/BanService.java @@ -1,18 +1,15 @@ package app.services.db; import app.entities.PlayerProfile; -import app.entities.db.Ban; +import app.entities.db.ban.Ban; import app.entities.other.SteamID; import app.services.ServerService; import app.utils.CryptedCookie; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; -import java.sql.ResultSet; -import java.sql.SQLException; import java.util.List; @Service