diff --git a/.gitignore b/.gitignore index 91cb9c662..d87d478a5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ target openisle.iml node_modules -dist \ No newline at end of file +dist +open-isle.env \ No newline at end of file diff --git a/pom.xml b/backend/pom.xml similarity index 100% rename from pom.xml rename to backend/pom.xml diff --git a/src/main/java/com/openisle/OpenIsleApplication.java b/backend/src/main/java/com/openisle/OpenIsleApplication.java similarity index 100% rename from src/main/java/com/openisle/OpenIsleApplication.java rename to backend/src/main/java/com/openisle/OpenIsleApplication.java diff --git a/src/main/java/com/openisle/config/ActivityInitializer.java b/backend/src/main/java/com/openisle/config/ActivityInitializer.java similarity index 100% rename from src/main/java/com/openisle/config/ActivityInitializer.java rename to backend/src/main/java/com/openisle/config/ActivityInitializer.java diff --git a/src/main/java/com/openisle/config/AsyncConfig.java b/backend/src/main/java/com/openisle/config/AsyncConfig.java similarity index 100% rename from src/main/java/com/openisle/config/AsyncConfig.java rename to backend/src/main/java/com/openisle/config/AsyncConfig.java diff --git a/src/main/java/com/openisle/config/CustomAccessDeniedHandler.java b/backend/src/main/java/com/openisle/config/CustomAccessDeniedHandler.java similarity index 100% rename from src/main/java/com/openisle/config/CustomAccessDeniedHandler.java rename to backend/src/main/java/com/openisle/config/CustomAccessDeniedHandler.java diff --git a/src/main/java/com/openisle/config/SecurityConfig.java b/backend/src/main/java/com/openisle/config/SecurityConfig.java similarity index 99% rename from src/main/java/com/openisle/config/SecurityConfig.java rename to backend/src/main/java/com/openisle/config/SecurityConfig.java index 1341ecab7..0f8f1bf75 100644 --- a/src/main/java/com/openisle/config/SecurityConfig.java +++ b/backend/src/main/java/com/openisle/config/SecurityConfig.java @@ -79,6 +79,8 @@ public class SecurityConfig { "http://localhost", "http://30.211.97.254:8080", "http://30.211.97.254", + "http://192.168.7.70", + "http://192.168.7.70:8080", websiteUrl, websiteUrl.replace("://www.", "://") )); diff --git a/src/main/java/com/openisle/controller/ActivityController.java b/backend/src/main/java/com/openisle/controller/ActivityController.java similarity index 100% rename from src/main/java/com/openisle/controller/ActivityController.java rename to backend/src/main/java/com/openisle/controller/ActivityController.java diff --git a/src/main/java/com/openisle/controller/AdminConfigController.java b/backend/src/main/java/com/openisle/controller/AdminConfigController.java similarity index 100% rename from src/main/java/com/openisle/controller/AdminConfigController.java rename to backend/src/main/java/com/openisle/controller/AdminConfigController.java diff --git a/src/main/java/com/openisle/controller/AdminController.java b/backend/src/main/java/com/openisle/controller/AdminController.java similarity index 100% rename from src/main/java/com/openisle/controller/AdminController.java rename to backend/src/main/java/com/openisle/controller/AdminController.java diff --git a/src/main/java/com/openisle/controller/AdminPostController.java b/backend/src/main/java/com/openisle/controller/AdminPostController.java similarity index 100% rename from src/main/java/com/openisle/controller/AdminPostController.java rename to backend/src/main/java/com/openisle/controller/AdminPostController.java diff --git a/src/main/java/com/openisle/controller/AdminTagController.java b/backend/src/main/java/com/openisle/controller/AdminTagController.java similarity index 100% rename from src/main/java/com/openisle/controller/AdminTagController.java rename to backend/src/main/java/com/openisle/controller/AdminTagController.java diff --git a/src/main/java/com/openisle/controller/AdminUserController.java b/backend/src/main/java/com/openisle/controller/AdminUserController.java similarity index 100% rename from src/main/java/com/openisle/controller/AdminUserController.java rename to backend/src/main/java/com/openisle/controller/AdminUserController.java diff --git a/src/main/java/com/openisle/controller/AiController.java b/backend/src/main/java/com/openisle/controller/AiController.java similarity index 100% rename from src/main/java/com/openisle/controller/AiController.java rename to backend/src/main/java/com/openisle/controller/AiController.java diff --git a/src/main/java/com/openisle/controller/AuthController.java b/backend/src/main/java/com/openisle/controller/AuthController.java similarity index 100% rename from src/main/java/com/openisle/controller/AuthController.java rename to backend/src/main/java/com/openisle/controller/AuthController.java diff --git a/src/main/java/com/openisle/controller/CategoryController.java b/backend/src/main/java/com/openisle/controller/CategoryController.java similarity index 100% rename from src/main/java/com/openisle/controller/CategoryController.java rename to backend/src/main/java/com/openisle/controller/CategoryController.java diff --git a/src/main/java/com/openisle/controller/CommentController.java b/backend/src/main/java/com/openisle/controller/CommentController.java similarity index 79% rename from src/main/java/com/openisle/controller/CommentController.java rename to backend/src/main/java/com/openisle/controller/CommentController.java index b6dccfdfd..2de863617 100644 --- a/src/main/java/com/openisle/controller/CommentController.java +++ b/backend/src/main/java/com/openisle/controller/CommentController.java @@ -4,6 +4,7 @@ import com.openisle.model.Comment; import com.openisle.service.CommentService; import com.openisle.service.CaptchaService; import com.openisle.service.LevelService; +import com.openisle.service.ReactionService; import com.openisle.model.CommentSort; import lombok.Data; import lombok.RequiredArgsConstructor; @@ -23,6 +24,7 @@ public class CommentController { private final CommentService commentService; private final LevelService levelService; private final CaptchaService captchaService; + private final ReactionService reactionService; @Value("${app.captcha.enabled:false}") private boolean captchaEnabled; @@ -70,6 +72,10 @@ public class CommentController { .map(this::toDtoWithReplies) .collect(Collectors.toList()); dto.setReplies(replies); + List reactions = reactionService.getReactionsForComment(comment.getId()).stream() + .map(this::toReactionDto) + .collect(Collectors.toList()); + dto.setReactions(reactions); return dto; } @@ -109,6 +115,7 @@ public class CommentController { private LocalDateTime createdAt; private AuthorDto author; private List replies; + private List reactions; private int reward; } @@ -118,4 +125,29 @@ public class CommentController { private String username; private String avatar; } + + private ReactionDto toReactionDto(com.openisle.model.Reaction reaction) { + ReactionDto dto = new ReactionDto(); + dto.setId(reaction.getId()); + dto.setType(reaction.getType()); + dto.setUser(reaction.getUser().getUsername()); + if (reaction.getPost() != null) { + dto.setPostId(reaction.getPost().getId()); + } + if (reaction.getComment() != null) { + dto.setCommentId(reaction.getComment().getId()); + } + dto.setReward(0); + return dto; + } + + @Data + private static class ReactionDto { + private Long id; + private com.openisle.model.ReactionType type; + private String user; + private Long postId; + private Long commentId; + private int reward; + } } diff --git a/src/main/java/com/openisle/controller/ConfigController.java b/backend/src/main/java/com/openisle/controller/ConfigController.java similarity index 100% rename from src/main/java/com/openisle/controller/ConfigController.java rename to backend/src/main/java/com/openisle/controller/ConfigController.java diff --git a/src/main/java/com/openisle/controller/DraftController.java b/backend/src/main/java/com/openisle/controller/DraftController.java similarity index 100% rename from src/main/java/com/openisle/controller/DraftController.java rename to backend/src/main/java/com/openisle/controller/DraftController.java diff --git a/src/main/java/com/openisle/controller/GlobalExceptionHandler.java b/backend/src/main/java/com/openisle/controller/GlobalExceptionHandler.java similarity index 100% rename from src/main/java/com/openisle/controller/GlobalExceptionHandler.java rename to backend/src/main/java/com/openisle/controller/GlobalExceptionHandler.java diff --git a/src/main/java/com/openisle/controller/HelloController.java b/backend/src/main/java/com/openisle/controller/HelloController.java similarity index 100% rename from src/main/java/com/openisle/controller/HelloController.java rename to backend/src/main/java/com/openisle/controller/HelloController.java diff --git a/src/main/java/com/openisle/controller/NotificationController.java b/backend/src/main/java/com/openisle/controller/NotificationController.java similarity index 100% rename from src/main/java/com/openisle/controller/NotificationController.java rename to backend/src/main/java/com/openisle/controller/NotificationController.java diff --git a/src/main/java/com/openisle/controller/PostController.java b/backend/src/main/java/com/openisle/controller/PostController.java similarity index 100% rename from src/main/java/com/openisle/controller/PostController.java rename to backend/src/main/java/com/openisle/controller/PostController.java diff --git a/src/main/java/com/openisle/controller/PushSubscriptionController.java b/backend/src/main/java/com/openisle/controller/PushSubscriptionController.java similarity index 100% rename from src/main/java/com/openisle/controller/PushSubscriptionController.java rename to backend/src/main/java/com/openisle/controller/PushSubscriptionController.java diff --git a/src/main/java/com/openisle/controller/ReactionController.java b/backend/src/main/java/com/openisle/controller/ReactionController.java similarity index 98% rename from src/main/java/com/openisle/controller/ReactionController.java rename to backend/src/main/java/com/openisle/controller/ReactionController.java index c762486ab..062fe313a 100644 --- a/src/main/java/com/openisle/controller/ReactionController.java +++ b/backend/src/main/java/com/openisle/controller/ReactionController.java @@ -4,6 +4,7 @@ import com.openisle.model.Reaction; import com.openisle.model.ReactionType; import com.openisle.service.ReactionService; import com.openisle.service.LevelService; +import jakarta.transaction.Transactional; import lombok.Data; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; diff --git a/src/main/java/com/openisle/controller/SearchController.java b/backend/src/main/java/com/openisle/controller/SearchController.java similarity index 100% rename from src/main/java/com/openisle/controller/SearchController.java rename to backend/src/main/java/com/openisle/controller/SearchController.java diff --git a/src/main/java/com/openisle/controller/SitemapController.java b/backend/src/main/java/com/openisle/controller/SitemapController.java similarity index 100% rename from src/main/java/com/openisle/controller/SitemapController.java rename to backend/src/main/java/com/openisle/controller/SitemapController.java diff --git a/src/main/java/com/openisle/controller/StatController.java b/backend/src/main/java/com/openisle/controller/StatController.java similarity index 100% rename from src/main/java/com/openisle/controller/StatController.java rename to backend/src/main/java/com/openisle/controller/StatController.java diff --git a/src/main/java/com/openisle/controller/SubscriptionController.java b/backend/src/main/java/com/openisle/controller/SubscriptionController.java similarity index 100% rename from src/main/java/com/openisle/controller/SubscriptionController.java rename to backend/src/main/java/com/openisle/controller/SubscriptionController.java diff --git a/src/main/java/com/openisle/controller/TagController.java b/backend/src/main/java/com/openisle/controller/TagController.java similarity index 100% rename from src/main/java/com/openisle/controller/TagController.java rename to backend/src/main/java/com/openisle/controller/TagController.java diff --git a/src/main/java/com/openisle/controller/UploadController.java b/backend/src/main/java/com/openisle/controller/UploadController.java similarity index 100% rename from src/main/java/com/openisle/controller/UploadController.java rename to backend/src/main/java/com/openisle/controller/UploadController.java diff --git a/src/main/java/com/openisle/controller/UserController.java b/backend/src/main/java/com/openisle/controller/UserController.java similarity index 100% rename from src/main/java/com/openisle/controller/UserController.java rename to backend/src/main/java/com/openisle/controller/UserController.java diff --git a/src/main/java/com/openisle/exception/FieldException.java b/backend/src/main/java/com/openisle/exception/FieldException.java similarity index 100% rename from src/main/java/com/openisle/exception/FieldException.java rename to backend/src/main/java/com/openisle/exception/FieldException.java diff --git a/src/main/java/com/openisle/exception/NotFoundException.java b/backend/src/main/java/com/openisle/exception/NotFoundException.java similarity index 100% rename from src/main/java/com/openisle/exception/NotFoundException.java rename to backend/src/main/java/com/openisle/exception/NotFoundException.java diff --git a/src/main/java/com/openisle/exception/RateLimitException.java b/backend/src/main/java/com/openisle/exception/RateLimitException.java similarity index 100% rename from src/main/java/com/openisle/exception/RateLimitException.java rename to backend/src/main/java/com/openisle/exception/RateLimitException.java diff --git a/src/main/java/com/openisle/model/Activity.java b/backend/src/main/java/com/openisle/model/Activity.java similarity index 100% rename from src/main/java/com/openisle/model/Activity.java rename to backend/src/main/java/com/openisle/model/Activity.java diff --git a/src/main/java/com/openisle/model/ActivityType.java b/backend/src/main/java/com/openisle/model/ActivityType.java similarity index 100% rename from src/main/java/com/openisle/model/ActivityType.java rename to backend/src/main/java/com/openisle/model/ActivityType.java diff --git a/src/main/java/com/openisle/model/AiFormatUsage.java b/backend/src/main/java/com/openisle/model/AiFormatUsage.java similarity index 100% rename from src/main/java/com/openisle/model/AiFormatUsage.java rename to backend/src/main/java/com/openisle/model/AiFormatUsage.java diff --git a/src/main/java/com/openisle/model/Category.java b/backend/src/main/java/com/openisle/model/Category.java similarity index 100% rename from src/main/java/com/openisle/model/Category.java rename to backend/src/main/java/com/openisle/model/Category.java diff --git a/src/main/java/com/openisle/model/Comment.java b/backend/src/main/java/com/openisle/model/Comment.java similarity index 100% rename from src/main/java/com/openisle/model/Comment.java rename to backend/src/main/java/com/openisle/model/Comment.java diff --git a/src/main/java/com/openisle/model/CommentSort.java b/backend/src/main/java/com/openisle/model/CommentSort.java similarity index 100% rename from src/main/java/com/openisle/model/CommentSort.java rename to backend/src/main/java/com/openisle/model/CommentSort.java diff --git a/src/main/java/com/openisle/model/CommentSubscription.java b/backend/src/main/java/com/openisle/model/CommentSubscription.java similarity index 100% rename from src/main/java/com/openisle/model/CommentSubscription.java rename to backend/src/main/java/com/openisle/model/CommentSubscription.java diff --git a/src/main/java/com/openisle/model/Draft.java b/backend/src/main/java/com/openisle/model/Draft.java similarity index 100% rename from src/main/java/com/openisle/model/Draft.java rename to backend/src/main/java/com/openisle/model/Draft.java diff --git a/src/main/java/com/openisle/model/ExperienceLog.java b/backend/src/main/java/com/openisle/model/ExperienceLog.java similarity index 100% rename from src/main/java/com/openisle/model/ExperienceLog.java rename to backend/src/main/java/com/openisle/model/ExperienceLog.java diff --git a/src/main/java/com/openisle/model/Image.java b/backend/src/main/java/com/openisle/model/Image.java similarity index 100% rename from src/main/java/com/openisle/model/Image.java rename to backend/src/main/java/com/openisle/model/Image.java diff --git a/src/main/java/com/openisle/model/Notification.java b/backend/src/main/java/com/openisle/model/Notification.java similarity index 100% rename from src/main/java/com/openisle/model/Notification.java rename to backend/src/main/java/com/openisle/model/Notification.java diff --git a/src/main/java/com/openisle/model/NotificationType.java b/backend/src/main/java/com/openisle/model/NotificationType.java similarity index 100% rename from src/main/java/com/openisle/model/NotificationType.java rename to backend/src/main/java/com/openisle/model/NotificationType.java diff --git a/src/main/java/com/openisle/model/PasswordStrength.java b/backend/src/main/java/com/openisle/model/PasswordStrength.java similarity index 100% rename from src/main/java/com/openisle/model/PasswordStrength.java rename to backend/src/main/java/com/openisle/model/PasswordStrength.java diff --git a/src/main/java/com/openisle/model/Post.java b/backend/src/main/java/com/openisle/model/Post.java similarity index 100% rename from src/main/java/com/openisle/model/Post.java rename to backend/src/main/java/com/openisle/model/Post.java diff --git a/src/main/java/com/openisle/model/PostRead.java b/backend/src/main/java/com/openisle/model/PostRead.java similarity index 100% rename from src/main/java/com/openisle/model/PostRead.java rename to backend/src/main/java/com/openisle/model/PostRead.java diff --git a/src/main/java/com/openisle/model/PostStatus.java b/backend/src/main/java/com/openisle/model/PostStatus.java similarity index 100% rename from src/main/java/com/openisle/model/PostStatus.java rename to backend/src/main/java/com/openisle/model/PostStatus.java diff --git a/src/main/java/com/openisle/model/PostSubscription.java b/backend/src/main/java/com/openisle/model/PostSubscription.java similarity index 100% rename from src/main/java/com/openisle/model/PostSubscription.java rename to backend/src/main/java/com/openisle/model/PostSubscription.java diff --git a/src/main/java/com/openisle/model/PublishMode.java b/backend/src/main/java/com/openisle/model/PublishMode.java similarity index 100% rename from src/main/java/com/openisle/model/PublishMode.java rename to backend/src/main/java/com/openisle/model/PublishMode.java diff --git a/src/main/java/com/openisle/model/PushSubscription.java b/backend/src/main/java/com/openisle/model/PushSubscription.java similarity index 100% rename from src/main/java/com/openisle/model/PushSubscription.java rename to backend/src/main/java/com/openisle/model/PushSubscription.java diff --git a/src/main/java/com/openisle/model/Reaction.java b/backend/src/main/java/com/openisle/model/Reaction.java similarity index 100% rename from src/main/java/com/openisle/model/Reaction.java rename to backend/src/main/java/com/openisle/model/Reaction.java diff --git a/src/main/java/com/openisle/model/ReactionType.java b/backend/src/main/java/com/openisle/model/ReactionType.java similarity index 68% rename from src/main/java/com/openisle/model/ReactionType.java rename to backend/src/main/java/com/openisle/model/ReactionType.java index 34ab2c1af..b7811a499 100644 --- a/src/main/java/com/openisle/model/ReactionType.java +++ b/backend/src/main/java/com/openisle/model/ReactionType.java @@ -15,5 +15,16 @@ public enum ReactionType { MIND_BLOWN, POOP, CLOWN, - SKULL + SKULL, + FIRE, + EYES, + FROWN, + HOT, + EAGLE, + SPIDER, + BAT, + CHINA, + USA, + JAPAN, + KOREA } diff --git a/src/main/java/com/openisle/model/RegisterMode.java b/backend/src/main/java/com/openisle/model/RegisterMode.java similarity index 100% rename from src/main/java/com/openisle/model/RegisterMode.java rename to backend/src/main/java/com/openisle/model/RegisterMode.java diff --git a/src/main/java/com/openisle/model/Role.java b/backend/src/main/java/com/openisle/model/Role.java similarity index 100% rename from src/main/java/com/openisle/model/Role.java rename to backend/src/main/java/com/openisle/model/Role.java diff --git a/src/main/java/com/openisle/model/Tag.java b/backend/src/main/java/com/openisle/model/Tag.java similarity index 100% rename from src/main/java/com/openisle/model/Tag.java rename to backend/src/main/java/com/openisle/model/Tag.java diff --git a/src/main/java/com/openisle/model/User.java b/backend/src/main/java/com/openisle/model/User.java similarity index 100% rename from src/main/java/com/openisle/model/User.java rename to backend/src/main/java/com/openisle/model/User.java diff --git a/src/main/java/com/openisle/model/UserSubscription.java b/backend/src/main/java/com/openisle/model/UserSubscription.java similarity index 100% rename from src/main/java/com/openisle/model/UserSubscription.java rename to backend/src/main/java/com/openisle/model/UserSubscription.java diff --git a/src/main/java/com/openisle/model/UserVisit.java b/backend/src/main/java/com/openisle/model/UserVisit.java similarity index 100% rename from src/main/java/com/openisle/model/UserVisit.java rename to backend/src/main/java/com/openisle/model/UserVisit.java diff --git a/src/main/java/com/openisle/repository/ActivityRepository.java b/backend/src/main/java/com/openisle/repository/ActivityRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/ActivityRepository.java rename to backend/src/main/java/com/openisle/repository/ActivityRepository.java diff --git a/src/main/java/com/openisle/repository/AiFormatUsageRepository.java b/backend/src/main/java/com/openisle/repository/AiFormatUsageRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/AiFormatUsageRepository.java rename to backend/src/main/java/com/openisle/repository/AiFormatUsageRepository.java diff --git a/src/main/java/com/openisle/repository/CategoryRepository.java b/backend/src/main/java/com/openisle/repository/CategoryRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/CategoryRepository.java rename to backend/src/main/java/com/openisle/repository/CategoryRepository.java diff --git a/src/main/java/com/openisle/repository/CommentRepository.java b/backend/src/main/java/com/openisle/repository/CommentRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/CommentRepository.java rename to backend/src/main/java/com/openisle/repository/CommentRepository.java diff --git a/src/main/java/com/openisle/repository/CommentSubscriptionRepository.java b/backend/src/main/java/com/openisle/repository/CommentSubscriptionRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/CommentSubscriptionRepository.java rename to backend/src/main/java/com/openisle/repository/CommentSubscriptionRepository.java diff --git a/src/main/java/com/openisle/repository/DraftRepository.java b/backend/src/main/java/com/openisle/repository/DraftRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/DraftRepository.java rename to backend/src/main/java/com/openisle/repository/DraftRepository.java diff --git a/src/main/java/com/openisle/repository/ExperienceLogRepository.java b/backend/src/main/java/com/openisle/repository/ExperienceLogRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/ExperienceLogRepository.java rename to backend/src/main/java/com/openisle/repository/ExperienceLogRepository.java diff --git a/src/main/java/com/openisle/repository/ImageRepository.java b/backend/src/main/java/com/openisle/repository/ImageRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/ImageRepository.java rename to backend/src/main/java/com/openisle/repository/ImageRepository.java diff --git a/src/main/java/com/openisle/repository/NotificationRepository.java b/backend/src/main/java/com/openisle/repository/NotificationRepository.java similarity index 89% rename from src/main/java/com/openisle/repository/NotificationRepository.java rename to backend/src/main/java/com/openisle/repository/NotificationRepository.java index f0d538c49..0cbec0d60 100644 --- a/src/main/java/com/openisle/repository/NotificationRepository.java +++ b/backend/src/main/java/com/openisle/repository/NotificationRepository.java @@ -18,4 +18,6 @@ public interface NotificationRepository extends JpaRepository findByComment(Comment comment); void deleteByTypeAndFromUser(NotificationType type, User fromUser); + + void deleteByTypeAndFromUserAndPost(NotificationType type, User fromUser, Post post); } diff --git a/src/main/java/com/openisle/repository/PostReadRepository.java b/backend/src/main/java/com/openisle/repository/PostReadRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/PostReadRepository.java rename to backend/src/main/java/com/openisle/repository/PostReadRepository.java diff --git a/src/main/java/com/openisle/repository/PostRepository.java b/backend/src/main/java/com/openisle/repository/PostRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/PostRepository.java rename to backend/src/main/java/com/openisle/repository/PostRepository.java diff --git a/src/main/java/com/openisle/repository/PostSubscriptionRepository.java b/backend/src/main/java/com/openisle/repository/PostSubscriptionRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/PostSubscriptionRepository.java rename to backend/src/main/java/com/openisle/repository/PostSubscriptionRepository.java diff --git a/src/main/java/com/openisle/repository/PushSubscriptionRepository.java b/backend/src/main/java/com/openisle/repository/PushSubscriptionRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/PushSubscriptionRepository.java rename to backend/src/main/java/com/openisle/repository/PushSubscriptionRepository.java diff --git a/src/main/java/com/openisle/repository/ReactionRepository.java b/backend/src/main/java/com/openisle/repository/ReactionRepository.java similarity index 72% rename from src/main/java/com/openisle/repository/ReactionRepository.java rename to backend/src/main/java/com/openisle/repository/ReactionRepository.java index 047742120..e66c1f568 100644 --- a/src/main/java/com/openisle/repository/ReactionRepository.java +++ b/backend/src/main/java/com/openisle/repository/ReactionRepository.java @@ -30,9 +30,27 @@ public interface ReactionRepository extends JpaRepository { @Query("SELECT COUNT(r) FROM Reaction r WHERE r.user.username = :username AND r.createdAt >= :start") long countByUserAfter(@Param("username") String username, @Param("start") java.time.LocalDateTime start); - @Query("SELECT COUNT(r) FROM Reaction r WHERE r.type = com.openisle.model.ReactionType.LIKE AND ((r.post IS NOT NULL AND r.post.author.username = :username) OR (r.comment IS NOT NULL AND r.comment.author.username = :username))") + @Query(""" + SELECT COUNT(DISTINCT r.id) + FROM Reaction r + LEFT JOIN r.post p + LEFT JOIN p.author pa + LEFT JOIN r.comment c + LEFT JOIN c.author ca + WHERE r.type = com.openisle.model.ReactionType.LIKE + AND ( + (r.post IS NOT NULL AND pa.username = :username) + OR (r.comment IS NOT NULL AND ca.username = :username) + ) + """) long countLikesReceived(@Param("username") String username); - @Query("SELECT COUNT(r) FROM Reaction r WHERE (r.post IS NOT NULL AND r.post.author.username = :username) OR (r.comment IS NOT NULL AND r.comment.author.username = :username)") + @Query(""" + SELECT COUNT(r) FROM Reaction r + LEFT JOIN r.post p + LEFT JOIN r.comment c + WHERE (p IS NOT NULL AND p.author.username = :username) OR + (c IS NOT NULL AND c.author.username = :username) + """) long countReceived(@Param("username") String username); } diff --git a/src/main/java/com/openisle/repository/TagRepository.java b/backend/src/main/java/com/openisle/repository/TagRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/TagRepository.java rename to backend/src/main/java/com/openisle/repository/TagRepository.java diff --git a/src/main/java/com/openisle/repository/UserRepository.java b/backend/src/main/java/com/openisle/repository/UserRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/UserRepository.java rename to backend/src/main/java/com/openisle/repository/UserRepository.java diff --git a/src/main/java/com/openisle/repository/UserSubscriptionRepository.java b/backend/src/main/java/com/openisle/repository/UserSubscriptionRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/UserSubscriptionRepository.java rename to backend/src/main/java/com/openisle/repository/UserSubscriptionRepository.java diff --git a/src/main/java/com/openisle/repository/UserVisitRepository.java b/backend/src/main/java/com/openisle/repository/UserVisitRepository.java similarity index 100% rename from src/main/java/com/openisle/repository/UserVisitRepository.java rename to backend/src/main/java/com/openisle/repository/UserVisitRepository.java diff --git a/src/main/java/com/openisle/service/ActivityService.java b/backend/src/main/java/com/openisle/service/ActivityService.java similarity index 100% rename from src/main/java/com/openisle/service/ActivityService.java rename to backend/src/main/java/com/openisle/service/ActivityService.java diff --git a/src/main/java/com/openisle/service/AiUsageService.java b/backend/src/main/java/com/openisle/service/AiUsageService.java similarity index 100% rename from src/main/java/com/openisle/service/AiUsageService.java rename to backend/src/main/java/com/openisle/service/AiUsageService.java diff --git a/src/main/java/com/openisle/service/AvatarGenerator.java b/backend/src/main/java/com/openisle/service/AvatarGenerator.java similarity index 100% rename from src/main/java/com/openisle/service/AvatarGenerator.java rename to backend/src/main/java/com/openisle/service/AvatarGenerator.java diff --git a/src/main/java/com/openisle/service/CaptchaService.java b/backend/src/main/java/com/openisle/service/CaptchaService.java similarity index 100% rename from src/main/java/com/openisle/service/CaptchaService.java rename to backend/src/main/java/com/openisle/service/CaptchaService.java diff --git a/src/main/java/com/openisle/service/CategoryService.java b/backend/src/main/java/com/openisle/service/CategoryService.java similarity index 100% rename from src/main/java/com/openisle/service/CategoryService.java rename to backend/src/main/java/com/openisle/service/CategoryService.java diff --git a/src/main/java/com/openisle/service/CommentService.java b/backend/src/main/java/com/openisle/service/CommentService.java similarity index 98% rename from src/main/java/com/openisle/service/CommentService.java rename to backend/src/main/java/com/openisle/service/CommentService.java index ce74c7d75..70eb764f6 100644 --- a/src/main/java/com/openisle/service/CommentService.java +++ b/backend/src/main/java/com/openisle/service/CommentService.java @@ -21,6 +21,7 @@ import org.springframework.stereotype.Service; import java.util.List; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; +import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor @@ -35,6 +36,7 @@ public class CommentService { private final NotificationRepository notificationRepository; private final ImageUploader imageUploader; + @Transactional public Comment addComment(String username, Long postId, String content) { long recent = commentRepository.countByAuthorAfter(username, java.time.LocalDateTime.now().minusMinutes(1)); @@ -68,6 +70,7 @@ public class CommentService { return comment; } + @Transactional public Comment addReply(String username, Long parentId, String content) { long recent = commentRepository.countByAuthorAfter(username, java.time.LocalDateTime.now().minusMinutes(1)); @@ -152,7 +155,7 @@ public class CommentService { return commentRepository.findLastCommentTime(post); } - @org.springframework.transaction.annotation.Transactional + @Transactional public void deleteComment(String username, Long id) { User user = userRepository.findByUsername(username) .orElseThrow(() -> new com.openisle.exception.NotFoundException("User not found")); @@ -164,7 +167,7 @@ public class CommentService { deleteCommentCascade(comment); } - @org.springframework.transaction.annotation.Transactional + @Transactional public void deleteCommentCascade(Comment comment) { List replies = commentRepository.findByParentOrderByCreatedAtAsc(comment); for (Comment c : replies) { diff --git a/src/main/java/com/openisle/service/CosImageUploader.java b/backend/src/main/java/com/openisle/service/CosImageUploader.java similarity index 100% rename from src/main/java/com/openisle/service/CosImageUploader.java rename to backend/src/main/java/com/openisle/service/CosImageUploader.java diff --git a/src/main/java/com/openisle/service/DiscordAuthService.java b/backend/src/main/java/com/openisle/service/DiscordAuthService.java similarity index 100% rename from src/main/java/com/openisle/service/DiscordAuthService.java rename to backend/src/main/java/com/openisle/service/DiscordAuthService.java diff --git a/src/main/java/com/openisle/service/DraftService.java b/backend/src/main/java/com/openisle/service/DraftService.java similarity index 100% rename from src/main/java/com/openisle/service/DraftService.java rename to backend/src/main/java/com/openisle/service/DraftService.java diff --git a/src/main/java/com/openisle/service/EmailSender.java b/backend/src/main/java/com/openisle/service/EmailSender.java similarity index 100% rename from src/main/java/com/openisle/service/EmailSender.java rename to backend/src/main/java/com/openisle/service/EmailSender.java diff --git a/src/main/java/com/openisle/service/GithubAuthService.java b/backend/src/main/java/com/openisle/service/GithubAuthService.java similarity index 100% rename from src/main/java/com/openisle/service/GithubAuthService.java rename to backend/src/main/java/com/openisle/service/GithubAuthService.java diff --git a/src/main/java/com/openisle/service/GoogleAuthService.java b/backend/src/main/java/com/openisle/service/GoogleAuthService.java similarity index 100% rename from src/main/java/com/openisle/service/GoogleAuthService.java rename to backend/src/main/java/com/openisle/service/GoogleAuthService.java diff --git a/src/main/java/com/openisle/service/ImageUploader.java b/backend/src/main/java/com/openisle/service/ImageUploader.java similarity index 100% rename from src/main/java/com/openisle/service/ImageUploader.java rename to backend/src/main/java/com/openisle/service/ImageUploader.java diff --git a/src/main/java/com/openisle/service/JwtService.java b/backend/src/main/java/com/openisle/service/JwtService.java similarity index 100% rename from src/main/java/com/openisle/service/JwtService.java rename to backend/src/main/java/com/openisle/service/JwtService.java diff --git a/src/main/java/com/openisle/service/LevelService.java b/backend/src/main/java/com/openisle/service/LevelService.java similarity index 100% rename from src/main/java/com/openisle/service/LevelService.java rename to backend/src/main/java/com/openisle/service/LevelService.java diff --git a/src/main/java/com/openisle/service/NotificationService.java b/backend/src/main/java/com/openisle/service/NotificationService.java similarity index 84% rename from src/main/java/com/openisle/service/NotificationService.java rename to backend/src/main/java/com/openisle/service/NotificationService.java index 561b59b28..ebd2d89fd 100644 --- a/src/main/java/com/openisle/service/NotificationService.java +++ b/backend/src/main/java/com/openisle/service/NotificationService.java @@ -9,6 +9,8 @@ import com.openisle.service.EmailSender; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.transaction.annotation.Transactional; + import java.util.Map; import java.util.regex.Pattern; @@ -76,23 +78,23 @@ public class NotificationService { emailSender.sendEmail(user.getEmail(), "您有新的回复", pushContent + ", 点击以查看: " + url); sendCustomPush(user, pushContent, url); } else if (type == NotificationType.REACTION && comment != null) { - long count = reactionRepository.countReceived(comment.getAuthor().getUsername()); - if (count % 5 == 0) { - String url = websiteUrl + "/messages"; - sendCustomPush(comment.getAuthor(), "你有新的互动", url); - if (comment.getAuthor().getEmail() != null) { - emailSender.sendEmail(comment.getAuthor().getEmail(), "你有新的互动", "你有新的互动, 点击以查看: " + url); - } - } +// long count = reactionRepository.countReceived(comment.getAuthor().getUsername()); +// if (count % 5 == 0) { +// String url = websiteUrl + "/messages"; +// sendCustomPush(comment.getAuthor(), "你有新的互动", url); +// if (comment.getAuthor().getEmail() != null) { +// emailSender.sendEmail(comment.getAuthor().getEmail(), "你有新的互动", "你有新的互动, 点击以查看: " + url); +// } +// } } else if (type == NotificationType.REACTION && post != null) { - long count = reactionRepository.countReceived(post.getAuthor().getUsername()); - if (count % 5 == 0) { - String url = websiteUrl + "/messages"; - sendCustomPush(post.getAuthor(), "你有新的互动", url); - if (post.getAuthor().getEmail() != null) { - emailSender.sendEmail(post.getAuthor().getEmail(), "你有新的互动", "你有新的互动, 点击以查看: " + url); - } - } +// long count = reactionRepository.countReceived(post.getAuthor().getUsername()); +// if (count % 5 == 0) { +// String url = websiteUrl + "/messages"; +// sendCustomPush(post.getAuthor(), "你有新的互动", url); +// if (post.getAuthor().getEmail() != null) { +// emailSender.sendEmail(post.getAuthor().getEmail(), "你有新的互动", "你有新的互动, 点击以查看: " + url); +// } +// } } }); diff --git a/src/main/java/com/openisle/service/OpenAiService.java b/backend/src/main/java/com/openisle/service/OpenAiService.java similarity index 100% rename from src/main/java/com/openisle/service/OpenAiService.java rename to backend/src/main/java/com/openisle/service/OpenAiService.java diff --git a/src/main/java/com/openisle/service/PasswordValidator.java b/backend/src/main/java/com/openisle/service/PasswordValidator.java similarity index 100% rename from src/main/java/com/openisle/service/PasswordValidator.java rename to backend/src/main/java/com/openisle/service/PasswordValidator.java diff --git a/src/main/java/com/openisle/service/PostReadService.java b/backend/src/main/java/com/openisle/service/PostReadService.java similarity index 100% rename from src/main/java/com/openisle/service/PostReadService.java rename to backend/src/main/java/com/openisle/service/PostReadService.java diff --git a/src/main/java/com/openisle/service/PostService.java b/backend/src/main/java/com/openisle/service/PostService.java similarity index 99% rename from src/main/java/com/openisle/service/PostService.java rename to backend/src/main/java/com/openisle/service/PostService.java index 2e124f3f4..c3293c4c9 100644 --- a/src/main/java/com/openisle/service/PostService.java +++ b/backend/src/main/java/com/openisle/service/PostService.java @@ -26,6 +26,7 @@ import java.util.List; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; +import org.springframework.transaction.annotation.Transactional; @Service public class PostService { @@ -143,6 +144,7 @@ public class PostService { return post; } + @Transactional public Post viewPost(Long id, String viewer) { Post post = postRepository.findById(id) .orElseThrow(() -> new com.openisle.exception.NotFoundException("Post not found")); @@ -164,9 +166,8 @@ public class PostService { if (viewer != null && !viewer.equals(post.getAuthor().getUsername())) { User viewerUser = userRepository.findByUsername(viewer).orElse(null); if (viewerUser != null) { + notificationRepository.deleteByTypeAndFromUserAndPost(NotificationType.POST_VIEWED, viewerUser, post); notificationService.createNotification(post.getAuthor(), NotificationType.POST_VIEWED, post, null, null, viewerUser, null, null); - } else { - notificationService.createNotification(post.getAuthor(), NotificationType.POST_VIEWED, post, null, null, null, null, null); } } return post; diff --git a/src/main/java/com/openisle/service/PushNotificationService.java b/backend/src/main/java/com/openisle/service/PushNotificationService.java similarity index 100% rename from src/main/java/com/openisle/service/PushNotificationService.java rename to backend/src/main/java/com/openisle/service/PushNotificationService.java diff --git a/src/main/java/com/openisle/service/PushSubscriptionService.java b/backend/src/main/java/com/openisle/service/PushSubscriptionService.java similarity index 100% rename from src/main/java/com/openisle/service/PushSubscriptionService.java rename to backend/src/main/java/com/openisle/service/PushSubscriptionService.java diff --git a/src/main/java/com/openisle/service/ReactionService.java b/backend/src/main/java/com/openisle/service/ReactionService.java similarity index 97% rename from src/main/java/com/openisle/service/ReactionService.java rename to backend/src/main/java/com/openisle/service/ReactionService.java index 393de62b3..b6cda46f5 100644 --- a/src/main/java/com/openisle/service/ReactionService.java +++ b/backend/src/main/java/com/openisle/service/ReactionService.java @@ -15,6 +15,7 @@ import com.openisle.service.EmailSender; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor @@ -29,6 +30,7 @@ public class ReactionService { @Value("${app.website-url}") private String websiteUrl; + @Transactional public Reaction reactToPost(String username, Long postId, ReactionType type) { User user = userRepository.findByUsername(username) .orElseThrow(() -> new com.openisle.exception.NotFoundException("User not found")); @@ -51,6 +53,7 @@ public class ReactionService { return reaction; } + @Transactional public Reaction reactToComment(String username, Long commentId, ReactionType type) { User user = userRepository.findByUsername(username) .orElseThrow(() -> new com.openisle.exception.NotFoundException("User not found")); diff --git a/src/main/java/com/openisle/service/RecaptchaService.java b/backend/src/main/java/com/openisle/service/RecaptchaService.java similarity index 100% rename from src/main/java/com/openisle/service/RecaptchaService.java rename to backend/src/main/java/com/openisle/service/RecaptchaService.java diff --git a/src/main/java/com/openisle/service/RegisterModeService.java b/backend/src/main/java/com/openisle/service/RegisterModeService.java similarity index 100% rename from src/main/java/com/openisle/service/RegisterModeService.java rename to backend/src/main/java/com/openisle/service/RegisterModeService.java diff --git a/src/main/java/com/openisle/service/ResendEmailSender.java b/backend/src/main/java/com/openisle/service/ResendEmailSender.java similarity index 100% rename from src/main/java/com/openisle/service/ResendEmailSender.java rename to backend/src/main/java/com/openisle/service/ResendEmailSender.java diff --git a/src/main/java/com/openisle/service/SearchService.java b/backend/src/main/java/com/openisle/service/SearchService.java similarity index 100% rename from src/main/java/com/openisle/service/SearchService.java rename to backend/src/main/java/com/openisle/service/SearchService.java diff --git a/src/main/java/com/openisle/service/SubscriptionService.java b/backend/src/main/java/com/openisle/service/SubscriptionService.java similarity index 100% rename from src/main/java/com/openisle/service/SubscriptionService.java rename to backend/src/main/java/com/openisle/service/SubscriptionService.java diff --git a/src/main/java/com/openisle/service/TagService.java b/backend/src/main/java/com/openisle/service/TagService.java similarity index 100% rename from src/main/java/com/openisle/service/TagService.java rename to backend/src/main/java/com/openisle/service/TagService.java diff --git a/src/main/java/com/openisle/service/TagValidator.java b/backend/src/main/java/com/openisle/service/TagValidator.java similarity index 100% rename from src/main/java/com/openisle/service/TagValidator.java rename to backend/src/main/java/com/openisle/service/TagValidator.java diff --git a/src/main/java/com/openisle/service/TwitterAuthService.java b/backend/src/main/java/com/openisle/service/TwitterAuthService.java similarity index 100% rename from src/main/java/com/openisle/service/TwitterAuthService.java rename to backend/src/main/java/com/openisle/service/TwitterAuthService.java diff --git a/src/main/java/com/openisle/service/UserService.java b/backend/src/main/java/com/openisle/service/UserService.java similarity index 100% rename from src/main/java/com/openisle/service/UserService.java rename to backend/src/main/java/com/openisle/service/UserService.java diff --git a/src/main/java/com/openisle/service/UserVisitService.java b/backend/src/main/java/com/openisle/service/UserVisitService.java similarity index 100% rename from src/main/java/com/openisle/service/UserVisitService.java rename to backend/src/main/java/com/openisle/service/UserVisitService.java diff --git a/src/main/java/com/openisle/service/UsernameValidator.java b/backend/src/main/java/com/openisle/service/UsernameValidator.java similarity index 100% rename from src/main/java/com/openisle/service/UsernameValidator.java rename to backend/src/main/java/com/openisle/service/UsernameValidator.java diff --git a/src/main/resources/application.properties b/backend/src/main/resources/application.properties similarity index 100% rename from src/main/resources/application.properties rename to backend/src/main/resources/application.properties diff --git a/src/test/java/com/openisle/controller/AdminControllerTest.java b/backend/src/test/java/com/openisle/controller/AdminControllerTest.java similarity index 100% rename from src/test/java/com/openisle/controller/AdminControllerTest.java rename to backend/src/test/java/com/openisle/controller/AdminControllerTest.java diff --git a/src/test/java/com/openisle/controller/AuthControllerTest.java b/backend/src/test/java/com/openisle/controller/AuthControllerTest.java similarity index 100% rename from src/test/java/com/openisle/controller/AuthControllerTest.java rename to backend/src/test/java/com/openisle/controller/AuthControllerTest.java diff --git a/src/test/java/com/openisle/controller/CategoryControllerTest.java b/backend/src/test/java/com/openisle/controller/CategoryControllerTest.java similarity index 100% rename from src/test/java/com/openisle/controller/CategoryControllerTest.java rename to backend/src/test/java/com/openisle/controller/CategoryControllerTest.java diff --git a/src/test/java/com/openisle/controller/CommentControllerTest.java b/backend/src/test/java/com/openisle/controller/CommentControllerTest.java similarity index 94% rename from src/test/java/com/openisle/controller/CommentControllerTest.java rename to backend/src/test/java/com/openisle/controller/CommentControllerTest.java index 8eeabbef9..eb9cfde2a 100644 --- a/src/test/java/com/openisle/controller/CommentControllerTest.java +++ b/backend/src/test/java/com/openisle/controller/CommentControllerTest.java @@ -6,6 +6,7 @@ import com.openisle.model.User; import com.openisle.service.CommentService; import com.openisle.service.CaptchaService; import com.openisle.service.LevelService; +import com.openisle.service.ReactionService; import org.junit.jupiter.api.Test; import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; @@ -37,6 +38,8 @@ class CommentControllerTest { private CaptchaService captchaService; @MockBean private LevelService levelService; + @MockBean + private ReactionService reactionService; private Comment createComment(Long id, String content, String authorName) { User user = new User(); @@ -56,6 +59,7 @@ class CommentControllerTest { Mockito.when(commentService.addComment(eq("bob"), eq(1L), eq("hi"))).thenReturn(comment); Mockito.when(commentService.getCommentsForPost(eq(1L), any())).thenReturn(List.of(comment)); Mockito.when(commentService.getReplies(1L)).thenReturn(List.of()); + Mockito.when(reactionService.getReactionsForComment(1L)).thenReturn(List.of()); mockMvc.perform(post("/api/posts/1/comments") .contentType("application/json") diff --git a/src/test/java/com/openisle/controller/HelloControllerTest.java b/backend/src/test/java/com/openisle/controller/HelloControllerTest.java similarity index 100% rename from src/test/java/com/openisle/controller/HelloControllerTest.java rename to backend/src/test/java/com/openisle/controller/HelloControllerTest.java diff --git a/src/test/java/com/openisle/controller/NotificationControllerTest.java b/backend/src/test/java/com/openisle/controller/NotificationControllerTest.java similarity index 100% rename from src/test/java/com/openisle/controller/NotificationControllerTest.java rename to backend/src/test/java/com/openisle/controller/NotificationControllerTest.java diff --git a/src/test/java/com/openisle/controller/PostControllerTest.java b/backend/src/test/java/com/openisle/controller/PostControllerTest.java similarity index 100% rename from src/test/java/com/openisle/controller/PostControllerTest.java rename to backend/src/test/java/com/openisle/controller/PostControllerTest.java diff --git a/src/test/java/com/openisle/controller/PushSubscriptionControllerTest.java b/backend/src/test/java/com/openisle/controller/PushSubscriptionControllerTest.java similarity index 100% rename from src/test/java/com/openisle/controller/PushSubscriptionControllerTest.java rename to backend/src/test/java/com/openisle/controller/PushSubscriptionControllerTest.java diff --git a/src/test/java/com/openisle/controller/ReactionControllerTest.java b/backend/src/test/java/com/openisle/controller/ReactionControllerTest.java similarity index 100% rename from src/test/java/com/openisle/controller/ReactionControllerTest.java rename to backend/src/test/java/com/openisle/controller/ReactionControllerTest.java diff --git a/src/test/java/com/openisle/controller/SearchControllerTest.java b/backend/src/test/java/com/openisle/controller/SearchControllerTest.java similarity index 100% rename from src/test/java/com/openisle/controller/SearchControllerTest.java rename to backend/src/test/java/com/openisle/controller/SearchControllerTest.java diff --git a/src/test/java/com/openisle/controller/StatControllerTest.java b/backend/src/test/java/com/openisle/controller/StatControllerTest.java similarity index 100% rename from src/test/java/com/openisle/controller/StatControllerTest.java rename to backend/src/test/java/com/openisle/controller/StatControllerTest.java diff --git a/src/test/java/com/openisle/controller/TagControllerTest.java b/backend/src/test/java/com/openisle/controller/TagControllerTest.java similarity index 100% rename from src/test/java/com/openisle/controller/TagControllerTest.java rename to backend/src/test/java/com/openisle/controller/TagControllerTest.java diff --git a/src/test/java/com/openisle/controller/UserControllerTest.java b/backend/src/test/java/com/openisle/controller/UserControllerTest.java similarity index 100% rename from src/test/java/com/openisle/controller/UserControllerTest.java rename to backend/src/test/java/com/openisle/controller/UserControllerTest.java diff --git a/src/test/java/com/openisle/integration/ComplexFlowIntegrationTest.java b/backend/src/test/java/com/openisle/integration/ComplexFlowIntegrationTest.java similarity index 100% rename from src/test/java/com/openisle/integration/ComplexFlowIntegrationTest.java rename to backend/src/test/java/com/openisle/integration/ComplexFlowIntegrationTest.java diff --git a/src/test/java/com/openisle/integration/PublishModeIntegrationTest.java b/backend/src/test/java/com/openisle/integration/PublishModeIntegrationTest.java similarity index 100% rename from src/test/java/com/openisle/integration/PublishModeIntegrationTest.java rename to backend/src/test/java/com/openisle/integration/PublishModeIntegrationTest.java diff --git a/src/test/java/com/openisle/integration/SearchIntegrationTest.java b/backend/src/test/java/com/openisle/integration/SearchIntegrationTest.java similarity index 100% rename from src/test/java/com/openisle/integration/SearchIntegrationTest.java rename to backend/src/test/java/com/openisle/integration/SearchIntegrationTest.java diff --git a/src/test/java/com/openisle/service/CommentServiceTest.java b/backend/src/test/java/com/openisle/service/CommentServiceTest.java similarity index 100% rename from src/test/java/com/openisle/service/CommentServiceTest.java rename to backend/src/test/java/com/openisle/service/CommentServiceTest.java diff --git a/src/test/java/com/openisle/service/CosImageUploaderTest.java b/backend/src/test/java/com/openisle/service/CosImageUploaderTest.java similarity index 100% rename from src/test/java/com/openisle/service/CosImageUploaderTest.java rename to backend/src/test/java/com/openisle/service/CosImageUploaderTest.java diff --git a/src/test/java/com/openisle/service/NotificationServiceTest.java b/backend/src/test/java/com/openisle/service/NotificationServiceTest.java similarity index 86% rename from src/test/java/com/openisle/service/NotificationServiceTest.java rename to backend/src/test/java/com/openisle/service/NotificationServiceTest.java index 59d43d5e4..c4ca007a1 100644 --- a/src/test/java/com/openisle/service/NotificationServiceTest.java +++ b/backend/src/test/java/com/openisle/service/NotificationServiceTest.java @@ -168,4 +168,27 @@ class NotificationServiceTest { verify(email).sendEmail("a@a.com", "有人回复了你", "https://ex.com/posts/1#comment-2"); verify(push).sendNotification(eq(user), contains("/posts/1#comment-2")); } + + @Test + void postViewedNotificationDeletesOldOnes() { + NotificationRepository nRepo = mock(NotificationRepository.class); + UserRepository uRepo = mock(UserRepository.class); + ReactionRepository rRepo = mock(ReactionRepository.class); + EmailSender email = mock(EmailSender.class); + PushNotificationService push = mock(PushNotificationService.class); + Executor executor = Runnable::run; + NotificationService service = new NotificationService(nRepo, uRepo, email, push, rRepo, executor); + org.springframework.test.util.ReflectionTestUtils.setField(service, "websiteUrl", "https://ex.com"); + + User owner = new User(); + User viewer = new User(); + Post post = new Post(); + + when(nRepo.save(any(Notification.class))).thenAnswer(i -> i.getArgument(0)); + + service.createNotification(owner, NotificationType.POST_VIEWED, post, null, null, viewer, null, null); + + verify(nRepo).deleteByTypeAndFromUserAndPost(NotificationType.POST_VIEWED, viewer, post); + verify(nRepo).save(any(Notification.class)); + } } diff --git a/src/test/java/com/openisle/service/PasswordValidatorTest.java b/backend/src/test/java/com/openisle/service/PasswordValidatorTest.java similarity index 100% rename from src/test/java/com/openisle/service/PasswordValidatorTest.java rename to backend/src/test/java/com/openisle/service/PasswordValidatorTest.java diff --git a/src/test/java/com/openisle/service/PostServiceTest.java b/backend/src/test/java/com/openisle/service/PostServiceTest.java similarity index 100% rename from src/test/java/com/openisle/service/PostServiceTest.java rename to backend/src/test/java/com/openisle/service/PostServiceTest.java diff --git a/src/test/java/com/openisle/service/ReactionServiceTest.java b/backend/src/test/java/com/openisle/service/ReactionServiceTest.java similarity index 100% rename from src/test/java/com/openisle/service/ReactionServiceTest.java rename to backend/src/test/java/com/openisle/service/ReactionServiceTest.java diff --git a/src/test/java/com/openisle/service/SearchServiceTest.java b/backend/src/test/java/com/openisle/service/SearchServiceTest.java similarity index 100% rename from src/test/java/com/openisle/service/SearchServiceTest.java rename to backend/src/test/java/com/openisle/service/SearchServiceTest.java diff --git a/src/test/java/com/openisle/service/UsernameValidatorTest.java b/backend/src/test/java/com/openisle/service/UsernameValidatorTest.java similarity index 100% rename from src/test/java/com/openisle/service/UsernameValidatorTest.java rename to backend/src/test/java/com/openisle/service/UsernameValidatorTest.java diff --git a/src/test/resources/application.properties b/backend/src/test/resources/application.properties similarity index 100% rename from src/test/resources/application.properties rename to backend/src/test/resources/application.properties diff --git a/open-isle-cli/babel.config.js b/frontend/babel.config.js similarity index 100% rename from open-isle-cli/babel.config.js rename to frontend/babel.config.js diff --git a/open-isle-cli/jsconfig.json b/frontend/jsconfig.json similarity index 100% rename from open-isle-cli/jsconfig.json rename to frontend/jsconfig.json diff --git a/open-isle-cli/package-lock.json b/frontend/package-lock.json similarity index 100% rename from open-isle-cli/package-lock.json rename to frontend/package-lock.json diff --git a/open-isle-cli/package.json b/frontend/package.json similarity index 100% rename from open-isle-cli/package.json rename to frontend/package.json diff --git a/open-isle-cli/public/about/about.md b/frontend/public/about/about.md similarity index 100% rename from open-isle-cli/public/about/about.md rename to frontend/public/about/about.md diff --git a/open-isle-cli/public/about/agreement.md b/frontend/public/about/agreement.md similarity index 100% rename from open-isle-cli/public/about/agreement.md rename to frontend/public/about/agreement.md diff --git a/open-isle-cli/public/about/guideline.md b/frontend/public/about/guideline.md similarity index 100% rename from open-isle-cli/public/about/guideline.md rename to frontend/public/about/guideline.md diff --git a/open-isle-cli/public/about/privacy.md b/frontend/public/about/privacy.md similarity index 100% rename from open-isle-cli/public/about/privacy.md rename to frontend/public/about/privacy.md diff --git a/open-isle-cli/public/favicon.ico b/frontend/public/favicon.ico similarity index 100% rename from open-isle-cli/public/favicon.ico rename to frontend/public/favicon.ico diff --git a/open-isle-cli/public/googlea6f18c4a543fb356.html b/frontend/public/googlea6f18c4a543fb356.html similarity index 100% rename from open-isle-cli/public/googlea6f18c4a543fb356.html rename to frontend/public/googlea6f18c4a543fb356.html diff --git a/frontend/public/icon-120.png b/frontend/public/icon-120.png new file mode 100644 index 000000000..67392b878 Binary files /dev/null and b/frontend/public/icon-120.png differ diff --git a/frontend/public/icon-152.png b/frontend/public/icon-152.png new file mode 100644 index 000000000..bf6bae839 Binary files /dev/null and b/frontend/public/icon-152.png differ diff --git a/frontend/public/icon-180.png b/frontend/public/icon-180.png new file mode 100644 index 000000000..07b316714 Binary files /dev/null and b/frontend/public/icon-180.png differ diff --git a/frontend/public/icon-192.png b/frontend/public/icon-192.png new file mode 100644 index 000000000..9da61afd4 Binary files /dev/null and b/frontend/public/icon-192.png differ diff --git a/frontend/public/icon-512.png b/frontend/public/icon-512.png new file mode 100644 index 000000000..af16336e2 Binary files /dev/null and b/frontend/public/icon-512.png differ diff --git a/open-isle-cli/public/index.html b/frontend/public/index.html similarity index 76% rename from open-isle-cli/public/index.html rename to frontend/public/index.html index de8ad157a..dfdea33bc 100644 --- a/open-isle-cli/public/index.html +++ b/frontend/public/index.html @@ -14,6 +14,14 @@ + + + + + + + + diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json new file mode 100644 index 000000000..5bc639a6d --- /dev/null +++ b/frontend/public/manifest.json @@ -0,0 +1,18 @@ +{ + "name": "OpenIsle", + "short_name": "OpenIsle", + "start_url": "/", + "display": "standalone", + "icons": [ + { + "src": "/icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/icon-512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} diff --git a/open-isle-cli/public/notifications-sw.js b/frontend/public/notifications-sw.js similarity index 100% rename from open-isle-cli/public/notifications-sw.js rename to frontend/public/notifications-sw.js diff --git a/open-isle-cli/public/robots.txt b/frontend/public/robots.txt similarity index 100% rename from open-isle-cli/public/robots.txt rename to frontend/public/robots.txt diff --git a/open-isle-cli/src/App.vue b/frontend/src/App.vue similarity index 68% rename from open-isle-cli/src/App.vue rename to frontend/src/App.vue index c78759ac9..b3634be7a 100644 --- a/open-isle-cli/src/App.vue +++ b/frontend/src/App.vue @@ -1,23 +1,14 @@ + diff --git a/open-isle-cli/src/views/EditPostPageView.vue b/frontend/src/views/EditPostPageView.vue similarity index 100% rename from open-isle-cli/src/views/EditPostPageView.vue rename to frontend/src/views/EditPostPageView.vue diff --git a/open-isle-cli/src/views/ForgotPasswordPageView.vue b/frontend/src/views/ForgotPasswordPageView.vue similarity index 100% rename from open-isle-cli/src/views/ForgotPasswordPageView.vue rename to frontend/src/views/ForgotPasswordPageView.vue diff --git a/frontend/src/views/GithubCallbackPageView.vue b/frontend/src/views/GithubCallbackPageView.vue new file mode 100644 index 000000000..873bb6ba0 --- /dev/null +++ b/frontend/src/views/GithubCallbackPageView.vue @@ -0,0 +1,26 @@ + + + + diff --git a/frontend/src/views/GoogleCallbackPageView.vue b/frontend/src/views/GoogleCallbackPageView.vue new file mode 100644 index 000000000..2a5efef19 --- /dev/null +++ b/frontend/src/views/GoogleCallbackPageView.vue @@ -0,0 +1,27 @@ + + + + diff --git a/open-isle-cli/src/views/HomePageView.vue b/frontend/src/views/HomePageView.vue similarity index 98% rename from open-isle-cli/src/views/HomePageView.vue rename to frontend/src/views/HomePageView.vue index dbd6fd7f5..8fea56c14 100644 --- a/open-isle-cli/src/views/HomePageView.vue +++ b/frontend/src/views/HomePageView.vue @@ -165,6 +165,9 @@ export default { const pageSize = 10 const allLoaded = ref(false) + const countComments = (list) => + list.reduce((sum, c) => sum + 1 + countComments(c.replies || []), 0) + const loadOptions = async () => { if (selectedCategory.value && !isNaN(selectedCategory.value)) { try { @@ -254,7 +257,7 @@ export default { category: p.category, tags: p.tags || [], members: (p.participants || []).map(m => ({ id: m.id, avatar: m.avatar })), - comments: (p.comments || []).length, + comments: countComments(p.comments || []), views: p.views, time: TimeManager.format(p.createdAt), pinned: !!p.pinnedAt @@ -291,7 +294,7 @@ export default { category: p.category, tags: p.tags || [], members: (p.participants || []).map(m => ({ id: m.id, avatar: m.avatar })), - comments: (p.comments || []).length, + comments: countComments(p.comments || []), views: p.views, time: TimeManager.format(p.createdAt), pinned: !!p.pinnedAt @@ -328,7 +331,7 @@ export default { category: p.category, tags: p.tags || [], members: (p.participants || []).map(m => ({ id: m.id, avatar: m.avatar })), - comments: (p.comments || []).length, + comments: countComments(p.comments || []), views: p.views, time: TimeManager.format(p.lastReplyAt || p.createdAt), pinned: !!p.pinnedAt @@ -483,6 +486,7 @@ export default { flex-direction: column; align-items: center; width: 100%; + padding-bottom: 100px; } .article-header-container { @@ -715,6 +719,7 @@ export default { .article-item-description { margin-top: 2px; font-size: 10px; + max-width: 100%; } .main-info-text { diff --git a/open-isle-cli/src/views/LoginPageView.vue b/frontend/src/views/LoginPageView.vue similarity index 97% rename from open-isle-cli/src/views/LoginPageView.vue rename to frontend/src/views/LoginPageView.vue index cba93fb48..4a33fb508 100644 --- a/open-isle-cli/src/views/LoginPageView.vue +++ b/frontend/src/views/LoginPageView.vue @@ -31,7 +31,7 @@