From 213367a359734e78898b3affd65731eb12eb5605 Mon Sep 17 00:00:00 2001 From: gsd Date: Wed, 9 Apr 2025 00:12:55 +0300 Subject: [PATCH] news update --- .../bot/DiscordNewsController.java | 25 +++++++++ .../controllers/user/PublicController.java | 15 ++++++ src/main/java/app/entities/db/Annonce.java | 53 +++++++++++++++++++ .../app/repositories/AnnonceRepository.java | 17 ++++++ 4 files changed, 110 insertions(+) create mode 100644 src/main/java/app/controllers/bot/DiscordNewsController.java create mode 100644 src/main/java/app/entities/db/Annonce.java create mode 100644 src/main/java/app/repositories/AnnonceRepository.java diff --git a/src/main/java/app/controllers/bot/DiscordNewsController.java b/src/main/java/app/controllers/bot/DiscordNewsController.java new file mode 100644 index 0000000..0c4777d --- /dev/null +++ b/src/main/java/app/controllers/bot/DiscordNewsController.java @@ -0,0 +1,25 @@ +package app.controllers.bot; + +import app.entities.db.Annonce; +import app.repositories.AnnonceRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("api/bot/discord") +public class DiscordNewsController { + + @Autowired + private AnnonceRepository annonceRepository; + + @PostMapping("/news") + public ResponseEntity createNews(@RequestBody Annonce annonce) { + annonce.setId(null); + annonceRepository.save(annonce); + return ResponseEntity.ok().body(null); + } +} diff --git a/src/main/java/app/controllers/user/PublicController.java b/src/main/java/app/controllers/user/PublicController.java index 1a88d73..3b13bdf 100644 --- a/src/main/java/app/controllers/user/PublicController.java +++ b/src/main/java/app/controllers/user/PublicController.java @@ -4,8 +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.Annonce; import app.entities.db.ban.Ban; import app.entities.db.ban.BanSearchFilter; +import app.repositories.AnnonceRepository; import app.repositories.BanRepository; import app.services.ProfileService; import app.services.db.BanService; @@ -30,6 +32,9 @@ public class PublicController { BanService banService; + @Autowired + private AnnonceRepository annonceRepository; + @Autowired private BanRepository banRepository; @@ -79,4 +84,14 @@ public class PublicController { admin_ids.isEmpty(), admin_ids) , HttpStatus.OK); } + + @GetMapping("/news") + public ResponseEntity> getNews(Pageable pageable) { + return ResponseEntity.ok(annonceRepository.getNews(pageable)); + } + + @GetMapping("/annonces") + public ResponseEntity> getAnnonces(Pageable pageable) { + return ResponseEntity.ok(annonceRepository.getAnnonce(pageable)); + } } diff --git a/src/main/java/app/entities/db/Annonce.java b/src/main/java/app/entities/db/Annonce.java new file mode 100644 index 0000000..cfee2de --- /dev/null +++ b/src/main/java/app/entities/db/Annonce.java @@ -0,0 +1,53 @@ +package app.entities.db; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Data; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; + +@Entity +@Data +@Table(schema = "tf2_facti13", name = "annonces") +public class Annonce { + @Id + @Column(name = "id") + private Long id; + + @Column(name = "header") + private String header; + + @Column(name = "short") + private String shortText; + + @Column(name = "full") + private String fullText; + + @Column(name = "type") + private String type; + + @Column(name = "redirect") + private String redirect; + + @Column(name = "attachments") + private String attachments; + + @Column(name = "timestamp") + private Timestamp timestamp; + + @Column(name = "author") + private String author; + + @Column(name = "deleted") + @JsonIgnore + private Boolean deleted; + + public String[] getAttachments() { + return attachments != null?attachments.split("\n"):new String[]{}; + } +} diff --git a/src/main/java/app/repositories/AnnonceRepository.java b/src/main/java/app/repositories/AnnonceRepository.java new file mode 100644 index 0000000..d577a3e --- /dev/null +++ b/src/main/java/app/repositories/AnnonceRepository.java @@ -0,0 +1,17 @@ +package app.repositories; + +import app.entities.db.Annonce; +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; + +public interface AnnonceRepository extends PagingAndSortingRepository { + @Query(value = "select n from Annonce n where n.type like 'news' and n.deleted = false order by n.id desc") + Page getNews(Pageable pageable); + + @Query(value = "select n from Annonce n where n.type like 'reason4play' and n.deleted = false order by n.id desc") + Page getAnnonce(Pageable pageable); + + void save(Annonce annonce); +}