added statistics for create and found posts

This commit is contained in:
SlimusMinus
2026-07-30 00:18:05 +03:00
parent 1981eb54a4
commit bea9696a28
7 changed files with 127 additions and 4 deletions

View File

@@ -0,0 +1,20 @@
package com.krylov.refound.controller;
import com.krylov.refound.entity.Statistics;
import com.krylov.refound.service.StatisticsService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/statistics")
public class StatisticsController {
private final StatisticsService statisticsService;
@GetMapping
public Statistics get() {
return statisticsService.getStatistics();
}
}

View File

@@ -0,0 +1,20 @@
package com.krylov.refound.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
@Entity
@Table(name = "statistics")
@Getter
@Setter
public class Statistics {
@Id
private Long id;
private Long postsCreated;
private Long postsFound;
}

View File

@@ -0,0 +1,8 @@
package com.krylov.refound.repository;
import com.krylov.refound.entity.Statistics;
import org.springframework.data.jpa.repository.JpaRepository;
public interface StatisticsRepository extends JpaRepository<Statistics, Long> {
}

View File

@@ -35,6 +35,7 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@Service
@@ -50,6 +51,7 @@ public class PostService {
private final FavoriteRepository favoriteRepository;
private final FileStorageService fileStorageService;
private final ContentModerationFacade contentModerationFacade;
private final StatisticsService statisticsService;
public PostRequest create(PostRequest request, List<MultipartFile> images) {
@@ -75,6 +77,7 @@ public class PostService {
imageRepository.save(img);
}
}
statisticsService.incrementCreated();
return request;
}
@@ -116,7 +119,7 @@ public class PostService {
});
}
public List <PostResponse> getById(Long id) {
public List<PostResponse> getById(Long id) {
List<Post> posts = repository.findByUserId(id);
List<Long> postIds = posts.stream()
@@ -150,7 +153,8 @@ public class PostService {
.toList();
}
public PostResponse update(Long id, PostRequest request, List<MultipartFile> images, List<String> existingUrls) {
public PostResponse update(Long id, PostRequest request, List<MultipartFile> images,
List<String> existingUrls) {
Post post = repository.findById(id)
.orElseThrow(() -> new ApiException(
ErrorCode.NOT_FOUND,
@@ -234,6 +238,7 @@ public class PostService {
repository.delete(post);
}
@Transactional
public PostResponse updateStatus(Long id, String statusString) {
// Find the post
Post post = repository.findById(id)
@@ -264,10 +269,13 @@ public class PostService {
);
}
if (post.getStatus() != PostStatus.CLOSED && statusString.equals(PostStatus.CLOSED.toString())) {
statisticsService.incrementFound();
}
// Update status
post.setStatus(newStatus);
Post updated = repository.save(post);
// Convert to response with like count
PostResponse response = mapper.toResponse(updated);

View File

@@ -0,0 +1,28 @@
package com.krylov.refound.service;
import com.krylov.refound.entity.Statistics;
import com.krylov.refound.repository.StatisticsRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@RequiredArgsConstructor
@Transactional
public class StatisticsService {
private final StatisticsRepository repository;
public void incrementCreated() {
Statistics statistics = repository.findById(1L).orElseThrow();
statistics.setPostsCreated(statistics.getPostsCreated() + 1);
}
public void incrementFound() {
Statistics statistics = repository.findById(1L).orElseThrow();
statistics.setPostsFound(statistics.getPostsFound() + 1);
}
public Statistics getStatistics() {
return repository.findById(1L).orElseThrow();
}
}