diff --git a/db.xml b/db.xml
index 229c77a..3885e88 100644
--- a/db.xml
+++ b/db.xml
@@ -1 +1,117 @@
-341ewreqr14321324321711875600.000000000123243214342CENTIMETERS32432432143214WHITE342.0423214342Hello1341713267558.81380880012312312321CENTIMETERS123431BLACK2321.043231
\ No newline at end of file
+
+
+
+ 1
+ Product 1
+
+ 100
+ 50
+
+ 2024-03-01T12:00:00Z
+ 50
+ PN123
+ 30
+ KILOGRAMS
+
+ John Doe
+ AB12345
+ BLACK
+
+ 10.5
+ 20
+ Home
+
+
+
+
+ 2
+ Product 2
+
+ 200
+ 100
+
+ 2024-03-01T12:05:00Z
+ 80
+ PN456
+ 60
+ CENTIMETERS
+
+ Alice Smith
+ CD67890
+ BLUE
+
+ 20.8
+ 30
+ Office
+
+
+
+
+ 3
+ Product 3
+
+ 150
+ -200
+
+ 2024-03-01T12:10:00Z
+ 120
+ 90
+ GRAMS
+
+ Emma Johnson
+ EF24680
+ GREEN
+
+ 30.2
+ 40
+ Warehouse
+
+
+
+
+ 4
+ Product 4
+
+ 300
+ -300
+
+ 2024-03-01T12:15:00Z
+ 200
+ PN789
+ 150
+ KILOGRAMS
+
+ Bob Brown
+ GH13579
+ ORANGE
+
+ 40.6
+ 50
+ Factory
+
+
+
+
+ 5
+ Product 5
+
+ 400
+ 400
+
+ 2024-03-01T12:20:00Z
+ 150
+ PN246
+ 100
+ CENTIMETERS
+
+ Grace Lee
+ IJ35791
+ WHITE
+
+ 50.9
+ 60
+ Store
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/me/zinch/commands/Add.java b/src/main/java/me/zinch/commands/Add.java
index fece20f..97949fd 100644
--- a/src/main/java/me/zinch/commands/Add.java
+++ b/src/main/java/me/zinch/commands/Add.java
@@ -25,7 +25,7 @@ public class Add extends Command {
var product = productCollection.addProduct(productDTO);
return String.format("Продукт %s был добавлен под id %d", product.getName(), product.getId());
} catch (ValidationException e) {
- throw new CommandActionException(e.getMessage());
+ throw new CommandActionException(String.format("Произошла ошибка при добавлении%n%s", e.getMessage()));
}
}
}
diff --git a/src/main/java/me/zinch/commands/ExecuteScript.java b/src/main/java/me/zinch/commands/ExecuteScript.java
index 27ce1d3..cf11630 100644
--- a/src/main/java/me/zinch/commands/ExecuteScript.java
+++ b/src/main/java/me/zinch/commands/ExecuteScript.java
@@ -36,6 +36,7 @@ public class ExecuteScript extends Command {
try {
var result = new StringBuilder();
var scriptFile = Console.getLastCommand().split(" ")[1];
+ result.append(String.format("Скрипт %s начинает работу.%n", scriptFile));
addFileToStack(scriptFile);
var commandList = ScriptLoader.loadList(scriptFile);
for (var input: commandList) {
diff --git a/src/main/java/me/zinch/console/Console.java b/src/main/java/me/zinch/console/Console.java
index 9e218ee..911813e 100644
--- a/src/main/java/me/zinch/console/Console.java
+++ b/src/main/java/me/zinch/console/Console.java
@@ -108,8 +108,10 @@ public class Console {
try {
function.run();
return;
+ } catch (NullPointerException e) {
+ System.out.println("Произошла ошибка при заполнении поля\nПоле не может быть null");
} catch (Exception e) {
- System.out.format("Произошла ошибка при заполнении поля\n%s\n", e.getMessage());
+ System.out.format("Произошла ошибка при заполнении поля%n%s%n", e.getMessage());
}
}
}
@@ -150,8 +152,10 @@ public class Console {
.map(ValidateResult::getMessage)
.toList()));
}
+
var productCollection = new ProductCollection(productList);
System.out.println("Добро пожаловать! Для просмотра команд введите help");
+
while(isRunning) {
System.out.print(":");
try {
diff --git a/src/main/java/me/zinch/exceptions/DbInitializationException.java b/src/main/java/me/zinch/exceptions/DbInitializationException.java
index 2908270..e86cc99 100644
--- a/src/main/java/me/zinch/exceptions/DbInitializationException.java
+++ b/src/main/java/me/zinch/exceptions/DbInitializationException.java
@@ -9,4 +9,8 @@ public class DbInitializationException extends IOException {
public DbInitializationException() {
super("Ошибка! Не удалось инициализировать БД. Проверьте, что структура БД верна.");
}
+
+ public DbInitializationException(String message) {
+ super(message);
+ }
}
diff --git a/src/main/java/me/zinch/files/DbController.java b/src/main/java/me/zinch/files/DbController.java
index c739e07..d455fff 100644
--- a/src/main/java/me/zinch/files/DbController.java
+++ b/src/main/java/me/zinch/files/DbController.java
@@ -7,6 +7,7 @@ import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import me.zinch.exceptions.DbInitializationException;
+import me.zinch.exceptions.ValidationException;
import me.zinch.models.Product;
import java.io.BufferedInputStream;
@@ -59,6 +60,9 @@ public class DbController {
} catch (FileNotFoundException e) {
throw new FileNotFoundException("Не удалось найти файл " + path);
} catch (DatabindException e) {
+ if (e.getCause() instanceof ValidationException) {
+ throw new DbInitializationException(String.format("Ошибка при валидации базы%n%s", e.getCause().getMessage()));
+ }
throw new DbInitializationException();
} catch (IOException e) {
throw new IOException("Произошла неожиданная ошибка во время работы с файлом!");
diff --git a/src/main/java/me/zinch/models/Coordinates.java b/src/main/java/me/zinch/models/Coordinates.java
index 0d7efb2..32d6a8e 100644
--- a/src/main/java/me/zinch/models/Coordinates.java
+++ b/src/main/java/me/zinch/models/Coordinates.java
@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
+import me.zinch.exceptions.ValidationException;
import java.util.Objects;
@@ -15,7 +16,7 @@ public class Coordinates {
@JsonProperty("x")
private long x; //Максимальное значение поля: 883
- @NotNull(message = "Coordinates: Поле не может быть null")
+ @NotNull(message = "Coordinates: Поле y не может быть null")
@Min(value = -427, message = "Значение координаты y должно быть больше -427")
@JsonProperty("y")
private Long y; //Значение поля должно быть больше -427, Поле не может быть null
@@ -28,10 +29,13 @@ public class Coordinates {
}
public void setX(long x) {
+ if (x > 883) throw new ValidationException("Максимальное значение координаты x: 883");
this.x = x;
}
public void setY(Long y) {
+ if (y == null) throw new ValidationException("Поле y не может быть null");
+ if (y < -427) throw new ValidationException("Значение координаты y должно быть больше -427");
this.y = y;
}
diff --git a/src/main/java/me/zinch/models/Person.java b/src/main/java/me/zinch/models/Person.java
index 78eb8f3..bd805fb 100644
--- a/src/main/java/me/zinch/models/Person.java
+++ b/src/main/java/me/zinch/models/Person.java
@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
+import me.zinch.exceptions.ValidationException;
import java.util.Objects;
@@ -36,10 +37,13 @@ public class Person {
}
public void setName(String name) {
+ if (name == null || name.isEmpty()) throw new ValidationException("Имя персоны не может быть пустым или null");
this.name = name;
}
public void setPassportID(String passportID) {
+ if (passportID == null) throw new ValidationException("Поле passportID не может быть null");
+ if (passportID.length() < 5 || passportID.length() > 22) throw new ValidationException("Длина строки passportID должна быть не меньше 5 и не должна быть больше 22");
this.passportID = passportID;
}
diff --git a/src/main/java/me/zinch/models/ProductDTO.java b/src/main/java/me/zinch/models/ProductDTO.java
index 75c4181..75478ac 100644
--- a/src/main/java/me/zinch/models/ProductDTO.java
+++ b/src/main/java/me/zinch/models/ProductDTO.java
@@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
+import me.zinch.exceptions.ValidationException;
import me.zinch.validator.NotEmpty;
@@ -24,7 +25,7 @@ public class ProductDTO {
private Coordinates coordinates; //Поле не может быть null
@NotNull(message = "ProductDTO: Поле price не может быть null")
- @Min(value = 1, message = "Поле price не может быть null")
+ @Min(value = 1, message = "ProductDTO: Значение поля price должно быть больше 0")
@JsonProperty("price")
private Long price; //Поле не может быть null, Значение поля должно быть больше 0
@@ -97,18 +98,24 @@ public class ProductDTO {
}
public void setName(String name) {
+ if (name == null || name.isEmpty()) throw new ValidationException("Строка name не может быть пустой или null");
this.name = name;
}
public void setCoordinates(Coordinates coordinates) {
+ if (coordinates == null) throw new ValidationException("Поле coordinates не может быть null");
this.coordinates = coordinates;
}
public void setPrice(Long price) {
+ if (price == null) throw new ValidationException("Поле price не может быть null");
+ if (price <= 0) throw new ValidationException("Поле price не может быть null");
this.price = price;
}
public void setPartNumber(String partNumber) {
+ if (partNumber.isEmpty()) throw new ValidationException("Строка partNumber не может быть пустой");
+ if (partNumber.length() > 82) throw new ValidationException("Длина строки partNumber не должна быть больше 82");
this.partNumber = partNumber;
}
@@ -117,10 +124,12 @@ public class ProductDTO {
}
public void setUnitOfMeasure(UnitOfMeasure unitOfMeasure) {
+ if (unitOfMeasure == null) throw new ValidationException("Поле unitOfMeasure не может быть null");
this.unitOfMeasure = unitOfMeasure;
}
public void setOwner(Person owner) {
+ if (owner == null) throw new ValidationException("Поле owner не может быть null");
this.owner = owner;
}
}
diff --git a/src/main/java/me/zinch/validator/ValidateResult.java b/src/main/java/me/zinch/validator/ValidateResult.java
index feb9d70..f96acf6 100644
--- a/src/main/java/me/zinch/validator/ValidateResult.java
+++ b/src/main/java/me/zinch/validator/ValidateResult.java
@@ -1,7 +1,7 @@
package me.zinch.validator;
import jakarta.validation.ConstraintViolation;
-import jakarta.validation.ValidationException;
+import me.zinch.exceptions.ValidationException;
import java.util.Set;