Add entities and repositories

This commit is contained in:
2026-03-04 17:03:42 -07:00
parent 77dcfa3122
commit 06191d2958
31 changed files with 1005 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Entity
@Table(name = "adoptions")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Adoption {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "pet_id", nullable = false)
private Pet pet;
@ManyToOne
@JoinColumn(name = "customer_id", nullable = false)
private Customer customer;
@Column(name = "adoption_date", nullable = false)
private LocalDate adoptionDate;
@Column(name = "adoption_fee", nullable = false, precision = 10, scale = 2)
private BigDecimal adoptionFee;
@Column(columnDefinition = "TEXT")
private String notes;
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
}

View File

@@ -0,0 +1,67 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.HashSet;
import java.util.Set;
@Entity
@Table(name = "appointments")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Appointment {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "customer_id", nullable = false)
private Customer customer;
@ManyToOne
@JoinColumn(name = "service_id", nullable = false)
private Service service;
@Column(name = "appointment_date", nullable = false)
private LocalDate appointmentDate;
@Column(name = "appointment_time", nullable = false)
private LocalTime appointmentTime;
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private AppointmentStatus status = AppointmentStatus.Scheduled;
@Column(columnDefinition = "TEXT")
private String notes;
@ManyToMany
@JoinTable(
name = "appointment_pets",
joinColumns = @JoinColumn(name = "appointment_id"),
inverseJoinColumns = @JoinColumn(name = "pet_id")
)
private Set<Pet> pets = new HashSet<>();
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
public enum AppointmentStatus {
Scheduled, Completed, Cancelled
}
}

View File

@@ -0,0 +1,36 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.time.LocalDateTime;
@Entity
@Table(name = "categories")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "category_name", nullable = false, unique = true, length = 100)
private String categoryName;
@Column(name = "category_description", columnDefinition = "TEXT")
private String categoryDescription;
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
}

View File

@@ -0,0 +1,42 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.time.LocalDateTime;
@Entity
@Table(name = "customers")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "customer_name", nullable = false, length = 100)
private String customerName;
@Column(name = "customer_email", length = 100)
private String customerEmail;
@Column(name = "customer_phone", length = 20)
private String customerPhone;
@Column(name = "customer_address", columnDefinition = "TEXT")
private String customerAddress;
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
}

View File

@@ -0,0 +1,49 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.time.LocalDateTime;
@Entity
@Table(name = "inventory", uniqueConstraints = {
@UniqueConstraint(name = "unique_product_store", columnNames = {"product_id", "store_id"})
})
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Inventory {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "product_id", nullable = false)
private Product product;
@ManyToOne
@JoinColumn(name = "store_id", nullable = false)
private Store store;
@Column(nullable = false)
private Integer quantity = 0;
@Column(name = "reorder_level")
private Integer reorderLevel = 10;
@Column(name = "last_restocked")
private LocalDateTime lastRestocked;
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
}

View File

@@ -0,0 +1,54 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Entity
@Table(name = "pets")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Pet {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "pet_name", nullable = false, length = 100)
private String petName;
@Column(name = "pet_species", nullable = false, length = 50)
private String petSpecies;
@Column(name = "pet_breed", length = 50)
private String petBreed;
@Column(name = "pet_age")
private Integer petAge;
@Enumerated(EnumType.STRING)
@Column(name = "pet_status", nullable = false)
private PetStatus petStatus = PetStatus.Available;
@Column(name = "pet_price", precision = 10, scale = 2)
private BigDecimal petPrice;
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
public enum PetStatus {
Available, Adopted, Under_Care
}
}

View File

@@ -0,0 +1,47 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Entity
@Table(name = "products")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "product_name", nullable = false, length = 100)
private String productName;
@ManyToOne
@JoinColumn(name = "category_id", nullable = false)
private Category category;
@Column(name = "product_description", columnDefinition = "TEXT")
private String productDescription;
@Column(name = "product_price", nullable = false, precision = 10, scale = 2)
private BigDecimal productPrice;
@Column(nullable = false)
private Boolean active = true;
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
}

View File

@@ -0,0 +1,56 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Entity
@Table(name = "product_suppliers")
@Data
@NoArgsConstructor
@AllArgsConstructor
@IdClass(ProductSupplier.ProductSupplierId.class)
public class ProductSupplier {
@Id
@ManyToOne
@JoinColumn(name = "product_id", nullable = false)
private Product product;
@Id
@ManyToOne
@JoinColumn(name = "supplier_id", nullable = false)
private Supplier supplier;
@Column(name = "cost_price", nullable = false, precision = 10, scale = 2)
private BigDecimal costPrice;
@Column(name = "lead_time_days")
private Integer leadTimeDays;
@Column(name = "is_preferred")
private Boolean isPreferred = false;
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class ProductSupplierId implements Serializable {
private Long product;
private Long supplier;
}
}

View File

@@ -0,0 +1,61 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "purchase_orders")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PurchaseOrder {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "supplier_id", nullable = false)
private Supplier supplier;
@Column(name = "order_date", nullable = false)
private LocalDate orderDate;
@Column(name = "expected_delivery")
private LocalDate expectedDelivery;
@Enumerated(EnumType.STRING)
@Column(nullable = false)
private OrderStatus status = OrderStatus.Pending;
@Column(name = "total_amount", nullable = false, precision = 10, scale = 2)
private BigDecimal totalAmount;
@Column(columnDefinition = "TEXT")
private String notes;
@OneToMany(mappedBy = "purchaseOrder", cascade = CascadeType.ALL)
private List<PurchaseOrderItem> items = new ArrayList<>();
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
public enum OrderStatus {
Pending, Delivered, Cancelled
}
}

View File

@@ -0,0 +1,37 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Entity
@Table(name = "purchase_order_items")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PurchaseOrderItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "purchase_order_id", nullable = false)
private PurchaseOrder purchaseOrder;
@ManyToOne
@JoinColumn(name = "product_id", nullable = false)
private Product product;
@Column(nullable = false)
private Integer quantity;
@Column(name = "unit_cost", nullable = false, precision = 10, scale = 2)
private BigDecimal unitCost;
@Column(nullable = false, precision = 10, scale = 2)
private BigDecimal subtotal;
}

View File

@@ -0,0 +1,48 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "refunds")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Refund {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "sale_id", nullable = false)
private Sale sale;
@Column(name = "refund_date", nullable = false)
private LocalDateTime refundDate = LocalDateTime.now();
@Column(name = "refund_amount", nullable = false, precision = 10, scale = 2)
private BigDecimal refundAmount;
@Column(name = "refund_reason", columnDefinition = "TEXT")
private String refundReason;
@ManyToOne
@JoinColumn(name = "processed_by", nullable = false)
private User processedBy;
@OneToMany(mappedBy = "refund", cascade = CascadeType.ALL)
private List<RefundItem> items = new ArrayList<>();
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
}

View File

@@ -0,0 +1,34 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Entity
@Table(name = "refund_items")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class RefundItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "refund_id", nullable = false)
private Refund refund;
@ManyToOne
@JoinColumn(name = "sale_item_id", nullable = false)
private SaleItem saleItem;
@Column(nullable = false)
private Integer quantity;
@Column(name = "refund_amount", nullable = false, precision = 10, scale = 2)
private BigDecimal refundAmount;
}

View File

@@ -0,0 +1,61 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "sales")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Sale {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "sale_date", nullable = false)
private LocalDateTime saleDate = LocalDateTime.now();
@ManyToOne
@JoinColumn(name = "employee_id", nullable = false)
private User employee;
@ManyToOne
@JoinColumn(name = "customer_id")
private Customer customer;
@ManyToOne
@JoinColumn(name = "store_id")
private Store store;
@Column(nullable = false, precision = 10, scale = 2)
private BigDecimal subtotal;
@Column(nullable = false, precision = 10, scale = 2)
private BigDecimal tax = BigDecimal.ZERO;
@Column(nullable = false, precision = 10, scale = 2)
private BigDecimal total;
@Column(name = "payment_method", length = 50)
private String paymentMethod;
@Column(columnDefinition = "TEXT")
private String notes;
@OneToMany(mappedBy = "sale", cascade = CascadeType.ALL)
private List<SaleItem> items = new ArrayList<>();
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
}

View File

@@ -0,0 +1,37 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Entity
@Table(name = "sale_items")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SaleItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "sale_id", nullable = false)
private Sale sale;
@ManyToOne
@JoinColumn(name = "product_id", nullable = false)
private Product product;
@Column(nullable = false)
private Integer quantity;
@Column(name = "unit_price", nullable = false, precision = 10, scale = 2)
private BigDecimal unitPrice;
@Column(nullable = false, precision = 10, scale = 2)
private BigDecimal subtotal;
}

View File

@@ -0,0 +1,46 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Entity
@Table(name = "services")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Service {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "service_name", nullable = false, length = 100)
private String serviceName;
@Column(name = "service_description", columnDefinition = "TEXT")
private String serviceDescription;
@Column(name = "service_price", nullable = false, precision = 10, scale = 2)
private BigDecimal servicePrice;
@Column(name = "service_duration_minutes")
private Integer serviceDurationMinutes;
@Column(nullable = false)
private Boolean active = true;
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
}

View File

@@ -0,0 +1,31 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import java.time.LocalDateTime;
@Entity
@Table(name = "stores")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Store {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "store_name", nullable = false, length = 100)
private String storeName;
@Column(name = "store_location", length = 200)
private String storeLocation;
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
}

View File

@@ -0,0 +1,48 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.time.LocalDateTime;
@Entity
@Table(name = "suppliers")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Supplier {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "supplier_name", nullable = false, length = 100)
private String supplierName;
@Column(name = "supplier_contact", length = 100)
private String supplierContact;
@Column(name = "supplier_email", length = 100)
private String supplierEmail;
@Column(name = "supplier_phone", length = 20)
private String supplierPhone;
@Column(name = "supplier_address", columnDefinition = "TEXT")
private String supplierAddress;
@Column(nullable = false)
private Boolean active = true;
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
}

View File

@@ -0,0 +1,9 @@
package com.petshop.backend.repository;
import com.petshop.backend.entity.Adoption;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface AdoptionRepository extends JpaRepository<Adoption, Long> {
}

View File

@@ -0,0 +1,18 @@
package com.petshop.backend.repository;
import com.petshop.backend.entity.Appointment;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.List;
@Repository
public interface AppointmentRepository extends JpaRepository<Appointment, Long> {
@Query("SELECT a FROM Appointment a WHERE a.appointmentDate = :date AND a.appointmentTime = :time")
List<Appointment> findByDateAndTime(@Param("date") LocalDate date, @Param("time") LocalTime time);
}

View File

@@ -0,0 +1,22 @@
package com.petshop.backend.repository;
import com.petshop.backend.entity.Category;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface CategoryRepository extends JpaRepository<Category, Long> {
Optional<Category> findByCategoryName(String categoryName);
@Query("SELECT c FROM Category c WHERE " +
"LOWER(c.categoryName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(c.categoryDescription) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Category> searchCategories(@Param("q") String query, Pageable pageable);
}

View File

@@ -0,0 +1,19 @@
package com.petshop.backend.repository;
import com.petshop.backend.entity.Customer;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface CustomerRepository extends JpaRepository<Customer, Long> {
@Query("SELECT c FROM Customer c WHERE " +
"LOWER(c.customerName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(c.customerEmail) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(c.customerPhone) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Customer> searchCustomers(@Param("q") String query, Pageable pageable);
}

View File

@@ -0,0 +1,16 @@
package com.petshop.backend.repository;
import com.petshop.backend.entity.Inventory;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface InventoryRepository extends JpaRepository<Inventory, Long> {
@Query("SELECT i FROM Inventory i WHERE i.product.id = :productId AND i.store.id = :storeId")
Optional<Inventory> findByProductIdAndStoreId(@Param("productId") Long productId, @Param("storeId") Long storeId);
}

View File

@@ -0,0 +1,19 @@
package com.petshop.backend.repository;
import com.petshop.backend.entity.Pet;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface PetRepository extends JpaRepository<Pet, Long> {
@Query("SELECT p FROM Pet p WHERE " +
"LOWER(p.petName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(p.petSpecies) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(p.petBreed) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Pet> searchPets(@Param("q") String query, Pageable pageable);
}

View File

@@ -0,0 +1,18 @@
package com.petshop.backend.repository;
import com.petshop.backend.entity.Product;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
@Query("SELECT p FROM Product p WHERE " +
"LOWER(p.productName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(p.productDescription) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Product> searchProducts(@Param("q") String query, Pageable pageable);
}

View File

@@ -0,0 +1,9 @@
package com.petshop.backend.repository;
import com.petshop.backend.entity.ProductSupplier;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ProductSupplierRepository extends JpaRepository<ProductSupplier, ProductSupplier.ProductSupplierId> {
}

View File

@@ -0,0 +1,9 @@
package com.petshop.backend.repository;
import com.petshop.backend.entity.PurchaseOrder;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface PurchaseOrderRepository extends JpaRepository<PurchaseOrder, Long> {
}

View File

@@ -0,0 +1,9 @@
package com.petshop.backend.repository;
import com.petshop.backend.entity.Refund;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface RefundRepository extends JpaRepository<Refund, Long> {
}

View File

@@ -0,0 +1,9 @@
package com.petshop.backend.repository;
import com.petshop.backend.entity.Sale;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface SaleRepository extends JpaRepository<Sale, Long> {
}

View File

@@ -0,0 +1,18 @@
package com.petshop.backend.repository;
import com.petshop.backend.entity.Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface ServiceRepository extends JpaRepository<Service, Long> {
@Query("SELECT s FROM Service s WHERE " +
"LOWER(s.serviceName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(s.serviceDescription) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Service> searchServices(@Param("q") String query, Pageable pageable);
}

View File

@@ -0,0 +1,9 @@
package com.petshop.backend.repository;
import com.petshop.backend.entity.Store;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface StoreRepository extends JpaRepository<Store, Long> {
}

View File

@@ -0,0 +1,18 @@
package com.petshop.backend.repository;
import com.petshop.backend.entity.Supplier;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface SupplierRepository extends JpaRepository<Supplier, Long> {
@Query("SELECT s FROM Supplier s WHERE " +
"LOWER(s.supplierName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(s.supplierContact) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Supplier> searchSuppliers(@Param("q") String query, Pageable pageable);
}