mirror of
https://github.com/booklore-app/booklore.git
synced 2026-02-18 00:17:53 +01:00
feat(api, build): Upgrade to Java 25, Gradle 9, and Spring Boot 4, Jackson 3 (#2597)
* refactor: simplify RestTemplate and ObjectMapper configurations, add no-args constructors to progress classes Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * chore: update Gradle and Java versions in Docker configuration and build files Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * test: enhance header assertions in tests and add spring-boot-test-autoconfigure dependency Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * refactor(tests): migrate to SpringBootTest and update entity management in test cases Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * test: update test property configurations for H2 database in Healthcheck and BookOpds repository tests Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * test: clean up HealthcheckControllerTest by removing unnecessary whitespace and comments Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * test: remove unnecessary whitespace in HealthcheckControllerTest Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * chore: downgrade Flyway version from 12.0.0 to 11.14.1 in build.gradle Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * chore: downgrade Flyway version from 12.0.0 to 11.14.1 in build.gradle Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: add @DependsOn annotation for Flyway in MultipartConfig Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: add @DependsOn annotation for Flyway in LibraryService Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: add test configuration for Flyway in HealthcheckControllerTest chore: remove unused path variable in deleteLibrary method of LibraryService Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: configure Flyway migration and update test configuration Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: enable remote debugging in bootRun configuration Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: update Flyway version and enhance ObjectMapper configuration Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: remove @DependsOn annotation for Flyway in MultipartConfig and LibraryService Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: add NoArgsConstructor and AllArgsConstructor annotations to DTO classes Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: add NoArgsConstructor and AllArgsConstructor annotations to FileProcessResult, MetadataUpdateContext, and MetadataUpdateWrapper classes Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: add DependsOnDatabaseInitialization annotation to MultipartConfig, AppSettingService, LibraryService, and JwtSecretService classes Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: add DependsOnDatabaseInitialization annotation to MultipartConfig and CronService classes Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: implement lazy initialization and thread safety for JWT secret retrieval Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: add Flyway dependency and update LibraryService initialization to use ApplicationReadyEvent Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * refactor: remove outdated comments from JwtSecretService class Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * refactor: migrate from com.fasterxml.jackson to tools.jackson for JSON processing Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * refactor: remove unused ObjectMapper bean and related imports from JacksonConfig Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: configure async support with VirtualThreadTaskExecutor in WebMvcConfig Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: enhance application performance with virtual threads and HTTP/2 support Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: add JsonSetter annotation to skip null values for triggeredByCron field Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: add triggeredByCron field to TaskCreateRequest and initialize in task management Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * feat: enable Spring Data web support with DTO serialization in WebMvcConfig Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * refactor(UserDefaultsService): simplify class structure and remove unused methods Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * refactor(BookOpdsRepositoryDataJpaTest): simplify test setup and use TestEntityManager Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * refactor(BookOpdsRepositoryDataJpaTest): update test configuration and simplify entity persistence Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * refactor: update Jackson dependencies and migrate to Jackson 3 Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * refactor(build.gradle): update jackson-annotations dependency to use Jackson 3 BOM Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * refactor(BookOpdsRepositoryDataJpaTest): remove unused ObjectMapper bean definition Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> * refactor(LibraryService): simplify library deletion logic Signed-off-by: Balázs Szücs <bszucs1209@gmail.com> --------- Signed-off-by: Balázs Szücs <bszucs1209@gmail.com>
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
plugins {
|
||||
id 'java'
|
||||
id 'org.springframework.boot' version '3.5.8'
|
||||
id 'org.springframework.boot' version '4.0.2'
|
||||
id 'io.spring.dependency-management' version '1.1.7'
|
||||
id 'org.hibernate.orm' version '6.6.36.Final'
|
||||
id 'org.hibernate.orm' version '7.2.0.Final'
|
||||
id 'com.github.ben-manes.versions' version '0.53.0'
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ version = '0.0.1-SNAPSHOT'
|
||||
|
||||
java {
|
||||
toolchain {
|
||||
languageVersion = JavaLanguageVersion.of(21)
|
||||
languageVersion = JavaLanguageVersion.of(25)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,7 +41,8 @@ dependencies {
|
||||
implementation 'io.projectreactor:reactor-core'
|
||||
|
||||
// --- Database & Migration ---
|
||||
implementation 'org.mariadb.jdbc:mariadb-java-client:3.5.6'
|
||||
implementation 'org.mariadb.jdbc:mariadb-java-client:3.5.7'
|
||||
implementation 'org.springframework.boot:spring-boot-starter-flyway'
|
||||
implementation 'org.flywaydb:flyway-mysql:11.19.0'
|
||||
|
||||
// --- Security & Authentication ---
|
||||
@@ -77,7 +78,6 @@ dependencies {
|
||||
implementation 'com.github.junrar:junrar:7.5.7'
|
||||
|
||||
// --- JSON & Web Scraping ---
|
||||
implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.20.1'
|
||||
implementation 'org.jsoup:jsoup:1.21.2'
|
||||
|
||||
// --- Mapping (DTOs & Entities) ---
|
||||
@@ -93,11 +93,22 @@ dependencies {
|
||||
// --- Template Engine ---
|
||||
implementation 'org.freemarker:freemarker:2.3.34'
|
||||
|
||||
// --- Jackson 3 ---
|
||||
implementation platform('tools.jackson:jackson-bom:3.0.4')
|
||||
implementation 'tools.jackson.core:jackson-core'
|
||||
implementation 'tools.jackson.core:jackson-databind'
|
||||
implementation 'tools.jackson.module:jackson-module-blackbird'
|
||||
|
||||
// --- Jackson 2 (Compatibility) ---
|
||||
// jackson-annotations version is managed by Jackson 3 BOM (requires 2.20+)
|
||||
implementation 'com.fasterxml.jackson.core:jackson-annotations'
|
||||
|
||||
// --- Caching ---
|
||||
implementation 'com.github.ben-manes.caffeine:caffeine:3.2.0'
|
||||
|
||||
// --- Test Dependencies ---
|
||||
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
||||
testImplementation 'org.springframework.boot:spring-boot-test-autoconfigure'
|
||||
testImplementation 'org.assertj:assertj-core:3.27.6'
|
||||
testImplementation "org.mockito:mockito-inline:5.2.0"
|
||||
testRuntimeOnly 'com.h2database:h2'
|
||||
@@ -119,4 +130,8 @@ bootRun {
|
||||
if (debug.equals("true")) {
|
||||
jvmArgs("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005")
|
||||
}
|
||||
}
|
||||
|
||||
bootJar {
|
||||
mainClass = 'org.booklore.BookloreApplication'
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
@@ -2,12 +2,13 @@ package org.booklore.config;
|
||||
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.web.client.RestTemplateBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.http.client.JdkClientHttpRequestFactory;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.socket.config.WebSocketMessageBrokerStats;
|
||||
|
||||
import java.net.http.HttpClient;
|
||||
import java.time.Duration;
|
||||
|
||||
@Configuration
|
||||
@@ -17,13 +18,16 @@ public class BeanConfig {
|
||||
private WebSocketMessageBrokerStats webSocketMessageBrokerStats;
|
||||
|
||||
@Bean
|
||||
public RestTemplate restTemplate(RestTemplateBuilder builder) {
|
||||
return builder.connectTimeout(Duration.ofSeconds(10)).readTimeout(Duration.ofSeconds(15))
|
||||
.build();
|
||||
public RestTemplate restTemplate(HttpClient httpClient) {
|
||||
JdkClientHttpRequestFactory factory = new JdkClientHttpRequestFactory(httpClient);
|
||||
factory.setReadTimeout(Duration.ofSeconds(15));
|
||||
return new RestTemplate(factory);
|
||||
}
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
webSocketMessageBrokerStats.setLoggingPeriod(30 * 24 * 60 * 60 * 1000L); // 30 days
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package org.booklore.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.net.http.HttpClient;
|
||||
import java.time.Duration;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
@Configuration
|
||||
public class HttpClientConfig {
|
||||
|
||||
@Bean
|
||||
public HttpClient httpClient() {
|
||||
return HttpClient.newBuilder()
|
||||
.version(HttpClient.Version.HTTP_2)
|
||||
.connectTimeout(Duration.ofSeconds(10))
|
||||
.followRedirects(HttpClient.Redirect.NORMAL)
|
||||
.executor(Executors.newVirtualThreadPerTaskExecutor())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,11 @@
|
||||
package org.booklore.config;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
|
||||
import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Primary;
|
||||
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
import tools.jackson.databind.json.JsonMapper;
|
||||
import tools.jackson.databind.ser.BeanPropertyWriter;
|
||||
import tools.jackson.databind.ser.ValueSerializerModifier;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -20,25 +19,24 @@ public class JacksonConfig {
|
||||
public static final String KOMGA_CLEAN_OBJECT_MAPPER = "komgaCleanObjectMapper";
|
||||
|
||||
@Bean(name = KOMGA_CLEAN_OBJECT_MAPPER)
|
||||
public ObjectMapper komgaCleanObjectMapper(Jackson2ObjectMapperBuilder builder) {
|
||||
ObjectMapper mapper = builder.build();
|
||||
public ObjectMapper komgaCleanObjectMapper() {
|
||||
return JsonMapper.builder()
|
||||
.findAndAddModules()
|
||||
.serializerFactory(
|
||||
tools.jackson.databind.ser.BeanSerializerFactory.instance
|
||||
.withSerializerModifier(new ValueSerializerModifier() {
|
||||
@Override
|
||||
public List<BeanPropertyWriter> changeProperties(
|
||||
tools.jackson.databind.SerializationConfig config,
|
||||
tools.jackson.databind.BeanDescription.Supplier beanDescSupplier,
|
||||
List<BeanPropertyWriter> beanProperties) {
|
||||
|
||||
// Register the custom serializer modifier on this dedicated mapper only
|
||||
mapper.setSerializerFactory(
|
||||
mapper.getSerializerFactory().withSerializerModifier(new BeanSerializerModifier() {
|
||||
@Override
|
||||
public List<BeanPropertyWriter> changeProperties(
|
||||
com.fasterxml.jackson.databind.SerializationConfig config,
|
||||
com.fasterxml.jackson.databind.BeanDescription beanDesc,
|
||||
List<BeanPropertyWriter> beanProperties) {
|
||||
|
||||
return beanProperties.stream()
|
||||
.map(KomgaCleanBeanPropertyWriter::new)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
return mapper;
|
||||
return beanProperties.stream()
|
||||
.map(KomgaCleanBeanPropertyWriter::new)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
})
|
||||
)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package org.booklore.config;
|
||||
|
||||
import org.booklore.context.KomgaCleanContext;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||
import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
|
||||
import tools.jackson.core.JsonGenerator;
|
||||
import tools.jackson.databind.SerializationContext;
|
||||
import tools.jackson.databind.ser.BeanPropertyWriter;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
@@ -21,7 +21,7 @@ public class KomgaCleanBeanPropertyWriter extends BeanPropertyWriter {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void serializeAsField(Object bean, JsonGenerator gen, SerializerProvider prov) throws Exception {
|
||||
public void serializeAsProperty(Object bean, JsonGenerator gen, SerializationContext prov) throws Exception {
|
||||
if (KomgaCleanContext.isCleanMode()) {
|
||||
String propertyName = getName();
|
||||
|
||||
@@ -43,6 +43,6 @@ public class KomgaCleanBeanPropertyWriter extends BeanPropertyWriter {
|
||||
}
|
||||
|
||||
// Default behavior
|
||||
super.serializeAsField(bean, gen, prov);
|
||||
super.serializeAsProperty(bean, gen, prov);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package org.booklore.config;
|
||||
|
||||
import org.booklore.service.appsettings.AppSettingService;
|
||||
import jakarta.servlet.MultipartConfigElement;
|
||||
import org.springframework.boot.web.servlet.MultipartConfigFactory;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.util.unit.DataSize;
|
||||
@@ -10,13 +8,17 @@ import org.springframework.util.unit.DataSize;
|
||||
@Configuration
|
||||
public class MultipartConfig {
|
||||
|
||||
@Bean
|
||||
public MultipartConfigElement multipartConfigElement(AppSettingService appSettingService) {
|
||||
MultipartConfigFactory factory = new MultipartConfigFactory();
|
||||
long maxSizeMb = appSettingService.getAppSettings().getMaxFileUploadSizeInMb();
|
||||
private static final long DEFAULT_MAX_UPLOAD_SIZE_MB = 1024;
|
||||
|
||||
factory.setMaxFileSize(DataSize.ofMegabytes(maxSizeMb));
|
||||
factory.setMaxRequestSize(DataSize.ofMegabytes(maxSizeMb));
|
||||
return factory.createMultipartConfig();
|
||||
/**
|
||||
* Provides a MultipartConfigElement with a generous default max upload size.
|
||||
* The actual user-configured limit from app_settings is enforced at the service layer.
|
||||
* This bean is created during servlet container initialization (before Flyway migrations run),
|
||||
* so it must NOT query the database.
|
||||
*/
|
||||
@Bean
|
||||
public MultipartConfigElement multipartConfigElement() {
|
||||
long maxSizeBytes = DataSize.ofMegabytes(DEFAULT_MAX_UPLOAD_SIZE_MB).toBytes();
|
||||
return new MultipartConfigElement("", maxSizeBytes, maxSizeBytes, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,16 +2,25 @@ package org.booklore.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
import org.springframework.core.task.AsyncTaskExecutor;
|
||||
import org.springframework.core.task.VirtualThreadTaskExecutor;
|
||||
import org.springframework.scheduling.TaskScheduler;
|
||||
import org.springframework.scheduling.concurrent.SimpleAsyncTaskScheduler;
|
||||
|
||||
@Configuration
|
||||
public class TaskExecutorConfig {
|
||||
|
||||
@Bean(name = "taskExecutor")
|
||||
public Executor taskExecutor() {
|
||||
return Executors.newVirtualThreadPerTaskExecutor();
|
||||
public AsyncTaskExecutor taskExecutor() {
|
||||
return new VirtualThreadTaskExecutor("async-");
|
||||
}
|
||||
|
||||
@Bean
|
||||
public TaskScheduler taskScheduler() {
|
||||
SimpleAsyncTaskScheduler scheduler = new SimpleAsyncTaskScheduler();
|
||||
scheduler.setVirtualThreads(true);
|
||||
scheduler.setThreadNamePrefix("scheduler-");
|
||||
return scheduler;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,14 +1,20 @@
|
||||
package org.booklore.config;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.booklore.interceptor.KomgaCleanInterceptor;
|
||||
import org.booklore.interceptor.KomgaEnabledInterceptor;
|
||||
import org.booklore.interceptor.OpdsEnabledInterceptor;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.task.VirtualThreadTaskExecutor;
|
||||
import org.springframework.data.web.config.EnableSpringDataWebSupport;
|
||||
import org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
import static org.springframework.data.web.config.EnableSpringDataWebSupport.PageSerializationMode.VIA_DTO;
|
||||
|
||||
@Configuration
|
||||
@EnableSpringDataWebSupport(pageSerializationMode = VIA_DTO)
|
||||
@RequiredArgsConstructor
|
||||
public class WebMvcConfig implements WebMvcConfigurer {
|
||||
|
||||
@@ -16,6 +22,11 @@ public class WebMvcConfig implements WebMvcConfigurer {
|
||||
private final KomgaEnabledInterceptor komgaEnabledInterceptor;
|
||||
private final KomgaCleanInterceptor komgaCleanInterceptor;
|
||||
|
||||
@Override
|
||||
public void configureAsyncSupport(AsyncSupportConfigurer configurer) {
|
||||
configurer.setTaskExecutor(new VirtualThreadTaskExecutor("mvc-async-"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(opdsEnabledInterceptor)
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
package org.booklore.controller;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.booklore.model.dto.settings.AppSettingKey;
|
||||
import org.booklore.model.dto.settings.AppSettings;
|
||||
import org.booklore.model.dto.settings.SettingRequest;
|
||||
import org.booklore.service.appsettings.AppSettingService;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import tools.jackson.core.JacksonException;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -36,7 +36,7 @@ public class AppSettingController {
|
||||
@ApiResponse(responseCode = "400", description = "Invalid request")
|
||||
})
|
||||
@PutMapping
|
||||
public void updateSettings(@Parameter(description = "List of settings to update") @RequestBody List<SettingRequest> settingRequests) throws JsonProcessingException {
|
||||
public void updateSettings(@Parameter(description = "List of settings to update") @RequestBody List<SettingRequest> settingRequests) throws JacksonException {
|
||||
for (SettingRequest settingRequest : settingRequests) {
|
||||
AppSettingKey key = AppSettingKey.valueOf(settingRequest.getName());
|
||||
appSettingService.updateSetting(key, settingRequest.getValue());
|
||||
|
||||
@@ -1,19 +1,5 @@
|
||||
package org.booklore.controller;
|
||||
|
||||
import org.booklore.model.dto.BookLoreUser;
|
||||
import org.booklore.model.dto.Shelf;
|
||||
import org.booklore.model.dto.kobo.KoboAuthentication;
|
||||
import org.booklore.model.dto.kobo.KoboReadingState;
|
||||
import org.booklore.model.dto.kobo.KoboReadingStateList;
|
||||
import org.booklore.model.dto.kobo.KoboReadingStateRequest;
|
||||
import org.booklore.model.dto.kobo.KoboResources;
|
||||
import org.booklore.model.dto.kobo.KoboTestResponse;
|
||||
import org.booklore.service.ShelfService;
|
||||
import org.booklore.service.book.BookDownloadService;
|
||||
import org.booklore.service.book.BookService;
|
||||
import org.booklore.service.kobo.*;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.responses.ApiResponse;
|
||||
@@ -24,10 +10,19 @@ import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.RandomStringUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.booklore.model.dto.BookLoreUser;
|
||||
import org.booklore.model.dto.Shelf;
|
||||
import org.booklore.model.dto.kobo.*;
|
||||
import org.booklore.service.ShelfService;
|
||||
import org.booklore.service.book.BookDownloadService;
|
||||
import org.booklore.service.book.BookService;
|
||||
import org.booklore.service.kobo.*;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.core.annotation.AuthenticationPrincipal;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import tools.jackson.core.JacksonException;
|
||||
import tools.jackson.databind.JsonNode;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@@ -61,7 +56,7 @@ public class KoboController {
|
||||
@Operation(summary = "Initialize Kobo resources", description = "Initialize Kobo resources for the device.")
|
||||
@ApiResponse(responseCode = "200", description = "Initialization successful")
|
||||
@GetMapping("/v1/initialization")
|
||||
public ResponseEntity<KoboResources> initialization() throws JsonProcessingException {
|
||||
public ResponseEntity<KoboResources> initialization() throws JacksonException {
|
||||
return koboInitializationService.initialize(token);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,23 +1,26 @@
|
||||
package org.booklore.controller;
|
||||
|
||||
import org.booklore.config.JacksonConfig;
|
||||
import org.booklore.mapper.komga.KomgaMapper;
|
||||
import org.booklore.model.dto.komga.*;
|
||||
import org.booklore.service.book.BookService;
|
||||
import org.booklore.service.komga.KomgaService;
|
||||
import org.booklore.service.opds.OpdsUserV2Service;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.booklore.config.JacksonConfig;
|
||||
import org.booklore.mapper.komga.KomgaMapper;
|
||||
import org.booklore.model.dto.komga.KomgaBookDto;
|
||||
import org.booklore.model.dto.komga.KomgaLibraryDto;
|
||||
import org.booklore.model.dto.komga.KomgaPageableDto;
|
||||
import org.booklore.model.dto.komga.KomgaSeriesDto;
|
||||
import org.booklore.service.book.BookService;
|
||||
import org.booklore.service.komga.KomgaService;
|
||||
import org.booklore.service.opds.OpdsUserV2Service;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -1,16 +1,5 @@
|
||||
package org.booklore.controller;
|
||||
|
||||
import org.booklore.config.security.service.AuthenticationService;
|
||||
import org.booklore.exception.ApiError;
|
||||
import org.booklore.exception.APIException;
|
||||
import org.booklore.model.dto.settings.OidcAutoProvisionDetails;
|
||||
import org.booklore.model.dto.settings.OidcProviderDetails;
|
||||
import org.booklore.model.entity.BookLoreUserEntity;
|
||||
import org.booklore.repository.UserRepository;
|
||||
import org.booklore.service.appsettings.AppSettingService;
|
||||
import org.booklore.service.user.UserProvisioningService;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.nimbusds.jwt.JWTClaimsSet;
|
||||
import com.nimbusds.jwt.SignedJWT;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
@@ -20,11 +9,22 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.booklore.config.security.service.AuthenticationService;
|
||||
import org.booklore.exception.APIException;
|
||||
import org.booklore.exception.ApiError;
|
||||
import org.booklore.model.dto.settings.OidcAutoProvisionDetails;
|
||||
import org.booklore.model.dto.settings.OidcProviderDetails;
|
||||
import org.booklore.model.entity.BookLoreUserEntity;
|
||||
import org.booklore.repository.UserRepository;
|
||||
import org.booklore.service.appsettings.AppSettingService;
|
||||
import org.booklore.service.user.UserProvisioningService;
|
||||
import org.springframework.http.*;
|
||||
import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import tools.jackson.databind.JsonNode;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package org.booklore.convertor;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import jakarta.persistence.AttributeConverter;
|
||||
import jakarta.persistence.Converter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.booklore.model.entity.BookFileEntity.AudioFileChapter;
|
||||
import tools.jackson.core.JacksonException;
|
||||
import tools.jackson.core.type.TypeReference;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -24,7 +24,7 @@ public class AudioFileChapterListConverter implements AttributeConverter<List<Au
|
||||
}
|
||||
try {
|
||||
return objectMapper.writeValueAsString(attribute);
|
||||
} catch (JsonProcessingException e) {
|
||||
} catch (JacksonException e) {
|
||||
log.error("Error converting chapter list to JSON", e);
|
||||
return null;
|
||||
}
|
||||
@@ -37,7 +37,7 @@ public class AudioFileChapterListConverter implements AttributeConverter<List<Au
|
||||
}
|
||||
try {
|
||||
return objectMapper.readValue(dbData, LIST_TYPE_REF);
|
||||
} catch (JsonProcessingException e) {
|
||||
} catch (JacksonException e) {
|
||||
log.error("Error converting JSON to chapter list", e);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
package org.booklore.convertor;
|
||||
|
||||
import org.booklore.model.dto.BookRecommendationLite;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
import jakarta.persistence.AttributeConverter;
|
||||
import jakarta.persistence.Converter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.booklore.model.dto.BookRecommendationLite;
|
||||
import tools.jackson.core.JacksonException;
|
||||
import tools.jackson.core.type.TypeReference;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@@ -18,10 +17,6 @@ public class BookRecommendationIdsListConverter implements AttributeConverter<Se
|
||||
private static final ObjectMapper objectMapper = new ObjectMapper();
|
||||
private static final TypeReference<Set<BookRecommendationLite>> SET_TYPE_REF = new TypeReference<>() {};
|
||||
|
||||
static {
|
||||
objectMapper.registerModule(new JavaTimeModule());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertToDatabaseColumn(Set<BookRecommendationLite> recommendations) {
|
||||
if (recommendations == null) {
|
||||
@@ -29,7 +24,7 @@ public class BookRecommendationIdsListConverter implements AttributeConverter<Se
|
||||
}
|
||||
try {
|
||||
return objectMapper.writeValueAsString(recommendations);
|
||||
} catch (JsonProcessingException e) {
|
||||
} catch (JacksonException e) {
|
||||
log.error("Failed to convert BookRecommendation set to JSON string: {}", recommendations, e);
|
||||
throw new RuntimeException("Error converting BookRecommendation list to JSON", e);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package org.booklore.convertor;
|
||||
|
||||
import org.booklore.model.enums.BookFileType;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import jakarta.persistence.AttributeConverter;
|
||||
import jakarta.persistence.Converter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.booklore.model.enums.BookFileType;
|
||||
import tools.jackson.core.JacksonException;
|
||||
import tools.jackson.core.type.TypeReference;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -25,7 +25,7 @@ public class FormatPriorityConverter implements AttributeConverter<List<BookFile
|
||||
}
|
||||
try {
|
||||
return objectMapper.writeValueAsString(attribute);
|
||||
} catch (JsonProcessingException e) {
|
||||
} catch (JacksonException e) {
|
||||
log.error("Error converting format priority list to JSON", e);
|
||||
return null;
|
||||
}
|
||||
@@ -38,7 +38,7 @@ public class FormatPriorityConverter implements AttributeConverter<List<BookFile
|
||||
}
|
||||
try {
|
||||
return objectMapper.readValue(dbData, LIST_TYPE_REF);
|
||||
} catch (JsonProcessingException e) {
|
||||
} catch (JacksonException e) {
|
||||
log.error("Error converting JSON to format priority list", e);
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package org.booklore.convertor;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import jakarta.persistence.AttributeConverter;
|
||||
import jakarta.persistence.Converter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import tools.jackson.core.JacksonException;
|
||||
import tools.jackson.core.type.TypeReference;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -23,7 +23,7 @@ public class JpaJsonConverter implements AttributeConverter<Map<String, Object>,
|
||||
}
|
||||
try {
|
||||
return objectMapper.writeValueAsString(attribute);
|
||||
} catch (JsonProcessingException e) {
|
||||
} catch (JacksonException e) {
|
||||
log.error("Error converting map to JSON", e);
|
||||
return null;
|
||||
}
|
||||
@@ -36,7 +36,7 @@ public class JpaJsonConverter implements AttributeConverter<Map<String, Object>,
|
||||
}
|
||||
try {
|
||||
return objectMapper.readValue(dbData, MAP_TYPE_REF);
|
||||
} catch (JsonProcessingException e) {
|
||||
} catch (JacksonException e) {
|
||||
log.error("Error converting JSON to map", e);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package org.booklore.convertor;
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import jakarta.persistence.AttributeConverter;
|
||||
import jakarta.persistence.Converter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import tools.jackson.core.JacksonException;
|
||||
import tools.jackson.core.type.TypeReference;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
@Converter(autoApply = true)
|
||||
@@ -23,7 +23,7 @@ public class MapToStringConverter implements AttributeConverter<Map<String, Obje
|
||||
}
|
||||
try {
|
||||
return objectMapper.writeValueAsString(attribute);
|
||||
} catch (IOException e) {
|
||||
} catch (JacksonException e) {
|
||||
log.error("Failed to convert map to JSON string: {}", attribute, e);
|
||||
throw new IllegalArgumentException("Error converting Map to String", e);
|
||||
}
|
||||
@@ -36,7 +36,7 @@ public class MapToStringConverter implements AttributeConverter<Map<String, Obje
|
||||
}
|
||||
try {
|
||||
return objectMapper.readValue(dbData, MAP_TYPE_REF);
|
||||
} catch (IOException e) {
|
||||
} catch (JacksonException e) {
|
||||
log.error("Failed to convert JSON string to map: {}", dbData, e);
|
||||
throw new IllegalArgumentException("Error converting String to Map", e);
|
||||
}
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
package org.booklore.crons;
|
||||
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.booklore.config.AppProperties;
|
||||
import org.booklore.model.dto.BookloreTelemetry;
|
||||
import org.booklore.model.dto.InstallationPing;
|
||||
import org.booklore.model.dto.settings.AppSettings;
|
||||
import org.booklore.service.TelemetryService;
|
||||
import org.booklore.service.appsettings.AppSettingService;
|
||||
import jakarta.annotation.PostConstruct;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.boot.sql.init.dependency.DependsOnDatabaseInitialization;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.RestClient;
|
||||
@@ -19,6 +20,7 @@ import java.util.concurrent.TimeUnit;
|
||||
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
@DependsOnDatabaseInitialization
|
||||
@Slf4j
|
||||
public class CronService {
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
package org.booklore.mapper;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.booklore.model.dto.BookMetadata;
|
||||
import org.booklore.model.dto.FetchedProposal;
|
||||
import org.booklore.model.entity.MetadataFetchProposalEntity;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.mapstruct.AfterMapping;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.MappingTarget;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
@Mapper(componentModel = "spring")
|
||||
@Slf4j
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
package org.booklore.mapper;
|
||||
|
||||
import org.booklore.model.dto.BookMetadata;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
import tools.jackson.core.JacksonException;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
public class JsonMetadataMapper {
|
||||
|
||||
private static final ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule());
|
||||
private static final ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
public static BookMetadata parse(String json) {
|
||||
try {
|
||||
return objectMapper.readValue(json, BookMetadata.class);
|
||||
} catch (JsonProcessingException e) {
|
||||
} catch (JacksonException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -20,7 +19,7 @@ public class JsonMetadataMapper {
|
||||
public static String toJson(BookMetadata metadata) {
|
||||
try {
|
||||
return objectMapper.writeValueAsString(metadata);
|
||||
} catch (JsonProcessingException e) {
|
||||
} catch (JacksonException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,11 +2,11 @@ package org.booklore.mapper;
|
||||
|
||||
import org.booklore.model.dto.kobo.KoboReadingState;
|
||||
import org.booklore.model.entity.KoboReadingStateEntity;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.ReportingPolicy;
|
||||
import tools.jackson.core.JacksonException;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
@@ -38,7 +38,7 @@ public interface KoboReadingStateMapper {
|
||||
default String toJson(Object value) {
|
||||
try {
|
||||
return value == null ? null : objectMapper.writeValueAsString(value);
|
||||
} catch (JsonProcessingException e) {
|
||||
} catch (JacksonException e) {
|
||||
throw new RuntimeException("Failed to serialize JSON", e);
|
||||
}
|
||||
}
|
||||
@@ -46,7 +46,7 @@ public interface KoboReadingStateMapper {
|
||||
default <T> T fromJson(String json, Class<T> clazz) {
|
||||
try {
|
||||
return json == null ? null : objectMapper.readValue(json, clazz);
|
||||
} catch (JsonProcessingException e) {
|
||||
} catch (JacksonException e) {
|
||||
throw new RuntimeException("Failed to deserialize JSON", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package org.booklore.mapper.custom;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.booklore.mapper.LibraryMapper;
|
||||
import org.booklore.model.dto.BookLoreUser;
|
||||
import org.booklore.model.dto.settings.SidebarSortOption;
|
||||
@@ -7,11 +9,9 @@ import org.booklore.model.dto.settings.UserSettingKey;
|
||||
import org.booklore.model.entity.BookLoreUserEntity;
|
||||
import org.booklore.model.entity.UserSettingEntity;
|
||||
import org.booklore.model.enums.UserPermission;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import tools.jackson.core.type.TypeReference;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
package org.booklore.mobile.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
@@ -11,6 +13,8 @@ import java.util.Set;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class MobileBookDetail {
|
||||
private Long id;
|
||||
@@ -49,6 +53,8 @@ public class MobileBookDetail {
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class EpubProgress {
|
||||
private String cfi;
|
||||
private String href;
|
||||
@@ -58,6 +64,8 @@ public class MobileBookDetail {
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class PdfProgress {
|
||||
private Integer page;
|
||||
private Float percentage;
|
||||
@@ -66,6 +74,8 @@ public class MobileBookDetail {
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class CbxProgress {
|
||||
private Integer page;
|
||||
private Float percentage;
|
||||
@@ -74,6 +84,8 @@ public class MobileBookDetail {
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class AudiobookProgress {
|
||||
private Long positionMs;
|
||||
private Integer trackIndex;
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
package org.booklore.mobile.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class MobileBookFile {
|
||||
private Long id;
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
package org.booklore.mobile.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class MobileBookSummary {
|
||||
private Long id;
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package org.booklore.mobile.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class MobileLibrarySummary {
|
||||
private Long id;
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package org.booklore.mobile.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class MobileMagicShelfSummary {
|
||||
private Long id;
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
package org.booklore.mobile.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class MobilePageResponse<T> {
|
||||
private List<T> content;
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package org.booklore.mobile.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class MobileShelfSummary {
|
||||
private Long id;
|
||||
|
||||
@@ -1,17 +1,16 @@
|
||||
package org.booklore.model;
|
||||
|
||||
import lombok.*;
|
||||
import org.booklore.model.dto.Book;
|
||||
import org.booklore.model.enums.FileProcessStatus;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class FileProcessResult {
|
||||
private final Book book;
|
||||
private final FileProcessStatus status;
|
||||
private Book book;
|
||||
private FileProcessStatus status;
|
||||
}
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
package org.booklore.model;
|
||||
|
||||
import org.booklore.model.entity.BookEntity;
|
||||
import org.booklore.model.enums.MetadataReplaceMode;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.booklore.model.entity.BookEntity;
|
||||
import org.booklore.model.enums.MetadataReplaceMode;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MetadataUpdateContext {
|
||||
private BookEntity bookEntity;
|
||||
private MetadataUpdateWrapper metadataUpdateWrapper;
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package org.booklore.model;
|
||||
|
||||
import org.booklore.model.dto.BookMetadata;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.booklore.model.dto.BookMetadata;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MetadataUpdateWrapper {
|
||||
private BookMetadata metadata;
|
||||
@Builder.Default
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import org.booklore.model.dto.progress.*;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import org.booklore.model.dto.progress.*;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import org.booklore.model.enums.BookFileType;
|
||||
import org.booklore.util.ArchiveUtils;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import org.booklore.model.enums.BookFileType;
|
||||
import org.booklore.util.ArchiveUtils;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import org.booklore.model.dto.settings.SidebarSortOption;
|
||||
import org.booklore.model.enums.*;
|
||||
import com.fasterxml.jackson.annotation.JsonAlias;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.booklore.model.dto.settings.SidebarSortOption;
|
||||
import org.booklore.model.enums.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -82,6 +83,7 @@ public class BookLoreUser {
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public static class TableColumnPreference {
|
||||
private String field;
|
||||
private Boolean visible;
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class BookViewerSetting {
|
||||
private int pageNumber;
|
||||
private String zoom;
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class BookViewerSettings {
|
||||
private PdfViewerPreferences pdfSettings;
|
||||
private NewPdfViewerPreferences newPdfSettings;
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class BookWithNeighbors {
|
||||
private Book currentBook;
|
||||
private Long previousBookId;
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -10,6 +8,8 @@ import java.util.Map;
|
||||
@Builder
|
||||
@Setter
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class BookloreTelemetry {
|
||||
private int telemetryVersion;
|
||||
private String installationId;
|
||||
@@ -39,6 +39,8 @@ public class BookloreTelemetry {
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class UserStatistics {
|
||||
private int totalUsers;
|
||||
private int totalLocalUsers;
|
||||
@@ -48,6 +50,8 @@ public class BookloreTelemetry {
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class MetadataStatistics {
|
||||
private String[] enabledMetadataProviders;
|
||||
private String[] enabledReviewMetadataProviders;
|
||||
@@ -60,6 +64,8 @@ public class BookloreTelemetry {
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class OpdsStatistics {
|
||||
private boolean opdsEnabled;
|
||||
private int totalOpdsUsers;
|
||||
@@ -67,6 +73,8 @@ public class BookloreTelemetry {
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class KoboStatistics {
|
||||
private int totalKoboUsers;
|
||||
private int totalHardcoverSyncEnabled;
|
||||
@@ -76,6 +84,8 @@ public class BookloreTelemetry {
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class EmailStatistics {
|
||||
private int totalEmailProviders;
|
||||
private int totalEmailRecipients;
|
||||
@@ -83,6 +93,8 @@ public class BookloreTelemetry {
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class BookStatistics {
|
||||
private long totalBooks;
|
||||
private Map<String, Long> bookCountByType;
|
||||
@@ -90,6 +102,8 @@ public class BookloreTelemetry {
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class LibraryStatistics {
|
||||
private long bookCount;
|
||||
private int totalLibraryPaths;
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import org.booklore.model.enums.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.booklore.model.enums.*;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class CbxViewerPreferences {
|
||||
private Long bookId;
|
||||
private CbxPageSpread pageSpread;
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class EbookViewerPreferences {
|
||||
private Long bookId;
|
||||
private Long userId;
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class EpubViewerPreferences {
|
||||
private Long bookId;
|
||||
private String theme;
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class FileMoveResult {
|
||||
private boolean moved;
|
||||
private String newFileName;
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class HealthcheckResponse {
|
||||
private String status;
|
||||
private String message;
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
@Builder
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class InstallationPing {
|
||||
private int pingVersion;
|
||||
private String appVersion;
|
||||
|
||||
@@ -5,13 +5,17 @@ import org.booklore.model.enums.IconType;
|
||||
import org.booklore.model.enums.LibraryOrganizationMode;
|
||||
import org.booklore.model.enums.MetadataSource;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class Library {
|
||||
private Long id;
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class LibraryPath {
|
||||
private Long id;
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import org.booklore.model.enums.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.booklore.model.enums.*;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class NewPdfViewerPreferences {
|
||||
private Long bookId;
|
||||
private NewPdfPageSpread pageSpread;
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PdfViewerPreferences {
|
||||
private Long bookId;
|
||||
private String zoom;
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
package org.booklore.model.dto;
|
||||
|
||||
import org.booklore.model.enums.IconType;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.booklore.model.enums.IconType;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
public class Shelf {
|
||||
private Long id;
|
||||
|
||||
@@ -2,12 +2,12 @@ package org.booklore.model.dto.kobo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package org.booklore.model.dto.kobo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package org.booklore.model.dto.kobo;
|
||||
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package org.booklore.model.dto.kobo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package org.booklore.model.dto.kobo;
|
||||
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package org.booklore.model.dto.kobo;
|
||||
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
|
||||
@@ -2,12 +2,12 @@ package org.booklore.model.dto.kobo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package org.booklore.model.dto.kobo;
|
||||
|
||||
import org.booklore.model.enums.KoboReadStatus;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.booklore.model.enums.KoboReadStatus;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package org.booklore.model.dto.kobo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
package org.booklore.model.dto.kobo;
|
||||
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
|
||||
public class KoboReadingStateRequest {
|
||||
private List<KoboReadingState> readingStates;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package org.booklore.model.dto.kobo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import tools.jackson.databind.JsonNode;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package org.booklore.model.dto.kobo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package org.booklore.model.dto.kobo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package org.booklore.model.dto.kobo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package org.booklore.model.dto.progress;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class AudiobookProgress {
|
||||
@NotNull
|
||||
Long positionMs;
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package org.booklore.model.dto.progress;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class CbxProgress {
|
||||
@NotNull
|
||||
Integer page;
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package org.booklore.model.dto.progress;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class EpubProgress {
|
||||
@NotNull
|
||||
String cfi;
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto.progress;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class KoProgress {
|
||||
private Float percentage;
|
||||
}
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto.progress;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class KoboProgress {
|
||||
private Float percentage;
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package org.booklore.model.dto.progress;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.ToString;
|
||||
import lombok.*;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@ToString
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class KoreaderProgress {
|
||||
private Long timestamp;
|
||||
private String document;
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
package org.booklore.model.dto.progress;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class PdfProgress {
|
||||
@NotNull
|
||||
Integer page;
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto.request;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class CoverFetchRequest {
|
||||
private String isbn;
|
||||
private String title;
|
||||
|
||||
@@ -7,14 +7,17 @@ import org.booklore.model.enums.MetadataSource;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class CreateLibraryRequest {
|
||||
@NotBlank(message = "Library name must not be empty.")
|
||||
|
||||
@@ -2,13 +2,17 @@ package org.booklore.model.dto.request;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class CreatePhysicalBookRequest {
|
||||
@NotNull(message = "Library ID must not be null.")
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
package org.booklore.model.dto.request;
|
||||
|
||||
import org.booklore.model.enums.MetadataProvider;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.booklore.model.enums.MetadataProvider;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class FetchMetadataRequest {
|
||||
private Long bookId;
|
||||
private List<MetadataProvider> providers;
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
package org.booklore.model.dto.request;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class MetadataRefreshRequest {
|
||||
@NotNull(message = "Refresh type cannot be null")
|
||||
private RefreshType refreshType;
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto.request;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SetMetadataRequest {
|
||||
private String googleBookId;
|
||||
}
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
package org.booklore.model.dto.request;
|
||||
|
||||
import org.booklore.model.enums.IconType;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Null;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.booklore.model.enums.IconType;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ShelfCreateRequest {
|
||||
@Null(message = "Id should be null for creation.")
|
||||
private Long id;
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
package org.booklore.model.dto.request;
|
||||
|
||||
import org.booklore.model.enums.TaskType;
|
||||
import org.booklore.task.options.LibraryRescanOptions;
|
||||
import com.fasterxml.jackson.annotation.JsonSetter;
|
||||
import com.fasterxml.jackson.annotation.JsonSubTypes;
|
||||
import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.annotation.Nulls;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.booklore.model.enums.TaskType;
|
||||
import org.booklore.task.options.LibraryRescanOptions;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@@ -18,6 +20,7 @@ public class TaskCreateRequest {
|
||||
private String taskId;
|
||||
private TaskType taskType;
|
||||
@Builder.Default
|
||||
@JsonSetter(nulls = Nulls.SKIP)
|
||||
private boolean triggeredByCron = false;
|
||||
|
||||
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "taskType", include = JsonTypeInfo.As.EXTERNAL_PROPERTY)
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
package org.booklore.model.dto.response;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class BookdropBatchResult {
|
||||
private int totalFiles;
|
||||
private int successfullyImported;
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto.response;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class BookdropBulkEditResult {
|
||||
private int totalFiles;
|
||||
private int successfullyUpdated;
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto.response;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class BookdropFileResult {
|
||||
private String fileName;
|
||||
private boolean success;
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package org.booklore.model.dto.response;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
@@ -9,6 +11,8 @@ import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class BookdropFinalizeResult {
|
||||
private int totalFiles;
|
||||
private int successfullyImported;
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
package org.booklore.model.dto.response;
|
||||
|
||||
import org.booklore.model.dto.BookMetadata;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.booklore.model.dto.BookMetadata;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class BookdropPatternExtractResult {
|
||||
private int totalFiles;
|
||||
private int successfullyExtracted;
|
||||
@@ -16,6 +20,8 @@ public class BookdropPatternExtractResult {
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class FileExtractionResult {
|
||||
private Long fileId;
|
||||
private String fileName;
|
||||
|
||||
@@ -1,12 +1,16 @@
|
||||
package org.booklore.model.dto.response;
|
||||
|
||||
import org.booklore.task.TaskStatus;
|
||||
import org.booklore.model.enums.TaskType;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.booklore.model.enums.TaskType;
|
||||
import org.booklore.task.TaskStatus;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class TaskCreateResponse {
|
||||
private String taskId;
|
||||
private TaskType taskType;
|
||||
|
||||
@@ -1,18 +1,24 @@
|
||||
package org.booklore.model.dto.response.kobo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class KoboReadingStateResponse {
|
||||
private String requestResult;
|
||||
private List<UpdateResult> updateResults;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class UpdateResult {
|
||||
private String entitlementId;
|
||||
private Result currentBookmarkResult;
|
||||
@@ -22,6 +28,8 @@ public class KoboReadingStateResponse {
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class Result {
|
||||
private String result;
|
||||
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto.settings;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class CoverCroppingSettings {
|
||||
private boolean verticalCroppingEnabled;
|
||||
private boolean horizontalCroppingEnabled;
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
package org.booklore.model.dto.settings;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class KoboSettings {
|
||||
private boolean convertToKepub;
|
||||
private int conversionLimitInMb;
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
package org.booklore.model.dto.settings;
|
||||
|
||||
import org.booklore.model.entity.LibraryEntity;
|
||||
import org.booklore.model.entity.LibraryPathEntity;
|
||||
import org.booklore.model.enums.BookFileType;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.booklore.model.entity.LibraryEntity;
|
||||
import org.booklore.model.entity.LibraryPathEntity;
|
||||
import org.booklore.model.enums.BookFileType;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class LibraryFile {
|
||||
private LibraryEntity libraryEntity;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.booklore.model.dto.settings;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
@@ -9,6 +10,7 @@ import lombok.NoArgsConstructor;
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class MetadataPersistenceSettings {
|
||||
private SaveToOriginalFile saveToOriginalFile;
|
||||
private boolean convertCbrCb7ToCbz;
|
||||
@@ -19,6 +21,7 @@ public class MetadataPersistenceSettings {
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public static class SaveToOriginalFile {
|
||||
private FormatSettings epub;
|
||||
private FormatSettings pdf;
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
package org.booklore.model.dto.settings;
|
||||
|
||||
import org.booklore.model.enums.MetadataProvider;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.booklore.model.enums.MetadataProvider;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class MetadataPublicReviewsSettings {
|
||||
|
||||
private boolean downloadEnabled;
|
||||
@@ -16,6 +20,8 @@ public class MetadataPublicReviewsSettings {
|
||||
|
||||
@Builder
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public static class ReviewProviderConfig {
|
||||
private MetadataProvider provider;
|
||||
private boolean enabled;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package org.booklore.model.enums;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonNaming;
|
||||
import tools.jackson.databind.PropertyNamingStrategies;
|
||||
import tools.jackson.databind.annotation.JsonNaming;
|
||||
|
||||
@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
|
||||
public enum KoboReadStatus {
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
package org.booklore.service;
|
||||
|
||||
import jakarta.persistence.criteria.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.booklore.model.dto.GroupRule;
|
||||
import org.booklore.model.dto.Rule;
|
||||
import org.booklore.model.dto.RuleField;
|
||||
import org.booklore.model.entity.BookEntity;
|
||||
import org.booklore.model.entity.UserBookProgressEntity;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import jakarta.persistence.criteria.*;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.stereotype.Service;
|
||||
import tools.jackson.core.type.TypeReference;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
package org.booklore.service;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.booklore.model.dto.Installation;
|
||||
import org.booklore.model.entity.AppSettingEntity;
|
||||
import org.booklore.repository.AppSettingsRepository;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
import tools.jackson.databind.json.JsonMapper;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.MessageDigest;
|
||||
@@ -26,9 +25,9 @@ public class InstallationService {
|
||||
|
||||
public InstallationService(AppSettingsRepository appSettingsRepository, ObjectMapper objectMapper) {
|
||||
this.appSettingsRepository = appSettingsRepository;
|
||||
this.objectMapper = objectMapper.copy();
|
||||
this.objectMapper.registerModule(new JavaTimeModule());
|
||||
this.objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
|
||||
this.objectMapper = JsonMapper.builder()
|
||||
.findAndAddModules()
|
||||
.build();
|
||||
}
|
||||
|
||||
public Installation getOrCreateInstallation() {
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package org.booklore.service;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.booklore.model.dto.ReleaseNote;
|
||||
import org.booklore.model.dto.VersionInfo;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.client.RestClient;
|
||||
import tools.jackson.databind.JsonNode;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.booklore.service.appsettings;
|
||||
|
||||
import jakarta.transaction.Transactional;
|
||||
import org.booklore.config.AppProperties;
|
||||
import org.booklore.config.security.service.AuthenticationService;
|
||||
import org.booklore.model.dto.BookLoreUser;
|
||||
@@ -8,12 +9,12 @@ import org.booklore.model.dto.settings.*;
|
||||
import org.booklore.model.entity.AppSettingEntity;
|
||||
import org.booklore.model.enums.PermissionType;
|
||||
import org.booklore.util.UserPermissionUtils;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import jakarta.transaction.Transactional;
|
||||
import org.springframework.boot.sql.init.dependency.DependsOnDatabaseInitialization;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
import org.springframework.stereotype.Service;
|
||||
import tools.jackson.core.JacksonException;
|
||||
import tools.jackson.core.type.TypeReference;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -21,6 +22,7 @@ import java.util.concurrent.locks.ReentrantLock;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@DependsOnDatabaseInitialization
|
||||
public class AppSettingService {
|
||||
|
||||
private final AppProperties appProperties;
|
||||
@@ -51,7 +53,7 @@ public class AppSettingService {
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void updateSetting(AppSettingKey key, Object val) throws JsonProcessingException {
|
||||
public void updateSetting(AppSettingKey key, Object val) throws JacksonException {
|
||||
BookLoreUser user = authenticationService.getAuthenticatedUser();
|
||||
|
||||
validatePermission(key, user);
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
package org.booklore.service.appsettings;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.booklore.model.dto.request.MetadataRefreshOptions;
|
||||
import org.booklore.model.dto.settings.*;
|
||||
import org.booklore.model.entity.AppSettingEntity;
|
||||
import org.booklore.model.enums.MetadataProvider;
|
||||
import org.booklore.model.enums.MetadataReplaceMode;
|
||||
import org.booklore.repository.AppSettingsRepository;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import tools.jackson.core.JacksonException;
|
||||
import tools.jackson.core.type.TypeReference;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@@ -54,7 +54,7 @@ public class SettingPersistenceHelper {
|
||||
if (json != null && !json.isBlank()) {
|
||||
try {
|
||||
return deserializer.deserialize(json);
|
||||
} catch (JsonProcessingException e) {
|
||||
} catch (JacksonException e) {
|
||||
log.error("Failed to parse JSON for setting key '{}'. Using default value. Error: {}", key, e.getMessage());
|
||||
return defaultValue;
|
||||
}
|
||||
@@ -62,7 +62,7 @@ public class SettingPersistenceHelper {
|
||||
if (defaultValue != null && persistDefault) {
|
||||
try {
|
||||
saveDefaultSetting(key, objectMapper.writeValueAsString(defaultValue));
|
||||
} catch (JsonProcessingException e) {
|
||||
} catch (JacksonException e) {
|
||||
log.error("Failed to persist default value for setting key '{}'. Error: {}", key, e.getMessage());
|
||||
}
|
||||
}
|
||||
@@ -71,10 +71,10 @@ public class SettingPersistenceHelper {
|
||||
|
||||
@FunctionalInterface
|
||||
private interface JsonDeserializer<T> {
|
||||
T deserialize(String json) throws JsonProcessingException;
|
||||
T deserialize(String json) throws JacksonException;
|
||||
}
|
||||
|
||||
public String serializeSettingValue(AppSettingKey key, Object val) throws JsonProcessingException {
|
||||
public String serializeSettingValue(AppSettingKey key, Object val) throws JacksonException {
|
||||
return key.isJson() ? objectMapper.writeValueAsString(val) : val.toString();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package org.booklore.service.bookdrop;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.booklore.config.AppProperties;
|
||||
import org.booklore.exception.ApiError;
|
||||
import org.booklore.mapper.BookdropFileMapper;
|
||||
@@ -32,14 +34,12 @@ import org.booklore.service.kobo.KoboAutoShelfService;
|
||||
import org.booklore.service.metadata.MetadataRefreshService;
|
||||
import org.booklore.service.monitoring.MonitoringRegistrationService;
|
||||
import org.booklore.util.FileUtils;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.core.io.FileSystemResource;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@@ -48,12 +48,7 @@ import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.time.Instant;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package org.booklore.service.bookdrop;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.booklore.model.dto.BookMetadata;
|
||||
import org.booklore.model.entity.BookdropFileEntity;
|
||||
import org.booklore.repository.BookdropFileRepository;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
import tools.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user