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;