Compare commits

..

13 Commits

Author SHA1 Message Date
723992f360 fix Regex update for timi-utils 2025-11-06 14:53:46 +08:00
05e15998f5 update timi-lang 2025-11-06 14:52:13 +08:00
44d55c0ed6 add SettingService.clearCache 2025-11-06 14:51:42 +08:00
06bb86ccd5 fix list comment error 2025-11-06 14:51:29 +08:00
6f1cf2083d fix article page sort 2025-11-06 14:50:44 +08:00
fd71f330d2 add Journal module 2025-11-06 14:50:28 +08:00
cdff62b3b5 update minecraft server/client 2025-11-06 14:48:58 +08:00
2ba868b3b6 support add media thumb attachment 2025-11-06 14:47:48 +08:00
c270ae177d add TempFileService 2025-11-06 14:46:26 +08:00
323e038e86 rename com.imyeyu.server to com.imyeyu.api 2025-07-22 15:26:14 +08:00
e816b885b2 add GIT_ABOUT_ARTICLE setting 2025-07-22 14:16:35 +08:00
53230943e8 remove Article ABOUT type,classId and add canList attr 2025-07-22 14:16:24 +08:00
2de29cb3a8 support RequestRange for system file download 2025-07-15 11:44:57 +08:00
371 changed files with 3064 additions and 1582 deletions

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
/data
/logs
/target
/temp
multilingualField/
!.mvn/wrapper/maven-wrapper.jar

2
.idea/.gitignore generated vendored
View File

@ -1,3 +1,5 @@
# Default ignored files
/shelf/
/workspace.xml
CopilotChatHistory.xml
developer-tools.xml

84
pom.xml
View File

@ -30,6 +30,57 @@
</repository>
</repositories>
<profiles>
<profile>
<id>dev-windows</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<native.classifier>windows-x86_64</native.classifier>
</properties>
</profile>
<profile>
<id>prod-linux</id>
<dependencies>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg</artifactId>
<version>7.1.1-1.5.12</version>
<classifier>linux-x86_64</classifier>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>opencv</artifactId>
<version>4.11.0-1.5.12</version>
<classifier>linux-x86_64</classifier>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg</artifactId>
<classifier>windows-x86_64</classifier>
</exclude>
<exclude>
<groupId>org.bytedeco</groupId>
<artifactId>opencv</artifactId>
<classifier>windows-x86_64</classifier>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<build>
<defaultGoal>compile</defaultGoal>
<plugins>
@ -46,7 +97,7 @@
</executions>
<configuration>
<excludeDevtools>true</excludeDevtools>
<mainClass>com.imyeyu.server.TimiServerAPI</mainClass>
<mainClass>com.imyeyu.api.TimiServerAPI</mainClass>
<finalName>${project.artifactId}</finalName>
</configuration>
</plugin>
@ -57,17 +108,17 @@
<dependency>
<groupId>com.imyeyu.spring</groupId>
<artifactId>timi-spring</artifactId>
<version>0.0.1</version>
<version>0.0.2</version>
</dependency>
<dependency>
<groupId>com.imyeyu.network</groupId>
<artifactId>timi-network</artifactId>
<version>0.0.1</version>
<version>0.0.2</version>
</dependency>
<dependency>
<groupId>com.imyeyu.lang</groupId>
<artifactId>timi-lang</artifactId>
<version>0.0.1</version>
<version>0.0.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
@ -167,6 +218,25 @@
<artifactId>jcodec-javase</artifactId>
<version>0.2.5</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv</artifactId>
<version>1.5.12</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>ffmpeg</artifactId>
<version>7.1.1-1.5.12</version>
<scope>provided</scope>
<classifier>windows-x86_64</classifier>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>opencv</artifactId>
<version>4.11.0-1.5.12</version>
<scope>provided</scope>
<classifier>windows-x86_64</classifier>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
@ -177,5 +247,11 @@
<artifactId>commons-codec</artifactId>
<version>1.17.0</version>
</dependency>
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.9.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -1,4 +1,4 @@
package com.imyeyu.server;
package com.imyeyu.api;
import com.imyeyu.io.IO;
import com.imyeyu.java.TimiJava;
@ -27,7 +27,7 @@ import java.io.File;
* @since 2021-02-23 21:35
*/
@Slf4j
@SpringBootApplication(scanBasePackages = {"com.imyeyu.server", "com.imyeyu.spring"})
@SpringBootApplication(scanBasePackages = {"com.imyeyu.api", "com.imyeyu.spring"})
@EnableTransactionManagement
public class TimiServerAPI implements OS.FileSystem, ApplicationContextAware {

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.annotation;
package com.imyeyu.api.annotation;
import com.imyeyu.server.bean.CaptchaFrom;
import com.imyeyu.api.bean.CaptchaFrom;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,8 +1,8 @@
package com.imyeyu.server.annotation;
package com.imyeyu.api.annotation;
import lombok.extern.slf4j.Slf4j;
import com.imyeyu.server.bean.CaptchaFrom;
import com.imyeyu.server.util.CaptchaManager;
import com.imyeyu.api.bean.CaptchaFrom;
import com.imyeyu.api.util.CaptchaManager;
import com.imyeyu.spring.bean.CaptchaData;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
@ -33,7 +33,7 @@ public class CaptchaValidInterceptor {
private CaptchaManager captchaManager;
/** 注入注解 */
@Pointcut("@annotation(com.imyeyu.server.annotation.CaptchaValid)")
@Pointcut("@annotation(com.imyeyu.api.annotation.CaptchaValid)")
public void captchaPointCut() {
}

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.annotation;
package com.imyeyu.api.annotation;
import com.imyeyu.server.modules.common.bean.SettingKey;
import com.imyeyu.api.modules.common.bean.SettingKey;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,11 +1,11 @@
package com.imyeyu.server.annotation;
package com.imyeyu.api.annotation;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import com.imyeyu.java.bean.timi.TimiCode;
import com.imyeyu.java.bean.timi.TimiException;
import com.imyeyu.server.modules.common.service.SettingService;
import com.imyeyu.api.modules.common.service.SettingService;
import org.springframework.context.annotation.Lazy;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.annotation;
package com.imyeyu.api.annotation;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

View File

@ -1,11 +1,11 @@
package com.imyeyu.server.annotation;
package com.imyeyu.api.annotation;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import com.imyeyu.java.bean.timi.TimiCode;
import com.imyeyu.java.bean.timi.TimiException;
import com.imyeyu.server.modules.blog.util.UserToken;
import com.imyeyu.api.modules.blog.util.UserToken;
import com.imyeyu.spring.TimiSpring;
import com.imyeyu.spring.annotation.RequiredToken;
import com.imyeyu.spring.annotation.RequiredTokenAbstractInterceptor;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.bean;
package com.imyeyu.api.bean;
/**
* 验证码来源

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.bean;
package com.imyeyu.api.bean;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.bean;
package com.imyeyu.api.bean;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.bean;
package com.imyeyu.api.bean;
import lombok.Data;
import com.imyeyu.utils.OS;

View File

@ -0,0 +1,15 @@
package com.imyeyu.api.bean.wechat;
import lombok.Data;
/**
* @author 夜雨
* @since 2025-09-27 11:33
*/
@Data
public class InitCodeResponse {
private String session_key;
private String openid;
}

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.config;
package com.imyeyu.api.config;
import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.config;
package com.imyeyu.api.config;
import com.google.gson.Gson;
import org.springframework.context.annotation.Configuration;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.config;
package com.imyeyu.api.config;
import jakarta.servlet.Filter;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.config;
package com.imyeyu.api.config;
import com.mongodb.client.MongoClient;
import com.mongodb.client.gridfs.GridFSBucket;

View File

@ -1,9 +1,9 @@
package com.imyeyu.server.config;
package com.imyeyu.api.config;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.imyeyu.server.modules.blog.entity.ArticleRanking;
import com.imyeyu.server.modules.common.entity.Multilingual;
import com.imyeyu.api.modules.blog.entity.ArticleRanking;
import com.imyeyu.api.modules.common.entity.Multilingual;
import com.imyeyu.spring.bean.RedisConfigParams;
import com.imyeyu.spring.config.AbstractRedisConfig;
import com.imyeyu.spring.util.Redis;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.config;
package com.imyeyu.api.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.config;
package com.imyeyu.api.config;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

View File

@ -1,17 +1,18 @@
package com.imyeyu.server.config;
package com.imyeyu.api.config;
import com.google.gson.GsonBuilder;
import com.imyeyu.server.annotation.EnableSettingInterceptor;
import com.imyeyu.server.annotation.RequestRateLimitInterceptor;
import com.imyeyu.server.annotation.RequiredTokenInterceptor;
import com.imyeyu.server.modules.common.entity.Attachment;
import com.imyeyu.server.modules.common.vo.user.UserProfileView;
import com.imyeyu.server.modules.common.vo.user.UserView;
import com.imyeyu.server.modules.minecraft.annotation.RequiredFMCServerTokenInterceptor;
import com.imyeyu.server.modules.minecraft.entity.MinecraftPlayer;
import com.imyeyu.server.modules.mirror.vo.MirrorView;
import com.imyeyu.server.modules.system.util.SystemAPIInterceptor;
import com.imyeyu.server.util.GsonSerializerAdapter;
import com.imyeyu.api.annotation.EnableSettingInterceptor;
import com.imyeyu.api.annotation.RequestRateLimitInterceptor;
import com.imyeyu.api.annotation.RequiredTokenInterceptor;
import com.imyeyu.api.modules.common.entity.Attachment;
import com.imyeyu.api.modules.common.vo.user.UserProfileView;
import com.imyeyu.api.modules.common.vo.user.UserView;
import com.imyeyu.api.modules.journal.util.JournalAPIInterceptor;
import com.imyeyu.api.modules.minecraft.annotation.RequiredFMCServerTokenInterceptor;
import com.imyeyu.api.modules.minecraft.entity.MinecraftPlayer;
import com.imyeyu.api.modules.mirror.vo.MirrorView;
import com.imyeyu.api.modules.system.util.SystemAPIInterceptor;
import com.imyeyu.api.util.GsonSerializerAdapter;
import com.imyeyu.spring.annotation.RequestSingleParamResolver;
import jakarta.validation.constraints.NotNull;
import lombok.NonNull;
@ -41,6 +42,7 @@ public class WebConfig implements WebMvcConfigurer {
private final SystemAPIInterceptor systemAPIInterceptor;
private final GsonSerializerAdapter gsonSerializerAdapter;
private final JournalAPIInterceptor journalAPIInterceptor;
private final RequiredTokenInterceptor requiredTokenInterceptor;
private final EnableSettingInterceptor enableSettingInterceptor;
private final RequestSingleParamResolver requestSingleParamResolver;
@ -55,6 +57,7 @@ public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(systemAPIInterceptor).addPathPatterns(SystemAPIInterceptor.PATH);
registry.addInterceptor(journalAPIInterceptor).addPathPatterns(JournalAPIInterceptor.PATH);
registry.addInterceptor(requiredFMCServerTokenInterceptor).addPathPatterns("/fmc/server/**");
registry.addInterceptor(requiredTokenInterceptor).addPathPatterns("/**");
registry.addInterceptor(enableSettingInterceptor).addPathPatterns("/**");

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.config.dbsource;
package com.imyeyu.api.config.dbsource;
import com.zaxxer.hikari.HikariDataSource;
import com.imyeyu.utils.Time;
@ -24,7 +24,7 @@ import java.sql.SQLException;
* @since 2022-11-29 22:39
*/
@Configuration
@MapperScan(basePackages = "com.imyeyu.server.modules.forevermc.mapper", sqlSessionFactoryRef = "foreverMCSqlSessionFactory")
@MapperScan(basePackages = "com.imyeyu.api.modules.forevermc.mapper", sqlSessionFactoryRef = "foreverMCSqlSessionFactory")
public class ForeverMCDBConfig {
public static final String ROLLBACKER = "foreverMCTransactionManager";
@ -58,7 +58,7 @@ public class ForeverMCDBConfig {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(datasource);
bean.setTypeAliasesPackage("com.imyeyu.server.modules.forevermc.entity");
bean.setTypeAliasesPackage("com.imyeyu.api.modules.forevermc.entity");
bean.setConfiguration(config);
return bean.getObject();
}

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.config.dbsource;
package com.imyeyu.api.config.dbsource;
import com.imyeyu.utils.Time;
import com.zaxxer.hikari.HikariDataSource;
@ -31,7 +31,7 @@ import java.util.List;
*/
@Configuration
@MapperScan(basePackages = {
"com.imyeyu.server.modules.gitea.mapper",
"com.imyeyu.api.modules.gitea.mapper",
}, sqlSessionFactoryRef = "giteaSqlSessionFactory")
public class GiteaDBConfig {
@ -75,10 +75,10 @@ public class GiteaDBConfig {
}
}
String[] typeAliases = {
"com.imyeyu.server.modules.gitea.entity",
"com.imyeyu.api.modules.gitea.entity",
};
String[] typeHandlers = {
"com.imyeyu.server.handler"
"com.imyeyu.api.handler"
};
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.config.dbsource;
package com.imyeyu.api.config.dbsource;
import com.zaxxer.hikari.HikariDataSource;
import com.imyeyu.utils.Time;
@ -31,14 +31,15 @@ import java.util.List;
*/
@Configuration
@MapperScan(basePackages = {
"com.imyeyu.server.modules.git.mapper",
"com.imyeyu.server.modules.bill.mapper",
"com.imyeyu.server.modules.blog.mapper",
"com.imyeyu.server.modules.lyric.mapper",
"com.imyeyu.server.modules.mirror.mapper",
"com.imyeyu.server.modules.system.mapper",
"com.imyeyu.server.modules.common.mapper",
"com.imyeyu.server.modules.minecraft.mapper"
"com.imyeyu.api.modules.git.mapper",
"com.imyeyu.api.modules.bill.mapper",
"com.imyeyu.api.modules.blog.mapper",
"com.imyeyu.api.modules.lyric.mapper",
"com.imyeyu.api.modules.mirror.mapper",
"com.imyeyu.api.modules.system.mapper",
"com.imyeyu.api.modules.common.mapper",
"com.imyeyu.api.modules.journal.mapper",
"com.imyeyu.api.modules.minecraft.mapper"
}, sqlSessionFactoryRef = "timiServerSqlSessionFactory")
public class TimiServerDBConfig {
@ -86,17 +87,18 @@ public class TimiServerDBConfig {
}
}
String[] typeAliases = {
"com.imyeyu.server.modules.git.entity",
"com.imyeyu.server.modules.bill.entity",
"com.imyeyu.server.modules.blog.entity",
"com.imyeyu.server.modules.lyric.entity",
"com.imyeyu.server.modules.mirror.entity",
"com.imyeyu.server.modules.system.entity",
"com.imyeyu.server.modules.common.entity",
"com.imyeyu.server.modules.minecraft.entity"
"com.imyeyu.api.modules.git.entity",
"com.imyeyu.api.modules.bill.entity",
"com.imyeyu.api.modules.blog.entity",
"com.imyeyu.api.modules.lyric.entity",
"com.imyeyu.api.modules.mirror.entity",
"com.imyeyu.api.modules.system.entity",
"com.imyeyu.api.modules.common.entity",
"com.imyeyu.api.modules.journal.entity",
"com.imyeyu.api.modules.minecraft.entity"
};
String[] typeHandlers = {
"com.imyeyu.server.handler"
"com.imyeyu.api.handler"
};
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.handler;
package com.imyeyu.api.handler;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

View File

@ -1,14 +1,14 @@
package com.imyeyu.server.modules.bill.controller;
package com.imyeyu.api.modules.bill.controller;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import com.imyeyu.java.bean.timi.TimiCode;
import com.imyeyu.java.bean.timi.TimiException;
import com.imyeyu.server.modules.bill.entity.Bill;
import com.imyeyu.server.modules.bill.service.BillService;
import com.imyeyu.server.modules.common.bean.SettingKey;
import com.imyeyu.server.modules.common.service.SettingService;
import com.imyeyu.api.modules.bill.entity.Bill;
import com.imyeyu.api.modules.bill.service.BillService;
import com.imyeyu.api.modules.common.bean.SettingKey;
import com.imyeyu.api.modules.common.service.SettingService;
import com.imyeyu.spring.TimiSpring;
import com.imyeyu.spring.annotation.AOPLog;
import com.imyeyu.spring.annotation.RequestRateLimit;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.bill.entity;
package com.imyeyu.api.modules.bill.entity;
import jakarta.validation.constraints.DecimalMin;
import jakarta.validation.constraints.NotBlank;

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.bill.mapper;
package com.imyeyu.api.modules.bill.mapper;
import com.imyeyu.server.modules.bill.entity.Bill;
import com.imyeyu.api.modules.bill.entity.Bill;
import com.imyeyu.spring.mapper.BaseMapper;
/**

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.bill.service;
package com.imyeyu.api.modules.bill.service;
import com.imyeyu.server.modules.bill.entity.Bill;
import com.imyeyu.api.modules.bill.entity.Bill;
import com.imyeyu.spring.service.CreatableService;
/**

View File

@ -1,8 +1,8 @@
package com.imyeyu.server.modules.bill.service.implement;
package com.imyeyu.api.modules.bill.service.implement;
import com.imyeyu.server.modules.bill.entity.Bill;
import com.imyeyu.server.modules.bill.mapper.BillMapper;
import com.imyeyu.server.modules.bill.service.BillService;
import com.imyeyu.api.modules.bill.entity.Bill;
import com.imyeyu.api.modules.bill.mapper.BillMapper;
import com.imyeyu.api.modules.bill.service.BillService;
import com.imyeyu.spring.mapper.BaseMapper;
import com.imyeyu.spring.service.AbstractEntityService;
import lombok.RequiredArgsConstructor;

View File

@ -1,10 +1,10 @@
package com.imyeyu.server.modules.blog.controller;
package com.imyeyu.api.modules.blog.controller;
import com.imyeyu.server.modules.blog.entity.Article;
import com.imyeyu.server.modules.blog.entity.ArticleRanking;
import com.imyeyu.server.modules.blog.service.ArticleService;
import com.imyeyu.server.modules.blog.vo.article.ArticleView;
import com.imyeyu.server.modules.blog.vo.article.KeywordPage;
import com.imyeyu.api.modules.blog.entity.Article;
import com.imyeyu.api.modules.blog.entity.ArticleRanking;
import com.imyeyu.api.modules.blog.service.ArticleService;
import com.imyeyu.api.modules.blog.vo.article.ArticleView;
import com.imyeyu.api.modules.blog.vo.article.KeywordPage;
import com.imyeyu.spring.annotation.AOPLog;
import com.imyeyu.spring.annotation.RequestRateLimit;
import com.imyeyu.spring.bean.Page;

View File

@ -1,9 +1,9 @@
package com.imyeyu.server.modules.blog.controller;
package com.imyeyu.api.modules.blog.controller;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import com.imyeyu.server.modules.blog.entity.Friend;
import com.imyeyu.server.modules.blog.service.FriendService;
import com.imyeyu.api.modules.blog.entity.Friend;
import com.imyeyu.api.modules.blog.service.FriendService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

View File

@ -1,7 +1,7 @@
package com.imyeyu.server.modules.blog.entity;
package com.imyeyu.api.modules.blog.entity;
import com.google.gson.JsonElement;
import com.imyeyu.server.modules.common.bean.CommentSupport;
import com.imyeyu.api.modules.common.bean.CommentSupport;
import com.imyeyu.spring.entity.Destroyable;
import com.imyeyu.spring.entity.Entity;
import lombok.Data;
@ -25,9 +25,6 @@ public class Article extends Entity implements CommentSupport, Destroyable {
*/
public enum Type {
/** 关于 */
ABOUT,
/** 公版 */
PUBLIC,
@ -44,9 +41,6 @@ public class Article extends Entity implements CommentSupport, Destroyable {
/** 类型 */
protected Type type;
/** 分类 ID */
protected long classId;
/** 摘要 */
protected String digest;
@ -62,7 +56,7 @@ public class Article extends Entity implements CommentSupport, Destroyable {
/** 喜欢数量 */
protected int likes;
/** 是否显示评论 */
/** true 为显示评论 */
protected boolean showComment;
/** true 为可评论 */
@ -71,6 +65,9 @@ public class Article extends Entity implements CommentSupport, Destroyable {
/** true 为可排位 */
protected boolean canRanking;
/** true 为可通过列表查询 */
protected boolean canList;
/** @return true 为可评论 */
@Override
public boolean canComment() {

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.blog.entity;
package com.imyeyu.api.modules.blog.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.blog.entity;
package com.imyeyu.api.modules.blog.entity;
import com.imyeyu.server.modules.common.vo.comment.CommentReplyView;
import com.imyeyu.api.modules.common.vo.comment.CommentReplyView;
import com.imyeyu.spring.annotation.table.AutoUUID;
import com.imyeyu.spring.annotation.table.Id;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.blog.entity;
package com.imyeyu.api.modules.blog.entity;
import lombok.AllArgsConstructor;
import lombok.Data;

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.blog.mapper;
package com.imyeyu.api.modules.blog.mapper;
import com.imyeyu.server.modules.blog.entity.Article;
import com.imyeyu.api.modules.blog.entity.Article;
import com.imyeyu.spring.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;
@ -14,6 +14,12 @@ import java.util.List;
*/
public interface ArticleMapper extends BaseMapper<Article, Long> {
@Override
long count();
@Override
List<Article> list(long offset, int limit);
long countByKeyword(String keyword);
List<Article> selectByKeyword(String keyword, Long offset, int limit);

View File

@ -1,7 +1,7 @@
package com.imyeyu.server.modules.blog.mapper;
package com.imyeyu.api.modules.blog.mapper;
import com.imyeyu.server.modules.blog.entity.Friend;
import com.imyeyu.api.modules.blog.entity.Friend;
import com.imyeyu.spring.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;

View File

@ -1,10 +1,10 @@
package com.imyeyu.server.modules.blog.service;
package com.imyeyu.api.modules.blog.service;
import com.imyeyu.java.bean.timi.TimiException;
import com.imyeyu.server.modules.blog.entity.Article;
import com.imyeyu.server.modules.blog.entity.ArticleRanking;
import com.imyeyu.server.modules.blog.vo.article.ArticleView;
import com.imyeyu.server.modules.blog.vo.article.KeywordPage;
import com.imyeyu.api.modules.blog.entity.Article;
import com.imyeyu.api.modules.blog.entity.ArticleRanking;
import com.imyeyu.api.modules.blog.vo.article.ArticleView;
import com.imyeyu.api.modules.blog.vo.article.KeywordPage;
import com.imyeyu.spring.bean.PageResult;
import com.imyeyu.spring.service.GettableService;
import com.imyeyu.spring.service.PageableService;

View File

@ -1,7 +1,7 @@
package com.imyeyu.server.modules.blog.service;
package com.imyeyu.api.modules.blog.service;
import com.imyeyu.java.bean.timi.TimiException;
import com.imyeyu.server.modules.blog.entity.CommentRemindQueue;
import com.imyeyu.api.modules.blog.entity.CommentRemindQueue;
import com.imyeyu.spring.service.CreatableService;
import java.util.List;

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.blog.service;
package com.imyeyu.api.modules.blog.service;
import com.imyeyu.server.modules.blog.entity.Friend;
import com.imyeyu.api.modules.blog.entity.Friend;
import java.util.List;

View File

@ -1,20 +1,21 @@
package com.imyeyu.server.modules.blog.service.implement;
package com.imyeyu.api.modules.blog.service.implement;
import com.imyeyu.api.config.dbsource.TimiServerDBConfig;
import com.imyeyu.api.modules.blog.entity.Article;
import com.imyeyu.api.modules.blog.entity.ArticleRanking;
import com.imyeyu.api.modules.blog.mapper.ArticleMapper;
import com.imyeyu.api.modules.blog.service.ArticleService;
import com.imyeyu.api.modules.blog.vo.article.ArticleView;
import com.imyeyu.api.modules.blog.vo.article.KeywordPage;
import com.imyeyu.api.modules.common.entity.Attachment;
import com.imyeyu.api.modules.common.entity.Comment;
import com.imyeyu.api.modules.common.entity.Tag;
import com.imyeyu.api.modules.common.mapper.CommentMapper;
import com.imyeyu.api.modules.common.service.AttachmentService;
import com.imyeyu.api.modules.common.service.TagService;
import com.imyeyu.java.bean.timi.TimiException;
import com.imyeyu.server.config.dbsource.TimiServerDBConfig;
import com.imyeyu.server.modules.blog.entity.Article;
import com.imyeyu.server.modules.blog.entity.ArticleRanking;
import com.imyeyu.server.modules.blog.mapper.ArticleMapper;
import com.imyeyu.server.modules.blog.service.ArticleService;
import com.imyeyu.server.modules.blog.vo.article.ArticleView;
import com.imyeyu.server.modules.blog.vo.article.KeywordPage;
import com.imyeyu.server.modules.common.entity.Attachment;
import com.imyeyu.server.modules.common.entity.Comment;
import com.imyeyu.server.modules.common.entity.Tag;
import com.imyeyu.server.modules.common.mapper.CommentMapper;
import com.imyeyu.server.modules.common.service.AttachmentService;
import com.imyeyu.server.modules.common.service.TagService;
import com.imyeyu.spring.TimiSpring;
import com.imyeyu.spring.bean.Page;
import com.imyeyu.spring.bean.PageResult;
import com.imyeyu.spring.mapper.BaseMapper;
import com.imyeyu.spring.service.AbstractEntityService;
@ -54,6 +55,14 @@ public class ArticleServiceImplement extends AbstractEntityService<Article, Long
return mapper;
}
@Override
public PageResult<Article> page(Page page) {
PageResult<Article> result = new PageResult<>();
result.setList(mapper.list(page.getOffset(), page.getLimit()));
result.setTotal(mapper.count());
return result;
}
@Transactional(TimiServerDBConfig.ROLLBACKER)
@Override
public ArticleView view(long id) {

View File

@ -1,9 +1,9 @@
package com.imyeyu.server.modules.blog.service.implement;
package com.imyeyu.api.modules.blog.service.implement;
import com.imyeyu.server.config.dbsource.TimiServerDBConfig;
import com.imyeyu.server.modules.blog.entity.CommentRemindQueue;
import com.imyeyu.server.modules.blog.service.CommentRemindQueueService;
import com.imyeyu.server.modules.common.mapper.CommentRemindQueueMapper;
import com.imyeyu.api.config.dbsource.TimiServerDBConfig;
import com.imyeyu.api.modules.blog.entity.CommentRemindQueue;
import com.imyeyu.api.modules.blog.service.CommentRemindQueueService;
import com.imyeyu.api.modules.common.mapper.CommentRemindQueueMapper;
import com.imyeyu.spring.mapper.BaseMapper;
import com.imyeyu.spring.service.AbstractEntityService;
import lombok.RequiredArgsConstructor;

View File

@ -1,9 +1,9 @@
package com.imyeyu.server.modules.blog.service.implement;
package com.imyeyu.api.modules.blog.service.implement;
import lombok.RequiredArgsConstructor;
import com.imyeyu.server.modules.blog.entity.Friend;
import com.imyeyu.server.modules.blog.mapper.FriendMapper;
import com.imyeyu.server.modules.blog.service.FriendService;
import com.imyeyu.api.modules.blog.entity.Friend;
import com.imyeyu.api.modules.blog.mapper.FriendMapper;
import com.imyeyu.api.modules.blog.service.FriendService;
import org.springframework.stereotype.Service;
import java.util.List;

View File

@ -1,13 +1,12 @@
package com.imyeyu.server.modules.blog.util;
package com.imyeyu.api.modules.blog.util;
import com.imyeyu.java.TimiJava;
import com.imyeyu.java.bean.timi.TimiCode;
import com.imyeyu.java.bean.timi.TimiException;
import com.imyeyu.server.config.RedisConfig;
import com.imyeyu.server.modules.common.bean.SettingKey;
import com.imyeyu.server.modules.common.entity.User;
import com.imyeyu.server.modules.common.service.SettingService;
import com.imyeyu.server.modules.common.service.UserService;
import com.imyeyu.api.config.RedisConfig;
import com.imyeyu.api.modules.common.bean.SettingKey;
import com.imyeyu.api.modules.common.entity.User;
import com.imyeyu.api.modules.common.service.SettingService;
import com.imyeyu.api.modules.common.service.UserService;
import com.imyeyu.spring.TimiSpring;
import com.imyeyu.spring.util.Redis;
import com.imyeyu.spring.util.RedisSerializers;

View File

@ -1,8 +1,8 @@
package com.imyeyu.server.modules.blog.vo.article;
package com.imyeyu.api.modules.blog.vo.article;
import com.imyeyu.server.modules.blog.entity.Article;
import com.imyeyu.server.modules.common.entity.Attachment;
import com.imyeyu.server.modules.common.entity.Tag;
import com.imyeyu.api.modules.blog.entity.Article;
import com.imyeyu.api.modules.common.entity.Attachment;
import com.imyeyu.api.modules.common.entity.Tag;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.blog.vo.article;
package com.imyeyu.api.modules.blog.vo.article;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.blog.vo.article;
package com.imyeyu.api.modules.blog.vo.article;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.blog.vo.article;
package com.imyeyu.api.modules.blog.vo.article;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.bean;
package com.imyeyu.api.modules.common.bean;
/**
* 支持评论的实体

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.bean;
package com.imyeyu.api.modules.common.bean;
import lombok.Getter;
import lombok.Setter;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.bean;
package com.imyeyu.api.modules.common.bean;
/**
*

View File

@ -0,0 +1,39 @@
package com.imyeyu.api.modules.common.bean;
import lombok.Data;
/**
* @author 夜雨
* @since 2025-10-20 15:04
*/
public class MediaAttach {
/**
* @author 夜雨
* @since 2025-09-28 02:01
*/
public enum Type {
SOURCE,
THUMB
}
/**
*
*
* @author 夜雨
* @since 2025-10-20 15:04
*/
@Data
public static class ExtData {
private Long sourceId;
private String sourceMongoId;
private boolean isImage;
private boolean isVideo;
}
}

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.bean;
package com.imyeyu.api.modules.common.bean;
/**
* 系统设置
@ -32,6 +32,8 @@ public enum SettingKey {
/** 启用灰色滤镜 */
ENABLE_GRAY_FILTER,
TEMP_FILE_PATH,
// ---------- ICP 备案号 ----------
ICP_IMYEYU_COM,
@ -111,6 +113,8 @@ public enum SettingKey {
GIT_API,
GIT_ABOUT_ARTICLE,
GIT_REPO_PATH,
// ---------- 远程音乐 ----------
@ -127,6 +131,16 @@ public enum SettingKey {
MUSIC_CONTROLLER_URI,
// ---------- ----------
JOURNAL_KEY,
JOURNAL_APP_ID,
JOURNAL_APP_SECRET,
JOURNAL_TRAVEL,
// ---------- 系统 ----------
SYSTEM_FILE_BASE,

View File

@ -0,0 +1,23 @@
package com.imyeyu.api.modules.common.bean;
import lombok.Data;
import java.nio.file.Path;
/**
* @author 夜雨
* @since 2025-09-27 01:47
*/
@Data
public class TempFileMetaData {
private String id;
private String name;
private String originalName;
private Path path;
private Long lastAccessAt;
}

View File

@ -1,17 +1,17 @@
package com.imyeyu.server.modules.common.controller;
package com.imyeyu.api.modules.common.controller;
import com.imyeyu.server.annotation.CaptchaValid;
import com.imyeyu.server.annotation.EnableSetting;
import com.imyeyu.server.bean.CaptchaFrom;
import com.imyeyu.server.modules.common.bean.SettingKey;
import com.imyeyu.server.modules.common.entity.Comment;
import com.imyeyu.server.modules.common.entity.CommentReply;
import com.imyeyu.server.modules.common.service.CommentReplyService;
import com.imyeyu.server.modules.common.service.CommentService;
import com.imyeyu.server.modules.common.vo.comment.CommentReplyPage;
import com.imyeyu.server.modules.common.vo.comment.CommentReplyView;
import com.imyeyu.server.modules.common.vo.comment.CommentView;
import com.imyeyu.server.modules.git.vo.issue.CommentPage;
import com.imyeyu.api.annotation.CaptchaValid;
import com.imyeyu.api.annotation.EnableSetting;
import com.imyeyu.api.bean.CaptchaFrom;
import com.imyeyu.api.modules.common.bean.SettingKey;
import com.imyeyu.api.modules.common.entity.Comment;
import com.imyeyu.api.modules.common.entity.CommentReply;
import com.imyeyu.api.modules.common.service.CommentReplyService;
import com.imyeyu.api.modules.common.service.CommentService;
import com.imyeyu.api.modules.common.vo.comment.CommentReplyPage;
import com.imyeyu.api.modules.common.vo.comment.CommentReplyView;
import com.imyeyu.api.modules.common.vo.comment.CommentView;
import com.imyeyu.api.modules.git.vo.issue.CommentPage;
import com.imyeyu.spring.annotation.AOPLog;
import com.imyeyu.spring.annotation.RequestRateLimit;
import com.imyeyu.spring.bean.CaptchaData;

View File

@ -1,36 +1,39 @@
package com.imyeyu.server.modules.common.controller;
package com.imyeyu.api.modules.common.controller;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.imyeyu.api.bean.CaptchaFrom;
import com.imyeyu.api.modules.common.bean.ImageType;
import com.imyeyu.api.modules.common.bean.SettingKey;
import com.imyeyu.api.modules.common.entity.Attachment;
import com.imyeyu.api.modules.common.entity.Setting;
import com.imyeyu.api.modules.common.entity.Task;
import com.imyeyu.api.modules.common.entity.Template;
import com.imyeyu.api.modules.common.entity.Version;
import com.imyeyu.api.modules.common.service.AttachmentService;
import com.imyeyu.api.modules.common.service.FeedbackService;
import com.imyeyu.api.modules.common.service.SettingService;
import com.imyeyu.api.modules.common.service.TaskService;
import com.imyeyu.api.modules.common.service.TempFileService;
import com.imyeyu.api.modules.common.service.TemplateService;
import com.imyeyu.api.modules.common.service.VersionService;
import com.imyeyu.api.modules.common.vo.FeedbackRequest;
import com.imyeyu.api.modules.common.vo.TempFileResponse;
import com.imyeyu.api.modules.common.vo.attachment.AttachmentView;
import com.imyeyu.api.modules.system.util.ResourceHandler;
import com.imyeyu.api.util.CaptchaManager;
import com.imyeyu.io.IO;
import com.imyeyu.java.TimiJava;
import com.imyeyu.java.bean.timi.TimiCode;
import com.imyeyu.java.bean.timi.TimiException;
import com.imyeyu.java.ref.Ref;
import com.imyeyu.network.Network;
import com.imyeyu.server.bean.CaptchaFrom;
import com.imyeyu.server.modules.common.bean.ImageType;
import com.imyeyu.server.modules.common.bean.SettingKey;
import com.imyeyu.server.modules.common.entity.Attachment;
import com.imyeyu.server.modules.common.entity.Setting;
import com.imyeyu.server.modules.common.entity.Task;
import com.imyeyu.server.modules.common.entity.Template;
import com.imyeyu.server.modules.common.entity.Version;
import com.imyeyu.server.modules.common.service.AttachmentService;
import com.imyeyu.server.modules.common.service.FeedbackService;
import com.imyeyu.server.modules.common.service.SettingService;
import com.imyeyu.server.modules.common.service.TaskService;
import com.imyeyu.server.modules.common.service.TemplateService;
import com.imyeyu.server.modules.common.service.VersionService;
import com.imyeyu.server.modules.common.vo.FeedbackRequest;
import com.imyeyu.server.modules.common.vo.attachment.AttachmentView;
import com.imyeyu.server.modules.system.util.ResourceHandler;
import com.imyeyu.server.util.CaptchaManager;
import com.imyeyu.spring.TimiSpring;
import com.imyeyu.spring.annotation.AOPLog;
import com.imyeyu.spring.annotation.IgnoreGlobalReturn;
import com.imyeyu.spring.annotation.RequestRateLimit;
import com.imyeyu.spring.bean.CaptchaData;
import com.imyeyu.spring.bean.RequestRange;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSDownloadStream;
import com.mongodb.client.gridfs.model.GridFSFile;
@ -39,6 +42,7 @@ import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Cleanup;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.tika.Tika;
@ -51,6 +55,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.yaml.snakeyaml.Yaml;
import javax.imageio.ImageIO;
@ -58,8 +63,12 @@ import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -83,6 +92,7 @@ public class CommonController {
private final SettingService settingService;
private final FeedbackService feedbackService;
private final TemplateService templateService;
private final TempFileService tempFileService;
private final AttachmentService attachmentService;
private final Gson gson;
@ -171,7 +181,7 @@ public class CommonController {
@RequestRateLimit
@PostMapping("/feedback")
public void createFeedback(@Valid @NotNull @RequestBody CaptchaData<FeedbackRequest> request) {
captchaManager.test(request.getCaptcha(), request.getFrom());
captchaManager.test(request.getCaptcha(), request.getCaptchaId());
feedbackService.create(request.getData());
}
@ -250,12 +260,6 @@ public class CommonController {
return result.stream().collect(Collectors.toMap(Setting::getKey, Setting::getValue));
}
@RequestRateLimit
@GetMapping("/setting/flushCache")
public void settingFlushCache() {
settingService.flushCache();
}
@AOPLog
@RequestRateLimit
@GetMapping("/attachment/{mongoId}")
@ -264,7 +268,6 @@ public class CommonController {
}
@AOPLog
@RequestRateLimit
@IgnoreGlobalReturn
@GetMapping("/attachment/read/{mongoId}")
public void readAttachment(
@ -372,4 +375,72 @@ public class CommonController {
resp.setCharacterEncoding(StandardCharsets.UTF_8.toString());
}
}
@AOPLog
@PostMapping("/temp/file/upload")
public List<TempFileResponse> uploadFile(@RequestParam("file") List<MultipartFile> files) {
return tempFileService.store(files);
}
@AOPLog
@RequestRateLimit
@IgnoreGlobalReturn
@GetMapping("/temp/file/read/{fileId}")
public void tempFileRead(@PathVariable String fileId, HttpServletRequest req, HttpServletResponse resp) {
try {
File file = tempFileService.get(fileId);
if (TimiJava.isEmpty(file) && file.exists()) {
resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
Path filePath = file.toPath();
resp.setContentLengthLong(Files.size(filePath));
String mimeType = new Tika().detect(filePath);
if (TimiJava.isNotEmpty(mimeType)) {
resp.setContentType(mimeType);
}
req.setAttribute(ResourceHandler.ATTR_TYPE, ResourceHandler.Type.FILE);
req.setAttribute(ResourceHandler.ATTR_VALUE, filePath);
resourceHandler.handleRequest(req, resp);
} catch (Exception e) {
resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
@AOPLog
@RequestRateLimit
@IgnoreGlobalReturn
@RequestMapping("/temp/file/download/{fileId}")
public void tempFileDownload(@PathVariable String fileId, HttpServletResponse resp) {
try {
File file = tempFileService.get(fileId);
if (TimiJava.isEmpty(file) && file.exists()) {
resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
return;
}
String mimeType = new Tika().detect(file);
resp.setContentType(mimeType);
resp.setHeader("Content-Disposition", Network.getFileDownloadHeader(file.getName()));
resp.setHeader("Accept-Ranges", "bytes");
RequestRange range = TimiSpring.requestRange(file.length());
if (range == null) {
// 完整文件
resp.setContentLengthLong(file.length());
resp.setStatus(HttpServletResponse.SC_OK);
IO.toOutputStream(resp.getOutputStream(), file);
} else {
// 分片文件
resp.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
resp.setHeader("Content-Range", "bytes %s-%s/%s".formatted(range.getStart(), range.getEnd(), file.length()));
resp.setContentLengthLong(range.getLength());
@Cleanup RandomAccessFile raf = new RandomAccessFile(file, "r");
raf.seek(range.getStart());
IO.toOutputStream(resp.getOutputStream(), raf, range.getStart(), range.getLength());
}
} catch (Exception e) {
log.error("download error", e);
resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
}

View File

@ -1,10 +1,10 @@
package com.imyeyu.server.modules.common.controller;
package com.imyeyu.api.modules.common.controller;
import com.imyeyu.server.modules.common.entity.Icon;
import com.imyeyu.server.modules.common.service.IconService;
import com.imyeyu.server.modules.common.vo.icon.AllResponse;
import com.imyeyu.server.modules.common.vo.icon.NamePage;
import com.imyeyu.server.modules.common.vo.icon.UnicodePage;
import com.imyeyu.api.modules.common.entity.Icon;
import com.imyeyu.api.modules.common.service.IconService;
import com.imyeyu.api.modules.common.vo.icon.AllResponse;
import com.imyeyu.api.modules.common.vo.icon.NamePage;
import com.imyeyu.api.modules.common.vo.icon.UnicodePage;
import com.imyeyu.spring.annotation.AOPLog;
import com.imyeyu.spring.annotation.RequestRateLimit;
import com.imyeyu.spring.bean.Page;

View File

@ -1,32 +1,32 @@
package com.imyeyu.server.modules.common.controller;
package com.imyeyu.api.modules.common.controller;
import com.imyeyu.java.TimiJava;
import com.imyeyu.java.bean.timi.TimiException;
import com.imyeyu.server.annotation.CaptchaValid;
import com.imyeyu.server.annotation.EnableSetting;
import com.imyeyu.server.bean.CaptchaFrom;
import com.imyeyu.server.modules.common.bean.SettingKey;
import com.imyeyu.server.modules.common.entity.CommentReply;
import com.imyeyu.server.modules.common.entity.UserConfig;
import com.imyeyu.server.modules.common.entity.UserPrivacy;
import com.imyeyu.server.modules.common.service.CommentReplyService;
import com.imyeyu.server.modules.common.service.CommentService;
import com.imyeyu.server.modules.common.service.UserConfigService;
import com.imyeyu.server.modules.common.service.UserPrivacyService;
import com.imyeyu.server.modules.common.service.UserProfileService;
import com.imyeyu.server.modules.common.service.UserService;
import com.imyeyu.server.modules.common.vo.comment.CommentReplyPage;
import com.imyeyu.server.modules.common.vo.comment.CommentReplyView;
import com.imyeyu.server.modules.common.vo.comment.CommentView;
import com.imyeyu.server.modules.common.vo.comment.UserCommentPage;
import com.imyeyu.server.modules.common.vo.user.EmailVerifyCallbackRequest;
import com.imyeyu.server.modules.common.vo.user.LoginRequest;
import com.imyeyu.server.modules.common.vo.user.LoginResponse;
import com.imyeyu.server.modules.common.vo.user.RegisterRequest;
import com.imyeyu.server.modules.common.vo.user.UpdatePasswordByKeyRequest;
import com.imyeyu.server.modules.common.vo.user.UpdatePasswordRequest;
import com.imyeyu.server.modules.common.vo.user.UserRequest;
import com.imyeyu.server.modules.common.vo.user.UserView;
import com.imyeyu.api.annotation.CaptchaValid;
import com.imyeyu.api.annotation.EnableSetting;
import com.imyeyu.api.bean.CaptchaFrom;
import com.imyeyu.api.modules.common.bean.SettingKey;
import com.imyeyu.api.modules.common.entity.CommentReply;
import com.imyeyu.api.modules.common.entity.UserConfig;
import com.imyeyu.api.modules.common.entity.UserPrivacy;
import com.imyeyu.api.modules.common.service.CommentReplyService;
import com.imyeyu.api.modules.common.service.CommentService;
import com.imyeyu.api.modules.common.service.UserConfigService;
import com.imyeyu.api.modules.common.service.UserPrivacyService;
import com.imyeyu.api.modules.common.service.UserProfileService;
import com.imyeyu.api.modules.common.service.UserService;
import com.imyeyu.api.modules.common.vo.comment.CommentReplyPage;
import com.imyeyu.api.modules.common.vo.comment.CommentReplyView;
import com.imyeyu.api.modules.common.vo.comment.CommentView;
import com.imyeyu.api.modules.common.vo.comment.UserCommentPage;
import com.imyeyu.api.modules.common.vo.user.EmailVerifyCallbackRequest;
import com.imyeyu.api.modules.common.vo.user.LoginRequest;
import com.imyeyu.api.modules.common.vo.user.LoginResponse;
import com.imyeyu.api.modules.common.vo.user.RegisterRequest;
import com.imyeyu.api.modules.common.vo.user.UpdatePasswordByKeyRequest;
import com.imyeyu.api.modules.common.vo.user.UpdatePasswordRequest;
import com.imyeyu.api.modules.common.vo.user.UserRequest;
import com.imyeyu.api.modules.common.vo.user.UserView;
import com.imyeyu.spring.annotation.AOPLog;
import com.imyeyu.spring.annotation.RequestRateLimit;
import com.imyeyu.spring.annotation.RequestSingleParam;

View File

@ -1,7 +1,7 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import com.imyeyu.api.bean.MultilingualHandler;
import com.imyeyu.java.ref.Ref;
import com.imyeyu.server.bean.MultilingualHandler;
import com.imyeyu.spring.entity.Entity;
import lombok.AllArgsConstructor;
import lombok.Data;
@ -44,24 +44,36 @@ public class Attachment extends Entity implements MultilingualHandler {
/** 镜像 */
MIRROR,
JOURNAL,
JOURNAL_TRAVEL,
JOURNAL_MOMENT,
/** 系统 */
SYSTEM
}
private BizType bizType;
protected BizType bizType;
private Long bizId;
protected Long bizId;
private String attachType;
protected String attachType;
private String mongoId;
protected String mongoId;
@MultilingualField
private String title;
protected String title;
private String name;
protected String name;
private Long size;
protected Long size;
protected String md5;
protected String ext;
protected Long destroyAt;
public void setAttachTypeValue(Enum<?> attachType) {
this.attachType = attachType.toString();

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import com.imyeyu.spring.service.GettableService;
import jakarta.validation.constraints.NotBlank;
@ -7,12 +7,11 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import com.imyeyu.server.modules.blog.service.implement.ArticleServiceImplement;
import com.imyeyu.server.modules.common.bean.CommentSupport;
import com.imyeyu.server.modules.git.service.implement.IssueServiceImplement;
import com.imyeyu.server.modules.git.service.implement.MergeServiceImplement;
import com.imyeyu.api.modules.blog.service.implement.ArticleServiceImplement;
import com.imyeyu.api.modules.common.bean.CommentSupport;
import com.imyeyu.api.modules.git.service.implement.IssueServiceImplement;
import com.imyeyu.api.modules.git.service.implement.MergeServiceImplement;
import com.imyeyu.spring.entity.Entity;
import com.imyeyu.spring.service.BaseService;
/**
* 评论

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import com.imyeyu.spring.annotation.table.AutoUUID;
import com.imyeyu.spring.annotation.table.Id;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,9 +1,9 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import com.imyeyu.java.bean.timi.TimiCode;
import com.imyeyu.java.bean.timi.TimiException;
import com.imyeyu.java.ref.Ref;
import com.imyeyu.server.TimiServerAPI;
import com.imyeyu.api.TimiServerAPI;
import com.imyeyu.spring.entity.Entity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import com.imyeyu.server.modules.common.bean.SettingKey;
import com.imyeyu.api.modules.common.bean.SettingKey;
import com.imyeyu.spring.annotation.table.Id;
import com.imyeyu.spring.entity.Creatable;
import com.imyeyu.spring.entity.Updatable;

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import com.imyeyu.server.bean.MultilingualHandler;
import com.imyeyu.api.bean.MultilingualHandler;
import com.imyeyu.spring.entity.Entity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import com.imyeyu.spring.annotation.table.Id;
import com.imyeyu.spring.entity.Updatable;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import com.imyeyu.java.ref.Ref;
import com.imyeyu.spring.annotation.table.Id;

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import com.imyeyu.server.modules.common.bean.ImageType;
import com.imyeyu.api.modules.common.bean.ImageType;
import com.imyeyu.spring.annotation.table.Id;
import com.imyeyu.spring.entity.Updatable;
import jakarta.validation.constraints.Max;

View File

@ -1,4 +1,4 @@
package com.imyeyu.server.modules.common.entity;
package com.imyeyu.api.modules.common.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;

View File

@ -1,6 +1,7 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.Attachment;
import com.imyeyu.api.modules.common.entity.Attachment;
import com.imyeyu.spring.bean.Page;
import com.imyeyu.spring.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;
@ -24,8 +25,9 @@ public interface AttachmentMapper extends BaseMapper<Attachment, Long> {
@Select("SELECT * FROM attachment WHERE biz_type = #{bizType} AND biz_id = #{bizId} AND attach_type = #{attachType} " + VALID + LIMIT_1)
Attachment selectByAttachType(Attachment.BizType bizType, long bizId, Enum<?> attachType);
@Select("SELECT * FROM attachment WHERE biz_type = #{bizType} AND biz_id = #{bizId} AND " + VALID + PAGE)
List<Attachment> listByBizId(Attachment.BizType bizType, long bizId, long offset, int limit);
List<Attachment> listByBizId(Attachment.BizType bizType, Long bizId, List<Enum<?>> attachTypes, Page page);
List<Attachment> listByAttachType(Attachment.BizType bizType, long bizId, Enum<?> ...attachTypes);
long countByBizId(Attachment.BizType bizType, Long bizId, List<Enum<?>> attachTypes);
List<Attachment> listByMd5s(Attachment.BizType bizType, Long bizId, List<Enum<?>> attachTypes, List<String> md5s);
}

View File

@ -1,7 +1,7 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.Comment;
import com.imyeyu.server.modules.common.vo.comment.CommentView;
import com.imyeyu.api.modules.common.entity.Comment;
import com.imyeyu.api.modules.common.vo.comment.CommentView;
import com.imyeyu.spring.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
@ -17,6 +17,12 @@ import java.util.List;
*/
public interface CommentMapper extends BaseMapper<Comment, Long> {
@Override
long count();
@Override
List<Comment> list(long offset, int limit);
@Select("SELECT * FROM comment WHERE id = #{id}" + NOT_DELETE)
Comment select(Long id);

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.blog.entity.CommentRemindQueue;
import com.imyeyu.api.modules.blog.entity.CommentRemindQueue;
import com.imyeyu.spring.mapper.BaseMapper;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Select;

View File

@ -1,9 +1,9 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.CommentReply;
import com.imyeyu.server.modules.common.vo.comment.CommentReplyPage;
import com.imyeyu.server.modules.common.vo.comment.CommentReplyView;
import com.imyeyu.api.modules.common.entity.CommentReply;
import com.imyeyu.api.modules.common.vo.comment.CommentReplyPage;
import com.imyeyu.api.modules.common.vo.comment.CommentReplyView;
import com.imyeyu.spring.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.EmailQueueLog;
import com.imyeyu.api.modules.common.entity.EmailQueueLog;
import com.imyeyu.spring.mapper.BaseMapper;
/**

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.EmailQueue;
import com.imyeyu.api.modules.common.entity.EmailQueue;
import com.imyeyu.spring.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.Feedback;
import com.imyeyu.api.modules.common.entity.Feedback;
import com.imyeyu.spring.mapper.BaseMapper;
/**

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.Icon;
import com.imyeyu.api.modules.common.entity.Icon;
import com.imyeyu.spring.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.Multilingual;
import com.imyeyu.api.modules.common.entity.Multilingual;
import com.imyeyu.spring.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;

View File

@ -1,7 +1,7 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.bean.SettingKey;
import com.imyeyu.server.modules.common.entity.Setting;
import com.imyeyu.api.modules.common.bean.SettingKey;
import com.imyeyu.api.modules.common.entity.Setting;
import com.imyeyu.spring.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.Tag;
import com.imyeyu.api.modules.common.entity.Tag;
import com.imyeyu.spring.mapper.BaseMapper;
/**

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.Task;
import com.imyeyu.api.modules.common.entity.Task;
import java.util.List;

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.Template;
import com.imyeyu.api.modules.common.entity.Template;
import com.imyeyu.spring.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.UserConfig;
import com.imyeyu.api.modules.common.entity.UserConfig;
import com.imyeyu.spring.mapper.BaseMapper;
/**

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.User;
import com.imyeyu.api.modules.common.entity.User;
import com.imyeyu.spring.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.UserPrivacy;
import com.imyeyu.api.modules.common.entity.UserPrivacy;
import com.imyeyu.spring.mapper.BaseMapper;
/**

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.UserProfile;
import com.imyeyu.api.modules.common.entity.UserProfile;
import com.imyeyu.spring.mapper.BaseMapper;
/**

View File

@ -1,6 +1,6 @@
package com.imyeyu.server.modules.common.mapper;
package com.imyeyu.api.modules.common.mapper;
import com.imyeyu.server.modules.common.entity.Version;
import com.imyeyu.api.modules.common.entity.Version;
import com.imyeyu.spring.mapper.BaseMapper;
import org.apache.ibatis.annotations.Select;

View File

@ -0,0 +1,85 @@
package com.imyeyu.api.modules.common.service;
import com.imyeyu.api.modules.common.entity.Attachment;
import com.imyeyu.api.modules.common.vo.attachment.AttachmentRequest;
import com.imyeyu.api.modules.common.vo.attachment.AttachmentView;
import com.imyeyu.java.bean.timi.TimiException;
import com.imyeyu.spring.bean.Page;
import com.imyeyu.spring.bean.PageResult;
import com.imyeyu.spring.service.DeletableService;
import com.imyeyu.spring.service.DestroyableService;
import com.imyeyu.spring.service.GettableService;
import com.imyeyu.spring.service.PageableService;
import com.imyeyu.spring.service.UpdatableService;
import com.mongodb.client.gridfs.model.GridFSFile;
import java.io.InputStream;
import java.util.List;
/**
* 附件服务
*
* <p>删除和销毁都为数据库软删除,但删除不删除 MongoDB 文件,而销毁则删除 MongoDB 文件
*
* @author 夜雨
* @since 2023-08-15 10:21
*/
public interface AttachmentService extends GettableService<Attachment, Long>, PageableService<Attachment>, UpdatableService<Attachment>, DeletableService<Long>, DestroyableService<Long> {
/**
*
*
* @param request
*/
void create(AttachmentRequest request);
/**
* 创建媒体附件,同步创建缩略图
*
* @param request 附件请求
* @return 缩略图附件
*/
Attachment createMedia(AttachmentRequest request) throws TimiException;
void deleteMedia(Long thumbId) throws TimiException;
Attachment getByBizId(Attachment.BizType bizType, long bizId);
Attachment getByAttachType(Attachment.BizType bizType, long bizId, Enum<?> attachType);
Attachment getByMongoId(String mongoId);
AttachmentView viewByMongoId(String mongoId);
GridFSFile readByMongoId(String mongoId);
InputStream getInputStreamByMongoId(String mongoId);
byte[] readAllByMongoId(String mongoId);
/**
* 根据业务获取所有附件
*
* @param bizType 业务类型
* @param bizId 业务 ID可为 null
* @param attachTypes 附件类型,可为 null
* @return 所有附件
* @throws TimiException 服务异常
*/
List<Attachment> listByBizId(Attachment.BizType bizType, Long bizId, Enum<?> ...attachTypes);
/**
* 根据业务获取所有附件
*
* @param bizType 业务类型
* @param bizId 业务 ID可为 null
* @param attachTypes 附件类型,可为 null
* @return 附件数量
* @throws TimiException 服务异常
*/
long countByBizId(Attachment.BizType bizType, Long bizId, Enum<?> ...attachTypes);
List<Attachment> listByMd5s(Attachment.BizType bizType, Long bizId, List<Enum<?>> attachTypeList, List<String> md5s) throws TimiException;
PageResult<Attachment> pageByBizId(Attachment.BizType bizType, Long bizId, List<Enum<?>> attachTypeList, Page page) throws TimiException;
}

View File

@ -1,8 +1,8 @@
package com.imyeyu.server.modules.common.service;
package com.imyeyu.api.modules.common.service;
import com.imyeyu.server.modules.common.entity.CommentReply;
import com.imyeyu.server.modules.common.vo.comment.CommentReplyPage;
import com.imyeyu.server.modules.common.vo.comment.CommentReplyView;
import com.imyeyu.api.modules.common.entity.CommentReply;
import com.imyeyu.api.modules.common.vo.comment.CommentReplyPage;
import com.imyeyu.api.modules.common.vo.comment.CommentReplyView;
import com.imyeyu.spring.bean.PageResult;
import com.imyeyu.spring.service.CreatableService;
import com.imyeyu.spring.service.DeletableService;

View File

@ -1,10 +1,10 @@
package com.imyeyu.server.modules.common.service;
package com.imyeyu.api.modules.common.service;
import com.imyeyu.java.bean.timi.TimiException;
import com.imyeyu.server.modules.common.entity.Comment;
import com.imyeyu.server.modules.common.vo.comment.CommentView;
import com.imyeyu.server.modules.common.vo.comment.UserCommentPage;
import com.imyeyu.server.modules.git.vo.issue.CommentPage;
import com.imyeyu.api.modules.common.entity.Comment;
import com.imyeyu.api.modules.common.vo.comment.CommentView;
import com.imyeyu.api.modules.common.vo.comment.UserCommentPage;
import com.imyeyu.api.modules.git.vo.issue.CommentPage;
import com.imyeyu.spring.bean.PageResult;
import com.imyeyu.spring.service.CreatableService;
import com.imyeyu.spring.service.DeletableService;

Some files were not shown because too many files have changed in this diff Show More