2017-12-08 3 views
-1

Ich arbeite an einer Spring Boot-Anwendung mit RESTful-Diensten, JWT-basierte Authentifizierung und reagieren als Front-End.Anzahl (eindeutige) Ansichten Spring Boot REST

Ich möchte einen Zähler einbauen, der die eindeutigen Benutzeranforderungen (z. B. pro Tag) an bestimmte REST-Endpunkte in meinem RestController überwacht und den aktuellen Wert in einer Spalte in der Datenbank speichert.

Ich würde gerne wissen, wie viele Benutzer auf einen bestimmten Artikel (api/articles/{id}) pro Tag geklickt haben und diesen Wert an die Entität binden.

Entity:

@Data 
@Builder 
@AllArgsConstructor 
@RequiredArgsConstructor 
@Entity 
@Table(name = "Article") 
public class Article{ 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "message_id", unique = true, nullable = false) 
    private Long id; 

    @Column(name = "visits") 
    private Long visitCounter; 

    ... 
} 

Controller:

@RestController 
@RequestMapping("/api/articles") 
public class ArticleController { 

    private AppUserService userService; 
    private ArticleService articleService ; 

    @Autowired 
    public ArticleController (AppUserService userService, ArticleService articleService) { 
     this.userService = userService; 
     this.articleService = articleService; 
    } 


    @GetMapping(value = "/{id}") 
    public ResponseEntity<Article> getArticleById(@PathVariable(value = "id") Long articleId) { 
     Article article = articleService .getArticleById(articleId); 
     if(article == null) { 
      return ResponseEntity.notFound().build(); 
     } 
     articleService.countVisit(); //??? 
     return ResponseEntity.ok().body(article); 
    } 
} 

... 

Irgendwelche Ideen, wie so etwas erreicht werden könnte?

Antwort

0

Angenommen, Sie haben BeanBoard ArticleCountService. Der Dienst sollte eine Karte für Zähler haben.

Der Schlüssel ist Artikel Weg (oder ID oder etwas, um Ihren Artikel zu identifizieren). Der Wert besteht aus Benutzern (z. B. IP-Adressen zur Identifizierung eindeutiger Benutzer, die Sie über HttpServletRequest abrufen können). Um 23: 59: 999 erhalten Sie die Kartendaten und erstellen eine neue leere Karte. Das ist die einfachste Lösung, aber es könnte Speicher Auswirkungen haben.

Der Modus bequeme Möglichkeit ist, etwas in DB zu speichern. Z.B. ARTICLE_ID, BENUTZER_ID (IP), VISIT_DATE

Und einmal täglich Aggregat der Daten (könnten obsolet Reihen von gestern nach der Berechnung entfernt werden.)