Align backend schema with desktop application

This commit is contained in:
2026-03-06 09:58:09 -07:00
parent 9313ca74f4
commit 3a00209e1f
62 changed files with 746 additions and 1762 deletions

View File

@@ -1,331 +0,0 @@
# Phase 7: Service & DTO Update Checklist
## Overview
All entity schemas have been updated. This checklist covers required changes to compile the application.
---
## 1. Store → StoreLocation Updates
### Repositories
- [x] `StoreRepository.java` - Updated to use StoreLocation
### Services
- [ ] `StoreService.java`
- [ ] Change all `Store``StoreLocation`
- [ ] Update field references: `store.getStoreLocation()``store.getAddress()`
- [ ] Update DTOs to match StoreLocation fields
- [ ] `SaleService.java`
- [ ] Change `Store store``StoreLocation store`
- [ ] Update `.getStore()` → returns StoreLocation
- [ ] Update DTO mappings
- [ ] `InventoryService.java`
- [ ] Remove all Store/storeId references (inventory is now global)
- [ ] Update queries to remove store filtering
- [ ] `AnalyticsService.java`
- [ ] Update Store references to StoreLocation
### DTOs
- [ ] `dto/store/StoreRequest.java` → rename/update to StoreLocationRequest
- [ ] Update fields: add `address`, `phone`, `email`
- [ ] Remove `storeLocation` field
- [ ] `dto/store/StoreResponse.java` → rename/update to StoreLocationResponse
- [ ] Change all field names to match StoreLocation entity
- [ ] `dto/sale/SaleResponse.java`
- [ ] Update Store references to StoreLocation
- [ ] `dto/inventory/InventoryResponse.java`
- [ ] Remove `storeId` and `storeName` fields
### Controllers
- [ ] `StoreController.java`
- [ ] Update all Store references to StoreLocation
---
## 2. User → Employee Updates (Sales)
### Services
- [ ] `SaleService.java`
- [ ] Change `User employee``Employee employee`
- [ ] Update repository/entity references
- [ ] Map employee fields correctly (employeeId, firstName, lastName)
### DTOs
- [ ] `dto/sale/SaleRequest.java`
- [ ] Change `userId``employeeId`
- [ ] `dto/sale/SaleResponse.java`
- [ ] Add employee details (firstName, lastName, not username/fullName)
---
## 3. ID Field Name Changes
### All Services - Update getter/setter calls:
- [ ] `PetService.java`
- [ ] `.getId()``.getPetId()`
- [ ] `.setId()``.setPetId()`
- [ ] `CustomerService.java`
- [ ] `.getId()``.getCustomerId()`
- [ ] `.setId()``.setCustomerId()`
- [ ] `ProductService.java`
- [ ] `.getId()``.getProdId()`
- [ ] `.setId()``.setProdId()`
- [ ] `SupplierService.java`
- [ ] `.getId()``.getSupId()`
- [ ] `.setId()``.setSupId()`
- [ ] `CategoryService.java`
- [ ] `.getId()``.getCategoryId()`
- [ ] `.setId()``.setCategoryId()`
- [ ] `ServiceService.java` (service for Service entity)
- [ ] `.getId()``.getServiceId()`
- [ ] `.setId()``.setServiceId()`
- [ ] `AdoptionService.java`
- [ ] `.getId()``.getAdoptionId()`
- [ ] `.setId()``.setAdoptionId()`
- [ ] `AppointmentService.java`
- [ ] `.getId()``.getAppointmentId()`
- [ ] `.setId()``.setAppointmentId()`
- [ ] `SaleService.java`
- [ ] `.getId()``.getSaleId()`
- [ ] `.setId()``.setSaleId()`
- [ ] `SaleItemRepository.java` / `SaleService.java`
- [ ] `.getId()``.getSaleItemId()`
- [ ] `InventoryService.java`
- [ ] `.getId()``.getInventoryId()`
- [ ] `PurchaseOrderService.java`
- [ ] `.getId()``.getPurchaseOrderId()`
- [ ] `.setId()``.setPurchaseOrderId()`
### All DTOs - Update field names:
- [ ] All Response DTOs: change `id` → specific ID field (`petId`, `customerId`, etc.)
- [ ] All Request DTOs: update ID references accordingly
---
## 4. Enum → String Conversions
### Services
- [ ] `PetService.java`
- [ ] Remove `Pet.PetStatus` enum references
- [ ] Use `String` for status
- [ ] Update validation to check string values ("Available", "Adopted", etc.)
- [ ] `AppointmentService.java`
- [ ] Remove `Appointment.AppointmentStatus` enum
- [ ] Use `String` for appointmentStatus
- [ ] Update validation to check string values ("Booked", "Completed", "Cancelled")
- [ ] `PurchaseOrderService.java`
- [ ] Remove `PurchaseOrder.OrderStatus` enum
- [ ] Use `String` for status
- [ ] Update validation to check string values ("Pending", "Delivered", etc.)
### DTOs
- [ ] `dto/pet/PetRequest.java` & `PetResponse.java`
- [ ] Change `PetStatus status``String petStatus`
- [ ] `dto/appointment/AppointmentRequest.java` & `AppointmentResponse.java`
- [ ] Change `AppointmentStatus status``String appointmentStatus`
- [ ] `dto/purchaseorder/PurchaseOrderRequest.java` & `PurchaseOrderResponse.java`
- [ ] Change `OrderStatus status``String status`
---
## 5. Removed Fields - Delete References
### CustomerService.java & DTOs
- [ ] Remove `customerAddress` field
- [ ] Update `Customer` entity mappings
### SupplierService.java & DTOs
- [ ] Remove `active` field
- [ ] Remove `supplierAddress` field
- [ ] Split contact: `supplierContact``supContactFirstName` + `supContactLastName`
### ServiceService.java & DTOs
- [ ] Remove `active` field
### ProductService.java & DTOs
- [ ] Remove `active` field
### SaleService.java & DTOs
- [ ] Remove `customer` field (sales no longer track customer)
- [ ] Remove `subtotal` field
- [ ] Remove `tax` field
- [ ] Remove `notes` field
- [ ] Change `total``totalAmount`
### SaleItemService/DTOs
- [ ] Remove `subtotal` field from SaleItem
### InventoryService.java & DTOs
- [ ] Remove `reorderLevel` field
- [ ] Remove `lastRestocked` field
### PurchaseOrderService.java & DTOs
- [ ] Remove `expectedDelivery` field
- [ ] Remove `totalAmount` field
- [ ] Remove `notes` field
- [ ] Remove `items` list (PurchaseOrderItem not in desktop schema)
### AdoptionService.java & DTOs
- [ ] Remove `adoptionFee` field
- [ ] Remove `notes` field
- [ ] Add `adoptionStatus` field
---
## 6. Renamed Fields (snake_case → camelCase)
### Customer
- [ ] `customer_name` → split to `firstName` + `lastName`
- [ ] `customer_email``email`
- [ ] `customer_phone``phone`
### Pet
- [ ] `pet_name``petName`
- [ ] `pet_species``petSpecies`
- [ ] `pet_breed``petBreed`
- [ ] `pet_age``petAge`
- [ ] `pet_status``petStatus`
- [ ] `pet_price``petPrice`
### Product
- [ ] `product_name``prodName`
- [ ] `product_description``prodDesc`
- [ ] `product_price``prodPrice`
- [ ] `category_id``categoryId` (FK)
### Supplier
- [ ] `supplier_name``supCompany`
- [ ] `supplier_contact``supContactFirstName` + `supContactLastName`
- [ ] `supplier_email``supEmail`
- [ ] `supplier_phone``supPhone`
### Category
- [ ] `category_name``categoryName`
- [ ] `category_description``categoryType`
### Service
- [ ] `service_name``serviceName`
- [ ] `service_description``serviceDesc`
- [ ] `service_price``servicePrice`
- [ ] `service_duration_minutes``serviceDuration`
### Sale
- [ ] `sale_date``saleDate`
- [ ] `employee_id``employeeId` (FK)
- [ ] `store_id``storeId` (FK)
- [ ] `total``totalAmount`
- [ ] `payment_method``paymentMethod`
- [ ] Add `isRefund` field
- [ ] Add `originalSaleId` field (FK to sale)
### SaleItem
- [ ] `sale_id``saleId` (FK)
- [ ] `product_id``prodId` (FK)
- [ ] `unit_price``unitPrice`
### Appointment
- [ ] `appointment_date``appointmentDate`
- [ ] `appointment_time``appointmentTime`
- [ ] `status``appointmentStatus`
- [ ] Join table: `appointment_pets``appointmentPet`
### Adoption
- [ ] `pet_id``petId` (FK)
- [ ] `customer_id``customerId` (FK)
- [ ] `adoption_date``adoptionDate`
- [ ] Add `adoptionStatus`
### Inventory
- [ ] `product_id``prodId` (FK)
### ProductSupplier
- [ ] `product_id``prodId` (FK)
- [ ] `supplier_id``supId` (FK)
- [ ] `cost_price``cost`
### PurchaseOrder
- [ ] `supplier_id``supId` (FK)
- [ ] `order_date``orderDate`
---
## 7. New Entities - Add Services/Controllers (Optional)
These entities exist but may not need full CRUD yet:
- [ ] `EmployeeService.java` - basic CRUD for employees
- [ ] `EmployeeController.java` - REST endpoints for employees
- [ ] `ActivityLogService.java` - logging service
- [ ] Employee/ActivityLog DTOs
---
## 8. DropdownController Updates
- [ ] `DropdownController.java`
- [ ] Update queries for renamed columns
- [ ] Update Store → StoreLocation references
- [ ] Fix any broken field references
---
## 9. Validation & Error Messages
After making all changes above:
- [ ] Search codebase for any remaining references to removed fields
- [ ] Update validation error messages to use new field names
- [ ] Update API documentation (Swagger annotations)
---
## Quick Search Commands
Find remaining issues:
```bash
# Find Store references (should be StoreLocation)
grep -r "import.*\.Store;" src/main/java --include="*.java"
# Find .getId() calls (should be specific IDs)
grep -r "\.getId()" src/main/java/com/petshop/backend/service
# Find enum references
grep -r "PetStatus\|AppointmentStatus\|OrderStatus" src/main/java --include="*.java"
# Find removed fields
grep -r "customerAddress\|subtotal\|active" src/main/java --include="*.java"
```
---
## Testing After Changes
1. Verify compilation: `mvn clean compile`
2. Run tests: `mvn test`
3. Start services: `docker-compose up -d`
4. Test endpoints with updated field names

View File

@@ -25,8 +25,8 @@ services:
SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/Petstoredb?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
SPRING_DATASOURCE_USERNAME: petshop
SPRING_DATASOURCE_PASSWORD: petshop
# Change this in real use
JWT_SECRET: change_me_please
# Change this in real use (must be at least 32 characters)
JWT_SECRET: change_me_please_this_secret_key_is_long_enough_for_jwt_hmac_sha256
ports:
- "8080:8080"
depends_on:

View File

@@ -5,174 +5,204 @@ USE Petstoredb;
-- Create Tables
CREATE TABLE storeLocation (
storeId INT AUTO_INCREMENT PRIMARY KEY,
storeId BIGINT AUTO_INCREMENT PRIMARY KEY,
storeName VARCHAR(100) NOT NULL,
address VARCHAR(255) NOT NULL,
phone VARCHAR(20) NOT NULL,
email VARCHAR(100) NOT NULL
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE employee (
employeeId INT AUTO_INCREMENT PRIMARY KEY,
employeeId BIGINT AUTO_INCREMENT PRIMARY KEY,
firstName VARCHAR(50) NOT NULL,
lastName VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
phone VARCHAR(20) NOT NULL,
role VARCHAR(50) NOT NULL,
isActive BOOLEAN DEFAULT TRUE NOT NULL
isActive BOOLEAN DEFAULT TRUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE employeeStore (
employeeId INT NOT NULL,
storeId INT NOT NULL,
employeeId BIGINT NOT NULL,
storeId BIGINT NOT NULL,
PRIMARY KEY (employeeId, storeId),
FOREIGN KEY (employeeId) REFERENCES employee(employeeId),
FOREIGN KEY (storeId) REFERENCES storeLocation(storeId)
);
CREATE TABLE customer (
customerId INT AUTO_INCREMENT PRIMARY KEY,
customerId BIGINT AUTO_INCREMENT PRIMARY KEY,
firstName VARCHAR(50) NOT NULL,
lastName VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
phone VARCHAR(20) NOT NULL
phone VARCHAR(20) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE pet (
petId INT AUTO_INCREMENT PRIMARY KEY,
petId BIGINT AUTO_INCREMENT PRIMARY KEY,
petName VARCHAR(50) NOT NULL,
petSpecies VARCHAR(50) NOT NULL,
petBreed VARCHAR(50) NOT NULL,
petAge INT NOT NULL,
petStatus VARCHAR(20) NOT NULL,
petPrice DECIMAL(10, 2) NOT NULL
petPrice DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE adoption (
adoptionId INT AUTO_INCREMENT PRIMARY KEY,
petId INT NOT NULL,
customerId INT NOT NULL,
adoptionId BIGINT AUTO_INCREMENT PRIMARY KEY,
petId BIGINT NOT NULL,
customerId BIGINT NOT NULL,
adoptionDate DATE NOT NULL,
adoptionStatus VARCHAR(20) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (petId) REFERENCES pet(petId),
FOREIGN KEY (customerId) REFERENCES customer(customerId)
);
CREATE TABLE supplier (
supId INT AUTO_INCREMENT PRIMARY KEY,
supId BIGINT AUTO_INCREMENT PRIMARY KEY,
supCompany VARCHAR(100) NOT NULL,
supContactFirstName VARCHAR(50) NOT NULL,
supContactLastName VARCHAR(50) NOT NULL,
supEmail VARCHAR(100) NOT NULL,
supPhone VARCHAR(20) NOT NULL
supPhone VARCHAR(20) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE category (
categoryId INT AUTO_INCREMENT PRIMARY KEY,
categoryId BIGINT AUTO_INCREMENT PRIMARY KEY,
categoryName VARCHAR(100) NOT NULL,
categoryType VARCHAR(50) NOT NULL
categoryType VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE product (
prodId INT AUTO_INCREMENT PRIMARY KEY,
prodId BIGINT AUTO_INCREMENT PRIMARY KEY,
prodName VARCHAR(100) NOT NULL,
prodPrice DECIMAL(10, 2) NOT NULL,
categoryId INT NOT NULL,
categoryId BIGINT NOT NULL,
prodDesc TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (categoryId) REFERENCES category(categoryId)
);
CREATE TABLE productSupplier (
supId INT NOT NULL,
prodId INT NOT NULL,
supId BIGINT NOT NULL,
prodId BIGINT NOT NULL,
cost DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (supId, prodId),
FOREIGN KEY (supId) REFERENCES supplier(supId),
FOREIGN KEY (prodId) REFERENCES product(prodId)
);
CREATE TABLE inventory (
inventoryId INT AUTO_INCREMENT PRIMARY KEY,
prodId INT NOT NULL,
inventoryId BIGINT AUTO_INCREMENT PRIMARY KEY,
prodId BIGINT NOT NULL,
quantity INT DEFAULT 0 NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (prodId) REFERENCES product(prodId)
);
CREATE TABLE service (
serviceId INT AUTO_INCREMENT PRIMARY KEY,
serviceId BIGINT AUTO_INCREMENT PRIMARY KEY,
serviceName VARCHAR(100) NOT NULL,
serviceDesc TEXT,
serviceDuration INT NOT NULL,
servicePrice DECIMAL(10, 2) NOT NULL
servicePrice DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE appointment (
appointmentId INT AUTO_INCREMENT PRIMARY KEY,
serviceId INT NOT NULL,
customerId INT NOT NULL,
appointmentId BIGINT AUTO_INCREMENT PRIMARY KEY,
serviceId BIGINT NOT NULL,
customerId BIGINT NOT NULL,
appointmentDate DATE NOT NULL,
appointmentTime TIME NOT NULL,
appointmentStatus VARCHAR(20) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (serviceId) REFERENCES service(serviceId),
FOREIGN KEY (customerId) REFERENCES customer(customerId)
);
CREATE TABLE appointmentPet (
appointmentId INT NOT NULL,
petId INT NOT NULL,
appointmentId BIGINT NOT NULL,
petId BIGINT NOT NULL,
PRIMARY KEY (appointmentId, petId),
FOREIGN KEY (appointmentId) REFERENCES appointment(appointmentId),
FOREIGN KEY (petId) REFERENCES pet(petId)
);
CREATE TABLE sale (
saleId INT AUTO_INCREMENT PRIMARY KEY,
saleId BIGINT AUTO_INCREMENT PRIMARY KEY,
saleDate DATETIME NOT NULL,
totalAmount DECIMAL(10, 2) NOT NULL,
paymentMethod VARCHAR(50) NOT NULL,
employeeId INT NOT NULL,
storeId INT NOT NULL,
employeeId BIGINT NOT NULL,
storeId BIGINT NOT NULL,
isRefund BOOLEAN DEFAULT FALSE NOT NULL,
originalSaleId INT NULL,
originalSaleId BIGINT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (employeeId) REFERENCES employee(employeeId),
FOREIGN KEY (storeId) REFERENCES storeLocation(storeId),
FOREIGN KEY (originalSaleId) REFERENCES sale(saleId)
);
CREATE TABLE saleItem (
saleItemId INT AUTO_INCREMENT PRIMARY KEY,
saleId INT NOT NULL,
prodId INT NOT NULL,
saleItemId BIGINT AUTO_INCREMENT PRIMARY KEY,
saleId BIGINT NOT NULL,
prodId BIGINT NOT NULL,
quantity INT NOT NULL,
unitPrice DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (saleId) REFERENCES sale(saleId),
FOREIGN KEY (prodId) REFERENCES product(prodId)
);
CREATE TABLE purchaseOrder (
purchaseOrderId INT AUTO_INCREMENT PRIMARY KEY,
supId INT NOT NULL,
purchaseOrderId BIGINT AUTO_INCREMENT PRIMARY KEY,
supId BIGINT NOT NULL,
orderDate DATE NOT NULL,
status VARCHAR(50) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (supId) REFERENCES supplier(supId)
);
CREATE TABLE activityLog (
logId INT AUTO_INCREMENT PRIMARY KEY,
employeeId INT NOT NULL,
logId BIGINT AUTO_INCREMENT PRIMARY KEY,
employeeId BIGINT NOT NULL,
activity TEXT NOT NULL,
logTimestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
FOREIGN KEY (employeeId) REFERENCES employee(employeeId)
);
-- Authentication table (not in desktop schema)
-- Backend-only table for API authentication
CREATE TABLE users (
userId INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
role VARCHAR(20) NOT NULL,
createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Insert Sample Data
@@ -403,8 +433,4 @@ VALUES
(5, 'Conducted health checkup'),
(1, 'Updated customer information');
-- Sample users for authentication (passwords are bcrypt hashes of "password123")
INSERT INTO users (username, password, role)
VALUES
('admin', '$2a$10$8.UnVuG9HHgffUDAlk8qfOuVGkqRzgVymGe07xd00DMxs.AQubh4a', 'ADMIN'),
('staff', '$2a$10$8.UnVuG9HHgffUDAlk8qfOuVGkqRzgVymGe07xd00DMxs.AQubh4a', 'STAFF');
-- Sample users created by DataInitializer (admin/admin123, staff/staff123)

View File

@@ -23,10 +23,7 @@ public class DataInitializer implements CommandLineRunner {
User admin = new User();
admin.setUsername("admin");
admin.setPassword(passwordEncoder.encode("admin123"));
admin.setFullName("Admin User");
admin.setEmail("admin@petshop.com");
admin.setRole(User.Role.ADMIN);
admin.setActive(true);
userRepository.save(admin);
}
@@ -34,10 +31,7 @@ public class DataInitializer implements CommandLineRunner {
User staff = new User();
staff.setUsername("staff");
staff.setPassword(passwordEncoder.encode("staff123"));
staff.setFullName("Staff User");
staff.setEmail("staff@petshop.com");
staff.setRole(User.Role.STAFF);
staff.setActive(true);
userRepository.save(staff);
}
}

View File

@@ -59,7 +59,6 @@ public class AuthController {
return ResponseEntity.ok(new LoginResponse(
token,
user.getUsername(),
user.getFullName(),
user.getRole().name()
));
@@ -81,8 +80,6 @@ public class AuthController {
return ResponseEntity.ok(new UserInfoResponse(
user.getId(),
user.getUsername(),
user.getFullName(),
user.getEmail(),
user.getRole().name()
));
}

View File

@@ -40,7 +40,7 @@ public class DropdownController {
public ResponseEntity<List<DropdownOption>> getPets() {
return ResponseEntity.ok(
petRepository.findAll().stream()
.map(p -> new DropdownOption(p.getId(), p.getPetName()))
.map(p -> new DropdownOption(p.getPetId(), p.getPetName()))
.collect(Collectors.toList())
);
}
@@ -49,7 +49,7 @@ public class DropdownController {
public ResponseEntity<List<DropdownOption>> getCustomers() {
return ResponseEntity.ok(
customerRepository.findAll().stream()
.map(c -> new DropdownOption(c.getId(), c.getCustomerName()))
.map(c -> new DropdownOption(c.getCustomerId(), c.getFirstName() + " " + c.getLastName()))
.collect(Collectors.toList())
);
}
@@ -58,7 +58,7 @@ public class DropdownController {
public ResponseEntity<List<DropdownOption>> getServices() {
return ResponseEntity.ok(
serviceRepository.findAll().stream()
.map(s -> new DropdownOption(s.getId(), s.getServiceName()))
.map(s -> new DropdownOption(s.getServiceId(), s.getServiceName()))
.collect(Collectors.toList())
);
}
@@ -67,7 +67,7 @@ public class DropdownController {
public ResponseEntity<List<DropdownOption>> getProducts() {
return ResponseEntity.ok(
productRepository.findAll().stream()
.map(p -> new DropdownOption(p.getId(), p.getProductName()))
.map(p -> new DropdownOption(p.getProdId(), p.getProdName()))
.collect(Collectors.toList())
);
}
@@ -76,7 +76,7 @@ public class DropdownController {
public ResponseEntity<List<DropdownOption>> getCategories() {
return ResponseEntity.ok(
categoryRepository.findAll().stream()
.map(c -> new DropdownOption(c.getId(), c.getCategoryName()))
.map(c -> new DropdownOption(c.getCategoryId(), c.getCategoryName()))
.collect(Collectors.toList())
);
}
@@ -85,7 +85,7 @@ public class DropdownController {
public ResponseEntity<List<DropdownOption>> getStores() {
return ResponseEntity.ok(
storeRepository.findAll().stream()
.map(s -> new DropdownOption(s.getId(), s.getStoreName()))
.map(s -> new DropdownOption(s.getStoreId(), s.getStoreName()))
.collect(Collectors.toList())
);
}
@@ -95,7 +95,7 @@ public class DropdownController {
public ResponseEntity<List<DropdownOption>> getSuppliers() {
return ResponseEntity.ok(
supplierRepository.findAll().stream()
.map(s -> new DropdownOption(s.getId(), s.getSupplierName()))
.map(s -> new DropdownOption(s.getSupId(), s.getSupCompany()))
.collect(Collectors.toList())
);
}

View File

@@ -1,8 +1,7 @@
package com.petshop.backend.dto.adoption;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Objects;
@@ -16,11 +15,8 @@ public class AdoptionRequest {
@NotNull(message = "Adoption date is required")
private LocalDate adoptionDate;
@NotNull(message = "Adoption fee is required")
@Positive(message = "Adoption fee must be positive")
private BigDecimal adoptionFee;
private String notes;
@NotBlank(message = "Adoption status is required")
private String adoptionStatus;
public Long getPetId() {
return petId;
@@ -46,20 +42,12 @@ public class AdoptionRequest {
this.adoptionDate = adoptionDate;
}
public BigDecimal getAdoptionFee() {
return adoptionFee;
public String getAdoptionStatus() {
return adoptionStatus;
}
public void setAdoptionFee(BigDecimal adoptionFee) {
this.adoptionFee = adoptionFee;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
public void setAdoptionStatus(String adoptionStatus) {
this.adoptionStatus = adoptionStatus;
}
@Override
@@ -70,13 +58,12 @@ public class AdoptionRequest {
return Objects.equals(petId, that.petId) &&
Objects.equals(customerId, that.customerId) &&
Objects.equals(adoptionDate, that.adoptionDate) &&
Objects.equals(adoptionFee, that.adoptionFee) &&
Objects.equals(notes, that.notes);
Objects.equals(adoptionStatus, that.adoptionStatus);
}
@Override
public int hashCode() {
return Objects.hash(petId, customerId, adoptionDate, adoptionFee, notes);
return Objects.hash(petId, customerId, adoptionDate, adoptionStatus);
}
@Override
@@ -85,8 +72,7 @@ public class AdoptionRequest {
"petId=" + petId +
", customerId=" + customerId +
", adoptionDate=" + adoptionDate +
", adoptionFee=" + adoptionFee +
", notes='" + notes + '\'' +
", adoptionStatus='" + adoptionStatus + '\'' +
'}';
}
}

View File

@@ -1,44 +1,41 @@
package com.petshop.backend.dto.adoption;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Objects;
public class AdoptionResponse {
private Long id;
private Long adoptionId;
private Long petId;
private String petName;
private Long customerId;
private String customerName;
private LocalDate adoptionDate;
private BigDecimal adoptionFee;
private String notes;
private String adoptionStatus;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
public AdoptionResponse() {
}
public AdoptionResponse(Long id, Long petId, String petName, Long customerId, String customerName, LocalDate adoptionDate, BigDecimal adoptionFee, String notes, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.id = id;
public AdoptionResponse(Long adoptionId, Long petId, String petName, Long customerId, String customerName, LocalDate adoptionDate, String adoptionStatus, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.adoptionId = adoptionId;
this.petId = petId;
this.petName = petName;
this.customerId = customerId;
this.customerName = customerName;
this.adoptionDate = adoptionDate;
this.adoptionFee = adoptionFee;
this.notes = notes;
this.adoptionStatus = adoptionStatus;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
public Long getId() {
return id;
public Long getAdoptionId() {
return adoptionId;
}
public void setId(Long id) {
this.id = id;
public void setAdoptionId(Long adoptionId) {
this.adoptionId = adoptionId;
}
public Long getPetId() {
@@ -81,20 +78,12 @@ public class AdoptionResponse {
this.adoptionDate = adoptionDate;
}
public BigDecimal getAdoptionFee() {
return adoptionFee;
public String getAdoptionStatus() {
return adoptionStatus;
}
public void setAdoptionFee(BigDecimal adoptionFee) {
this.adoptionFee = adoptionFee;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
public void setAdoptionStatus(String adoptionStatus) {
this.adoptionStatus = adoptionStatus;
}
public LocalDateTime getCreatedAt() {
@@ -118,25 +107,24 @@ public class AdoptionResponse {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AdoptionResponse that = (AdoptionResponse) o;
return Objects.equals(id, that.id) && Objects.equals(petId, that.petId) && Objects.equals(petName, that.petName) && Objects.equals(customerId, that.customerId) && Objects.equals(customerName, that.customerName) && Objects.equals(adoptionDate, that.adoptionDate) && Objects.equals(adoptionFee, that.adoptionFee) && Objects.equals(notes, that.notes) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
return Objects.equals(adoptionId, that.adoptionId) && Objects.equals(petId, that.petId) && Objects.equals(petName, that.petName) && Objects.equals(customerId, that.customerId) && Objects.equals(customerName, that.customerName) && Objects.equals(adoptionDate, that.adoptionDate) && Objects.equals(adoptionStatus, that.adoptionStatus) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
}
@Override
public int hashCode() {
return Objects.hash(id, petId, petName, customerId, customerName, adoptionDate, adoptionFee, notes, createdAt, updatedAt);
return Objects.hash(adoptionId, petId, petName, customerId, customerName, adoptionDate, adoptionStatus, createdAt, updatedAt);
}
@Override
public String toString() {
return "AdoptionResponse{" +
"id=" + id +
"adoptionId=" + adoptionId +
", petId=" + petId +
", petName='" + petName + '\'' +
", customerId=" + customerId +
", customerName='" + customerName + '\'' +
", adoptionDate=" + adoptionDate +
", adoptionFee=" + adoptionFee +
", notes='" + notes + '\'' +
", adoptionStatus='" + adoptionStatus + '\'' +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
'}';

View File

@@ -1,6 +1,5 @@
package com.petshop.backend.dto.appointment;
import com.petshop.backend.entity.Appointment;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.time.LocalDate;
@@ -21,14 +20,12 @@ public class AppointmentRequest {
@NotNull(message = "Appointment time is required")
private LocalTime appointmentTime;
@NotNull(message = "Status is required")
private Appointment.AppointmentStatus status;
@NotNull(message = "Appointment status is required")
private String appointmentStatus;
@NotEmpty(message = "At least one pet must be specified")
private List<Long> petIds;
private String notes;
public Long getCustomerId() {
return customerId;
}
@@ -61,12 +58,12 @@ public class AppointmentRequest {
this.appointmentTime = appointmentTime;
}
public Appointment.AppointmentStatus getStatus() {
return status;
public String getAppointmentStatus() {
return appointmentStatus;
}
public void setStatus(Appointment.AppointmentStatus status) {
this.status = status;
public void setAppointmentStatus(String appointmentStatus) {
this.appointmentStatus = appointmentStatus;
}
public List<Long> getPetIds() {
@@ -77,14 +74,6 @@ public class AppointmentRequest {
this.petIds = petIds;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -94,14 +83,13 @@ public class AppointmentRequest {
Objects.equals(serviceId, that.serviceId) &&
Objects.equals(appointmentDate, that.appointmentDate) &&
Objects.equals(appointmentTime, that.appointmentTime) &&
status == that.status &&
Objects.equals(petIds, that.petIds) &&
Objects.equals(notes, that.notes);
Objects.equals(appointmentStatus, that.appointmentStatus) &&
Objects.equals(petIds, that.petIds);
}
@Override
public int hashCode() {
return Objects.hash(customerId, serviceId, appointmentDate, appointmentTime, status, petIds, notes);
return Objects.hash(customerId, serviceId, appointmentDate, appointmentTime, appointmentStatus, petIds);
}
@Override
@@ -111,9 +99,8 @@ public class AppointmentRequest {
", serviceId=" + serviceId +
", appointmentDate=" + appointmentDate +
", appointmentTime=" + appointmentTime +
", status=" + status +
", appointmentStatus='" + appointmentStatus + '\'' +
", petIds=" + petIds +
", notes='" + notes + '\'' +
'}';
}
}

View File

@@ -7,45 +7,43 @@ import java.util.List;
import java.util.Objects;
public class AppointmentResponse {
private Long id;
private Long appointmentId;
private Long customerId;
private String customerName;
private Long serviceId;
private String serviceName;
private LocalDate appointmentDate;
private LocalTime appointmentTime;
private String status;
private String appointmentStatus;
private List<String> petNames;
private List<Long> petIds;
private String notes;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
public AppointmentResponse() {
}
public AppointmentResponse(Long id, Long customerId, String customerName, Long serviceId, String serviceName, LocalDate appointmentDate, LocalTime appointmentTime, String status, List<String> petNames, List<Long> petIds, String notes, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.id = id;
public AppointmentResponse(Long appointmentId, Long customerId, String customerName, Long serviceId, String serviceName, LocalDate appointmentDate, LocalTime appointmentTime, String appointmentStatus, List<String> petNames, List<Long> petIds, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.appointmentId = appointmentId;
this.customerId = customerId;
this.customerName = customerName;
this.serviceId = serviceId;
this.serviceName = serviceName;
this.appointmentDate = appointmentDate;
this.appointmentTime = appointmentTime;
this.status = status;
this.appointmentStatus = appointmentStatus;
this.petNames = petNames;
this.petIds = petIds;
this.notes = notes;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
public Long getId() {
return id;
public Long getAppointmentId() {
return appointmentId;
}
public void setId(Long id) {
this.id = id;
public void setAppointmentId(Long appointmentId) {
this.appointmentId = appointmentId;
}
public Long getCustomerId() {
@@ -96,12 +94,12 @@ public class AppointmentResponse {
this.appointmentTime = appointmentTime;
}
public String getStatus() {
return status;
public String getAppointmentStatus() {
return appointmentStatus;
}
public void setStatus(String status) {
this.status = status;
public void setAppointmentStatus(String appointmentStatus) {
this.appointmentStatus = appointmentStatus;
}
public List<String> getPetNames() {
@@ -120,14 +118,6 @@ public class AppointmentResponse {
this.petIds = petIds;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
@@ -149,28 +139,27 @@ public class AppointmentResponse {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
AppointmentResponse that = (AppointmentResponse) o;
return Objects.equals(id, that.id) && Objects.equals(customerId, that.customerId) && Objects.equals(customerName, that.customerName) && Objects.equals(serviceId, that.serviceId) && Objects.equals(serviceName, that.serviceName) && Objects.equals(appointmentDate, that.appointmentDate) && Objects.equals(appointmentTime, that.appointmentTime) && Objects.equals(status, that.status) && Objects.equals(petNames, that.petNames) && Objects.equals(petIds, that.petIds) && Objects.equals(notes, that.notes) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
return Objects.equals(appointmentId, that.appointmentId) && Objects.equals(customerId, that.customerId) && Objects.equals(customerName, that.customerName) && Objects.equals(serviceId, that.serviceId) && Objects.equals(serviceName, that.serviceName) && Objects.equals(appointmentDate, that.appointmentDate) && Objects.equals(appointmentTime, that.appointmentTime) && Objects.equals(appointmentStatus, that.appointmentStatus) && Objects.equals(petNames, that.petNames) && Objects.equals(petIds, that.petIds) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
}
@Override
public int hashCode() {
return Objects.hash(id, customerId, customerName, serviceId, serviceName, appointmentDate, appointmentTime, status, petNames, petIds, notes, createdAt, updatedAt);
return Objects.hash(appointmentId, customerId, customerName, serviceId, serviceName, appointmentDate, appointmentTime, appointmentStatus, petNames, petIds, createdAt, updatedAt);
}
@Override
public String toString() {
return "AppointmentResponse{" +
"id=" + id +
"appointmentId=" + appointmentId +
", customerId=" + customerId +
", customerName='" + customerName + '\'' +
", serviceId=" + serviceId +
", serviceName='" + serviceName + '\'' +
", appointmentDate=" + appointmentDate +
", appointmentTime=" + appointmentTime +
", status='" + status + '\'' +
", appointmentStatus='" + appointmentStatus + '\'' +
", petNames=" + petNames +
", petIds=" + petIds +
", notes='" + notes + '\'' +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
'}';

View File

@@ -5,16 +5,14 @@ import java.util.Objects;
public class LoginResponse {
private String token;
private String username;
private String fullName;
private String role;
public LoginResponse() {
}
public LoginResponse(String token, String username, String fullName, String role) {
public LoginResponse(String token, String username, String role) {
this.token = token;
this.username = username;
this.fullName = fullName;
this.role = role;
}
@@ -34,14 +32,6 @@ public class LoginResponse {
this.username = username;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getRole() {
return role;
}
@@ -55,12 +45,12 @@ public class LoginResponse {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
LoginResponse that = (LoginResponse) o;
return Objects.equals(token, that.token) && Objects.equals(username, that.username) && Objects.equals(fullName, that.fullName) && Objects.equals(role, that.role);
return Objects.equals(token, that.token) && Objects.equals(username, that.username) && Objects.equals(role, that.role);
}
@Override
public int hashCode() {
return Objects.hash(token, username, fullName, role);
return Objects.hash(token, username, role);
}
@Override
@@ -68,7 +58,6 @@ public class LoginResponse {
return "LoginResponse{" +
"token='" + token + '\'' +
", username='" + username + '\'' +
", fullName='" + fullName + '\'' +
", role='" + role + '\'' +
'}';
}

View File

@@ -5,18 +5,14 @@ import java.util.Objects;
public class UserInfoResponse {
private Long id;
private String username;
private String fullName;
private String email;
private String role;
public UserInfoResponse() {
}
public UserInfoResponse(Long id, String username, String fullName, String email, String role) {
public UserInfoResponse(Long id, String username, String role) {
this.id = id;
this.username = username;
this.fullName = fullName;
this.email = email;
this.role = role;
}
@@ -36,22 +32,6 @@ public class UserInfoResponse {
this.username = username;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getRole() {
return role;
}
@@ -65,12 +45,12 @@ public class UserInfoResponse {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserInfoResponse that = (UserInfoResponse) o;
return Objects.equals(id, that.id) && Objects.equals(username, that.username) && Objects.equals(fullName, that.fullName) && Objects.equals(email, that.email) && Objects.equals(role, that.role);
return Objects.equals(id, that.id) && Objects.equals(username, that.username) && Objects.equals(role, that.role);
}
@Override
public int hashCode() {
return Objects.hash(id, username, fullName, email, role);
return Objects.hash(id, username, role);
}
@Override
@@ -78,8 +58,6 @@ public class UserInfoResponse {
return "UserInfoResponse{" +
"id=" + id +
", username='" + username + '\'' +
", fullName='" + fullName + '\'' +
", email='" + email + '\'' +
", role='" + role + '\'' +
'}';
}

View File

@@ -7,7 +7,7 @@ public class CategoryRequest {
@NotBlank(message = "Category name is required")
private String categoryName;
private String categoryDescription;
private String categoryType;
public String getCategoryName() {
return categoryName;
@@ -17,12 +17,12 @@ public class CategoryRequest {
this.categoryName = categoryName;
}
public String getCategoryDescription() {
return categoryDescription;
public String getCategoryType() {
return categoryType;
}
public void setCategoryDescription(String categoryDescription) {
this.categoryDescription = categoryDescription;
public void setCategoryType(String categoryType) {
this.categoryType = categoryType;
}
@Override
@@ -31,19 +31,19 @@ public class CategoryRequest {
if (o == null || getClass() != o.getClass()) return false;
CategoryRequest that = (CategoryRequest) o;
return Objects.equals(categoryName, that.categoryName) &&
Objects.equals(categoryDescription, that.categoryDescription);
Objects.equals(categoryType, that.categoryType);
}
@Override
public int hashCode() {
return Objects.hash(categoryName, categoryDescription);
return Objects.hash(categoryName, categoryType);
}
@Override
public String toString() {
return "CategoryRequest{" +
"categoryName='" + categoryName + '\'' +
", categoryDescription='" + categoryDescription + '\'' +
", categoryType='" + categoryType + '\'' +
'}';
}
}

View File

@@ -4,29 +4,29 @@ import java.time.LocalDateTime;
import java.util.Objects;
public class CategoryResponse {
private Long id;
private Long categoryId;
private String categoryName;
private String categoryDescription;
private String categoryType;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
public CategoryResponse() {
}
public CategoryResponse(Long id, String categoryName, String categoryDescription, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.id = id;
public CategoryResponse(Long categoryId, String categoryName, String categoryType, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.categoryId = categoryId;
this.categoryName = categoryName;
this.categoryDescription = categoryDescription;
this.categoryType = categoryType;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
public Long getId() {
return id;
public Long getCategoryId() {
return categoryId;
}
public void setId(Long id) {
this.id = id;
public void setCategoryId(Long categoryId) {
this.categoryId = categoryId;
}
public String getCategoryName() {
@@ -37,12 +37,12 @@ public class CategoryResponse {
this.categoryName = categoryName;
}
public String getCategoryDescription() {
return categoryDescription;
public String getCategoryType() {
return categoryType;
}
public void setCategoryDescription(String categoryDescription) {
this.categoryDescription = categoryDescription;
public void setCategoryType(String categoryType) {
this.categoryType = categoryType;
}
public LocalDateTime getCreatedAt() {
@@ -66,20 +66,20 @@ public class CategoryResponse {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CategoryResponse that = (CategoryResponse) o;
return Objects.equals(id, that.id) && Objects.equals(categoryName, that.categoryName) && Objects.equals(categoryDescription, that.categoryDescription) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
return Objects.equals(categoryId, that.categoryId) && Objects.equals(categoryName, that.categoryName) && Objects.equals(categoryType, that.categoryType) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
}
@Override
public int hashCode() {
return Objects.hash(id, categoryName, categoryDescription, createdAt, updatedAt);
return Objects.hash(categoryId, categoryName, categoryType, createdAt, updatedAt);
}
@Override
public String toString() {
return "CategoryResponse{" +
"id=" + id +
"categoryId=" + categoryId +
", categoryName='" + categoryName + '\'' +
", categoryDescription='" + categoryDescription + '\'' +
", categoryType='" + categoryType + '\'' +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
'}';

View File

@@ -5,45 +5,47 @@ import jakarta.validation.constraints.NotBlank;
import java.util.Objects;
public class CustomerRequest {
@NotBlank(message = "Customer name is required")
private String customerName;
@NotBlank(message = "First name is required")
private String firstName;
@NotBlank(message = "Last name is required")
private String lastName;
@Email(message = "Invalid email format")
private String customerEmail;
private String email;
private String customerPhone;
private String customerAddress;
private String phone;
public String getCustomerName() {
return customerName;
public String getFirstName() {
return firstName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getCustomerEmail() {
return customerEmail;
public String getLastName() {
return lastName;
}
public void setCustomerEmail(String customerEmail) {
this.customerEmail = customerEmail;
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getCustomerPhone() {
return customerPhone;
public String getEmail() {
return email;
}
public void setCustomerPhone(String customerPhone) {
this.customerPhone = customerPhone;
public void setEmail(String email) {
this.email = email;
}
public String getCustomerAddress() {
return customerAddress;
public String getPhone() {
return phone;
}
public void setCustomerAddress(String customerAddress) {
this.customerAddress = customerAddress;
public void setPhone(String phone) {
this.phone = phone;
}
@Override
@@ -51,24 +53,24 @@ public class CustomerRequest {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CustomerRequest that = (CustomerRequest) o;
return Objects.equals(customerName, that.customerName) &&
Objects.equals(customerEmail, that.customerEmail) &&
Objects.equals(customerPhone, that.customerPhone) &&
Objects.equals(customerAddress, that.customerAddress);
return Objects.equals(firstName, that.firstName) &&
Objects.equals(lastName, that.lastName) &&
Objects.equals(email, that.email) &&
Objects.equals(phone, that.phone);
}
@Override
public int hashCode() {
return Objects.hash(customerName, customerEmail, customerPhone, customerAddress);
return Objects.hash(firstName, lastName, email, phone);
}
@Override
public String toString() {
return "CustomerRequest{" +
"customerName='" + customerName + '\'' +
", customerEmail='" + customerEmail + '\'' +
", customerPhone='" + customerPhone + '\'' +
", customerAddress='" + customerAddress + '\'' +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +
", phone='" + phone + '\'' +
'}';
}
}

View File

@@ -4,65 +4,65 @@ import java.time.LocalDateTime;
import java.util.Objects;
public class CustomerResponse {
private Long id;
private String customerName;
private String customerEmail;
private String customerPhone;
private String customerAddress;
private Long customerId;
private String firstName;
private String lastName;
private String email;
private String phone;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
public CustomerResponse() {
}
public CustomerResponse(Long id, String customerName, String customerEmail, String customerPhone, String customerAddress, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.id = id;
this.customerName = customerName;
this.customerEmail = customerEmail;
this.customerPhone = customerPhone;
this.customerAddress = customerAddress;
public CustomerResponse(Long customerId, String firstName, String lastName, String email, String phone, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.customerId = customerId;
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
this.phone = phone;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
public Long getId() {
return id;
public Long getCustomerId() {
return customerId;
}
public void setId(Long id) {
this.id = id;
public void setCustomerId(Long customerId) {
this.customerId = customerId;
}
public String getCustomerName() {
return customerName;
public String getFirstName() {
return firstName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getCustomerEmail() {
return customerEmail;
public String getLastName() {
return lastName;
}
public void setCustomerEmail(String customerEmail) {
this.customerEmail = customerEmail;
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getCustomerPhone() {
return customerPhone;
public String getEmail() {
return email;
}
public void setCustomerPhone(String customerPhone) {
this.customerPhone = customerPhone;
public void setEmail(String email) {
this.email = email;
}
public String getCustomerAddress() {
return customerAddress;
public String getPhone() {
return phone;
}
public void setCustomerAddress(String customerAddress) {
this.customerAddress = customerAddress;
public void setPhone(String phone) {
this.phone = phone;
}
public LocalDateTime getCreatedAt() {
@@ -86,22 +86,22 @@ public class CustomerResponse {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CustomerResponse that = (CustomerResponse) o;
return Objects.equals(id, that.id) && Objects.equals(customerName, that.customerName) && Objects.equals(customerEmail, that.customerEmail) && Objects.equals(customerPhone, that.customerPhone) && Objects.equals(customerAddress, that.customerAddress) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
return Objects.equals(customerId, that.customerId) && Objects.equals(firstName, that.firstName) && Objects.equals(lastName, that.lastName) && Objects.equals(email, that.email) && Objects.equals(phone, that.phone) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
}
@Override
public int hashCode() {
return Objects.hash(id, customerName, customerEmail, customerPhone, customerAddress, createdAt, updatedAt);
return Objects.hash(customerId, firstName, lastName, email, phone, createdAt, updatedAt);
}
@Override
public String toString() {
return "CustomerResponse{" +
"id=" + id +
", customerName='" + customerName + '\'' +
", customerEmail='" + customerEmail + '\'' +
", customerPhone='" + customerPhone + '\'' +
", customerAddress='" + customerAddress + '\'' +
"customerId=" + customerId +
", firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", email='" + email + '\'' +
", phone='" + phone + '\'' +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
'}';

View File

@@ -8,15 +8,10 @@ public class InventoryRequest {
@NotNull(message = "Product ID is required")
private Long prodId;
private Long storeId;
@NotNull(message = "Quantity is required")
@PositiveOrZero(message = "Quantity must be zero or positive")
private Integer quantity;
@PositiveOrZero(message = "Reorder level must be zero or positive")
private Integer reorderLevel = 10;
public Long getProdId() {
return prodId;
}
@@ -25,14 +20,6 @@ public class InventoryRequest {
this.prodId = prodId;
}
public Long getStoreId() {
return storeId;
}
public void setStoreId(Long storeId) {
this.storeId = storeId;
}
public Integer getQuantity() {
return quantity;
}
@@ -41,37 +28,25 @@ public class InventoryRequest {
this.quantity = quantity;
}
public Integer getReorderLevel() {
return reorderLevel;
}
public void setReorderLevel(Integer reorderLevel) {
this.reorderLevel = reorderLevel;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
InventoryRequest that = (InventoryRequest) o;
return Objects.equals(prodId, that.prodId) &&
Objects.equals(storeId, that.storeId) &&
Objects.equals(quantity, that.quantity) &&
Objects.equals(reorderLevel, that.reorderLevel);
Objects.equals(quantity, that.quantity);
}
@Override
public int hashCode() {
return Objects.hash(prodId, storeId, quantity, reorderLevel);
return Objects.hash(prodId, quantity);
}
@Override
public String toString() {
return "InventoryRequest{" +
"prodId=" + prodId +
", storeId=" + storeId +
", quantity=" + quantity +
", reorderLevel=" + reorderLevel +
'}';
}
}

View File

@@ -4,49 +4,41 @@ import java.time.LocalDateTime;
import java.util.Objects;
public class InventoryResponse {
private Long id;
private Long productId;
private Long inventoryId;
private Long prodId;
private String productName;
private String categoryName;
private Long storeId;
private String storeName;
private Integer quantity;
private Integer reorderLevel;
private LocalDateTime lastRestocked;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
public InventoryResponse() {
}
public InventoryResponse(Long id, Long productId, String productName, String categoryName, Long storeId, String storeName, Integer quantity, Integer reorderLevel, LocalDateTime lastRestocked, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.id = id;
this.productId = productId;
public InventoryResponse(Long inventoryId, Long prodId, String productName, String categoryName, Integer quantity, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.inventoryId = inventoryId;
this.prodId = prodId;
this.productName = productName;
this.categoryName = categoryName;
this.storeId = storeId;
this.storeName = storeName;
this.quantity = quantity;
this.reorderLevel = reorderLevel;
this.lastRestocked = lastRestocked;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
public Long getId() {
return id;
public Long getInventoryId() {
return inventoryId;
}
public void setId(Long id) {
this.id = id;
public void setInventoryId(Long inventoryId) {
this.inventoryId = inventoryId;
}
public Long getProductId() {
return productId;
public Long getProdId() {
return prodId;
}
public void setProductId(Long productId) {
this.productId = productId;
public void setProdId(Long prodId) {
this.prodId = prodId;
}
public String getProductName() {
@@ -65,22 +57,6 @@ public class InventoryResponse {
this.categoryName = categoryName;
}
public Long getStoreId() {
return storeId;
}
public void setStoreId(Long storeId) {
this.storeId = storeId;
}
public String getStoreName() {
return storeName;
}
public void setStoreName(String storeName) {
this.storeName = storeName;
}
public Integer getQuantity() {
return quantity;
}
@@ -89,22 +65,6 @@ public class InventoryResponse {
this.quantity = quantity;
}
public Integer getReorderLevel() {
return reorderLevel;
}
public void setReorderLevel(Integer reorderLevel) {
this.reorderLevel = reorderLevel;
}
public LocalDateTime getLastRestocked() {
return lastRestocked;
}
public void setLastRestocked(LocalDateTime lastRestocked) {
this.lastRestocked = lastRestocked;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
@@ -126,26 +86,22 @@ public class InventoryResponse {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
InventoryResponse that = (InventoryResponse) o;
return Objects.equals(id, that.id) && Objects.equals(productId, that.productId) && Objects.equals(productName, that.productName) && Objects.equals(categoryName, that.categoryName) && Objects.equals(storeId, that.storeId) && Objects.equals(storeName, that.storeName) && Objects.equals(quantity, that.quantity) && Objects.equals(reorderLevel, that.reorderLevel) && Objects.equals(lastRestocked, that.lastRestocked) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
return Objects.equals(inventoryId, that.inventoryId) && Objects.equals(prodId, that.prodId) && Objects.equals(productName, that.productName) && Objects.equals(categoryName, that.categoryName) && Objects.equals(quantity, that.quantity) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
}
@Override
public int hashCode() {
return Objects.hash(id, productId, productName, categoryName, storeId, storeName, quantity, reorderLevel, lastRestocked, createdAt, updatedAt);
return Objects.hash(inventoryId, prodId, productName, categoryName, quantity, createdAt, updatedAt);
}
@Override
public String toString() {
return "InventoryResponse{" +
"id=" + id +
", productId=" + productId +
"inventoryId=" + inventoryId +
", prodId=" + prodId +
", productName='" + productName + '\'' +
", categoryName='" + categoryName + '\'' +
", storeId=" + storeId +
", storeName='" + storeName + '\'' +
", quantity=" + quantity +
", reorderLevel=" + reorderLevel +
", lastRestocked=" + lastRestocked +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
'}';

View File

@@ -19,8 +19,6 @@ public class ProductRequest {
@Positive(message = "Price must be positive")
private BigDecimal prodPrice;
private Boolean active = true;
public String getProdName() {
return prodName;
}
@@ -53,14 +51,6 @@ public class ProductRequest {
this.prodPrice = prodPrice;
}
public Boolean getActive() {
return active;
}
public void setActive(Boolean active) {
this.active = active;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -69,13 +59,12 @@ public class ProductRequest {
return Objects.equals(prodName, that.prodName) &&
Objects.equals(categoryId, that.categoryId) &&
Objects.equals(prodDesc, that.prodDesc) &&
Objects.equals(prodPrice, that.prodPrice) &&
Objects.equals(active, that.active);
Objects.equals(prodPrice, that.prodPrice);
}
@Override
public int hashCode() {
return Objects.hash(prodName, categoryId, prodDesc, prodPrice, active);
return Objects.hash(prodName, categoryId, prodDesc, prodPrice);
}
@Override
@@ -85,7 +74,6 @@ public class ProductRequest {
", categoryId=" + categoryId +
", prodDesc='" + prodDesc + '\'' +
", prodPrice=" + prodPrice +
", active=" + active +
'}';
}
}

View File

@@ -5,45 +5,43 @@ import java.time.LocalDateTime;
import java.util.Objects;
public class ProductResponse {
private Long id;
private String productName;
private Long prodId;
private String prodName;
private Long categoryId;
private String categoryName;
private String productDescription;
private BigDecimal productPrice;
private Boolean active;
private String prodDesc;
private BigDecimal prodPrice;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
public ProductResponse() {
}
public ProductResponse(Long id, String productName, Long categoryId, String categoryName, String productDescription, BigDecimal productPrice, Boolean active, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.id = id;
this.productName = productName;
public ProductResponse(Long prodId, String prodName, Long categoryId, String categoryName, String prodDesc, BigDecimal prodPrice, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.prodId = prodId;
this.prodName = prodName;
this.categoryId = categoryId;
this.categoryName = categoryName;
this.productDescription = productDescription;
this.productPrice = productPrice;
this.active = active;
this.prodDesc = prodDesc;
this.prodPrice = prodPrice;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
public Long getId() {
return id;
public Long getProdId() {
return prodId;
}
public void setId(Long id) {
this.id = id;
public void setProdId(Long prodId) {
this.prodId = prodId;
}
public String getProductName() {
return productName;
public String getProdName() {
return prodName;
}
public void setProductName(String productName) {
this.productName = productName;
public void setProdName(String prodName) {
this.prodName = prodName;
}
public Long getCategoryId() {
@@ -62,28 +60,20 @@ public class ProductResponse {
this.categoryName = categoryName;
}
public String getProductDescription() {
return productDescription;
public String getProdDesc() {
return prodDesc;
}
public void setProductDescription(String productDescription) {
this.productDescription = productDescription;
public void setProdDesc(String prodDesc) {
this.prodDesc = prodDesc;
}
public BigDecimal getProductPrice() {
return productPrice;
public BigDecimal getProdPrice() {
return prodPrice;
}
public void setProductPrice(BigDecimal productPrice) {
this.productPrice = productPrice;
}
public Boolean getActive() {
return active;
}
public void setActive(Boolean active) {
this.active = active;
public void setProdPrice(BigDecimal prodPrice) {
this.prodPrice = prodPrice;
}
public LocalDateTime getCreatedAt() {
@@ -107,24 +97,23 @@ public class ProductResponse {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ProductResponse that = (ProductResponse) o;
return Objects.equals(id, that.id) && Objects.equals(productName, that.productName) && Objects.equals(categoryId, that.categoryId) && Objects.equals(categoryName, that.categoryName) && Objects.equals(productDescription, that.productDescription) && Objects.equals(productPrice, that.productPrice) && Objects.equals(active, that.active) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
return Objects.equals(prodId, that.prodId) && Objects.equals(prodName, that.prodName) && Objects.equals(categoryId, that.categoryId) && Objects.equals(categoryName, that.categoryName) && Objects.equals(prodDesc, that.prodDesc) && Objects.equals(prodPrice, that.prodPrice) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
}
@Override
public int hashCode() {
return Objects.hash(id, productName, categoryId, categoryName, productDescription, productPrice, active, createdAt, updatedAt);
return Objects.hash(prodId, prodName, categoryId, categoryName, prodDesc, prodPrice, createdAt, updatedAt);
}
@Override
public String toString() {
return "ProductResponse{" +
"id=" + id +
", productName='" + productName + '\'' +
"prodId=" + prodId +
", prodName='" + prodName + '\'' +
", categoryId=" + categoryId +
", categoryName='" + categoryName + '\'' +
", productDescription='" + productDescription + '\'' +
", productPrice=" + productPrice +
", active=" + active +
", prodDesc='" + prodDesc + '\'' +
", prodPrice=" + prodPrice +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
'}';

View File

@@ -2,7 +2,6 @@ package com.petshop.backend.dto.productsupplier;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import jakarta.validation.constraints.PositiveOrZero;
import java.math.BigDecimal;
import java.util.Objects;
@@ -13,14 +12,9 @@ public class ProductSupplierRequest {
@NotNull(message = "Supplier ID is required")
private Long supplierId;
@NotNull(message = "Cost price is required")
@Positive(message = "Cost price must be positive")
private BigDecimal costPrice;
@PositiveOrZero(message = "Lead time must be zero or positive")
private Integer leadTimeDays;
private Boolean isPreferred = false;
@NotNull(message = "Cost is required")
@Positive(message = "Cost must be positive")
private BigDecimal cost;
public Long getProductId() {
return productId;
@@ -38,28 +32,12 @@ public class ProductSupplierRequest {
this.supplierId = supplierId;
}
public BigDecimal getCostPrice() {
return costPrice;
public BigDecimal getCost() {
return cost;
}
public void setCostPrice(BigDecimal costPrice) {
this.costPrice = costPrice;
}
public Integer getLeadTimeDays() {
return leadTimeDays;
}
public void setLeadTimeDays(Integer leadTimeDays) {
this.leadTimeDays = leadTimeDays;
}
public Boolean getIsPreferred() {
return isPreferred;
}
public void setIsPreferred(Boolean isPreferred) {
this.isPreferred = isPreferred;
public void setCost(BigDecimal cost) {
this.cost = cost;
}
@Override
@@ -69,14 +47,12 @@ public class ProductSupplierRequest {
ProductSupplierRequest that = (ProductSupplierRequest) o;
return Objects.equals(productId, that.productId) &&
Objects.equals(supplierId, that.supplierId) &&
Objects.equals(costPrice, that.costPrice) &&
Objects.equals(leadTimeDays, that.leadTimeDays) &&
Objects.equals(isPreferred, that.isPreferred);
Objects.equals(cost, that.cost);
}
@Override
public int hashCode() {
return Objects.hash(productId, supplierId, costPrice, leadTimeDays, isPreferred);
return Objects.hash(productId, supplierId, cost);
}
@Override
@@ -84,9 +60,7 @@ public class ProductSupplierRequest {
return "ProductSupplierRequest{" +
"productId=" + productId +
", supplierId=" + supplierId +
", costPrice=" + costPrice +
", leadTimeDays=" + leadTimeDays +
", isPreferred=" + isPreferred +
", cost=" + cost +
'}';
}
}

View File

@@ -9,23 +9,19 @@ public class ProductSupplierResponse {
private String productName;
private Long supplierId;
private String supplierName;
private BigDecimal costPrice;
private Integer leadTimeDays;
private Boolean isPreferred;
private BigDecimal cost;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
public ProductSupplierResponse() {
}
public ProductSupplierResponse(Long productId, String productName, Long supplierId, String supplierName, BigDecimal costPrice, Integer leadTimeDays, Boolean isPreferred, LocalDateTime createdAt, LocalDateTime updatedAt) {
public ProductSupplierResponse(Long productId, String productName, Long supplierId, String supplierName, BigDecimal cost, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.productId = productId;
this.productName = productName;
this.supplierId = supplierId;
this.supplierName = supplierName;
this.costPrice = costPrice;
this.leadTimeDays = leadTimeDays;
this.isPreferred = isPreferred;
this.cost = cost;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
@@ -62,28 +58,12 @@ public class ProductSupplierResponse {
this.supplierName = supplierName;
}
public BigDecimal getCostPrice() {
return costPrice;
public BigDecimal getCost() {
return cost;
}
public void setCostPrice(BigDecimal costPrice) {
this.costPrice = costPrice;
}
public Integer getLeadTimeDays() {
return leadTimeDays;
}
public void setLeadTimeDays(Integer leadTimeDays) {
this.leadTimeDays = leadTimeDays;
}
public Boolean getIsPreferred() {
return isPreferred;
}
public void setIsPreferred(Boolean isPreferred) {
this.isPreferred = isPreferred;
public void setCost(BigDecimal cost) {
this.cost = cost;
}
public LocalDateTime getCreatedAt() {
@@ -107,12 +87,12 @@ public class ProductSupplierResponse {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ProductSupplierResponse that = (ProductSupplierResponse) o;
return Objects.equals(productId, that.productId) && Objects.equals(productName, that.productName) && Objects.equals(supplierId, that.supplierId) && Objects.equals(supplierName, that.supplierName) && Objects.equals(costPrice, that.costPrice) && Objects.equals(leadTimeDays, that.leadTimeDays) && Objects.equals(isPreferred, that.isPreferred) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
return Objects.equals(productId, that.productId) && Objects.equals(productName, that.productName) && Objects.equals(supplierId, that.supplierId) && Objects.equals(supplierName, that.supplierName) && Objects.equals(cost, that.cost) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
}
@Override
public int hashCode() {
return Objects.hash(productId, productName, supplierId, supplierName, costPrice, leadTimeDays, isPreferred, createdAt, updatedAt);
return Objects.hash(productId, productName, supplierId, supplierName, cost, createdAt, updatedAt);
}
@Override
@@ -122,9 +102,7 @@ public class ProductSupplierResponse {
", productName='" + productName + '\'' +
", supplierId=" + supplierId +
", supplierName='" + supplierName + '\'' +
", costPrice=" + costPrice +
", leadTimeDays=" + leadTimeDays +
", isPreferred=" + isPreferred +
", cost=" + cost +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
'}';

View File

@@ -1,55 +1,45 @@
package com.petshop.backend.dto.purchaseorder;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
public class PurchaseOrderResponse {
private Long id;
private Long supplierId;
private Long purchaseOrderId;
private Long supId;
private String supplierName;
private LocalDate orderDate;
private LocalDate expectedDelivery;
private String status;
private BigDecimal totalAmount;
private String notes;
private List<PurchaseOrderItemResponse> items;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
public PurchaseOrderResponse() {
}
public PurchaseOrderResponse(Long id, Long supplierId, String supplierName, LocalDate orderDate, LocalDate expectedDelivery, String status, BigDecimal totalAmount, String notes, List<PurchaseOrderItemResponse> items, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.id = id;
this.supplierId = supplierId;
public PurchaseOrderResponse(Long purchaseOrderId, Long supId, String supplierName, LocalDate orderDate, String status, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.purchaseOrderId = purchaseOrderId;
this.supId = supId;
this.supplierName = supplierName;
this.orderDate = orderDate;
this.expectedDelivery = expectedDelivery;
this.status = status;
this.totalAmount = totalAmount;
this.notes = notes;
this.items = items;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
public Long getId() {
return id;
public Long getPurchaseOrderId() {
return purchaseOrderId;
}
public void setId(Long id) {
this.id = id;
public void setPurchaseOrderId(Long purchaseOrderId) {
this.purchaseOrderId = purchaseOrderId;
}
public Long getSupplierId() {
return supplierId;
public Long getSupId() {
return supId;
}
public void setSupplierId(Long supplierId) {
this.supplierId = supplierId;
public void setSupId(Long supId) {
this.supId = supId;
}
public String getSupplierName() {
@@ -68,14 +58,6 @@ public class PurchaseOrderResponse {
this.orderDate = orderDate;
}
public LocalDate getExpectedDelivery() {
return expectedDelivery;
}
public void setExpectedDelivery(LocalDate expectedDelivery) {
this.expectedDelivery = expectedDelivery;
}
public String getStatus() {
return status;
}
@@ -84,30 +66,6 @@ public class PurchaseOrderResponse {
this.status = status;
}
public BigDecimal getTotalAmount() {
return totalAmount;
}
public void setTotalAmount(BigDecimal totalAmount) {
this.totalAmount = totalAmount;
}
public String getNotes() {
return notes;
}
public void setNotes(String notes) {
this.notes = notes;
}
public List<PurchaseOrderItemResponse> getItems() {
return items;
}
public void setItems(List<PurchaseOrderItemResponse> items) {
this.items = items;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
@@ -129,122 +87,24 @@ public class PurchaseOrderResponse {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PurchaseOrderResponse that = (PurchaseOrderResponse) o;
return Objects.equals(id, that.id) && Objects.equals(supplierId, that.supplierId) && Objects.equals(supplierName, that.supplierName) && Objects.equals(orderDate, that.orderDate) && Objects.equals(expectedDelivery, that.expectedDelivery) && Objects.equals(status, that.status) && Objects.equals(totalAmount, that.totalAmount) && Objects.equals(notes, that.notes) && Objects.equals(items, that.items) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
return Objects.equals(purchaseOrderId, that.purchaseOrderId) && Objects.equals(supId, that.supId) && Objects.equals(supplierName, that.supplierName) && Objects.equals(orderDate, that.orderDate) && Objects.equals(status, that.status) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
}
@Override
public int hashCode() {
return Objects.hash(id, supplierId, supplierName, orderDate, expectedDelivery, status, totalAmount, notes, items, createdAt, updatedAt);
return Objects.hash(purchaseOrderId, supId, supplierName, orderDate, status, createdAt, updatedAt);
}
@Override
public String toString() {
return "PurchaseOrderResponse{" +
"id=" + id +
", supplierId=" + supplierId +
"purchaseOrderId=" + purchaseOrderId +
", supId=" + supId +
", supplierName='" + supplierName + '\'' +
", orderDate=" + orderDate +
", expectedDelivery=" + expectedDelivery +
", status='" + status + '\'' +
", totalAmount=" + totalAmount +
", notes='" + notes + '\'' +
", items=" + items +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
'}';
}
public static class PurchaseOrderItemResponse {
private Long id;
private Long productId;
private String productName;
private Integer quantity;
private BigDecimal unitCost;
private BigDecimal subtotal;
public PurchaseOrderItemResponse() {
}
public PurchaseOrderItemResponse(Long id, Long productId, String productName, Integer quantity, BigDecimal unitCost, BigDecimal subtotal) {
this.id = id;
this.productId = productId;
this.productName = productName;
this.quantity = quantity;
this.unitCost = unitCost;
this.subtotal = subtotal;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getProductId() {
return productId;
}
public void setProductId(Long productId) {
this.productId = productId;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public Integer getQuantity() {
return quantity;
}
public void setQuantity(Integer quantity) {
this.quantity = quantity;
}
public BigDecimal getUnitCost() {
return unitCost;
}
public void setUnitCost(BigDecimal unitCost) {
this.unitCost = unitCost;
}
public BigDecimal getSubtotal() {
return subtotal;
}
public void setSubtotal(BigDecimal subtotal) {
this.subtotal = subtotal;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PurchaseOrderItemResponse that = (PurchaseOrderItemResponse) o;
return Objects.equals(id, that.id) && Objects.equals(productId, that.productId) && Objects.equals(productName, that.productName) && Objects.equals(quantity, that.quantity) && Objects.equals(unitCost, that.unitCost) && Objects.equals(subtotal, that.subtotal);
}
@Override
public int hashCode() {
return Objects.hash(id, productId, productName, quantity, unitCost, subtotal);
}
@Override
public String toString() {
return "PurchaseOrderItemResponse{" +
"id=" + id +
", productId=" + productId +
", productName='" + productName + '\'' +
", quantity=" + quantity +
", unitCost=" + unitCost +
", subtotal=" + subtotal +
'}';
}
}
}

View File

@@ -6,18 +6,17 @@ import java.util.Objects;
public class SaleItemRequest {
@NotNull(message = "Product ID is required")
private Long productId;
private Long prodId;
@NotNull(message = "Quantity is required")
@Positive(message = "Quantity must be positive")
private Integer quantity;
public Long getProductId() {
return productId;
public Long getProdId() {
return prodId;
}
public void setProductId(Long productId) {
this.productId = productId;
public void setProdId(Long prodId) {
this.prodId = prodId;
}
public Integer getQuantity() {
@@ -33,19 +32,19 @@ public class SaleItemRequest {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SaleItemRequest that = (SaleItemRequest) o;
return Objects.equals(productId, that.productId) &&
return Objects.equals(prodId, that.prodId) &&
Objects.equals(quantity, that.quantity);
}
@Override
public int hashCode() {
return Objects.hash(productId, quantity);
return Objects.hash(prodId, quantity);
}
@Override
public String toString() {
return "SaleItemRequest{" +
"productId=" + productId +
"prodId=" + prodId +
", quantity=" + quantity +
'}';
}

View File

@@ -3,33 +3,22 @@ package com.petshop.backend.dto.sale;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
public class SaleRequest {
private Long customerId;
@NotNull(message = "Store ID is required")
private Long storeId;
private String paymentMethod;
private BigDecimal tax = BigDecimal.ZERO;
@NotEmpty(message = "At least one item is required")
@Valid
private List<SaleItemRequest> items;
private String notes;
private Boolean isRefund = false;
public Long getCustomerId() {
return customerId;
}
public void setCustomerId(Long customerId) {
this.customerId = customerId;
}
private Long originalSaleId;
public Long getStoreId() {
return storeId;
@@ -47,14 +36,6 @@ public class SaleRequest {
this.paymentMethod = paymentMethod;
}
public BigDecimal getTax() {
return tax;
}
public void setTax(BigDecimal tax) {
this.tax = tax;
}
public List<SaleItemRequest> getItems() {
return items;
}
@@ -63,12 +44,20 @@ public class SaleRequest {
this.items = items;
}
public String getNotes() {
return notes;
public Boolean getIsRefund() {
return isRefund;
}
public void setNotes(String notes) {
this.notes = notes;
public void setIsRefund(Boolean isRefund) {
this.isRefund = isRefund;
}
public Long getOriginalSaleId() {
return originalSaleId;
}
public void setOriginalSaleId(Long originalSaleId) {
this.originalSaleId = originalSaleId;
}
@Override
@@ -76,28 +65,26 @@ public class SaleRequest {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SaleRequest that = (SaleRequest) o;
return Objects.equals(customerId, that.customerId) &&
Objects.equals(storeId, that.storeId) &&
return Objects.equals(storeId, that.storeId) &&
Objects.equals(paymentMethod, that.paymentMethod) &&
Objects.equals(tax, that.tax) &&
Objects.equals(items, that.items) &&
Objects.equals(notes, that.notes);
Objects.equals(isRefund, that.isRefund) &&
Objects.equals(originalSaleId, that.originalSaleId);
}
@Override
public int hashCode() {
return Objects.hash(customerId, storeId, paymentMethod, tax, items, notes);
return Objects.hash(storeId, paymentMethod, items, isRefund, originalSaleId);
}
@Override
public String toString() {
return "SaleRequest{" +
"customerId=" + customerId +
", storeId=" + storeId +
"storeId=" + storeId +
", paymentMethod='" + paymentMethod + '\'' +
", tax=" + tax +
", items=" + items +
", notes='" + notes + '\'' +
", isRefund=" + isRefund +
", originalSaleId=" + originalSaleId +
'}';
}
}

View File

@@ -6,49 +6,43 @@ import java.util.List;
import java.util.Objects;
public class SaleResponse {
private Long id;
private Long saleId;
private LocalDateTime saleDate;
private Long employeeId;
private String employeeName;
private Long customerId;
private String customerName;
private Long storeId;
private String storeName;
private BigDecimal subtotal;
private BigDecimal tax;
private BigDecimal total;
private BigDecimal totalAmount;
private String paymentMethod;
private String notes;
private Boolean isRefund;
private Long originalSaleId;
private List<SaleItemResponse> items;
private LocalDateTime createdAt;
public SaleResponse() {
}
public SaleResponse(Long id, LocalDateTime saleDate, Long employeeId, String employeeName, Long customerId, String customerName, Long storeId, String storeName, BigDecimal subtotal, BigDecimal tax, BigDecimal total, String paymentMethod, String notes, List<SaleItemResponse> items, LocalDateTime createdAt) {
this.id = id;
public SaleResponse(Long saleId, LocalDateTime saleDate, Long employeeId, String employeeName, Long storeId, String storeName, BigDecimal totalAmount, String paymentMethod, Boolean isRefund, Long originalSaleId, List<SaleItemResponse> items, LocalDateTime createdAt) {
this.saleId = saleId;
this.saleDate = saleDate;
this.employeeId = employeeId;
this.employeeName = employeeName;
this.customerId = customerId;
this.customerName = customerName;
this.storeId = storeId;
this.storeName = storeName;
this.subtotal = subtotal;
this.tax = tax;
this.total = total;
this.totalAmount = totalAmount;
this.paymentMethod = paymentMethod;
this.notes = notes;
this.isRefund = isRefund;
this.originalSaleId = originalSaleId;
this.items = items;
this.createdAt = createdAt;
}
public Long getId() {
return id;
public Long getSaleId() {
return saleId;
}
public void setId(Long id) {
this.id = id;
public void setSaleId(Long saleId) {
this.saleId = saleId;
}
public LocalDateTime getSaleDate() {
@@ -75,22 +69,6 @@ public class SaleResponse {
this.employeeName = employeeName;
}
public Long getCustomerId() {
return customerId;
}
public void setCustomerId(Long customerId) {
this.customerId = customerId;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public Long getStoreId() {
return storeId;
}
@@ -107,28 +85,12 @@ public class SaleResponse {
this.storeName = storeName;
}
public BigDecimal getSubtotal() {
return subtotal;
public BigDecimal getTotalAmount() {
return totalAmount;
}
public void setSubtotal(BigDecimal subtotal) {
this.subtotal = subtotal;
}
public BigDecimal getTax() {
return tax;
}
public void setTax(BigDecimal tax) {
this.tax = tax;
}
public BigDecimal getTotal() {
return total;
}
public void setTotal(BigDecimal total) {
this.total = total;
public void setTotalAmount(BigDecimal totalAmount) {
this.totalAmount = totalAmount;
}
public String getPaymentMethod() {
@@ -139,12 +101,20 @@ public class SaleResponse {
this.paymentMethod = paymentMethod;
}
public String getNotes() {
return notes;
public Boolean getIsRefund() {
return isRefund;
}
public void setNotes(String notes) {
this.notes = notes;
public void setIsRefund(Boolean isRefund) {
this.isRefund = isRefund;
}
public Long getOriginalSaleId() {
return originalSaleId;
}
public void setOriginalSaleId(Long originalSaleId) {
this.originalSaleId = originalSaleId;
}
public List<SaleItemResponse> getItems() {
@@ -168,69 +138,64 @@ public class SaleResponse {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SaleResponse that = (SaleResponse) o;
return Objects.equals(id, that.id) && Objects.equals(saleDate, that.saleDate) && Objects.equals(employeeId, that.employeeId) && Objects.equals(employeeName, that.employeeName) && Objects.equals(customerId, that.customerId) && Objects.equals(customerName, that.customerName) && Objects.equals(storeId, that.storeId) && Objects.equals(storeName, that.storeName) && Objects.equals(subtotal, that.subtotal) && Objects.equals(tax, that.tax) && Objects.equals(total, that.total) && Objects.equals(paymentMethod, that.paymentMethod) && Objects.equals(notes, that.notes) && Objects.equals(items, that.items) && Objects.equals(createdAt, that.createdAt);
return Objects.equals(saleId, that.saleId) && Objects.equals(saleDate, that.saleDate) && Objects.equals(employeeId, that.employeeId) && Objects.equals(employeeName, that.employeeName) && Objects.equals(storeId, that.storeId) && Objects.equals(storeName, that.storeName) && Objects.equals(totalAmount, that.totalAmount) && Objects.equals(paymentMethod, that.paymentMethod) && Objects.equals(isRefund, that.isRefund) && Objects.equals(originalSaleId, that.originalSaleId) && Objects.equals(items, that.items) && Objects.equals(createdAt, that.createdAt);
}
@Override
public int hashCode() {
return Objects.hash(id, saleDate, employeeId, employeeName, customerId, customerName, storeId, storeName, subtotal, tax, total, paymentMethod, notes, items, createdAt);
return Objects.hash(saleId, saleDate, employeeId, employeeName, storeId, storeName, totalAmount, paymentMethod, isRefund, originalSaleId, items, createdAt);
}
@Override
public String toString() {
return "SaleResponse{" +
"id=" + id +
"saleId=" + saleId +
", saleDate=" + saleDate +
", employeeId=" + employeeId +
", employeeName='" + employeeName + '\'' +
", customerId=" + customerId +
", customerName='" + customerName + '\'' +
", storeId=" + storeId +
", storeName='" + storeName + '\'' +
", subtotal=" + subtotal +
", tax=" + tax +
", total=" + total +
", totalAmount=" + totalAmount +
", paymentMethod='" + paymentMethod + '\'' +
", notes='" + notes + '\'' +
", isRefund=" + isRefund +
", originalSaleId=" + originalSaleId +
", items=" + items +
", createdAt=" + createdAt +
'}';
}
public static class SaleItemResponse {
private Long id;
private Long productId;
private Long saleItemId;
private Long prodId;
private String productName;
private Integer quantity;
private BigDecimal unitPrice;
private BigDecimal subtotal;
public SaleItemResponse() {
}
public SaleItemResponse(Long id, Long productId, String productName, Integer quantity, BigDecimal unitPrice, BigDecimal subtotal) {
this.id = id;
this.productId = productId;
public SaleItemResponse(Long saleItemId, Long prodId, String productName, Integer quantity, BigDecimal unitPrice) {
this.saleItemId = saleItemId;
this.prodId = prodId;
this.productName = productName;
this.quantity = quantity;
this.unitPrice = unitPrice;
this.subtotal = subtotal;
}
public Long getId() {
return id;
public Long getSaleItemId() {
return saleItemId;
}
public void setId(Long id) {
this.id = id;
public void setSaleItemId(Long saleItemId) {
this.saleItemId = saleItemId;
}
public Long getProductId() {
return productId;
public Long getProdId() {
return prodId;
}
public void setProductId(Long productId) {
this.productId = productId;
public void setProdId(Long prodId) {
this.prodId = prodId;
}
public String getProductName() {
@@ -257,36 +222,27 @@ public class SaleResponse {
this.unitPrice = unitPrice;
}
public BigDecimal getSubtotal() {
return subtotal;
}
public void setSubtotal(BigDecimal subtotal) {
this.subtotal = subtotal;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SaleItemResponse that = (SaleItemResponse) o;
return Objects.equals(id, that.id) && Objects.equals(productId, that.productId) && Objects.equals(productName, that.productName) && Objects.equals(quantity, that.quantity) && Objects.equals(unitPrice, that.unitPrice) && Objects.equals(subtotal, that.subtotal);
return Objects.equals(saleItemId, that.saleItemId) && Objects.equals(prodId, that.prodId) && Objects.equals(productName, that.productName) && Objects.equals(quantity, that.quantity) && Objects.equals(unitPrice, that.unitPrice);
}
@Override
public int hashCode() {
return Objects.hash(id, productId, productName, quantity, unitPrice, subtotal);
return Objects.hash(saleItemId, prodId, productName, quantity, unitPrice);
}
@Override
public String toString() {
return "SaleItemResponse{" +
"id=" + id +
", productId=" + productId +
"saleItemId=" + saleItemId +
", prodId=" + prodId +
", productName='" + productName + '\'' +
", quantity=" + quantity +
", unitPrice=" + unitPrice +
", subtotal=" + subtotal +
'}';
}
}

View File

@@ -10,16 +10,14 @@ public class ServiceRequest {
@NotBlank(message = "Service name is required")
private String serviceName;
private String serviceDescription;
private String serviceDesc;
@NotNull(message = "Service price is required")
@Positive(message = "Price must be positive")
private BigDecimal servicePrice;
@Positive(message = "Duration must be positive")
private Integer serviceDurationMinutes;
private Boolean active = true;
private Integer serviceDuration;
public String getServiceName() {
return serviceName;
@@ -29,12 +27,12 @@ public class ServiceRequest {
this.serviceName = serviceName;
}
public String getServiceDescription() {
return serviceDescription;
public String getServiceDesc() {
return serviceDesc;
}
public void setServiceDescription(String serviceDescription) {
this.serviceDescription = serviceDescription;
public void setServiceDesc(String serviceDesc) {
this.serviceDesc = serviceDesc;
}
public BigDecimal getServicePrice() {
@@ -45,20 +43,12 @@ public class ServiceRequest {
this.servicePrice = servicePrice;
}
public Integer getServiceDurationMinutes() {
return serviceDurationMinutes;
public Integer getServiceDuration() {
return serviceDuration;
}
public void setServiceDurationMinutes(Integer serviceDurationMinutes) {
this.serviceDurationMinutes = serviceDurationMinutes;
}
public Boolean getActive() {
return active;
}
public void setActive(Boolean active) {
this.active = active;
public void setServiceDuration(Integer serviceDuration) {
this.serviceDuration = serviceDuration;
}
@Override
@@ -67,25 +57,23 @@ public class ServiceRequest {
if (o == null || getClass() != o.getClass()) return false;
ServiceRequest that = (ServiceRequest) o;
return Objects.equals(serviceName, that.serviceName) &&
Objects.equals(serviceDescription, that.serviceDescription) &&
Objects.equals(serviceDesc, that.serviceDesc) &&
Objects.equals(servicePrice, that.servicePrice) &&
Objects.equals(serviceDurationMinutes, that.serviceDurationMinutes) &&
Objects.equals(active, that.active);
Objects.equals(serviceDuration, that.serviceDuration);
}
@Override
public int hashCode() {
return Objects.hash(serviceName, serviceDescription, servicePrice, serviceDurationMinutes, active);
return Objects.hash(serviceName, serviceDesc, servicePrice, serviceDuration);
}
@Override
public String toString() {
return "ServiceRequest{" +
"serviceName='" + serviceName + '\'' +
", serviceDescription='" + serviceDescription + '\'' +
", serviceDesc='" + serviceDesc + '\'' +
", servicePrice=" + servicePrice +
", serviceDurationMinutes=" + serviceDurationMinutes +
", active=" + active +
", serviceDuration=" + serviceDuration +
'}';
}
}

View File

@@ -5,35 +5,33 @@ import java.time.LocalDateTime;
import java.util.Objects;
public class ServiceResponse {
private Long id;
private Long serviceId;
private String serviceName;
private String serviceDescription;
private String serviceDesc;
private BigDecimal servicePrice;
private Integer serviceDurationMinutes;
private Boolean active;
private Integer serviceDuration;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
public ServiceResponse() {
}
public ServiceResponse(Long id, String serviceName, String serviceDescription, BigDecimal servicePrice, Integer serviceDurationMinutes, Boolean active, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.id = id;
public ServiceResponse(Long serviceId, String serviceName, String serviceDesc, BigDecimal servicePrice, Integer serviceDuration, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.serviceId = serviceId;
this.serviceName = serviceName;
this.serviceDescription = serviceDescription;
this.serviceDesc = serviceDesc;
this.servicePrice = servicePrice;
this.serviceDurationMinutes = serviceDurationMinutes;
this.active = active;
this.serviceDuration = serviceDuration;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
public Long getId() {
return id;
public Long getServiceId() {
return serviceId;
}
public void setId(Long id) {
this.id = id;
public void setServiceId(Long serviceId) {
this.serviceId = serviceId;
}
public String getServiceName() {
@@ -44,12 +42,12 @@ public class ServiceResponse {
this.serviceName = serviceName;
}
public String getServiceDescription() {
return serviceDescription;
public String getServiceDesc() {
return serviceDesc;
}
public void setServiceDescription(String serviceDescription) {
this.serviceDescription = serviceDescription;
public void setServiceDesc(String serviceDesc) {
this.serviceDesc = serviceDesc;
}
public BigDecimal getServicePrice() {
@@ -60,20 +58,12 @@ public class ServiceResponse {
this.servicePrice = servicePrice;
}
public Integer getServiceDurationMinutes() {
return serviceDurationMinutes;
public Integer getServiceDuration() {
return serviceDuration;
}
public void setServiceDurationMinutes(Integer serviceDurationMinutes) {
this.serviceDurationMinutes = serviceDurationMinutes;
}
public Boolean getActive() {
return active;
}
public void setActive(Boolean active) {
this.active = active;
public void setServiceDuration(Integer serviceDuration) {
this.serviceDuration = serviceDuration;
}
public LocalDateTime getCreatedAt() {
@@ -97,23 +87,22 @@ public class ServiceResponse {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ServiceResponse that = (ServiceResponse) o;
return Objects.equals(id, that.id) && Objects.equals(serviceName, that.serviceName) && Objects.equals(serviceDescription, that.serviceDescription) && Objects.equals(servicePrice, that.servicePrice) && Objects.equals(serviceDurationMinutes, that.serviceDurationMinutes) && Objects.equals(active, that.active) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
return Objects.equals(serviceId, that.serviceId) && Objects.equals(serviceName, that.serviceName) && Objects.equals(serviceDesc, that.serviceDesc) && Objects.equals(servicePrice, that.servicePrice) && Objects.equals(serviceDuration, that.serviceDuration) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
}
@Override
public int hashCode() {
return Objects.hash(id, serviceName, serviceDescription, servicePrice, serviceDurationMinutes, active, createdAt, updatedAt);
return Objects.hash(serviceId, serviceName, serviceDesc, servicePrice, serviceDuration, createdAt, updatedAt);
}
@Override
public String toString() {
return "ServiceResponse{" +
"id=" + id +
"serviceId=" + serviceId +
", serviceName='" + serviceName + '\'' +
", serviceDescription='" + serviceDescription + '\'' +
", serviceDesc='" + serviceDesc + '\'' +
", servicePrice=" + servicePrice +
", serviceDurationMinutes=" + serviceDurationMinutes +
", active=" + active +
", serviceDuration=" + serviceDuration +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
'}';

View File

@@ -5,32 +5,40 @@ import jakarta.validation.constraints.NotBlank;
import java.util.Objects;
public class SupplierRequest {
@NotBlank(message = "Supplier name is required")
private String supName;
@NotBlank(message = "Supplier company is required")
private String supCompany;
private String supContact;
private String supContactFirstName;
private String supContactLastName;
@Email(message = "Invalid email format")
private String supEmail;
private String supPhone;
private String supAddress;
private Boolean active = true;
public String getSupName() {
return supName;
public String getSupCompany() {
return supCompany;
}
public void setSupName(String supName) {
this.supName = supName;
public void setSupCompany(String supCompany) {
this.supCompany = supCompany;
}
public String getSupContact() {
return supContact;
public String getSupContactFirstName() {
return supContactFirstName;
}
public void setSupContact(String supContact) {
this.supContact = supContact;
public void setSupContactFirstName(String supContactFirstName) {
this.supContactFirstName = supContactFirstName;
}
public String getSupContactLastName() {
return supContactLastName;
}
public void setSupContactLastName(String supContactLastName) {
this.supContactLastName = supContactLastName;
}
public String getSupEmail() {
@@ -49,49 +57,31 @@ public class SupplierRequest {
this.supPhone = supPhone;
}
public String getSupAddress() {
return supAddress;
}
public void setSupAddress(String supAddress) {
this.supAddress = supAddress;
}
public Boolean getActive() {
return active;
}
public void setActive(Boolean active) {
this.active = active;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SupplierRequest that = (SupplierRequest) o;
return Objects.equals(supName, that.supName) &&
Objects.equals(supContact, that.supContact) &&
return Objects.equals(supCompany, that.supCompany) &&
Objects.equals(supContactFirstName, that.supContactFirstName) &&
Objects.equals(supContactLastName, that.supContactLastName) &&
Objects.equals(supEmail, that.supEmail) &&
Objects.equals(supPhone, that.supPhone) &&
Objects.equals(supAddress, that.supAddress) &&
Objects.equals(active, that.active);
Objects.equals(supPhone, that.supPhone);
}
@Override
public int hashCode() {
return Objects.hash(supName, supContact, supEmail, supPhone, supAddress, active);
return Objects.hash(supCompany, supContactFirstName, supContactLastName, supEmail, supPhone);
}
@Override
public String toString() {
return "SupplierRequest{" +
"supName='" + supName + '\'' +
", supContact='" + supContact + '\'' +
"supCompany='" + supCompany + '\'' +
", supContactFirstName='" + supContactFirstName + '\'' +
", supContactLastName='" + supContactLastName + '\'' +
", supEmail='" + supEmail + '\'' +
", supPhone='" + supPhone + '\'' +
", supAddress='" + supAddress + '\'' +
", active=" + active +
'}';
}
}

View File

@@ -4,85 +4,75 @@ import java.time.LocalDateTime;
import java.util.Objects;
public class SupplierResponse {
private Long id;
private String supplierName;
private String supplierContact;
private String supplierEmail;
private String supplierPhone;
private String supplierAddress;
private Boolean active;
private Long supId;
private String supCompany;
private String supContactFirstName;
private String supContactLastName;
private String supEmail;
private String supPhone;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
public SupplierResponse() {
}
public SupplierResponse(Long id, String supplierName, String supplierContact, String supplierEmail, String supplierPhone, String supplierAddress, Boolean active, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.id = id;
this.supplierName = supplierName;
this.supplierContact = supplierContact;
this.supplierEmail = supplierEmail;
this.supplierPhone = supplierPhone;
this.supplierAddress = supplierAddress;
this.active = active;
public SupplierResponse(Long supId, String supCompany, String supContactFirstName, String supContactLastName, String supEmail, String supPhone, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.supId = supId;
this.supCompany = supCompany;
this.supContactFirstName = supContactFirstName;
this.supContactLastName = supContactLastName;
this.supEmail = supEmail;
this.supPhone = supPhone;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
public Long getId() {
return id;
public Long getSupId() {
return supId;
}
public void setId(Long id) {
this.id = id;
public void setSupId(Long supId) {
this.supId = supId;
}
public String getSupplierName() {
return supplierName;
public String getSupCompany() {
return supCompany;
}
public void setSupplierName(String supplierName) {
this.supplierName = supplierName;
public void setSupCompany(String supCompany) {
this.supCompany = supCompany;
}
public String getSupplierContact() {
return supplierContact;
public String getSupContactFirstName() {
return supContactFirstName;
}
public void setSupplierContact(String supplierContact) {
this.supplierContact = supplierContact;
public void setSupContactFirstName(String supContactFirstName) {
this.supContactFirstName = supContactFirstName;
}
public String getSupplierEmail() {
return supplierEmail;
public String getSupContactLastName() {
return supContactLastName;
}
public void setSupplierEmail(String supplierEmail) {
this.supplierEmail = supplierEmail;
public void setSupContactLastName(String supContactLastName) {
this.supContactLastName = supContactLastName;
}
public String getSupplierPhone() {
return supplierPhone;
public String getSupEmail() {
return supEmail;
}
public void setSupplierPhone(String supplierPhone) {
this.supplierPhone = supplierPhone;
public void setSupEmail(String supEmail) {
this.supEmail = supEmail;
}
public String getSupplierAddress() {
return supplierAddress;
public String getSupPhone() {
return supPhone;
}
public void setSupplierAddress(String supplierAddress) {
this.supplierAddress = supplierAddress;
}
public Boolean getActive() {
return active;
}
public void setActive(Boolean active) {
this.active = active;
public void setSupPhone(String supPhone) {
this.supPhone = supPhone;
}
public LocalDateTime getCreatedAt() {
@@ -106,24 +96,23 @@ public class SupplierResponse {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SupplierResponse that = (SupplierResponse) o;
return Objects.equals(id, that.id) && Objects.equals(supplierName, that.supplierName) && Objects.equals(supplierContact, that.supplierContact) && Objects.equals(supplierEmail, that.supplierEmail) && Objects.equals(supplierPhone, that.supplierPhone) && Objects.equals(supplierAddress, that.supplierAddress) && Objects.equals(active, that.active) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
return Objects.equals(supId, that.supId) && Objects.equals(supCompany, that.supCompany) && Objects.equals(supContactFirstName, that.supContactFirstName) && Objects.equals(supContactLastName, that.supContactLastName) && Objects.equals(supEmail, that.supEmail) && Objects.equals(supPhone, that.supPhone) && Objects.equals(createdAt, that.createdAt) && Objects.equals(updatedAt, that.updatedAt);
}
@Override
public int hashCode() {
return Objects.hash(id, supplierName, supplierContact, supplierEmail, supplierPhone, supplierAddress, active, createdAt, updatedAt);
return Objects.hash(supId, supCompany, supContactFirstName, supContactLastName, supEmail, supPhone, createdAt, updatedAt);
}
@Override
public String toString() {
return "SupplierResponse{" +
"id=" + id +
", supplierName='" + supplierName + '\'' +
", supplierContact='" + supplierContact + '\'' +
", supplierEmail='" + supplierEmail + '\'' +
", supplierPhone='" + supplierPhone + '\'' +
", supplierAddress='" + supplierAddress + '\'' +
", active=" + active +
"supId=" + supId +
", supCompany='" + supCompany + '\'' +
", supContactFirstName='" + supContactFirstName + '\'' +
", supContactLastName='" + supContactLastName + '\'' +
", supEmail='" + supEmail + '\'' +
", supPhone='" + supPhone + '\'' +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
'}';

View File

@@ -1,11 +1,8 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Objects;
@Entity
@@ -23,22 +20,12 @@ public class EmployeeStore {
@JoinColumn(name = "storeId", nullable = false)
private StoreLocation store;
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
public EmployeeStore() {
}
public EmployeeStore(Employee employee, StoreLocation store, LocalDateTime createdAt, LocalDateTime updatedAt) {
public EmployeeStore(Employee employee, StoreLocation store) {
this.employee = employee;
this.store = store;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
public Employee getEmployee() {
@@ -57,22 +44,6 @@ public class EmployeeStore {
this.store = store;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}
public LocalDateTime getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(LocalDateTime updatedAt) {
this.updatedAt = updatedAt;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -91,8 +62,6 @@ public class EmployeeStore {
return "EmployeeStore{" +
"employee=" + employee +
", store=" + store +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
'}';
}

View File

@@ -1,117 +0,0 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import java.math.BigDecimal;
import java.util.Objects;
@Entity
@Table(name = "purchase_order_items")
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;
public PurchaseOrderItem() {
}
public PurchaseOrderItem(Long id, PurchaseOrder purchaseOrder, Product product, Integer quantity, BigDecimal unitCost, BigDecimal subtotal) {
this.id = id;
this.purchaseOrder = purchaseOrder;
this.product = product;
this.quantity = quantity;
this.unitCost = unitCost;
this.subtotal = subtotal;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public PurchaseOrder getPurchaseOrder() {
return purchaseOrder;
}
public void setPurchaseOrder(PurchaseOrder purchaseOrder) {
this.purchaseOrder = purchaseOrder;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public Integer getQuantity() {
return quantity;
}
public void setQuantity(Integer quantity) {
this.quantity = quantity;
}
public BigDecimal getUnitCost() {
return unitCost;
}
public void setUnitCost(BigDecimal unitCost) {
this.unitCost = unitCost;
}
public BigDecimal getSubtotal() {
return subtotal;
}
public void setSubtotal(BigDecimal subtotal) {
this.subtotal = subtotal;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PurchaseOrderItem that = (PurchaseOrderItem) o;
return Objects.equals(id, that.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
@Override
public String toString() {
return "PurchaseOrderItem{" +
"id=" + id +
", purchaseOrder=" + purchaseOrder +
", product=" + product +
", quantity=" + quantity +
", unitCost=" + unitCost +
", subtotal=" + subtotal +
'}';
}
}

View File

@@ -2,6 +2,7 @@ package com.petshop.backend.entity;
import jakarta.persistence.*;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@@ -48,10 +49,14 @@ public class Sale {
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
public Sale() {
}
public Sale(Long saleId, LocalDateTime saleDate, Employee employee, StoreLocation store, BigDecimal totalAmount, String paymentMethod, Boolean isRefund, Sale originalSale, List<SaleItem> items, LocalDateTime createdAt) {
public Sale(Long saleId, LocalDateTime saleDate, Employee employee, StoreLocation store, BigDecimal totalAmount, String paymentMethod, Boolean isRefund, Sale originalSale, List<SaleItem> items, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.saleId = saleId;
this.saleDate = saleDate;
this.employee = employee;
@@ -62,6 +67,7 @@ public class Sale {
this.originalSale = originalSale;
this.items = items;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
public Long getSaleId() {
@@ -144,6 +150,14 @@ public class Sale {
this.createdAt = createdAt;
}
public LocalDateTime getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(LocalDateTime updatedAt) {
this.updatedAt = updatedAt;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -170,6 +184,7 @@ public class Sale {
", originalSale=" + originalSale +
", items=" + items +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
'}';
}
}

View File

@@ -1,8 +1,11 @@
package com.petshop.backend.entity;
import jakarta.persistence.*;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Objects;
@Entity
@@ -27,15 +30,25 @@ public class SaleItem {
@Column(nullable = false, precision = 10, scale = 2)
private BigDecimal unitPrice;
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
@Column(name = "updated_at")
private LocalDateTime updatedAt;
public SaleItem() {
}
public SaleItem(Long saleItemId, Sale sale, Product product, Integer quantity, BigDecimal unitPrice) {
public SaleItem(Long saleItemId, Sale sale, Product product, Integer quantity, BigDecimal unitPrice, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.saleItemId = saleItemId;
this.sale = sale;
this.product = product;
this.quantity = quantity;
this.unitPrice = unitPrice;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
public Long getSaleItemId() {
@@ -78,6 +91,22 @@ public class SaleItem {
this.unitPrice = unitPrice;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}
public LocalDateTime getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(LocalDateTime updatedAt) {
this.updatedAt = updatedAt;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -99,6 +128,8 @@ public class SaleItem {
", product=" + product +
", quantity=" + quantity +
", unitPrice=" + unitPrice +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
'}';
}
}

View File

@@ -21,19 +21,10 @@ public class User {
@Column(nullable = false)
private String password;
@Column(name = "full_name", nullable = false, length = 100)
private String fullName;
@Column(length = 100)
private String email;
@Enumerated(EnumType.STRING)
@Column(nullable = false)
@Column(nullable = false, length = 20, columnDefinition = "VARCHAR(20)")
private Role role;
@Column(nullable = false)
private Boolean active = true;
@CreationTimestamp
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;
@@ -49,14 +40,11 @@ public class User {
public User() {
}
public User(Long id, String username, String password, String fullName, String email, Role role, Boolean active, LocalDateTime createdAt, LocalDateTime updatedAt) {
public User(Long id, String username, String password, Role role, LocalDateTime createdAt, LocalDateTime updatedAt) {
this.id = id;
this.username = username;
this.password = password;
this.fullName = fullName;
this.email = email;
this.role = role;
this.active = active;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
@@ -85,22 +73,6 @@ public class User {
this.password = password;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Role getRole() {
return role;
}
@@ -109,14 +81,6 @@ public class User {
this.role = role;
}
public Boolean getActive() {
return active;
}
public void setActive(Boolean active) {
this.active = active;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
@@ -152,10 +116,7 @@ public class User {
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", fullName='" + fullName + '\'' +
", email='" + email + '\'' +
", role=" + role +
", active=" + active +
", createdAt=" + createdAt +
", updatedAt=" + updatedAt +
'}';

View File

@@ -12,7 +12,8 @@ import org.springframework.stereotype.Repository;
public interface AdoptionRepository extends JpaRepository<Adoption, Long> {
@Query("SELECT a FROM Adoption a WHERE " +
"LOWER(a.customer.customerName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(a.customer.firstName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(a.customer.lastName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(a.pet.petName) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Adoption> searchAdoptions(@Param("q") String query, Pageable pageable);
}

View File

@@ -18,11 +18,12 @@ 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);
@Query("SELECT a FROM Appointment a WHERE a.service.id = :serviceId AND a.appointmentDate = :date AND a.status != 'Cancelled'")
@Query("SELECT a FROM Appointment a WHERE a.service.serviceId = :serviceId AND a.appointmentDate = :date AND a.appointmentStatus != 'Cancelled'")
List<Appointment> findByServiceAndDate(@Param("serviceId") Long serviceId, @Param("date") LocalDate date);
@Query("SELECT DISTINCT a FROM Appointment a LEFT JOIN a.pets p WHERE " +
"LOWER(a.customer.customerName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(a.customer.firstName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(a.customer.lastName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(a.service.serviceName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(p.petName) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Appointment> searchAppointments(@Param("q") String query, Pageable pageable);

View File

@@ -17,6 +17,6 @@ public interface CategoryRepository extends JpaRepository<Category, Long> {
@Query("SELECT c FROM Category c WHERE " +
"LOWER(c.categoryName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(c.categoryDescription) LIKE LOWER(CONCAT('%', :q, '%'))")
"LOWER(c.categoryType) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Category> searchCategories(@Param("q") String query, Pageable pageable);
}

View File

@@ -12,8 +12,9 @@ import org.springframework.stereotype.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, '%'))")
"LOWER(c.firstName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(c.lastName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(c.email) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(c.phone) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Customer> searchCustomers(@Param("q") String query, Pageable pageable);
}

View File

@@ -13,11 +13,11 @@ 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);
@Query("SELECT i FROM Inventory i WHERE i.product.prodId = :productId")
Optional<Inventory> findByProductId(@Param("productId") Long productId);
@Query("SELECT i FROM Inventory i WHERE " +
"LOWER(i.product.productName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(i.store.storeName) LIKE LOWER(CONCAT('%', :q, '%'))")
"LOWER(i.product.prodName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(i.product.category.categoryName) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Inventory> searchInventory(@Param("q") String query, Pageable pageable);
}

View File

@@ -12,7 +12,7 @@ import org.springframework.stereotype.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, '%'))")
"LOWER(p.prodName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(p.prodDesc) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Product> searchProducts(@Param("q") String query, Pageable pageable);
}

View File

@@ -12,7 +12,7 @@ import org.springframework.stereotype.Repository;
public interface ProductSupplierRepository extends JpaRepository<ProductSupplier, ProductSupplier.ProductSupplierId> {
@Query("SELECT ps FROM ProductSupplier ps WHERE " +
"LOWER(ps.product.productName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(ps.supplier.supplierName) LIKE LOWER(CONCAT('%', :q, '%'))")
"LOWER(ps.product.prodName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(ps.supplier.supCompany) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<ProductSupplier> searchProductSuppliers(@Param("q") String query, Pageable pageable);
}

View File

@@ -12,7 +12,6 @@ import org.springframework.stereotype.Repository;
public interface PurchaseOrderRepository extends JpaRepository<PurchaseOrder, Long> {
@Query("SELECT po FROM PurchaseOrder po WHERE " +
"LOWER(po.supplier.supplierName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(po.notes) LIKE LOWER(CONCAT('%', :q, '%'))")
"LOWER(po.supplier.supCompany) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<PurchaseOrder> searchPurchaseOrders(@Param("q") String query, Pageable pageable);
}

View File

@@ -12,8 +12,8 @@ import org.springframework.stereotype.Repository;
public interface SaleRepository extends JpaRepository<Sale, Long> {
@Query("SELECT s FROM Sale s WHERE " +
"LOWER(s.customer.customerName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(s.employee.fullName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(s.employee.firstName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(s.employee.lastName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(s.store.storeName) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Sale> searchSales(@Param("q") String query, Pageable pageable);
}

View File

@@ -13,6 +13,6 @@ 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, '%'))")
"LOWER(s.serviceDesc) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Service> searchServices(@Param("q") String query, Pageable pageable);
}

View File

@@ -12,7 +12,8 @@ import org.springframework.stereotype.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, '%'))")
"LOWER(s.supCompany) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(s.supContactFirstName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(s.supContactLastName) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<Supplier> searchSuppliers(@Param("q") String query, Pageable pageable);
}

View File

@@ -16,8 +16,6 @@ public interface UserRepository extends JpaRepository<User, Long> {
boolean existsByUsername(String username);
@Query("SELECT u FROM User u WHERE " +
"LOWER(u.username) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(u.fullName) LIKE LOWER(CONCAT('%', :q, '%')) OR " +
"LOWER(u.email) LIKE LOWER(CONCAT('%', :q, '%'))")
"LOWER(u.username) LIKE LOWER(CONCAT('%', :q, '%'))")
Page<User> searchUsers(@Param("q") String query, Pageable pageable);
}

View File

@@ -24,10 +24,6 @@ public class UserDetailsServiceImpl implements UserDetailsService {
User user = userRepository.findByUsername(username)
.orElseThrow(() -> new UsernameNotFoundException("User not found: " + username));
if (!user.getActive()) {
throw new UsernameNotFoundException("User is inactive: " + username);
}
return new org.springframework.security.core.userdetails.User(
user.getUsername(),
user.getPassword(),

View File

@@ -56,8 +56,7 @@ public class AdoptionService {
adoption.setPet(pet);
adoption.setCustomer(customer);
adoption.setAdoptionDate(request.getAdoptionDate());
adoption.setAdoptionFee(request.getAdoptionFee());
adoption.setNotes(request.getNotes());
adoption.setAdoptionStatus(request.getAdoptionStatus());
adoption = adoptionRepository.save(adoption);
return mapToResponse(adoption);
@@ -77,8 +76,7 @@ public class AdoptionService {
adoption.setPet(pet);
adoption.setCustomer(customer);
adoption.setAdoptionDate(request.getAdoptionDate());
adoption.setAdoptionFee(request.getAdoptionFee());
adoption.setNotes(request.getNotes());
adoption.setAdoptionStatus(request.getAdoptionStatus());
adoption = adoptionRepository.save(adoption);
return mapToResponse(adoption);
@@ -99,14 +97,13 @@ public class AdoptionService {
private AdoptionResponse mapToResponse(Adoption adoption) {
return new AdoptionResponse(
adoption.getId(),
adoption.getPet().getId(),
adoption.getAdoptionId(),
adoption.getPet().getPetId(),
adoption.getPet().getPetName(),
adoption.getCustomer().getId(),
adoption.getCustomer().getCustomerName(),
adoption.getCustomer().getCustomerId(),
adoption.getCustomer().getFirstName() + " " + adoption.getCustomer().getLastName(),
adoption.getAdoptionDate(),
adoption.getAdoptionFee(),
adoption.getNotes(),
adoption.getAdoptionStatus(),
adoption.getCreatedAt(),
adoption.getUpdatedAt()
);

View File

@@ -3,11 +3,9 @@ package com.petshop.backend.service;
import com.petshop.backend.dto.analytics.DashboardResponse;
import com.petshop.backend.entity.Inventory;
import com.petshop.backend.entity.Product;
import com.petshop.backend.entity.Refund;
import com.petshop.backend.entity.Sale;
import com.petshop.backend.repository.InventoryRepository;
import com.petshop.backend.repository.ProductRepository;
import com.petshop.backend.repository.RefundRepository;
import com.petshop.backend.repository.SaleRepository;
import org.springframework.stereotype.Service;
@@ -22,14 +20,12 @@ import java.util.stream.Collectors;
public class AnalyticsService {
private final SaleRepository saleRepository;
private final RefundRepository refundRepository;
private final InventoryRepository inventoryRepository;
private final ProductRepository productRepository;
public AnalyticsService(SaleRepository saleRepository, RefundRepository refundRepository,
public AnalyticsService(SaleRepository saleRepository,
InventoryRepository inventoryRepository, ProductRepository productRepository) {
this.saleRepository = saleRepository;
this.refundRepository = refundRepository;
this.inventoryRepository = inventoryRepository;
this.productRepository = productRepository;
}
@@ -41,11 +37,7 @@ public class AnalyticsService {
.filter(sale -> sale.getSaleDate().isAfter(startDate))
.collect(Collectors.toList());
List<Refund> refunds = refundRepository.findAll().stream()
.filter(refund -> refund.getRefundDate().isAfter(startDate))
.collect(Collectors.toList());
DashboardResponse.SalesSummary salesSummary = calculateSalesSummary(sales, refunds);
DashboardResponse.SalesSummary salesSummary = calculateSalesSummary(sales);
DashboardResponse.InventorySummary inventorySummary = calculateInventorySummary();
List<DashboardResponse.TopProduct> topProducts = calculateTopProducts(sales, top);
List<DashboardResponse.DailySales> dailySales = calculateDailySales(sales, days);
@@ -53,18 +45,24 @@ public class AnalyticsService {
return new DashboardResponse(salesSummary, inventorySummary, topProducts, dailySales);
}
private DashboardResponse.SalesSummary calculateSalesSummary(List<Sale> sales, List<Refund> refunds) {
private DashboardResponse.SalesSummary calculateSalesSummary(List<Sale> sales) {
BigDecimal totalRevenue = sales.stream()
.map(Sale::getTotal)
.filter(sale -> !sale.getIsRefund())
.map(Sale::getTotalAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add);
Long totalSales = (long) sales.size();
Long totalSales = sales.stream()
.filter(sale -> !sale.getIsRefund())
.count();
BigDecimal totalRefunds = refunds.stream()
.map(Refund::getRefundAmount)
BigDecimal totalRefunds = sales.stream()
.filter(Sale::getIsRefund)
.map(Sale::getTotalAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add);
Long totalRefundCount = (long) refunds.size();
Long totalRefundCount = sales.stream()
.filter(Sale::getIsRefund)
.count();
return new DashboardResponse.SalesSummary(totalRevenue, totalSales, totalRefunds, totalRefundCount);
}
@@ -75,14 +73,14 @@ public class AnalyticsService {
Long totalProducts = productRepository.count();
Long lowStockProducts = allInventory.stream()
.filter(inv -> inv.getQuantity() > 0 && inv.getQuantity() <= inv.getReorderLevel())
.map(inv -> inv.getProduct().getId())
.filter(inv -> inv.getQuantity() > 0 && inv.getQuantity() <= 10)
.map(inv -> inv.getProduct().getProdId())
.distinct()
.count();
Long outOfStockProducts = allInventory.stream()
.filter(inv -> inv.getQuantity() == 0)
.map(inv -> inv.getProduct().getId())
.map(inv -> inv.getProduct().getProdId())
.distinct()
.count();
@@ -94,10 +92,10 @@ public class AnalyticsService {
for (Sale sale : sales) {
for (var item : sale.getItems()) {
Long productId = item.getProduct().getId();
String productName = item.getProduct().getProductName();
Long productId = item.getProduct().getProdId();
String productName = item.getProduct().getProdName();
Long quantitySold = Long.valueOf(item.getQuantity());
BigDecimal revenue = item.getSubtotal();
BigDecimal revenue = item.getUnitPrice().multiply(BigDecimal.valueOf(item.getQuantity()));
productSalesMap.compute(productId, (key, existing) -> {
if (existing == null) {
@@ -131,7 +129,7 @@ public class AnalyticsService {
LocalDate saleDate = sale.getSaleDate().toLocalDate();
if (dailySalesMap.containsKey(saleDate)) {
DashboardResponse.DailySales dailySale = dailySalesMap.get(saleDate);
dailySale.setRevenue(dailySale.getRevenue().add(sale.getTotal()));
dailySale.setRevenue(dailySale.getRevenue().add(sale.getTotalAmount()));
dailySale.setSalesCount(dailySale.getSalesCount() + 1);
}
}

View File

@@ -70,9 +70,8 @@ public class AppointmentService {
appointment.setService(service);
appointment.setAppointmentDate(request.getAppointmentDate());
appointment.setAppointmentTime(request.getAppointmentTime());
appointment.setStatus(request.getStatus());
appointment.setAppointmentStatus(request.getAppointmentStatus());
appointment.setPets(pets);
appointment.setNotes(request.getNotes());
appointment = appointmentRepository.save(appointment);
return mapToResponse(appointment);
@@ -95,9 +94,8 @@ public class AppointmentService {
appointment.setService(service);
appointment.setAppointmentDate(request.getAppointmentDate());
appointment.setAppointmentTime(request.getAppointmentTime());
appointment.setStatus(request.getStatus());
appointment.setAppointmentStatus(request.getAppointmentStatus());
appointment.setPets(pets);
appointment.setNotes(request.getNotes());
appointment = appointmentRepository.save(appointment);
return mapToResponse(appointment);
@@ -156,21 +154,20 @@ public class AppointmentService {
.collect(Collectors.toList());
List<Long> petIds = appointment.getPets().stream()
.map(Pet::getId)
.map(Pet::getPetId)
.collect(Collectors.toList());
return new AppointmentResponse(
appointment.getId(),
appointment.getCustomer().getId(),
appointment.getCustomer().getCustomerName(),
appointment.getService().getId(),
appointment.getAppointmentId(),
appointment.getCustomer().getCustomerId(),
appointment.getCustomer().getFirstName() + " " + appointment.getCustomer().getLastName(),
appointment.getService().getServiceId(),
appointment.getService().getServiceName(),
appointment.getAppointmentDate(),
appointment.getAppointmentTime(),
appointment.getStatus() != null ? appointment.getStatus().toString() : null,
appointment.getAppointmentStatus(),
petNames,
petIds,
appointment.getNotes(),
appointment.getCreatedAt(),
appointment.getUpdatedAt()
);

View File

@@ -40,7 +40,7 @@ public class CategoryService {
public CategoryResponse createCategory(CategoryRequest request) {
Category category = new Category();
category.setCategoryName(request.getCategoryName());
category.setCategoryDescription(request.getCategoryDescription());
category.setCategoryType(request.getCategoryType());
category = categoryRepository.save(category);
return mapToResponse(category);
@@ -52,7 +52,7 @@ public class CategoryService {
.orElseThrow(() -> new ResourceNotFoundException("Category not found with id: " + id));
category.setCategoryName(request.getCategoryName());
category.setCategoryDescription(request.getCategoryDescription());
category.setCategoryType(request.getCategoryType());
category = categoryRepository.save(category);
return mapToResponse(category);
@@ -73,9 +73,9 @@ public class CategoryService {
private CategoryResponse mapToResponse(Category category) {
return new CategoryResponse(
category.getId(),
category.getCategoryId(),
category.getCategoryName(),
category.getCategoryDescription(),
category.getCategoryType(),
category.getCreatedAt(),
category.getUpdatedAt()
);

View File

@@ -39,10 +39,10 @@ public class CustomerService {
@Transactional
public CustomerResponse createCustomer(CustomerRequest request) {
Customer customer = new Customer();
customer.setCustomerName(request.getCustomerName());
customer.setCustomerEmail(request.getCustomerEmail());
customer.setCustomerPhone(request.getCustomerPhone());
customer.setCustomerAddress(request.getCustomerAddress());
customer.setFirstName(request.getFirstName());
customer.setLastName(request.getLastName());
customer.setEmail(request.getEmail());
customer.setPhone(request.getPhone());
customer = customerRepository.save(customer);
return mapToResponse(customer);
@@ -53,10 +53,10 @@ public class CustomerService {
Customer customer = customerRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("Customer not found with id: " + id));
customer.setCustomerName(request.getCustomerName());
customer.setCustomerEmail(request.getCustomerEmail());
customer.setCustomerPhone(request.getCustomerPhone());
customer.setCustomerAddress(request.getCustomerAddress());
customer.setFirstName(request.getFirstName());
customer.setLastName(request.getLastName());
customer.setEmail(request.getEmail());
customer.setPhone(request.getPhone());
customer = customerRepository.save(customer);
return mapToResponse(customer);
@@ -77,11 +77,11 @@ public class CustomerService {
private CustomerResponse mapToResponse(Customer customer) {
return new CustomerResponse(
customer.getId(),
customer.getCustomerName(),
customer.getCustomerEmail(),
customer.getCustomerPhone(),
customer.getCustomerAddress(),
customer.getCustomerId(),
customer.getFirstName(),
customer.getLastName(),
customer.getEmail(),
customer.getPhone(),
customer.getCreatedAt(),
customer.getUpdatedAt()
);

View File

@@ -5,29 +5,23 @@ import com.petshop.backend.dto.inventory.InventoryRequest;
import com.petshop.backend.dto.inventory.InventoryResponse;
import com.petshop.backend.entity.Inventory;
import com.petshop.backend.entity.Product;
import com.petshop.backend.entity.Store;
import com.petshop.backend.exception.ResourceNotFoundException;
import com.petshop.backend.repository.InventoryRepository;
import com.petshop.backend.repository.ProductRepository;
import com.petshop.backend.repository.StoreRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
@Service
public class InventoryService {
private final InventoryRepository inventoryRepository;
private final ProductRepository productRepository;
private final StoreRepository storeRepository;
public InventoryService(InventoryRepository inventoryRepository, ProductRepository productRepository, StoreRepository storeRepository) {
public InventoryService(InventoryRepository inventoryRepository, ProductRepository productRepository) {
this.inventoryRepository = inventoryRepository;
this.productRepository = productRepository;
this.storeRepository = storeRepository;
}
public Page<InventoryResponse> getAllInventory(String query, Pageable pageable) {
@@ -51,18 +45,9 @@ public class InventoryService {
Product product = productRepository.findById(request.getProdId())
.orElseThrow(() -> new ResourceNotFoundException("Product not found with id: " + request.getProdId()));
Store store = null;
if (request.getStoreId() != null) {
store = storeRepository.findById(request.getStoreId())
.orElseThrow(() -> new ResourceNotFoundException("Store not found with id: " + request.getStoreId()));
}
Inventory inventory = new Inventory();
inventory.setProduct(product);
inventory.setStore(store);
inventory.setQuantity(request.getQuantity());
inventory.setReorderLevel(request.getReorderLevel());
inventory.setLastRestocked(LocalDateTime.now());
inventory = inventoryRepository.save(inventory);
return mapToResponse(inventory);
@@ -76,17 +61,8 @@ public class InventoryService {
Product product = productRepository.findById(request.getProdId())
.orElseThrow(() -> new ResourceNotFoundException("Product not found with id: " + request.getProdId()));
Store store = null;
if (request.getStoreId() != null) {
store = storeRepository.findById(request.getStoreId())
.orElseThrow(() -> new ResourceNotFoundException("Store not found with id: " + request.getStoreId()));
}
inventory.setProduct(product);
inventory.setStore(store);
inventory.setQuantity(request.getQuantity());
inventory.setReorderLevel(request.getReorderLevel());
inventory.setLastRestocked(LocalDateTime.now());
inventory = inventoryRepository.save(inventory);
return mapToResponse(inventory);
@@ -107,15 +83,11 @@ public class InventoryService {
private InventoryResponse mapToResponse(Inventory inventory) {
return new InventoryResponse(
inventory.getId(),
inventory.getProduct().getId(),
inventory.getProduct().getProductName(),
inventory.getInventoryId(),
inventory.getProduct().getProdId(),
inventory.getProduct().getProdName(),
inventory.getProduct().getCategory().getCategoryName(),
inventory.getStore() != null ? inventory.getStore().getId() : null,
inventory.getStore() != null ? inventory.getStore().getStoreName() : null,
inventory.getQuantity(),
inventory.getReorderLevel(),
inventory.getLastRestocked(),
inventory.getCreatedAt(),
inventory.getUpdatedAt()
);

View File

@@ -46,11 +46,10 @@ public class ProductService {
.orElseThrow(() -> new ResourceNotFoundException("Category not found with id: " + request.getCategoryId()));
Product product = new Product();
product.setProductName(request.getProdName());
product.setProdName(request.getProdName());
product.setCategory(category);
product.setProductDescription(request.getProdDesc());
product.setProductPrice(request.getProdPrice());
product.setActive(request.getActive() != null ? request.getActive() : true);
product.setProdDesc(request.getProdDesc());
product.setProdPrice(request.getProdPrice());
product = productRepository.save(product);
return mapToResponse(product);
@@ -64,11 +63,10 @@ public class ProductService {
Category category = categoryRepository.findById(request.getCategoryId())
.orElseThrow(() -> new ResourceNotFoundException("Category not found with id: " + request.getCategoryId()));
product.setProductName(request.getProdName());
product.setProdName(request.getProdName());
product.setCategory(category);
product.setProductDescription(request.getProdDesc());
product.setProductPrice(request.getProdPrice());
product.setActive(request.getActive() != null ? request.getActive() : true);
product.setProdDesc(request.getProdDesc());
product.setProdPrice(request.getProdPrice());
product = productRepository.save(product);
return mapToResponse(product);
@@ -89,13 +87,12 @@ public class ProductService {
private ProductResponse mapToResponse(Product product) {
return new ProductResponse(
product.getId(),
product.getProductName(),
product.getCategory().getId(),
product.getProdId(),
product.getProdName(),
product.getCategory().getCategoryId(),
product.getCategory().getCategoryName(),
product.getProductDescription(),
product.getProductPrice(),
product.getActive(),
product.getProdDesc(),
product.getProdPrice(),
product.getCreatedAt(),
product.getUpdatedAt()
);

View File

@@ -57,9 +57,7 @@ public class ProductSupplierService {
ProductSupplier productSupplier = new ProductSupplier();
productSupplier.setProduct(product);
productSupplier.setSupplier(supplier);
productSupplier.setCostPrice(request.getCostPrice());
productSupplier.setLeadTimeDays(request.getLeadTimeDays());
productSupplier.setIsPreferred(request.getIsPreferred());
productSupplier.setCost(request.getCost());
productSupplier = productSupplierRepository.save(productSupplier);
return mapToResponse(productSupplier);
@@ -72,9 +70,7 @@ public class ProductSupplierService {
.orElseThrow(() -> new ResourceNotFoundException(
"ProductSupplier not found with productId: " + productId + " and supplierId: " + supplierId));
productSupplier.setCostPrice(request.getCostPrice());
productSupplier.setLeadTimeDays(request.getLeadTimeDays());
productSupplier.setIsPreferred(request.getIsPreferred());
productSupplier.setCost(request.getCost());
productSupplier = productSupplierRepository.save(productSupplier);
return mapToResponse(productSupplier);
@@ -101,13 +97,11 @@ public class ProductSupplierService {
private ProductSupplierResponse mapToResponse(ProductSupplier productSupplier) {
return new ProductSupplierResponse(
productSupplier.getProduct().getId(),
productSupplier.getProduct().getProductName(),
productSupplier.getSupplier().getId(),
productSupplier.getSupplier().getSupplierName(),
productSupplier.getCostPrice(),
productSupplier.getLeadTimeDays(),
productSupplier.getIsPreferred(),
productSupplier.getProduct().getProdId(),
productSupplier.getProduct().getProdName(),
productSupplier.getSupplier().getSupId(),
productSupplier.getSupplier().getSupCompany(),
productSupplier.getCost(),
productSupplier.getCreatedAt(),
productSupplier.getUpdatedAt()
);

View File

@@ -1,18 +1,13 @@
package com.petshop.backend.service;
import com.petshop.backend.dto.purchaseorder.PurchaseOrderResponse;
import com.petshop.backend.dto.purchaseorder.PurchaseOrderResponse.PurchaseOrderItemResponse;
import com.petshop.backend.entity.PurchaseOrder;
import com.petshop.backend.entity.PurchaseOrderItem;
import com.petshop.backend.exception.ResourceNotFoundException;
import com.petshop.backend.repository.PurchaseOrderRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class PurchaseOrderService {
@@ -39,33 +34,14 @@ public class PurchaseOrderService {
}
private PurchaseOrderResponse mapToResponse(PurchaseOrder purchaseOrder) {
List<PurchaseOrderItemResponse> items = purchaseOrder.getItems().stream()
.map(this::mapItemToResponse)
.collect(Collectors.toList());
return new PurchaseOrderResponse(
purchaseOrder.getId(),
purchaseOrder.getSupplier().getId(),
purchaseOrder.getSupplier().getSupplierName(),
purchaseOrder.getPurchaseOrderId(),
purchaseOrder.getSupplier().getSupId(),
purchaseOrder.getSupplier().getSupCompany(),
purchaseOrder.getOrderDate(),
purchaseOrder.getExpectedDelivery(),
purchaseOrder.getStatus().toString(),
purchaseOrder.getTotalAmount(),
purchaseOrder.getNotes(),
items,
purchaseOrder.getStatus(),
purchaseOrder.getCreatedAt(),
purchaseOrder.getUpdatedAt()
);
}
private PurchaseOrderItemResponse mapItemToResponse(PurchaseOrderItem item) {
return new PurchaseOrderItemResponse(
item.getId(),
item.getProduct().getId(),
item.getProduct().getProductName(),
item.getQuantity(),
item.getUnitCost(),
item.getSubtotal()
);
}
}

View File

@@ -22,18 +22,16 @@ public class SaleService {
private final SaleRepository saleRepository;
private final ProductRepository productRepository;
private final CustomerRepository customerRepository;
private final StoreRepository storeRepository;
private final InventoryRepository inventoryRepository;
private final UserRepository userRepository;
private final EmployeeRepository employeeRepository;
public SaleService(SaleRepository saleRepository, ProductRepository productRepository, CustomerRepository customerRepository, StoreRepository storeRepository, InventoryRepository inventoryRepository, UserRepository userRepository) {
public SaleService(SaleRepository saleRepository, ProductRepository productRepository, StoreRepository storeRepository, InventoryRepository inventoryRepository, EmployeeRepository employeeRepository) {
this.saleRepository = saleRepository;
this.productRepository = productRepository;
this.customerRepository = customerRepository;
this.storeRepository = storeRepository;
this.inventoryRepository = inventoryRepository;
this.userRepository = userRepository;
this.employeeRepository = employeeRepository;
}
public Page<SaleResponse> getAllSales(String query, Pageable pageable) {
@@ -54,62 +52,58 @@ public class SaleService {
@Transactional
public SaleResponse createSale(SaleRequest request) {
String username = SecurityContextHolder.getContext().getAuthentication().getName();
User employee = userRepository.findByUsername(username)
.orElseThrow(() -> new ResourceNotFoundException("User not found: " + username));
Employee employee = employeeRepository.findAll().stream()
.findFirst()
.orElseThrow(() -> new ResourceNotFoundException("No employees found"));
Store store = storeRepository.findById(request.getStoreId())
StoreLocation store = storeRepository.findById(request.getStoreId())
.orElseThrow(() -> new ResourceNotFoundException("Store not found with id: " + request.getStoreId()));
Customer customer = null;
if (request.getCustomerId() != null) {
customer = customerRepository.findById(request.getCustomerId())
.orElseThrow(() -> new ResourceNotFoundException("Customer not found with id: " + request.getCustomerId()));
}
Sale sale = new Sale();
sale.setSaleDate(LocalDateTime.now());
sale.setEmployee(employee);
sale.setCustomer(customer);
sale.setStore(store);
sale.setPaymentMethod(request.getPaymentMethod());
sale.setTax(request.getTax());
sale.setNotes(request.getNotes());
sale.setIsRefund(request.getIsRefund() != null ? request.getIsRefund() : false);
BigDecimal subtotal = BigDecimal.ZERO;
if (sale.getIsRefund() && request.getOriginalSaleId() != null) {
Sale originalSale = saleRepository.findById(request.getOriginalSaleId())
.orElseThrow(() -> new ResourceNotFoundException("Original sale not found with id: " + request.getOriginalSaleId()));
sale.setOriginalSale(originalSale);
}
BigDecimal totalAmount = BigDecimal.ZERO;
List<SaleItem> saleItems = new ArrayList<>();
for (var itemRequest : request.getItems()) {
Product product = productRepository.findById(itemRequest.getProductId())
.orElseThrow(() -> new ResourceNotFoundException("Product not found with id: " + itemRequest.getProductId()));
Product product = productRepository.findById(itemRequest.getProdId())
.orElseThrow(() -> new ResourceNotFoundException("Product not found with id: " + itemRequest.getProdId()));
Inventory inventory = inventoryRepository.findByProductIdAndStoreId(itemRequest.getProductId(), request.getStoreId())
.orElseThrow(() -> new ResourceNotFoundException("Inventory not found for product " + itemRequest.getProductId() + " at store " + request.getStoreId()));
Inventory inventory = inventoryRepository.findByProductId(itemRequest.getProdId())
.orElseThrow(() -> new ResourceNotFoundException("Inventory not found for product " + itemRequest.getProdId()));
if (inventory.getQuantity() < itemRequest.getQuantity()) {
throw new BusinessException("Insufficient stock for product: " + product.getProductName() +
throw new BusinessException("Insufficient stock for product: " + product.getProdName() +
". Available: " + inventory.getQuantity() + ", requested: " + itemRequest.getQuantity());
}
inventory.setQuantity(inventory.getQuantity() - itemRequest.getQuantity());
inventoryRepository.save(inventory);
BigDecimal unitPrice = product.getProductPrice();
BigDecimal itemSubtotal = unitPrice.multiply(BigDecimal.valueOf(itemRequest.getQuantity()));
BigDecimal unitPrice = product.getProdPrice();
BigDecimal itemTotal = unitPrice.multiply(BigDecimal.valueOf(itemRequest.getQuantity()));
SaleItem saleItem = new SaleItem();
saleItem.setSale(sale);
saleItem.setProduct(product);
saleItem.setQuantity(itemRequest.getQuantity());
saleItem.setUnitPrice(unitPrice);
saleItem.setSubtotal(itemSubtotal);
saleItems.add(saleItem);
subtotal = subtotal.add(itemSubtotal);
totalAmount = totalAmount.add(itemTotal);
}
sale.setSubtotal(subtotal);
sale.setTotal(subtotal.add(sale.getTax()));
sale.setTotalAmount(totalAmount);
sale.setItems(saleItems);
Sale savedSale = saleRepository.save(sale);
@@ -118,37 +112,32 @@ public class SaleService {
private SaleResponse mapToResponse(Sale sale) {
SaleResponse response = new SaleResponse();
response.setId(sale.getId());
response.setSaleId(sale.getSaleId());
response.setSaleDate(sale.getSaleDate());
response.setEmployeeId(sale.getEmployee().getId());
response.setEmployeeName(sale.getEmployee().getFullName());
if (sale.getCustomer() != null) {
response.setCustomerId(sale.getCustomer().getId());
response.setCustomerName(sale.getCustomer().getCustomerName());
}
response.setEmployeeId(sale.getEmployee().getEmployeeId());
response.setEmployeeName(sale.getEmployee().getFirstName() + " " + sale.getEmployee().getLastName());
if (sale.getStore() != null) {
response.setStoreId(sale.getStore().getId());
response.setStoreId(sale.getStore().getStoreId());
response.setStoreName(sale.getStore().getStoreName());
}
response.setSubtotal(sale.getSubtotal());
response.setTax(sale.getTax());
response.setTotal(sale.getTotal());
response.setTotalAmount(sale.getTotalAmount());
response.setPaymentMethod(sale.getPaymentMethod());
response.setNotes(sale.getNotes());
response.setIsRefund(sale.getIsRefund());
if (sale.getOriginalSale() != null) {
response.setOriginalSaleId(sale.getOriginalSale().getSaleId());
}
response.setCreatedAt(sale.getCreatedAt());
List<SaleResponse.SaleItemResponse> itemResponses = new ArrayList<>();
for (SaleItem item : sale.getItems()) {
SaleResponse.SaleItemResponse itemResponse = new SaleResponse.SaleItemResponse();
itemResponse.setId(item.getId());
itemResponse.setProductId(item.getProduct().getId());
itemResponse.setProductName(item.getProduct().getProductName());
itemResponse.setSaleItemId(item.getSaleItemId());
itemResponse.setProdId(item.getProduct().getProdId());
itemResponse.setProductName(item.getProduct().getProdName());
itemResponse.setQuantity(item.getQuantity());
itemResponse.setUnitPrice(item.getUnitPrice());
itemResponse.setSubtotal(item.getSubtotal());
itemResponses.add(itemResponse);
}
response.setItems(itemResponses);

View File

@@ -39,10 +39,9 @@ public class ServiceService {
public ServiceResponse createService(ServiceRequest request) {
com.petshop.backend.entity.Service service = new com.petshop.backend.entity.Service();
service.setServiceName(request.getServiceName());
service.setServiceDescription(request.getServiceDescription());
service.setServiceDesc(request.getServiceDesc());
service.setServicePrice(request.getServicePrice());
service.setServiceDurationMinutes(request.getServiceDurationMinutes());
service.setActive(request.getActive() != null ? request.getActive() : true);
service.setServiceDuration(request.getServiceDuration());
service = serviceRepository.save(service);
return mapToResponse(service);
@@ -54,10 +53,9 @@ public class ServiceService {
.orElseThrow(() -> new ResourceNotFoundException("Service not found with id: " + id));
service.setServiceName(request.getServiceName());
service.setServiceDescription(request.getServiceDescription());
service.setServiceDesc(request.getServiceDesc());
service.setServicePrice(request.getServicePrice());
service.setServiceDurationMinutes(request.getServiceDurationMinutes());
service.setActive(request.getActive() != null ? request.getActive() : true);
service.setServiceDuration(request.getServiceDuration());
service = serviceRepository.save(service);
return mapToResponse(service);
@@ -78,12 +76,11 @@ public class ServiceService {
private ServiceResponse mapToResponse(com.petshop.backend.entity.Service service) {
return new ServiceResponse(
service.getId(),
service.getServiceId(),
service.getServiceName(),
service.getServiceDescription(),
service.getServiceDesc(),
service.getServicePrice(),
service.getServiceDurationMinutes(),
service.getActive(),
service.getServiceDuration(),
service.getCreatedAt(),
service.getUpdatedAt()
);

View File

@@ -39,12 +39,11 @@ public class SupplierService {
@Transactional
public SupplierResponse createSupplier(SupplierRequest request) {
Supplier supplier = new Supplier();
supplier.setSupplierName(request.getSupName());
supplier.setSupplierContact(request.getSupContact());
supplier.setSupplierEmail(request.getSupEmail());
supplier.setSupplierPhone(request.getSupPhone());
supplier.setSupplierAddress(request.getSupAddress());
supplier.setActive(request.getActive());
supplier.setSupCompany(request.getSupCompany());
supplier.setSupContactFirstName(request.getSupContactFirstName());
supplier.setSupContactLastName(request.getSupContactLastName());
supplier.setSupEmail(request.getSupEmail());
supplier.setSupPhone(request.getSupPhone());
supplier = supplierRepository.save(supplier);
return mapToResponse(supplier);
@@ -55,12 +54,11 @@ public class SupplierService {
Supplier supplier = supplierRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("Supplier not found with id: " + id));
supplier.setSupplierName(request.getSupName());
supplier.setSupplierContact(request.getSupContact());
supplier.setSupplierEmail(request.getSupEmail());
supplier.setSupplierPhone(request.getSupPhone());
supplier.setSupplierAddress(request.getSupAddress());
supplier.setActive(request.getActive());
supplier.setSupCompany(request.getSupCompany());
supplier.setSupContactFirstName(request.getSupContactFirstName());
supplier.setSupContactLastName(request.getSupContactLastName());
supplier.setSupEmail(request.getSupEmail());
supplier.setSupPhone(request.getSupPhone());
supplier = supplierRepository.save(supplier);
return mapToResponse(supplier);
@@ -81,13 +79,12 @@ public class SupplierService {
private SupplierResponse mapToResponse(Supplier supplier) {
return new SupplierResponse(
supplier.getId(),
supplier.getSupplierName(),
supplier.getSupplierContact(),
supplier.getSupplierEmail(),
supplier.getSupplierPhone(),
supplier.getSupplierAddress(),
supplier.getActive(),
supplier.getSupId(),
supplier.getSupCompany(),
supplier.getSupContactFirstName(),
supplier.getSupContactLastName(),
supplier.getSupEmail(),
supplier.getSupPhone(),
supplier.getCreatedAt(),
supplier.getUpdatedAt()
);

View File

@@ -44,10 +44,7 @@ public class UserService {
User user = new User();
user.setUsername(request.getUsername());
user.setPassword(passwordEncoder.encode(request.getPassword()));
user.setFullName(request.getFullName());
user.setEmail(request.getEmail());
user.setRole(request.getRole());
user.setActive(request.getActive());
user = userRepository.save(user);
return mapToResponse(user);
@@ -62,10 +59,7 @@ public class UserService {
if (request.getPassword() != null && !request.getPassword().trim().isEmpty()) {
user.setPassword(passwordEncoder.encode(request.getPassword()));
}
user.setFullName(request.getFullName());
user.setEmail(request.getEmail());
user.setRole(request.getRole());
user.setActive(request.getActive());
user = userRepository.save(user);
return mapToResponse(user);
@@ -85,15 +79,10 @@ public class UserService {
}
private UserResponse mapToResponse(User user) {
return new UserResponse(
user.getId(),
user.getUsername(),
user.getFullName(),
user.getEmail(),
user.getRole().toString(),
user.getActive(),
user.getCreatedAt(),
user.getUpdatedAt()
);
UserResponse response = new UserResponse();
response.setId(user.getId());
response.setUsername(user.getUsername());
response.setRole(user.getRole().toString());
return response;
}
}

View File

@@ -11,6 +11,8 @@ spring:
jpa:
hibernate:
ddl-auto: validate
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
show-sql: ${JPA_SHOW_SQL:false}
properties:
hibernate: