Skip to content

239 add statistics endpoints #249

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Sep 28, 2022
Merged
Original file line number Diff line number Diff line change
@@ -1,25 +1,20 @@
package org.kryptokrona.hugin.controller.latest;
package org.kryptokrona.hugin.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.kryptokrona.hugin.model.Hashtag;
import org.kryptokrona.hugin.model.Post;
import org.kryptokrona.hugin.service.HashtagService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

import static org.kryptokrona.hugin.controller.latest.HashtagController.VERSION;
import static org.kryptokrona.hugin.controller.HashtagController.VERSION;

/**
* Hashtag Controller.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.kryptokrona.hugin.controller.latest;
package org.kryptokrona.hugin.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand All @@ -14,7 +14,7 @@
import java.util.HashMap;
import java.util.Map;

import static org.kryptokrona.hugin.controller.latest.HashtagController.VERSION;
import static org.kryptokrona.hugin.controller.HashtagController.VERSION;

/**
* Post Controller.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.kryptokrona.hugin.controller.latest;
package org.kryptokrona.hugin.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand All @@ -14,7 +14,7 @@
import java.util.HashMap;
import java.util.Map;

import static org.kryptokrona.hugin.controller.latest.HashtagController.VERSION;
import static org.kryptokrona.hugin.controller.HashtagController.VERSION;

/**
* Post Encrypted Controller.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.kryptokrona.hugin.controller.latest;
package org.kryptokrona.hugin.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand All @@ -14,7 +14,7 @@
import java.util.HashMap;
import java.util.Map;

import static org.kryptokrona.hugin.controller.latest.HashtagController.VERSION;
import static org.kryptokrona.hugin.controller.HashtagController.VERSION;

/**
* Post Encrypted Group Controller.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package org.kryptokrona.hugin.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.kryptokrona.hugin.http.StatisticsResponse;
import org.kryptokrona.hugin.service.HashtagService;
import org.kryptokrona.hugin.service.PostEncryptedGroupService;
import org.kryptokrona.hugin.service.PostEncryptedService;
import org.kryptokrona.hugin.service.PostService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import static org.kryptokrona.hugin.controller.StatisticsController.VERSION;

/**
* Statistics Post Controller.
*
* @author Marcus Cvjeticanin
*/
@RestController
@CrossOrigin(origins="*")
@RequestMapping("api/v" + VERSION + "/statistics")
@Tag(name = "statistics", description = "Set of endpoints to get statistical data.")
public class StatisticsController {

static final String VERSION = "1";

private final PostService postService;

private final PostEncryptedService postEncryptedService;

private final PostEncryptedGroupService postEncryptedGroupService;

private final HashtagService hashtagService;

@Autowired
public StatisticsController(
PostService postService,
PostEncryptedService postEncryptedService,
PostEncryptedGroupService postEncryptedGroupService,
HashtagService hashtagService
) {
this.postService = postService;
this.postEncryptedService = postEncryptedService;
this.postEncryptedGroupService = postEncryptedGroupService;
this.hashtagService = hashtagService;
}

@GetMapping("/posts")
@Operation(
summary = "Amount of posts",
description = "Gets the total amount of posts during last 24h/week/month/year."
)
public ResponseEntity<StatisticsResponse> getPostStatistics() {
var statisticsResponseObj = new StatisticsResponse();
statisticsResponseObj.setTwentyFourHours(postService.getTotalItemsBy24h());
statisticsResponseObj.setWeek(postService.getTotalItemsByWeek());
statisticsResponseObj.setMonth(postService.getTotalItemsByMonth());
statisticsResponseObj.setYear(postService.getTotalItemsByYear());

return new ResponseEntity<>(statisticsResponseObj, HttpStatus.OK);
}

@GetMapping("/posts-encrypted")
@Operation(
summary = "Amount of encrypted group posts",
description = "Gets the total amount of encrypted group posts during last 24h/week/month/year."
)
public ResponseEntity<StatisticsResponse> getPostEncryptedStatistics() {
var statisticsResponseObj = new StatisticsResponse();
statisticsResponseObj.setTwentyFourHours(postEncryptedService.getTotalItemsBy24h());
statisticsResponseObj.setWeek(postEncryptedService.getTotalItemsByWeek());
statisticsResponseObj.setMonth(postEncryptedService.getTotalItemsByMonth());
statisticsResponseObj.setYear(postEncryptedService.getTotalItemsByYear());

return new ResponseEntity<>(statisticsResponseObj, HttpStatus.OK);
}

@GetMapping("/posts-encrypted-group")
@Operation(
summary = "Amount of encrypted posts",
description = "Gets the total amount of encrypted posts during last 24h/week/month/year."
)
public ResponseEntity<StatisticsResponse> getPostEncryptedGroupStatistics() {
var statisticsResponseObj = new StatisticsResponse();
statisticsResponseObj.setTwentyFourHours(postEncryptedGroupService.getTotalItemsBy24h());
statisticsResponseObj.setWeek(postEncryptedGroupService.getTotalItemsByWeek());
statisticsResponseObj.setMonth(postEncryptedGroupService.getTotalItemsByMonth());
statisticsResponseObj.setYear(postEncryptedGroupService.getTotalItemsByYear());

return new ResponseEntity<>(statisticsResponseObj, HttpStatus.OK);
}

@GetMapping("/hashtags")
@Operation(
summary = "Amount of hashtags",
description = "Gets the total amount of hashtags during last 24h/week/month/year."
)
public ResponseEntity<StatisticsResponse> getHashtagStatistics() {
var statisticsResponseObj = new StatisticsResponse();
statisticsResponseObj.setTwentyFourHours(hashtagService.getTotalItemsBy24h());
statisticsResponseObj.setWeek(hashtagService.getTotalItemsByWeek());
statisticsResponseObj.setMonth(hashtagService.getTotalItemsByMonth());
statisticsResponseObj.setYear(hashtagService.getTotalItemsByYear());

return new ResponseEntity<>(statisticsResponseObj, HttpStatus.OK);
}

}

This file was deleted.

47 changes: 47 additions & 0 deletions src/main/java/org/kryptokrona/hugin/http/StatisticsResponse.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package org.kryptokrona.hugin.http;

import com.fasterxml.jackson.annotation.JsonProperty;

public class StatisticsResponse {

@JsonProperty("24h")
private long twentyFourHours;

private long week;

private long month;

private long year;

public long getTwentyFourHours() {
return twentyFourHours;
}

public void setTwentyFourHours(long twentyFourHours) {
this.twentyFourHours = twentyFourHours;
}

public long getWeek() {
return week;
}

public void setWeek(long week) {
this.week = week;
}

public long getMonth() {
return month;
}

public void setMonth(long month) {
this.month = month;
}

public long getYear() {
return year;
}

public void setYear(long year) {
this.year = year;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@

import org.kryptokrona.hugin.model.Hashtag;
import org.kryptokrona.hugin.model.Post;
import org.kryptokrona.hugin.model.PostEncryptedGroup;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
* Hashtag Repository.
*
Expand All @@ -23,4 +27,6 @@ public interface HashtagRepository extends JpaRepository<Hashtag, Long> {
// @Query(value = "", nativeQuery = true)
// Page<Hashtag> findAllTrending(Pageable pageable);

List<Hashtag> findAllByCreatedAtBetween(Date startDate, Date endDate);

}
Original file line number Diff line number Diff line change
@@ -1,25 +1,31 @@
package org.kryptokrona.hugin.repository;

import org.kryptokrona.hugin.model.PostEncrypted;
import org.kryptokrona.hugin.model.PostEncryptedGroup;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
* Post Encrypted Group Repository.
*
* @author Marcus Cvjeticanin
*/
@Repository
public interface PostEncryptedGroupRepository extends JpaRepository<PostEncryptedGroup, Long> {

PostEncryptedGroup findPostEncryptedGroupByTxHash(String txHash);

boolean existsPostEncryptedGroupByTxHash(String txHash);
Page<PostEncryptedGroup> findAllByTxTimestampBetween(Pageable pageable, Long startTime, Long endTime);

boolean existsPostEncryptedGroupByTxSb(String txSb);
List<PostEncryptedGroup> findAllByCreatedAtBetween(Date startDate, Date endDate);

PostEncryptedGroup findPostEncryptedGroupByTxHash(String txHash);
boolean existsPostEncryptedGroupByTxHash(String txHash);

Page<PostEncryptedGroup> findAllByTxTimestampBetween(Pageable pageable, Long startTime, Long endTime);
boolean existsPostEncryptedGroupByTxSb(String txSb);

}
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package org.kryptokrona.hugin.repository;

import org.kryptokrona.hugin.model.Post;
import org.kryptokrona.hugin.model.PostEncrypted;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
* Post Encrypted Repository.
*
Expand All @@ -14,12 +18,14 @@
@Repository
public interface PostEncryptedRepository extends JpaRepository<PostEncrypted, Long> {

boolean existsPostEncryptedByTxHash(String txHash);

boolean existsPostEncryptedByTxBox(String txBox);

PostEncrypted findPostEncryptedByTxHash(String txHash);

Page<PostEncrypted> findAllByTxTimestampBetween(Pageable pageable, Long startTime, Long endTime);

List<PostEncrypted> findAllByCreatedAtBetween(Date startDate, Date endDate);

boolean existsPostEncryptedByTxHash(String txHash);

boolean existsPostEncryptedByTxBox(String txBox);

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
* Post Repository.
*
Expand All @@ -15,8 +18,6 @@
@Repository
public interface PostRepository extends JpaRepository<Post, Long> {

boolean existsPostByTxHash(String txHash);

//TODO: need to confirm this works, perhaps reserved keywords in SQL statement?
// We will not remove this since this will be implemented shortly.
@Query(value = "SELECT id, message, key, signature, board, time, nickname, tx_hash, reply, created_at FROM post", nativeQuery = true)
Expand All @@ -26,4 +27,8 @@ public interface PostRepository extends JpaRepository<Post, Long> {

Post findPostByTxHash(String txHash);

List<Post> findAllByCreatedAtBetween(Date startDate, Date endDate);

boolean existsPostByTxHash(String txHash);

}
Loading