Commit 18f99b4e authored by Adam Paulen's avatar Adam Paulen
Browse files

Merge branch 'seeding-and-author' into 'main'

Seeding and author

See merge request !40
parents 74384abd 86131b1a
Loading
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -31,15 +31,21 @@ public class SecurityConfig {
                    "/actuator/**"
            ).permitAll()

            .requestMatchers(HttpMethod.GET, "/books/physical-books/**").hasAnyAuthority(ADMIN_SCOPE, LIBRARIAN_SCOPE, MEMBER_SCOPE)
            .requestMatchers(HttpMethod.GET, "/books/physical-books/**").permitAll()
            .requestMatchers(HttpMethod.POST, "/books/physical-books/**").hasAnyAuthority(ADMIN_SCOPE, LIBRARIAN_SCOPE)
            .requestMatchers(HttpMethod.PUT, "/books/physical-books/**").hasAnyAuthority(ADMIN_SCOPE, LIBRARIAN_SCOPE)
            .requestMatchers(HttpMethod.DELETE, "/books/physical-books/**").hasAnyAuthority(ADMIN_SCOPE, LIBRARIAN_SCOPE)

            .requestMatchers(HttpMethod.GET, "/books/abstract-books/**").hasAnyAuthority(ADMIN_SCOPE, LIBRARIAN_SCOPE, MEMBER_SCOPE)
            .requestMatchers(HttpMethod.GET, "/books/abstract-books/**").permitAll()
            .requestMatchers(HttpMethod.POST, "/books/abstract-books/**").hasAnyAuthority(ADMIN_SCOPE, LIBRARIAN_SCOPE)
            .requestMatchers(HttpMethod.PUT, "/books/abstract-books/**").hasAnyAuthority(ADMIN_SCOPE, LIBRARIAN_SCOPE)
            .requestMatchers(HttpMethod.DELETE, "/books/abstract-books/**").hasAnyAuthority(ADMIN_SCOPE, LIBRARIAN_SCOPE))
            .requestMatchers(HttpMethod.DELETE, "/books/abstract-books/**").hasAnyAuthority(ADMIN_SCOPE, LIBRARIAN_SCOPE)

            .requestMatchers(HttpMethod.GET, "/author/**").permitAll()
            .requestMatchers(HttpMethod.POST, "/author/**").hasAnyAuthority(ADMIN_SCOPE, LIBRARIAN_SCOPE)
            .requestMatchers(HttpMethod.DELETE, "/author/**").hasAnyAuthority(ADMIN_SCOPE, LIBRARIAN_SCOPE)

            .requestMatchers(HttpMethod.DELETE, "/repository/**").hasAnyAuthority(ADMIN_SCOPE))

            .oauth2ResourceServer(oauth2 -> oauth2.opaqueToken(Customizer.withDefaults()));

+4 −28
Original line number Diff line number Diff line
@@ -19,47 +19,23 @@ public class AbstractBook extends BaseModel {
    @Column(name = "title", length = 255, nullable = false)
    private String title;

    @Column(name = "author", length = 120, nullable = false)
    private String author;
    @ManyToOne(optional = false)
    private Author author;

    // todo uncomment for next milestone too many things use abstractBookId now
//    @ManyToOne
//    @JoinColumn(name = "abstract_book_id", nullable = false)
//    private AbstractBook abstractBook;

    @ElementCollection
    @CollectionTable(name = "abstract_book_physical_books", joinColumns = @JoinColumn(name = "abstract_book_id"))
    @Column(name = "physical_book_id")
    private List<UUID> physicalBookIds = new ArrayList<>();
    @OneToMany(mappedBy = "abstractBook", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<PhysicalBook> physicalBooks;

    @ElementCollection
    @CollectionTable(name = "genres_books", joinColumns = @JoinColumn(name = "abstract_book_id"))
    @Column(name = "genre", length = 100)
    private Set<String> genre = new HashSet<>();

    public AbstractBook(String title, String author, Set<String> genre) {
        this.title = title;
        this.author = author;
        this.genre.addAll(genre);
    }

    public AbstractBook(UUID id, String title, String author, Set<String> genre) {
        setId(id);
        this.title = title;
        this.author = author;
        this.genre.addAll(genre);
    }

    public AbstractBook() {
    }

    @Override
    public String toString() {
        return "AbstractBook{" +
                "id = " + getId() +
                ", author='" + getAuthor() + '\'' +
                ", title='" + getTitle() + '\'' +
                ", physicalBookIds=" + physicalBookIds +
                '}';
    }
}
 No newline at end of file
+29 −0
Original line number Diff line number Diff line
package cz.muni.fi.pa165.books.data.model;

import cz.muni.fi.pa165.commons.BaseModel;
import jakarta.persistence.*;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;

import java.util.List;

@Getter
@Setter
@Entity
@EqualsAndHashCode(callSuper = false)
@Table(name = "Author")
public class Author extends BaseModel {

    @OneToMany(mappedBy = "author", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<AbstractBook> abstractBooks;

    @Column(name = "firstName", length = 35, nullable = false)
    private String firstName;

    @Column(name = "lastName", length = 35, nullable = false)
    private String lastName;

    @Column(name = "biography", length = 255, nullable = false)
    private String biography;
}
+3 −7
Original line number Diff line number Diff line
@@ -15,13 +15,9 @@ import java.util.UUID;
@Table(name = "PhysicalBook")
public class PhysicalBook extends BaseModel {

// todo uncomment for next milestone too many things use abstractBookId now
//    @ManyToOne(optional = false)
//    @JoinColumn(name = "abstract_book_id", nullable = false)
//    private AbstractBook abstractBook;

    @Column(name = "abstractBookId")
    private UUID abstractBookId;
    @ManyToOne(optional = false)
    @JoinColumn(name = "abstract_book_id", nullable = false)
    private AbstractBook abstractBook;

    @Column(name = "condition")
    private String condition;
+11 −5
Original line number Diff line number Diff line
@@ -14,14 +14,20 @@ import java.util.UUID;
@Repository
public interface AbstractBookRepository extends JpaRepository<AbstractBook, UUID> {

    @Query("SELECT l FROM AbstractBook l LEFT JOIN l.genre g WHERE " +
            "(:title IS NULL OR LOWER(l.title) LIKE LOWER(CONCAT('%', :title, '%'))) " +
            "AND (:genre IS NULL OR LOWER(g) LIKE LOWER(CONCAT('%', :genre, '%'))) " +
            "AND (:author IS NULL OR LOWER(l.author) LIKE LOWER(CONCAT('%', :author, '%')))")
    @Query("""
    SELECT l FROM AbstractBook l 
    LEFT JOIN l.genre g 
    LEFT JOIN l.author a 
    WHERE (:title IS NULL OR LOWER(l.title) LIKE LOWER(CONCAT('%', :title, '%')))
      AND (:genre IS NULL OR LOWER(g) LIKE LOWER(CONCAT('%', :genre, '%')))
      AND (
          :author IS NULL OR 
          LOWER(CONCAT(a.firstName, ' ', a.lastName)) LIKE LOWER(CONCAT('%', :author, '%'))
      )
    """)
    List<AbstractBook>findByTitleOrGenreOrAuthor(
            @Param("title") String title,
            @Param("genre") String genre,
            @Param("author") String author
    );

}
 No newline at end of file
Loading