Browse Source

rewrite shits

master
gsd 6 days ago
parent
commit
65b9d393c8
  1. 16
      src/main/java/app/annotations/impl/WebAccessAspect.java
  2. 2
      src/main/java/app/controllers/admin/BanController.java
  3. 26
      src/main/java/app/controllers/user/MessagesController.java
  4. 20
      src/main/java/app/controllers/user/PublicController.java
  5. 2
      src/main/java/app/services/db/BanService.java
  6. 146
      src/main/java/app/services/db/KillfeedService.java
  7. 57
      src/main/java/app/services/db/MessageService.java
  8. 39
      src/main/java/app/updates/OnlineUpdater.java

16
src/main/java/app/annotations/impl/WebAccessAspect.java

@ -34,6 +34,9 @@ public class WebAccessAspect {
private final Logger logger = LoggerFactory.getLogger(WebAccessAspect.class); private final Logger logger = LoggerFactory.getLogger(WebAccessAspect.class);
private boolean enabled = true; private boolean enabled = true;
@Autowired
private HttpServletRequest request;
@Autowired @Autowired
public WebAccessAspect(SaltedCookie saltedCookie) { public WebAccessAspect(SaltedCookie saltedCookie) {
this.saltedCookie = saltedCookie; this.saltedCookie = saltedCookie;
@ -79,11 +82,22 @@ public class WebAccessAspect {
} }
} }
@Before("@annotation(app.annotations.interfaces.CheckWebAccess)")
public void before(JoinPoint joinPoint) {
if (!enabled) return;
AuthMethod auth_method = ((MethodSignature) joinPoint.getSignature()).getMethod().getAnnotation(CheckWebAccess.class).auth_method();
checkWebAccess(auth_method, this.request);
}
@Before("@annotation(app.annotations.interfaces.CheckWebAccess) && args(request,..)") @Before("@annotation(app.annotations.interfaces.CheckWebAccess) && args(request,..)")
public void before(JoinPoint joinPoint, HttpServletRequest request){ public void before(JoinPoint joinPoint, HttpServletRequest request){
if (!enabled) return; if (!enabled) return;
AuthMethod auth_method = ((MethodSignature) joinPoint.getSignature()).getMethod().getAnnotation(CheckWebAccess.class).auth_method(); AuthMethod auth_method = ((MethodSignature) joinPoint.getSignature()).getMethod().getAnnotation(CheckWebAccess.class).auth_method();
checkWebAccess(auth_method, request);
}
private void checkWebAccess(AuthMethod auth_method, HttpServletRequest request) {
logger.info("check web access"); logger.info("check web access");
if(!(request instanceof HttpServletRequest)) { if(!(request instanceof HttpServletRequest)) {
logger.error("Invalid request"); logger.error("Invalid request");

2
src/main/java/app/controllers/admin/BanController.java

@ -87,7 +87,7 @@ public class BanController {
public ResponseEntity banList( public ResponseEntity banList(
HttpServletRequest request, HttpServletRequest request,
@RequestParam(required = false, defaultValue = "10") Integer limit, @RequestParam(required = false, defaultValue = "10") Integer limit,
@RequestParam(required = false, defaultValue = "0") Integer offset @RequestParam(required = false, defaultValue = "0") Long offset
){ ){
return new ResponseEntity(banService.getLastBans(limit, offset), HttpStatus.OK); return new ResponseEntity(banService.getLastBans(limit, offset), HttpStatus.OK);
} }

26
src/main/java/app/controllers/user/MessagesController.java

@ -9,11 +9,17 @@ import app.services.db.MessageService;
import app.utils.SteamIDConverter; import app.utils.SteamIDConverter;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/** /**
* котроллер для пользователя, чтоб смотреть сообщения * котроллер для пользователя, чтоб смотреть сообщения
*/ */
@ -31,19 +37,37 @@ public class MessagesController {
@CheckWebAccess(auth_method = AuthMethod.STEAM64) @CheckWebAccess(auth_method = AuthMethod.STEAM64)
@WaitAfterNext(order = "messages") @WaitAfterNext(order = "messages")
@CollectStatistic @CollectStatistic
@Deprecated
public ResponseEntity getMessages(HttpServletRequest request, public ResponseEntity getMessages(HttpServletRequest request,
@RequestBody(required = false) Payload filter, @RequestBody(required = false) Payload filter,
@RequestParam(required = false) String srv, @RequestParam(required = false) String srv,
@RequestParam(required = false, defaultValue = "0") Integer offset, @RequestParam(required = false, defaultValue = "0") Long offset,
@RequestParam(required = false, defaultValue = "20") Integer limit) { @RequestParam(required = false, defaultValue = "20") Integer limit) {
if (limit > 20) return new ResponseEntity(HttpStatus.NOT_ACCEPTABLE); if (limit > 20) return new ResponseEntity(HttpStatus.NOT_ACCEPTABLE);
return new ResponseEntity(messageService.getAllMessages(srv, filter==null?null:filter.getMessage(), offset, limit), HttpStatus.OK); return new ResponseEntity(messageService.getAllMessages(srv, filter==null?null:filter.getMessage(), offset, limit), HttpStatus.OK);
} }
@PostMapping(value = "/pages", consumes = {MediaType.APPLICATION_JSON_VALUE})
@CheckWebAccess(auth_method = AuthMethod.STEAM64)
@WaitAfterNext(order = "messages")
@CollectStatistic
public ResponseEntity<Page<MessageService.Message>> getMessagesWithFilters(Pageable pageable,
@RequestBody(required = false) Payload filter,
@RequestParam(required = false) String srv) {
if (pageable.getPageSize() > 20) return new ResponseEntity(HttpStatus.NOT_ACCEPTABLE);
Map result = messageService.getAllMessages(srv, filter==null?null:filter.getMessage(), pageable.getOffset(), pageable.getPageSize());
return new ResponseEntity<>(
new PageImpl<MessageService.Message>((List<MessageService.Message>) result.get("result"), pageable, (Long) result.get("count")),
HttpStatus.OK
);
}
@PostMapping(value = "/account", consumes = {MediaType.APPLICATION_JSON_VALUE}) @PostMapping(value = "/account", consumes = {MediaType.APPLICATION_JSON_VALUE})
@CheckWebAccess(auth_method = AuthMethod.STEAM64) @CheckWebAccess(auth_method = AuthMethod.STEAM64)
@WaitAfterNext(order = "messages") @WaitAfterNext(order = "messages")
@CollectStatistic @CollectStatistic
@Deprecated
public ResponseEntity getAccountMessages(HttpServletRequest request, public ResponseEntity getAccountMessages(HttpServletRequest request,
@CookieValue(value = "steam64", defaultValue = "") String mysteam64, @CookieValue(value = "steam64", defaultValue = "") String mysteam64,
@RequestBody(required = false) Payload filter, @RequestBody(required = false) Payload filter,

20
src/main/java/app/controllers/user/PublicController.java

@ -4,9 +4,13 @@ import app.annotations.enums.AuthMethod;
import app.annotations.interfaces.CheckWebAccess; import app.annotations.interfaces.CheckWebAccess;
import app.annotations.interfaces.CollectStatistic; import app.annotations.interfaces.CollectStatistic;
import app.annotations.interfaces.WaitAfterNext; import app.annotations.interfaces.WaitAfterNext;
import app.entities.db.Ban;
import app.services.db.BanService; import app.services.db.BanService;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -34,10 +38,11 @@ public class PublicController {
@CheckWebAccess(auth_method = AuthMethod.STEAM64) @CheckWebAccess(auth_method = AuthMethod.STEAM64)
@WaitAfterNext(order = "banlist") @WaitAfterNext(order = "banlist")
@CollectStatistic @CollectStatistic
@Deprecated
public ResponseEntity<HashMap> getBanList( public ResponseEntity<HashMap> getBanList(
HttpServletRequest request, HttpServletRequest request,
@RequestParam(required = false, defaultValue = "20") Integer limit, @RequestParam(required = false, defaultValue = "20") Integer limit,
@RequestParam(required = false, defaultValue = "0") Integer offset) { @RequestParam(required = false, defaultValue = "0") Long offset) {
if (limit > 20) return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE); if (limit > 20) return new ResponseEntity<>(HttpStatus.NOT_ACCEPTABLE);
return new ResponseEntity<>(new HashMap<>(){{ return new ResponseEntity<>(new HashMap<>(){{
@ -45,4 +50,17 @@ public class PublicController {
put("count", banService.getBansCount()); put("count", banService.getBansCount());
}}, HttpStatus.OK); }}, HttpStatus.OK);
} }
@GetMapping("/banlist/pages")
@CheckWebAccess(auth_method = AuthMethod.STEAM64)
@WaitAfterNext(order = "banlist")
@CollectStatistic
public ResponseEntity<Page<Ban>> getBanListWithFilters(Pageable pageable) {
return new ResponseEntity<>(
new PageImpl<>(
banService.getLastBans(pageable.getPageSize(), pageable.getOffset()),
pageable,
banService.getBansCount())
, HttpStatus.OK);
}
} }

2
src/main/java/app/services/db/BanService.java

@ -64,7 +64,7 @@ public class BanService {
.toList(); .toList();
} }
public List<Ban> getLastBans(Integer limit, Integer offset) { public List<Ban> getLastBans(Integer limit, Long offset) {
return jdbcTemplate.query("SELECT * FROM light_bans WHERE active = ? ORDER BY light_bans.id DESC LIMIT ? OFFSET ?", return jdbcTemplate.query("SELECT * FROM light_bans WHERE active = ? ORDER BY light_bans.id DESC LIMIT ? OFFSET ?",
new Object[]{true, limit, offset}, new Object[]{true, limit, offset},
(rs, n) -> new Ban(rs)) (rs, n) -> new Ban(rs))

146
src/main/java/app/services/db/KillfeedService.java

@ -35,48 +35,94 @@ public class KillfeedService {
} }
public Long getKills(SteamID steamID, String server_id, Long utime) { public Long getKills(SteamID steamID, String server_id, Long utime) {
return jdbcTemplate.query("SELECT COUNT(*) as c FROM user_killfeed WHERE utime > ? AND attacker_id = ? AND attacker_id != victim_id AND server_id like ?", return jdbcTemplate.query("SELECT COUNT(*) as c " +
new Object[]{ utime==null?0:utime, steamID.account_id, server_id==null||server_id.isEmpty()?"%":server_id }, "FROM user_killfeed " +
"WHERE utime > ? AND attacker_id = ? AND attacker_id != victim_id AND (? is null or server_id like ?)",
new Object[]{
utime==null?0:utime,
steamID.account_id,
server_id==null||server_id.isEmpty()?null:server_id,
server_id==null||server_id.isEmpty()?"%":server_id },
(rs, n) -> rs.getLong("c")) (rs, n) -> rs.getLong("c"))
.stream().findFirst().orElse(0L); .stream().findFirst().orElse(0L);
} }
public List<TopInFeed> getTopKills(String server_id) { public List<TopInFeed> getTopKills(String server_id) {
return jdbcTemplate.query("SELECT attacker_id, count(*) as c, server_id FROM user_killfeed WHERE victim_id != attacker_id AND attacker_id != 0 AND server_id LIKE ? GROUP BY attacker_id, server_id ORDER BY c DESC LIMIT 10", return jdbcTemplate.query("SELECT attacker_id, count(*) as c, server_id " +
new Object[]{server_id == null || server_id.isEmpty() ? "%" : server_id}, "FROM user_killfeed " +
"WHERE victim_id != attacker_id AND attacker_id != 0 AND (? is null or server_id LIKE ?) " +
"GROUP BY attacker_id, server_id " +
"ORDER BY c DESC LIMIT 10",
new Object[]{
server_id == null || server_id.isEmpty() ? null : server_id,
server_id == null || server_id.isEmpty() ? "%" : server_id},
(rs, n) -> new TopInFeed(rs).setNicknames(nicknameService)); (rs, n) -> new TopInFeed(rs).setNicknames(nicknameService));
} }
public Long getDeads(SteamID steamID, String server_id, Long utime) { public Long getDeads(SteamID steamID, String server_id, Long utime) {
return jdbcTemplate.query("SELECT COUNT(*) as c FROM user_killfeed WHERE utime > ? AND victim_id = ? AND attacker_id != victim_id AND server_id like ?", return jdbcTemplate.query("SELECT COUNT(*) as c " +
new Object[]{ utime==null?0:utime, steamID.account_id, server_id==null||server_id.isEmpty()?"%":server_id }, "FROM user_killfeed " +
"WHERE utime > ? AND victim_id = ? AND attacker_id != victim_id AND (? is null or server_id like ?)",
new Object[]{
utime==null?0:utime,
steamID.account_id,
server_id == null || server_id.isEmpty() ? null : server_id,
server_id==null||server_id.isEmpty()?"%":server_id },
(rs, n) -> rs.getLong("c")) (rs, n) -> rs.getLong("c"))
.stream().findFirst().orElse(0L); .stream().findFirst().orElse(0L);
} }
public List<TopInFeed> getTopDeads(String server_id) { public List<TopInFeed> getTopDeads(String server_id) {
return jdbcTemplate.query("SELECT victim_id, count(id) as c, server_id FROM user_killfeed WHERE victim_id != attacker_id AND victim_id != 0 AND server_id LIKE ? GROUP BY victim_id, server_id ORDER BY c DESC LIMIT 10", return jdbcTemplate.query("SELECT victim_id, count(id) as c, server_id " +
new Object[]{ server_id == null || server_id.isEmpty() ? "%" : server_id}, "FROM user_killfeed " +
"WHERE victim_id != attacker_id AND victim_id != 0 AND (? is null or server_id LIKE ?) " +
"GROUP BY victim_id, server_id " +
"ORDER BY c DESC LIMIT 10",
new Object[]{
server_id == null || server_id.isEmpty() ? null : server_id,
server_id == null || server_id.isEmpty() ? "%" : server_id},
(rs, n) -> new TopInFeed(rs).setNicknames(nicknameService)); (rs, n) -> new TopInFeed(rs).setNicknames(nicknameService));
} }
public Long getSuicides(SteamID steamID, String server_id, Long utime) { public Long getSuicides(SteamID steamID, String server_id, Long utime) {
return jdbcTemplate.query("SELECT COUNT(*) as c FROM user_killfeed WHERE utime > ? AND victim_id = ? AND attacker_id = victim_id AND server_id like ?", return jdbcTemplate.query("SELECT COUNT(*) as c " +
new Object[]{ utime==null?0:utime, steamID.account_id, server_id==null||server_id.isEmpty()?"%":server_id }, "FROM user_killfeed " +
"WHERE utime > ? AND victim_id = ? AND attacker_id = victim_id AND (? is null or server_id like ?)",
new Object[]{
utime==null?0:utime,
steamID.account_id,
server_id == null || server_id.isEmpty() ? null : server_id,
server_id==null||server_id.isEmpty()?"%":server_id },
(rs, n) -> rs.getLong("c")) (rs, n) -> rs.getLong("c"))
.stream().findFirst().orElse(0L); .stream().findFirst().orElse(0L);
} }
public Long getAssists(SteamID steamID, String server_id, Long utime) { public Long getAssists(SteamID steamID, String server_id, Long utime) {
return jdbcTemplate.query("SELECT COUNT(*) as c FROM user_killfeed WHERE utime > ? AND assister_id = ? AND server_id like ?", return jdbcTemplate.query("SELECT COUNT(*) as c " +
new Object[]{ utime==null?0:utime, steamID.account_id, server_id==null||server_id.isEmpty()?"%":server_id}, "FROM user_killfeed " +
"WHERE utime > ? AND assister_id = ? AND (? is null or server_id like ?)",
new Object[]{
utime==null?0:utime,
steamID.account_id,
server_id == null || server_id.isEmpty() ? null : server_id,
server_id==null||server_id.isEmpty()?"%":server_id},
(rs, n) -> rs.getLong("c")) (rs, n) -> rs.getLong("c"))
.stream().findFirst().orElse(0L); .stream().findFirst().orElse(0L);
} }
public Map getPopulateWeapons(SteamID steamID, String server_id, int offset, int limit) { public Map getPopulateWeapons(SteamID steamID, String server_id, int offset, int limit) {
List<HypeWeapons> result = jdbcTemplate.query("SELECT COUNT(u.weapon_index) as c, i.name, u.server_id, u.weapon_classname FROM user_killfeed as u INNER JOIN tf2idb.tf2idb_item as i ON u.weapon_index = i.id WHERE u.attacker_id = ? AND attacker_id != victim_id AND u.server_id like ? GROUP BY u.weapon_index, i.name, u.server_id, u.weapon_classname ORDER BY c DESC LIMIT ? OFFSET ?", List<HypeWeapons> result = jdbcTemplate.query("SELECT COUNT(u.weapon_index) as c, i.name, u.server_id, u.weapon_classname " +
new Object[]{ steamID.account_id, server_id==null||server_id.isEmpty()?"%":server_id, limit, offset }, "FROM user_killfeed as u " +
"INNER JOIN tf2idb.tf2idb_item as i ON u.weapon_index = i.id " +
"WHERE u.attacker_id = ? AND attacker_id != victim_id AND (? is null or u.server_id like ?) " +
"GROUP BY u.weapon_index, i.name, u.server_id, u.weapon_classname " +
"ORDER BY c DESC LIMIT ? OFFSET ?",
new Object[]{
steamID.account_id,
server_id == null || server_id.isEmpty() ? null : server_id,
server_id==null||server_id.isEmpty()?"%":server_id,
limit,
offset },
(rs, n) -> new HypeWeapons(rs)); (rs, n) -> new HypeWeapons(rs));
/*Long count = (Long) createNativeQuery("SELECT COUNT(weapon_index) FROM user_killfeed WHERE attacker_id = ? AND server_id like ? GROUP BY weapon_index") /*Long count = (Long) createNativeQuery("SELECT COUNT(weapon_index) FROM user_killfeed WHERE attacker_id = ? AND server_id like ? GROUP BY weapon_index")
@ -94,12 +140,28 @@ public class KillfeedService {
else current_utime = Instant.now().getEpochSecond(); else current_utime = Instant.now().getEpochSecond();
} }
List<KillsInFeed> result = jdbcTemplate.query("SELECT -1, u.victim_id, u.assister_id, u.utime, i.name, u.server_id, u.weapon_classname FROM user_killfeed as u INNER JOIN tf2idb.tf2idb_item as i ON u.weapon_index = i.id WHERE u.utime > ? AND u.attacker_id = ? AND u.attacker_id != u.victim_id AND u.server_id like ? ORDER BY u.id DESC LIMIT ? OFFSET ?", List<KillsInFeed> result = jdbcTemplate.query("SELECT -1, u.victim_id, u.assister_id, u.utime, i.name, u.server_id, u.weapon_classname " +
new Object[]{ current_utime, steamID.account_id, server_id == null || server_id.isEmpty() ? "%" : server_id, limit, offset}, "FROM user_killfeed as u " +
"INNER JOIN tf2idb.tf2idb_item as i ON u.weapon_index = i.id " +
"WHERE u.utime > ? AND u.attacker_id = ? AND u.attacker_id != u.victim_id AND (? is null or u.server_id like ?) " +
"ORDER BY u.id DESC LIMIT ? OFFSET ?",
new Object[]{
current_utime,
steamID.account_id,
server_id == null || server_id.isEmpty() ? null : server_id,
server_id == null || server_id.isEmpty() ? "%" : server_id,
limit,
offset},
(rs, n) -> new KillsInFeed(rs).setNicknames(nicknameService)); (rs, n) -> new KillsInFeed(rs).setNicknames(nicknameService));
Long count = jdbcTemplate.query("SELECT COUNT(*) as c FROM user_killfeed WHERE utime > ? AND attacker_id = ? AND attacker_id != victim_id AND server_id like ?", Long count = jdbcTemplate.query("SELECT COUNT(*) as c " +
new Object[]{ current_utime, steamID.account_id, server_id==null||server_id.isEmpty()?"%":server_id }, "FROM user_killfeed " +
"WHERE utime > ? AND attacker_id = ? AND attacker_id != victim_id AND (? is null or server_id like ?)",
new Object[]{
current_utime,
steamID.account_id,
server_id == null || server_id.isEmpty() ? null : server_id,
server_id==null||server_id.isEmpty()?"%":server_id },
(rs, n) -> rs.getLong("c")) (rs, n) -> rs.getLong("c"))
.stream().findFirst().orElse(0L); .stream().findFirst().orElse(0L);
@ -114,12 +176,28 @@ public class KillfeedService {
else current_utime = Instant.now().getEpochSecond(); else current_utime = Instant.now().getEpochSecond();
} }
List<KillsInFeed> result = jdbcTemplate.query("SELECT u.attacker_id, -1, u.assister_id, u.utime, i.name, u.server_id, u.weapon_classname FROM user_killfeed as u INNER JOIN tf2idb.tf2idb_item as i ON u.weapon_index = i.id WHERE u.utime > ? AND u.victim_id = ? AND u.attacker_id != u.victim_id AND u.server_id like ? ORDER BY u.id DESC LIMIT ? OFFSET ?", List<KillsInFeed> result = jdbcTemplate.query("SELECT u.attacker_id, -1, u.assister_id, u.utime, i.name, u.server_id, u.weapon_classname " +
new Object[]{ current_utime, steamID.account_id, server_id == null || server_id.isEmpty() ? "%" : server_id, limit, offset}, "FROM user_killfeed as u " +
"INNER JOIN tf2idb.tf2idb_item as i ON u.weapon_index = i.id " +
"WHERE u.utime > ? AND u.victim_id = ? AND u.attacker_id != u.victim_id AND (? is null or u.server_id like ?) " +
"ORDER BY u.id DESC LIMIT ? OFFSET ?",
new Object[]{
current_utime,
steamID.account_id,
server_id == null || server_id.isEmpty() ? null : server_id,
server_id == null || server_id.isEmpty() ? "%" : server_id,
limit,
offset},
(rs, n) -> new KillsInFeed(rs).setNicknames(nicknameService)); (rs, n) -> new KillsInFeed(rs).setNicknames(nicknameService));
Long count = jdbcTemplate.query("SELECT COUNT(*) as c FROM user_killfeed WHERE utime > ? AND victim_id = ? AND attacker_id != victim_id AND server_id like ?", Long count = jdbcTemplate.query("SELECT COUNT(*) as c " +
new Object[]{ current_utime, steamID.account_id, server_id==null||server_id.isEmpty()?"%":server_id }, "FROM user_killfeed " +
"WHERE utime > ? AND victim_id = ? AND attacker_id != victim_id AND (? is null or server_id like ?)",
new Object[]{
current_utime,
steamID.account_id,
server_id == null || server_id.isEmpty() ? null : server_id,
server_id==null||server_id.isEmpty()?"%":server_id },
(rs, n) -> rs.getLong("c")).stream().findFirst().orElse(0L); (rs, n) -> rs.getLong("c")).stream().findFirst().orElse(0L);
return Map.of("result", result, "count", count, "type", FeedType.DEAD.ordinal()); return Map.of("result", result, "count", count, "type", FeedType.DEAD.ordinal());
@ -133,12 +211,28 @@ public class KillfeedService {
else current_utime = Instant.now().getEpochSecond(); else current_utime = Instant.now().getEpochSecond();
} }
List<KillsInFeed> result = jdbcTemplate.query("SELECT u.attacker_id, u.victim_id, -1, u.utime, i.name, u.server_id, u.weapon_classname FROM user_killfeed as u INNER JOIN tf2idb.tf2idb_item as i ON u.weapon_index = i.id WHERE u.utime > ? AND u.assister_id = ? AND u.server_id like ? ORDER BY u.id DESC LIMIT ? OFFSET ?", List<KillsInFeed> result = jdbcTemplate.query("SELECT u.attacker_id, u.victim_id, -1, u.utime, i.name, u.server_id, u.weapon_classname " +
new Object[]{ current_utime, steamID.account_id, server_id == null || server_id.isEmpty() ? "%" : server_id, limit, offset}, "FROM user_killfeed as u " +
"INNER JOIN tf2idb.tf2idb_item as i ON u.weapon_index = i.id " +
"WHERE u.utime > ? AND u.assister_id = ? AND (? is null or u.server_id like ?) " +
"ORDER BY u.id DESC LIMIT ? OFFSET ?",
new Object[]{
current_utime,
steamID.account_id,
server_id == null || server_id.isEmpty() ? null : server_id,
server_id == null || server_id.isEmpty() ? "%" : server_id,
limit,
offset},
(rs, n) -> new KillsInFeed(rs).setNicknames(nicknameService)); (rs, n) -> new KillsInFeed(rs).setNicknames(nicknameService));
Long count = jdbcTemplate.query("SELECT COUNT(*) as c FROM user_killfeed WHERE utime > ? AND assister_id = ? AND server_id like ?", Long count = jdbcTemplate.query("SELECT COUNT(*) as c " +
new Object[]{ current_utime, steamID.account_id, server_id==null||server_id.isEmpty()?"%":server_id }, "FROM user_killfeed " +
"WHERE utime > ? AND assister_id = ? AND (? is null or server_id like ?)",
new Object[]{
current_utime,
steamID.account_id,
server_id == null || server_id.isEmpty() ? null : server_id,
server_id==null||server_id.isEmpty()?"%":server_id },
(rs, n) -> rs.getLong("c")) (rs, n) -> rs.getLong("c"))
.stream().findFirst().orElse(0L); .stream().findFirst().orElse(0L);

57
src/main/java/app/services/db/MessageService.java

@ -31,13 +31,26 @@ public class MessageService {
this.nicknameService = nicknameService; this.nicknameService = nicknameService;
} }
public Map getAllMessages(String server_id, String filter, int offset, int limit) { public Map getAllMessages(String server_id, String filter, long offset, int limit) {
List<Message> result = jdbcTemplate.query("SELECT account_id,utime,message,server_id FROM user_messages WHERE server_id like ? AND message LIKE ? ORDER BY user_messages.id DESC LIMIT ? OFFSET ?", List<Message> result = jdbcTemplate.query("SELECT account_id,utime,message,server_id " +
new Object[]{ server_id == null || server_id.isEmpty() ? "%" : server_id, filter == null || filter.isEmpty() ? "%" : "%" + filter + "%", limit, offset}, "FROM user_messages " +
"WHERE (? is null or server_id like ?) AND message LIKE ? " +
"ORDER BY user_messages.id DESC LIMIT ? OFFSET ?",
new Object[]{
server_id == null || server_id.isEmpty() ? null : server_id,
server_id == null || server_id.isEmpty() ? "%" : server_id,
filter == null || filter.isEmpty() ? "%" : "%" + filter + "%",
limit,
offset},
(rs, n) -> new Message(rs)); (rs, n) -> new Message(rs));
Long count = jdbcTemplate.query("SELECT COUNT(*) as c FROM user_messages WHERE server_id like ? AND message LIKE ?", Long count = jdbcTemplate.query("SELECT COUNT(*) as c " +
new Object[]{ server_id==null||server_id.isEmpty()?"%":server_id, filter==null||filter.isEmpty()?"%":"%" + filter + "%" }, "FROM user_messages " +
"WHERE (? is null or server_id like ?) AND message LIKE ?",
new Object[]{
server_id == null || server_id.isEmpty() ? null : server_id,
server_id==null||server_id.isEmpty()?"%":server_id,
filter==null||filter.isEmpty()?"%":"%" + filter + "%" },
(rs, n) -> rs.getLong("c")) (rs, n) -> rs.getLong("c"))
.stream().findFirst().orElse(0L); .stream().findFirst().orElse(0L);
@ -45,12 +58,27 @@ public class MessageService {
} }
public Map getAccountMessages(SteamID steamID, String server_id, String filter, int offset, int limit) { public Map getAccountMessages(SteamID steamID, String server_id, String filter, int offset, int limit) {
List<Message> result = jdbcTemplate.query("SELECT account_id,utime,message,server_id FROM user_messages WHERE account_id = ? AND server_id like ? AND message LIKE ? ORDER BY user_messages.id DESC LIMIT ? OFFSET ?", List<Message> result = jdbcTemplate.query("SELECT account_id,utime,message,server_id " +
new Object[]{steamID.account_id, server_id == null || server_id.isEmpty() ? "%" : server_id, filter == null || filter.isEmpty() ? "%" : "%" + filter + "%", limit, offset}, "FROM user_messages " +
"WHERE account_id = ? AND (? is null or server_id like ?) AND message LIKE ? " +
"ORDER BY user_messages.id DESC LIMIT ? OFFSET ?",
new Object[]{
steamID.account_id,
server_id == null || server_id.isEmpty() ? null : server_id,
server_id == null || server_id.isEmpty() ? "%" : server_id,
filter == null || filter.isEmpty() ? "%" : "%" + filter + "%",
limit,
offset},
(rs, n) -> new Message(rs)); (rs, n) -> new Message(rs));
Long count = jdbcTemplate.query("SELECT COUNT(*) as c FROM user_messages WHERE account_id = ? AND server_id like ? AND message LIKE ?", Long count = jdbcTemplate.query("SELECT COUNT(*) as c " +
new Object[]{ steamID.account_id, server_id==null||server_id.isEmpty()?"%":server_id, filter==null||filter.isEmpty()?"%":"%" + filter + "%"}, "FROM user_messages " +
"WHERE account_id = ? AND (? is null or server_id like ?) AND message LIKE ?",
new Object[]{
steamID.account_id,
server_id == null || server_id.isEmpty() ? null : server_id,
server_id==null||server_id.isEmpty()?"%":server_id,
filter==null||filter.isEmpty()?"%":"%" + filter + "%"},
(rs, n) -> rs.getLong("c")) (rs, n) -> rs.getLong("c"))
.stream().findFirst().orElse(0L); .stream().findFirst().orElse(0L);
@ -58,8 +86,13 @@ public class MessageService {
} }
public Long getMessageCount(SteamID steamID, String server_id) { public Long getMessageCount(SteamID steamID, String server_id) {
return jdbcTemplate.query("SELECT COUNT(*) as c FROM user_messages WHERE account_id = ? AND server_id like ?", return jdbcTemplate.query("SELECT COUNT(*) as c " +
new Object[]{ steamID.account_id, server_id==null||server_id.isEmpty()?"%":server_id }, "FROM user_messages " +
"WHERE account_id = ? AND (? is null or server_id like ?)",
new Object[]{
steamID.account_id,
server_id == null || server_id.isEmpty() ? null : server_id,
server_id==null||server_id.isEmpty()?"%":server_id },
(rs, n) -> rs.getLong("c")) (rs, n) -> rs.getLong("c"))
.stream().findFirst().orElse(0L); .stream().findFirst().orElse(0L);
} }
@ -85,7 +118,7 @@ public class MessageService {
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
*/ */
@Data @Data
class Message { public class Message {
int account_id; int account_id;
long utime; long utime;
String message; String message;

39
src/main/java/app/updates/OnlineUpdater.java

@ -67,14 +67,24 @@ public class OnlineUpdater extends BaseUpdater {
//todo abstract on all //todo abstract on all
public List<PerDayStats> getStatsOnPerDay(String server_id) { public List<PerDayStats> getStatsOnPerDay(String server_id) {
return jdbcTemplate_ro.query("SELECT avg(player_count) as player_count, cast(to_timestamp(utime) as date) as fulldate, utime as ts FROM servers_online WHERE player_count != 0 and server_id like ? GROUP BY cast(to_timestamp(utime) as date) / ? ORDER BY ts ASC", return jdbcTemplate_ro.query("SELECT avg(player_count) as player_count, cast(to_timestamp(utime) as date) as fulldate, utime as ts " +
new Object[]{server_id == null || server_id.isEmpty() ? "%": server_id, PerDayStats.period}, "FROM servers_online WHERE player_count != 0 and (? is null or server_id like ?) " +
"GROUP BY cast(to_timestamp(utime) as date) / ? ORDER BY ts ASC",
new Object[]{
server_id == null || server_id.isEmpty() ? null: server_id,
server_id == null || server_id.isEmpty() ? "%": server_id,
PerDayStats.period},
(rs, rowNum) -> new PerDayStats(rs)); (rs, rowNum) -> new PerDayStats(rs));
} }
public List<PerFiveMinutesStats> getStatsOnPerFiveMinutes(String server_id) { public List<PerFiveMinutesStats> getStatsOnPerFiveMinutes(String server_id) {
return jdbcTemplate_ro.query("SELECT avg(player_count) as player_count, cast(to_timestamp(utime) as date) as fulldate, utime as ts FROM servers_online WHERE player_count != 0 and server_id like ? GROUP BY cast(to_timestamp(utime) as date) / ? ORDER BY ts ASC", return jdbcTemplate_ro.query("SELECT avg(player_count) as player_count, cast(to_timestamp(utime) as date) as fulldate, utime as ts " +
new Object[]{server_id == null || server_id.isEmpty() ? "%": server_id, PerFiveMinutesStats.period}, "FROM servers_online WHERE player_count != 0 and (? is null or server_id like ?) " +
"GROUP BY cast(to_timestamp(utime) as date) / ? ORDER BY ts ASC",
new Object[]{
server_id == null || server_id.isEmpty() ? null: server_id,
server_id == null || server_id.isEmpty() ? "%": server_id,
PerFiveMinutesStats.period},
(rs, rowNum) -> new PerFiveMinutesStats(rs)); (rs, rowNum) -> new PerFiveMinutesStats(rs));
} }
@ -94,10 +104,13 @@ public class OnlineUpdater extends BaseUpdater {
SELECT round(sum(s.player_count))::int as player_count, s.ts as fl FROM ( SELECT round(sum(s.player_count))::int as player_count, s.ts as fl FROM (
SELECT round(max(player_count), 4) as player_count, to_timestamp(utime)::date as ts SELECT round(max(player_count), 4) as player_count, to_timestamp(utime)::date as ts
FROM servers_online FROM servers_online
WHERE server_id like ? and player_count != 0 WHERE (? is null or server_id like ?) and player_count != 0
GROUP BY ts, server_id) as s group by s.ts order by s.ts desc limit ? GROUP BY ts, server_id) as s group by s.ts order by s.ts desc limit ?
""", """,
new Object[]{server_id==null||server_id.isEmpty()?"%":server_id, limit}, new Object[]{
server_id==null||server_id.isEmpty()?null:server_id,
server_id==null||server_id.isEmpty()?"%":server_id,
limit},
(rs, rowNum) -> new MaxPeakOfDay(rs)); (rs, rowNum) -> new MaxPeakOfDay(rs));
} }
@ -106,10 +119,13 @@ GROUP BY ts, server_id) as s group by s.ts order by s.ts desc limit ?
SELECT round(sum(s.player_count))::int as player_count, s.ts as fl FROM ( SELECT round(sum(s.player_count))::int as player_count, s.ts as fl FROM (
SELECT round(avg(player_count), 4) as player_count, to_timestamp(utime)::date as ts SELECT round(avg(player_count), 4) as player_count, to_timestamp(utime)::date as ts
FROM servers_online FROM servers_online
WHERE server_id like ? and player_count != 0 WHERE (? is null or server_id like ?) and player_count != 0
GROUP BY ts, server_id) as s group by s.ts order by s.ts desc limit ? GROUP BY ts, server_id) as s group by s.ts order by s.ts desc limit ?
""", """,
new Object[]{server_id==null||server_id.isEmpty()?"%":server_id, limit}, new Object[]{
server_id==null||server_id.isEmpty()?null:server_id,
server_id==null||server_id.isEmpty()?"%":server_id,
limit},
(rs, rowNum) -> new AvgPeakOfDay(rs)); (rs, rowNum) -> new AvgPeakOfDay(rs));
} }
@ -118,9 +134,12 @@ GROUP BY ts, server_id) as s group by s.ts order by s.ts desc limit ?
return jdbcTemplate_ro.query("select round(sum(sub.player_count))::int as player_count, sub.ts as fulldate from ("+ return jdbcTemplate_ro.query("select round(sum(sub.player_count))::int as player_count, sub.ts as fulldate from ("+
"SELECT round(avg(player_count), 4) as player_count, date_bin('"+minutes+" minutes'"+",to_timestamp(utime)::timestamp, '2001-01-01 00:02:30') as ts "+ "SELECT round(avg(player_count), 4) as player_count, date_bin('"+minutes+" minutes'"+",to_timestamp(utime)::timestamp, '2001-01-01 00:02:30') as ts "+
"FROM servers_online " + "FROM servers_online " +
"WHERE utime >= ? and server_id like ? "+ "WHERE utime >= ? and (? is null or server_id like ?) "+
"GROUP BY ts, server_id) sub GROUP BY sub.ts ", "GROUP BY ts, server_id) sub GROUP BY sub.ts ",
new Object[]{utime, server_id==null||server_id.isEmpty()?"%":server_id}, new Object[]{
utime,
server_id==null||server_id.isEmpty()?null:server_id,
server_id==null||server_id.isEmpty()?"%":server_id},
(rs, rowNum) -> new StatsOfPeakOfPerFiveMinutes(rs)); (rs, rowNum) -> new StatsOfPeakOfPerFiveMinutes(rs));
} }

Loading…
Cancel
Save