WIP: Improve sorting

This commit is contained in:
aditya.chandel
2024-12-25 17:01:07 -07:00
parent 2734c9bd4a
commit affdcb95c6
18 changed files with 107 additions and 38 deletions

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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<>();
}

View File

@@ -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;
}

View File

@@ -0,0 +1,5 @@
package com.adityachandel.booklore.model.enums;
public enum SortDirection {
ASCENDING, DESCENDING
}

View File

@@ -10,6 +10,7 @@ public class LibraryTransformer {
return LibraryDTO.builder()
.id(library.getId())
.name(library.getName())
.sort(library.getSort())
.paths(library.getPaths())
.build();
}

View File

@@ -9,6 +9,7 @@ public class ShelfTransformer {
return ShelfDTO.builder()
.id(shelf.getId())
.name(shelf.getName())
.sort(shelf.getSort())
.build();
}
}

View File

@@ -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