mirror of
https://github.com/booklore-app/booklore.git
synced 2026-02-18 00:17:53 +01:00
WIP: Improve sorting
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
package com.adityachandel.booklore.convertor;
|
||||
|
||||
import com.adityachandel.booklore.model.entity.Sort;
|
||||
import com.adityachandel.booklore.model.enums.SortDirection;
|
||||
import jakarta.persistence.AttributeConverter;
|
||||
import jakarta.persistence.Converter;
|
||||
|
||||
@Converter
|
||||
public class SortConverter implements AttributeConverter<Sort, String> {
|
||||
|
||||
@Override
|
||||
public String convertToDatabaseColumn(Sort sort) {
|
||||
if (sort == null) {
|
||||
return null;
|
||||
}
|
||||
return sort.getSortField() + "," + sort.getSortDirection().name();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Sort convertToEntityAttribute(String dbData) {
|
||||
if (dbData == null || dbData.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
String[] parts = dbData.split(",");
|
||||
Sort sort = new Sort();
|
||||
sort.setSortField(parts[0]);
|
||||
sort.setSortDirection(SortDirection.valueOf(parts[1]));
|
||||
return sort;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.adityachandel.booklore.model.dto;
|
||||
|
||||
import com.adityachandel.booklore.model.entity.Sort;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
@@ -12,6 +13,7 @@ import java.util.List;
|
||||
public class LibraryDTO {
|
||||
private Long id;
|
||||
private String name;
|
||||
private Sort sort;
|
||||
private List<String> paths;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.adityachandel.booklore.model.dto;
|
||||
|
||||
import com.adityachandel.booklore.model.entity.Sort;
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
@@ -12,4 +13,5 @@ import java.time.Instant;
|
||||
public class ShelfDTO {
|
||||
private Long id;
|
||||
private String name;
|
||||
private Sort sort;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.adityachandel.booklore.model.entity;
|
||||
|
||||
import com.adityachandel.booklore.convertor.PathsConverter;
|
||||
import com.adityachandel.booklore.convertor.SortConverter;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.*;
|
||||
|
||||
@@ -21,13 +22,13 @@ public class Library {
|
||||
@Column(nullable = false)
|
||||
private String name;
|
||||
|
||||
@Convert(converter = SortConverter.class)
|
||||
private Sort sort;
|
||||
|
||||
@Convert(converter = PathsConverter.class)
|
||||
@Column(name = "paths")
|
||||
private List<String> paths;
|
||||
|
||||
@OneToMany(mappedBy = "library", cascade = CascadeType.ALL, orphanRemoval = true)
|
||||
private List<Book> books;
|
||||
|
||||
@Column(name = "initial_processed")
|
||||
private boolean initialProcessed;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.adityachandel.booklore.model.entity;
|
||||
|
||||
import com.adityachandel.booklore.convertor.SortConverter;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.*;
|
||||
|
||||
@@ -22,6 +23,9 @@ public class Shelf {
|
||||
@Column(name = "name", nullable = false, unique = true)
|
||||
private String name;
|
||||
|
||||
@Convert(converter = SortConverter.class)
|
||||
private Sort sort;
|
||||
|
||||
@ManyToMany(mappedBy = "shelves", fetch = FetchType.LAZY)
|
||||
private Set<Book> books = new HashSet<>();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.adityachandel.booklore.model.entity;
|
||||
|
||||
import com.adityachandel.booklore.model.enums.SortDirection;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class Sort {
|
||||
private String sortField;
|
||||
private SortDirection sortDirection;
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package com.adityachandel.booklore.model.enums;
|
||||
|
||||
public enum SortDirection {
|
||||
ASCENDING, DESCENDING
|
||||
}
|
||||
@@ -10,6 +10,7 @@ public class LibraryTransformer {
|
||||
return LibraryDTO.builder()
|
||||
.id(library.getId())
|
||||
.name(library.getName())
|
||||
.sort(library.getSort())
|
||||
.paths(library.getPaths())
|
||||
.build();
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ public class ShelfTransformer {
|
||||
return ShelfDTO.builder()
|
||||
.id(shelf.getId())
|
||||
.name(shelf.getName())
|
||||
.sort(shelf.getSort())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
CREATE TABLE IF NOT EXISTS library
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(255) UNIQUE NOT NULL,
|
||||
paths TEXT,
|
||||
initial_processed BOOLEAN DEFAULT false
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(255) UNIQUE NOT NULL,
|
||||
paths TEXT,
|
||||
sort VARCHAR(255)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS book
|
||||
@@ -84,7 +84,8 @@ CREATE TABLE IF NOT EXISTS book_metadata_author_mapping
|
||||
CREATE TABLE IF NOT EXISTS shelf
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(255) NOT NULL UNIQUE
|
||||
name VARCHAR(255) NOT NULL UNIQUE,
|
||||
sort VARCHAR(255)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS book_shelf_mapping
|
||||
|
||||
Reference in New Issue
Block a user