diff --git a/Dockerfile b/Dockerfile
index beb9476..7656851 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM openjdk:17 as builder
+FROM eclipse-temurin:17 as builder
WORKDIR /app
@@ -6,7 +6,7 @@ COPY . /app
RUN /app/docker-build.sh
-FROM openjdk:17
+FROM eclipse-temurin:17
WORKDIR /app
diff --git a/pom.xml b/pom.xml
index 50bf3a4..61e8723 100644
--- a/pom.xml
+++ b/pom.xml
@@ -75,13 +75,6 @@
spring-boot-starter-validation
-
-
- com.github.penggle
- kaptcha
- 2.3.2
-
-
com.google.code.gson
gson
@@ -139,6 +132,11 @@
hutool-core
5.8.16
+
+ cn.hutool
+ hutool-captcha
+ 5.8.16
+
org.springdoc
diff --git a/src/main/java/xyz/playedu/api/checks/AppConfigCheck.java b/src/main/java/xyz/playedu/api/checks/AppConfigCheck.java
index c95d84a..f17b2ae 100644
--- a/src/main/java/xyz/playedu/api/checks/AppConfigCheck.java
+++ b/src/main/java/xyz/playedu/api/checks/AppConfigCheck.java
@@ -154,6 +154,15 @@ public class AppConfigCheck implements ApplicationRunner {
setKeyValue("1");
}
},
+ new AppConfig() {
+ {
+ setName("禁止拖拽播放");
+ setSort(60);
+ setFieldType(BackendConstant.APP_CONFIG_FIELD_TYPE_SWITCH);
+ setKeyName("player.disabled_drag");
+ setKeyValue("0");
+ }
+ },
});
put(
"学员配置",
@@ -168,6 +177,55 @@ public class AppConfigCheck implements ApplicationRunner {
}
},
});
+ put(
+ "MinIO",
+ new AppConfig[] {
+ new AppConfig() {
+ {
+ setName("AccessKey");
+ setSort(10);
+ setFieldType(BackendConstant.APP_CONFIG_FIELD_TYPE_TEXT);
+ setKeyName(CConfig.MINIO_ACCESS_KEY);
+ setKeyValue("");
+ }
+ },
+ new AppConfig() {
+ {
+ setName("SecretKey");
+ setSort(20);
+ setFieldType(BackendConstant.APP_CONFIG_FIELD_TYPE_TEXT);
+ setKeyName(CConfig.MINIO_SECRET_KEY);
+ setKeyValue("");
+ }
+ },
+ new AppConfig() {
+ {
+ setName("Bucket");
+ setSort(30);
+ setFieldType(BackendConstant.APP_CONFIG_FIELD_TYPE_TEXT);
+ setKeyName(CConfig.MINIO_BUCKET);
+ setKeyValue("");
+ }
+ },
+ new AppConfig() {
+ {
+ setName("Endpoint");
+ setSort(40);
+ setFieldType(BackendConstant.APP_CONFIG_FIELD_TYPE_TEXT);
+ setKeyName(CConfig.MINIO_ENDPOINT);
+ setKeyValue("");
+ }
+ },
+ new AppConfig() {
+ {
+ setName("Domain");
+ setSort(50);
+ setFieldType(BackendConstant.APP_CONFIG_FIELD_TYPE_TEXT);
+ setKeyName(CConfig.MINIO_DOMAIN);
+ setKeyValue("");
+ }
+ },
+ });
}
};
diff --git a/src/main/java/xyz/playedu/api/config/KaptchaConfig.java b/src/main/java/xyz/playedu/api/config/KaptchaConfig.java
deleted file mode 100644
index 786ac31..0000000
--- a/src/main/java/xyz/playedu/api/config/KaptchaConfig.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright 2023 杭州白书科技有限公司
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package xyz.playedu.api.config;
-
-import static com.google.code.kaptcha.Constants.*;
-
-import com.google.code.kaptcha.impl.DefaultKaptcha;
-import com.google.code.kaptcha.util.Config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import java.util.Properties;
-
-@Configuration
-public class KaptchaConfig {
-
- @Bean(name = "captchaProducer")
- public DefaultKaptcha getKaptchaBean() {
- DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
- Properties properties = new Properties();
- // 是否边框
- properties.setProperty(KAPTCHA_BORDER, "no");
- // 字符颜色
- properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "red");
- // 干扰线颜色
- properties.setProperty(KAPTCHA_NOISE_COLOR, "red");
- // 字符间距
- properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "5");
- // 图片宽度
- properties.setProperty(KAPTCHA_IMAGE_WIDTH, "120");
- // 图片高度
- properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "50");
- // 字符大小
- properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "40");
- // 字符长度
- properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
- // 字体样式
- properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
-
- defaultKaptcha.setConfig(new Config(properties));
-
- return defaultKaptcha;
- }
-}
diff --git a/src/main/java/xyz/playedu/api/config/MinioConfig.java b/src/main/java/xyz/playedu/api/config/MinioConfig.java
deleted file mode 100644
index 7e2b56e..0000000
--- a/src/main/java/xyz/playedu/api/config/MinioConfig.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2023 杭州白书科技有限公司
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package xyz.playedu.api.config;
-
-import io.minio.MinioAsyncClient;
-import io.minio.MinioClient;
-
-import lombok.Data;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import xyz.playedu.api.vendor.PlayEduMinioClient;
-
-/**
- * @Author 杭州白书科技有限公司
- *
- * @create 2023/2/28 16:38
- */
-@Data
-@Configuration
-public class MinioConfig {
-
- @Value("${minio.domain}")
- private String domain;
-
- @Value("${minio.bucket}")
- private String bucket;
-
- @Value("${minio.access-key}")
- private String accessKey;
-
- @Value("${minio.secret-key}")
- private String secretKey;
-
- @Value("${minio.end-point}")
- private String endPoint;
-
- @Bean
- public MinioClient getMinioClient() {
- return MinioClient.builder()
- .endpoint(this.endPoint)
- .credentials(this.accessKey, this.secretKey)
- .build();
- }
-
- @Bean
- public PlayEduMinioClient getPlayEduMinioClient() {
- MinioAsyncClient client =
- PlayEduMinioClient.builder()
- .endpoint(this.endPoint)
- .credentials(this.accessKey, this.secretKey)
- .build();
- return new PlayEduMinioClient(client);
- }
-}
diff --git a/src/main/java/xyz/playedu/api/constant/CConfig.java b/src/main/java/xyz/playedu/api/constant/CConfig.java
index c499d55..95c0498 100644
--- a/src/main/java/xyz/playedu/api/constant/CConfig.java
+++ b/src/main/java/xyz/playedu/api/constant/CConfig.java
@@ -29,4 +29,10 @@ public class CConfig {
public static final String SYSTEM_H5_URL = "system.h5_url";
public static final String MEMBER_DEFAULT_AVATAR = "member.default_avatar";
+
+ public static final String MINIO_ACCESS_KEY = "minio.access_key";
+ public static final String MINIO_SECRET_KEY = "minio.secret_key";
+ public static final String MINIO_BUCKET = "minio.bucket";
+ public static final String MINIO_ENDPOINT = "minio.endpoint";
+ public static final String MINIO_DOMAIN = "minio.domain";
}
diff --git a/src/main/java/xyz/playedu/api/controller/ExceptionController.java b/src/main/java/xyz/playedu/api/controller/ExceptionController.java
index 6358dd2..5bc268b 100644
--- a/src/main/java/xyz/playedu/api/controller/ExceptionController.java
+++ b/src/main/java/xyz/playedu/api/controller/ExceptionController.java
@@ -37,11 +37,11 @@ import java.util.List;
@Slf4j
public class ExceptionController {
- // @ExceptionHandler(Exception.class)
- // public JsonResponse exceptionHandler(Exception e) {
- // log.error(e.getMessage());
- // return JsonResponse.error("系统错误", 500);
- // }
+ @ExceptionHandler(Exception.class)
+ public JsonResponse exceptionHandler(Exception e) {
+ log.error(e.getMessage());
+ return JsonResponse.error("系统错误", 500);
+ }
@ExceptionHandler(ServiceException.class)
public JsonResponse serviceExceptionHandler(ServiceException e) {
diff --git a/src/main/java/xyz/playedu/api/controller/backend/UploadController.java b/src/main/java/xyz/playedu/api/controller/backend/UploadController.java
index 1422886..3735c28 100644
--- a/src/main/java/xyz/playedu/api/controller/backend/UploadController.java
+++ b/src/main/java/xyz/playedu/api/controller/backend/UploadController.java
@@ -36,11 +36,6 @@ import xyz.playedu.api.util.HelperUtil;
import java.util.HashMap;
-/**
- * @Author 杭州白书科技有限公司
- *
- * @create 2023/2/28 16:26
- */
@RestController
@Slf4j
@RequestMapping("/backend/v1/upload")
diff --git a/src/main/java/xyz/playedu/api/controller/frontend/SystemController.java b/src/main/java/xyz/playedu/api/controller/frontend/SystemController.java
index 5e20852..96e5694 100644
--- a/src/main/java/xyz/playedu/api/controller/frontend/SystemController.java
+++ b/src/main/java/xyz/playedu/api/controller/frontend/SystemController.java
@@ -61,6 +61,7 @@ public class SystemController {
data.put("player-bullet-secret-text", configs.get("player.bullet_secret_text"));
data.put("player-bullet-secret-color", configs.get("player.bullet_secret_color"));
data.put("player-bullet-secret-opacity", configs.get("player.bullet_secret_opacity"));
+ data.put("player-disabled-drag", configs.get("player.disabled_drag"));
return JsonResponse.data(data);
}
diff --git a/src/main/java/xyz/playedu/api/listener/UserDestroyListener.java b/src/main/java/xyz/playedu/api/listener/UserDestroyListener.java
index 59cb42e..483bd2b 100644
--- a/src/main/java/xyz/playedu/api/listener/UserDestroyListener.java
+++ b/src/main/java/xyz/playedu/api/listener/UserDestroyListener.java
@@ -22,7 +22,7 @@ import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import xyz.playedu.api.event.UserDestroyEvent;
-import xyz.playedu.api.service.UserService;
+import xyz.playedu.api.service.*;
/**
* @Author 杭州白书科技有限公司
@@ -35,8 +35,23 @@ public class UserDestroyListener {
@Autowired private UserService userService;
+ @Autowired private UserCourseHourRecordService userCourseHourRecordService;
+
+ @Autowired private UserCourseRecordService userCourseRecordService;
+
+ @Autowired private UserLearnDurationRecordService userLearnDurationRecordService;
+
+ @Autowired private UserLearnDurationStatsService userLearnDurationStatsService;
+
+ @Autowired private UserLoginRecordService userLoginRecordService;
+
@EventListener
- public void updateLoginInfo(UserDestroyEvent event) {
+ public void remoteRelation(UserDestroyEvent event) {
userService.removeRelateDepartmentsByUserId(event.getUserId());
+ userCourseHourRecordService.remove(event.getUserId());
+ userCourseRecordService.destroy(event.getUserId());
+ userLearnDurationRecordService.remove(event.getUserId());
+ userLearnDurationStatsService.remove(event.getUserId());
+ userLoginRecordService.remove(event.getUserId());
}
}
diff --git a/src/main/java/xyz/playedu/api/service/AppConfigService.java b/src/main/java/xyz/playedu/api/service/AppConfigService.java
index 7916d22..3cb7ce1 100644
--- a/src/main/java/xyz/playedu/api/service/AppConfigService.java
+++ b/src/main/java/xyz/playedu/api/service/AppConfigService.java
@@ -18,16 +18,12 @@ package xyz.playedu.api.service;
import com.baomidou.mybatisplus.extension.service.IService;
import xyz.playedu.api.domain.AppConfig;
+import xyz.playedu.api.types.config.MinioConfig;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-/**
- * @author tengteng
- * @description 针对表【app_config】的数据库操作Service
- * @createDate 2023-03-09 11:13:33
- */
public interface AppConfigService extends IService {
Map allKeys();
@@ -37,4 +33,6 @@ public interface AppConfigService extends IService {
void saveFromMap(HashMap data);
Map keyValues();
+
+ MinioConfig getMinioConfig();
}
diff --git a/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java b/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java
index cf84b71..23998de 100644
--- a/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java
+++ b/src/main/java/xyz/playedu/api/service/UserCourseHourRecordService.java
@@ -51,6 +51,8 @@ public interface UserCourseHourRecordService extends IService getUserCourseHourCount(
diff --git a/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java b/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java
index ed2e702..0f40a7f 100644
--- a/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java
+++ b/src/main/java/xyz/playedu/api/service/UserCourseRecordService.java
@@ -45,6 +45,8 @@ public interface UserCourseRecordService extends IService {
void destroy(Integer userId, Integer courseId);
+ void destroy(Integer userId);
+
void removeByCourseId(Integer courseId);
List chunks(List ids, List fields);
diff --git a/src/main/java/xyz/playedu/api/service/UserLearnDurationRecordService.java b/src/main/java/xyz/playedu/api/service/UserLearnDurationRecordService.java
index dfb43e2..79ce7bf 100644
--- a/src/main/java/xyz/playedu/api/service/UserLearnDurationRecordService.java
+++ b/src/main/java/xyz/playedu/api/service/UserLearnDurationRecordService.java
@@ -26,4 +26,6 @@ import xyz.playedu.api.domain.UserLearnDurationRecord;
*/
public interface UserLearnDurationRecordService extends IService {
void store(Integer userId, Integer courseId, Integer hourId, Long startTime, Long endTime);
+
+ void remove(Integer userId);
}
diff --git a/src/main/java/xyz/playedu/api/service/UserLearnDurationStatsService.java b/src/main/java/xyz/playedu/api/service/UserLearnDurationStatsService.java
index f5852c3..1f7fd85 100644
--- a/src/main/java/xyz/playedu/api/service/UserLearnDurationStatsService.java
+++ b/src/main/java/xyz/playedu/api/service/UserLearnDurationStatsService.java
@@ -40,4 +40,6 @@ public interface UserLearnDurationStatsService extends IService dateBetween(Integer userId, String startAt, String endAt);
+
+ void remove(Integer userId);
}
diff --git a/src/main/java/xyz/playedu/api/service/UserLoginRecordService.java b/src/main/java/xyz/playedu/api/service/UserLoginRecordService.java
index 0db4707..0b94bfd 100644
--- a/src/main/java/xyz/playedu/api/service/UserLoginRecordService.java
+++ b/src/main/java/xyz/playedu/api/service/UserLoginRecordService.java
@@ -35,7 +35,7 @@ public interface UserLoginRecordService extends IService {
String browserVersion,
String os);
- void saveIpArea(Integer id, String area);
-
void logout(Integer userid, String jti);
+
+ void remove(Integer userId);
}
diff --git a/src/main/java/xyz/playedu/api/service/impl/AppConfigServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/AppConfigServiceImpl.java
index ee51a5b..aa0320f 100644
--- a/src/main/java/xyz/playedu/api/service/impl/AppConfigServiceImpl.java
+++ b/src/main/java/xyz/playedu/api/service/impl/AppConfigServiceImpl.java
@@ -19,9 +19,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
+import xyz.playedu.api.constant.CConfig;
import xyz.playedu.api.domain.AppConfig;
import xyz.playedu.api.mapper.AppConfigMapper;
import xyz.playedu.api.service.AppConfigService;
+import xyz.playedu.api.types.config.MinioConfig;
import java.util.ArrayList;
import java.util.HashMap;
@@ -89,4 +91,16 @@ public class AppConfigServiceImpl extends ServiceImpl config = keyValues();
+ minioConfig.setAccessKey(config.get(CConfig.MINIO_ACCESS_KEY));
+ minioConfig.setSecretKey(config.get(CConfig.MINIO_SECRET_KEY));
+ minioConfig.setBucket(config.get(CConfig.MINIO_BUCKET));
+ minioConfig.setEndpoint(config.get(CConfig.MINIO_ENDPOINT));
+ minioConfig.setDomain(config.get(CConfig.MINIO_DOMAIN));
+ return minioConfig;
+ }
}
diff --git a/src/main/java/xyz/playedu/api/service/impl/ImageCaptchaServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/ImageCaptchaServiceImpl.java
index 662b6de..a912782 100644
--- a/src/main/java/xyz/playedu/api/service/impl/ImageCaptchaServiceImpl.java
+++ b/src/main/java/xyz/playedu/api/service/impl/ImageCaptchaServiceImpl.java
@@ -15,27 +15,19 @@
*/
package xyz.playedu.api.service.impl;
-import com.google.code.kaptcha.impl.DefaultKaptcha;
-
-import jakarta.annotation.Resource;
+import cn.hutool.captcha.CaptchaUtil;
+import cn.hutool.captcha.LineCaptcha;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
-import org.springframework.util.FastByteArrayOutputStream;
import xyz.playedu.api.service.ImageCaptchaService;
import xyz.playedu.api.types.ImageCaptchaResult;
-import xyz.playedu.api.util.Base64Util;
import xyz.playedu.api.util.HelperUtil;
import xyz.playedu.api.util.RedisUtil;
-import java.awt.image.BufferedImage;
-import java.io.IOException;
-
-import javax.imageio.ImageIO;
-
@Slf4j
@Service
public class ImageCaptchaServiceImpl implements ImageCaptchaService {
@@ -46,29 +38,21 @@ public class ImageCaptchaServiceImpl implements ImageCaptchaService {
@Value("${playedu.captcha.expire}")
private Long ConfigExpire;
- @Resource private DefaultKaptcha defaultKaptcha;
-
@Override
- public ImageCaptchaResult generate() throws IOException {
+ public ImageCaptchaResult generate() {
ImageCaptchaResult imageCaptcha = new ImageCaptchaResult();
- BufferedImage image;
+
+ // 生成验证码
+ LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(240, 100, 4, 1);
// 图形验证码的key[api是无状态的需要key来锁定验证码的值]
String randomKey = HelperUtil.randomString(16);
imageCaptcha.setKey(randomKey);
-
- // 生成验证码
- imageCaptcha.setCode(defaultKaptcha.createText());
- image = defaultKaptcha.createImage(imageCaptcha.getCode());
+ imageCaptcha.setCode(lineCaptcha.getCode());
+ imageCaptcha.setImage("data:image/png;base64," + lineCaptcha.getImageBase64());
// 写入到redis中
- RedisUtil.set(getCacheKey(randomKey), imageCaptcha.getCode(), ConfigExpire);
-
- FastByteArrayOutputStream os = new FastByteArrayOutputStream();
- ImageIO.write(image, "png", os);
-
- String base64 = "data:image/png;base64," + Base64Util.encode(os.toByteArray());
- imageCaptcha.setImage(base64);
+ RedisUtil.set(getCacheKey(imageCaptcha.getKey()), imageCaptcha.getCode(), ConfigExpire);
return imageCaptcha;
}
diff --git a/src/main/java/xyz/playedu/api/service/impl/MinioServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/MinioServiceImpl.java
index 547b35d..c42b9a0 100644
--- a/src/main/java/xyz/playedu/api/service/impl/MinioServiceImpl.java
+++ b/src/main/java/xyz/playedu/api/service/impl/MinioServiceImpl.java
@@ -15,10 +15,7 @@
*/
package xyz.playedu.api.service.impl;
-import io.minio.GetPresignedObjectUrlArgs;
-import io.minio.MinioClient;
-import io.minio.PutObjectArgs;
-import io.minio.RemoveObjectArgs;
+import io.minio.*;
import io.minio.http.Method;
import lombok.SneakyThrows;
@@ -27,8 +24,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
-import xyz.playedu.api.config.MinioConfig;
+import xyz.playedu.api.exception.ServiceException;
+import xyz.playedu.api.service.AppConfigService;
import xyz.playedu.api.service.MinioService;
+import xyz.playedu.api.types.config.MinioConfig;
import xyz.playedu.api.vendor.PlayEduMinioClient;
import java.io.ByteArrayInputStream;
@@ -36,70 +35,111 @@ import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
-/**
- * @Author 杭州白书科技有限公司
- *
- * @create 2023/3/7 13:29
- */
@Service
public class MinioServiceImpl implements MinioService {
- @Autowired private MinioConfig c;
+ private MinioConfig minioConfig = null;
- @Autowired private MinioClient client;
+ @Autowired private AppConfigService appConfigService;
- @Autowired private PlayEduMinioClient playEduMinioClient;
+ @SneakyThrows
+ private MinioConfig getMinioConfig() {
+ if (minioConfig == null) {
+ minioConfig = appConfigService.getMinioConfig();
+ if (minioConfig.getAccessKey().isBlank()
+ || minioConfig.getSecretKey().isBlank()
+ || minioConfig.getBucket().isBlank()
+ || minioConfig.getDomain().isBlank()
+ || minioConfig.getEndpoint().isBlank()) {
+ throw new ServiceException("MinIO服务未配置");
+ }
+ }
+ return minioConfig;
+ }
+
+ private String bucket() {
+ return getMinioConfig().getBucket();
+ }
+
+ public MinioClient getMinioClient() {
+ MinioConfig c = getMinioConfig();
+
+ return MinioClient.builder()
+ .endpoint(c.getEndpoint())
+ .credentials(c.getAccessKey(), c.getSecretKey())
+ .build();
+ }
+
+ public PlayEduMinioClient getPlayEduMinioClient() {
+ MinioConfig c = getMinioConfig();
+
+ MinioAsyncClient client =
+ PlayEduMinioClient.builder()
+ .endpoint(c.getEndpoint())
+ .credentials(c.getAccessKey(), c.getSecretKey())
+ .build();
+
+ return new PlayEduMinioClient(client);
+ }
@Override
public String url(String path) {
- return c.getDomain() + c.getBucket() + "/" + path;
+ MinioConfig c = getMinioConfig();
+
+ return c.getDomain()
+ + (c.getDomain().endsWith("/") ? "" : "/")
+ + c.getBucket()
+ + "/"
+ + path;
}
@Override
@SneakyThrows
public String saveFile(MultipartFile file, String savePath, String contentType) {
PutObjectArgs objectArgs =
- PutObjectArgs.builder().bucket(c.getBucket()).object(savePath).stream(
+ PutObjectArgs.builder().bucket(bucket()).object(savePath).stream(
file.getInputStream(), file.getSize(), -1)
.contentType(contentType)
.build();
- client.putObject(objectArgs);
+ getMinioClient().putObject(objectArgs);
return url(savePath);
}
@Override
public String uploadId(String path) {
- return playEduMinioClient.uploadId(c.getBucket(), path);
+ return getPlayEduMinioClient().uploadId(bucket(), path);
}
@Override
@SneakyThrows
public String chunkPreSignUrl(String filename, String partNumber, String uploadId) {
Map extraQueryParams = new HashMap<>();
- extraQueryParams.put("partNumber", partNumber + "");
+ extraQueryParams.put("partNumber", partNumber);
extraQueryParams.put("uploadId", uploadId);
- return client.getPresignedObjectUrl(
- GetPresignedObjectUrlArgs.builder()
- .bucket(c.getBucket())
- .object(filename)
- .method(Method.PUT)
- .expiry(60 * 60 * 24)
- .extraQueryParams(extraQueryParams)
- .build());
+ return getMinioClient()
+ .getPresignedObjectUrl(
+ GetPresignedObjectUrlArgs.builder()
+ .bucket(bucket())
+ .object(filename)
+ .method(Method.PUT)
+ .expiry(60 * 60 * 24)
+ .extraQueryParams(extraQueryParams)
+ .build());
}
@Override
public String merge(String filename, String uploadId) {
- playEduMinioClient.merge(c.getBucket(), filename, uploadId);
+ getPlayEduMinioClient().merge(bucket(), filename, uploadId);
return url(filename);
}
@Override
@SneakyThrows
public void removeByPath(String path) {
- client.removeObject(RemoveObjectArgs.builder().bucket(c.getBucket()).object(path).build());
+ getMinioClient()
+ .removeObject(RemoveObjectArgs.builder().bucket(bucket()).object(path).build());
}
@Override
@@ -108,12 +148,12 @@ public class MinioServiceImpl implements MinioService {
InputStream inputStream = new ByteArrayInputStream(file);
PutObjectArgs objectArgs =
- PutObjectArgs.builder().bucket(c.getBucket()).object(savePath).stream(
+ PutObjectArgs.builder().bucket(bucket()).object(savePath).stream(
inputStream, file.length, -1)
.contentType(contentType)
.build();
- client.putObject(objectArgs);
+ getMinioClient().putObject(objectArgs);
return url(savePath);
}
diff --git a/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java
index 112953f..5965c46 100644
--- a/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java
+++ b/src/main/java/xyz/playedu/api/service/impl/UserCourseHourRecordServiceImpl.java
@@ -151,6 +151,11 @@ public class UserCourseHourRecordServiceImpl
remove(query().getWrapper().eq("user_id", userId).eq("course_id", courseId));
}
+ @Override
+ public void remove(Integer userId) {
+ remove(query().getWrapper().eq("user_id", userId));
+ }
+
@Override
public PaginationResult paginate(
int page, int size, UserCourseHourRecordPaginateFilter filter) {
diff --git a/src/main/java/xyz/playedu/api/service/impl/UserCourseRecordServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/UserCourseRecordServiceImpl.java
index 5c892b1..53d8007 100644
--- a/src/main/java/xyz/playedu/api/service/impl/UserCourseRecordServiceImpl.java
+++ b/src/main/java/xyz/playedu/api/service/impl/UserCourseRecordServiceImpl.java
@@ -138,6 +138,11 @@ public class UserCourseRecordServiceImpl
remove(query().getWrapper().in("user_id", userId).eq("course_id", courseId));
}
+ @Override
+ public void destroy(Integer userId) {
+ remove(query().getWrapper().in("user_id", userId));
+ }
+
@Override
public void decrease(Integer userId, Integer courseId, int count) {
UserCourseRecord record = find(userId, courseId);
diff --git a/src/main/java/xyz/playedu/api/service/impl/UserLearnDurationRecordServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/UserLearnDurationRecordServiceImpl.java
index ed4eb47..db83676 100644
--- a/src/main/java/xyz/playedu/api/service/impl/UserLearnDurationRecordServiceImpl.java
+++ b/src/main/java/xyz/playedu/api/service/impl/UserLearnDurationRecordServiceImpl.java
@@ -57,4 +57,9 @@ public class UserLearnDurationRecordServiceImpl
save(record);
}
+
+ @Override
+ public void remove(Integer userId) {
+ remove(query().getWrapper().eq("user_id", userId));
+ }
}
diff --git a/src/main/java/xyz/playedu/api/service/impl/UserLearnDurationStatsServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/UserLearnDurationStatsServiceImpl.java
index 8b0b716..ebfc19e 100644
--- a/src/main/java/xyz/playedu/api/service/impl/UserLearnDurationStatsServiceImpl.java
+++ b/src/main/java/xyz/playedu/api/service/impl/UserLearnDurationStatsServiceImpl.java
@@ -114,4 +114,9 @@ public class UserLearnDurationStatsServiceImpl
return list(
query().getWrapper().eq("user_id", userId).between("created_date", startAt, endAt));
}
+
+ @Override
+ public void remove(Integer userId) {
+ remove(query().getWrapper().eq("user_id", userId));
+ }
}
diff --git a/src/main/java/xyz/playedu/api/service/impl/UserLoginRecordServiceImpl.java b/src/main/java/xyz/playedu/api/service/impl/UserLoginRecordServiceImpl.java
index 10f35cc..60b714d 100644
--- a/src/main/java/xyz/playedu/api/service/impl/UserLoginRecordServiceImpl.java
+++ b/src/main/java/xyz/playedu/api/service/impl/UserLoginRecordServiceImpl.java
@@ -54,14 +54,6 @@ public class UserLoginRecordServiceImpl extends ServiceImpl