diff --git a/Disign_table_reservation_system_Figma.jpg b/Disign_table_reservation_system_Figma.jpg new file mode 100644 index 0000000..2b9e409 Binary files /dev/null and b/Disign_table_reservation_system_Figma.jpg differ diff --git a/ERD_table_reservation_system.jpg b/ERD_table_reservation_system.jpg new file mode 100644 index 0000000..b9747cc Binary files /dev/null and b/ERD_table_reservation_system.jpg differ diff --git a/UML_table_reservation_system.jpg b/UML_table_reservation_system.jpg new file mode 100644 index 0000000..ac017af Binary files /dev/null and b/UML_table_reservation_system.jpg differ diff --git a/hw_8/.idea/workspace.xml b/hw_8/.idea/workspace.xml new file mode 100644 index 0000000..e0d148a --- /dev/null +++ b/hw_8/.idea/workspace.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + 1670503970370 + + + + \ No newline at end of file diff --git a/hw_8/hw_8.iml b/hw_8/hw_8.iml new file mode 100644 index 0000000..9465dd8 --- /dev/null +++ b/hw_8/hw_8.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/hw_8/src/Main.java b/hw_8/src/Main.java new file mode 100644 index 0000000..3e59c38 --- /dev/null +++ b/hw_8/src/Main.java @@ -0,0 +1,5 @@ +public class Main { + public static void main(String[] args) { + System.out.println("Hello world!"); + } +} \ No newline at end of file diff --git a/hw_8/src/Model/Client.java b/hw_8/src/Model/Client.java new file mode 100644 index 0000000..2b660c2 --- /dev/null +++ b/hw_8/src/Model/Client.java @@ -0,0 +1,13 @@ +package Model; + + +/** + * Client - сущность с данными о клиенте + */ +public class Client { + public String nameClient; + public String surnameClient; + public Integer phoneClient; + public String emailClient; + public Boolean advertisingConsent; +} diff --git a/hw_8/src/Model/Repository.java b/hw_8/src/Model/Repository.java new file mode 100644 index 0000000..7ab292f --- /dev/null +++ b/hw_8/src/Model/Repository.java @@ -0,0 +1,41 @@ +package Model; + +import Presenter.iModel; +import View.Area; + +import java.sql.Time; +import java.util.ArrayList; +import java.util.Date; + +/** + * Repository - класс, содержащий методы для работы с базой данных; реализует интерфейс iModel + * getTables(Date date, Integer seats, Time time, Boolean smoking, Area area) - запрашивает данные о столиках из источника данных + * getStatusOccupationTable(Integer number, Date date, Time time) - проверяет, свободен ли + * * данный столик в указанное время + * getDataTable(Integer numberTable) - возвращает данные о конкретном столике + * updateDB(Integer numberTable, Date date, Time time, Client client) - вносит данные о бронировании в БД + */ +public class Repository implements iModel { + @Override + public ArrayList getTables(Date date, Integer seats, Time time, Boolean smoking, Area area) throws Exception { + ArrayList
listItem = new ArrayList
(); + if (listItem.isEmpty()) { + throw new Exception("There are no free tables matching the filters"); + } + return listItem; + } + + @Override + public Boolean getStatusOccupationTable(Integer number, Date date, Time time) { + return true; + } + + @Override + public Table getDataTable(Integer numberTable) { + return new Table(); + } + + public Boolean updateDB(Integer numberTable, Date date, Time time, Client client){ + return true; + } +} diff --git a/hw_8/src/Model/Table.java b/hw_8/src/Model/Table.java new file mode 100644 index 0000000..94330ae --- /dev/null +++ b/hw_8/src/Model/Table.java @@ -0,0 +1,12 @@ +package Model; + + +/** + * Table - сущность с данными о каждом столике + */ +public class Table { + public Integer numberTable; + public Integer seats; + public Boolean smoking; + public String area; +} diff --git a/hw_8/src/Presenter/Presenter.java b/hw_8/src/Presenter/Presenter.java new file mode 100644 index 0000000..1a85062 --- /dev/null +++ b/hw_8/src/Presenter/Presenter.java @@ -0,0 +1,69 @@ +package Presenter; + +import Model.Client; +import Model.Repository; +import Model.Table; +import View.Area; +import View.View; + +import java.sql.Time; +import java.util.ArrayList; +import java.util.Date; + +/** + * Presenter - класс, содержащий методы, отвечающие за логику приложения + * getData(Date date, Integer seats, Time time, Boolean smoking, Area area) возвращает список столиков, + * * удовлетворяющих заданным условиям + * isBusyTable(Integer numberTable, Date date, Time time) - запрашивает данные о стлике и + * * возвращает True, если столик занят, и False, если столик свободен + * getDetailsTable(Integer numberTable) - возвращает данные о конкретном столике + * setReserve(Integer numberTable, Date date, Time time) - отвечает за бронирование столика - проверяет, + * * свободен ли выбранный столик, запрашивает данные клиентаи подтверждение брони + * getDataClient() - запрашивает данные о клиенте + * getConfirmReserve() - запрашивает подтверждение брони + */ +public class Presenter { + public ArrayList
getData(Date date, Integer seats, Time time, Boolean smoking, Area area) throws Exception { + iModel imodel = new Repository(); + return ((Repository) imodel).getTables(date, seats, time, smoking, area); + } + + public Boolean isBusyTable(Integer numberTable, Date date, Time time){ + iModel imodel = new Repository(); + return ((Repository) imodel).getStatusOccupationTable(numberTable, date, time); + } + + public Table getDetailsTable(Integer numberTable){ + iModel imodel = new Repository(); + return ((Repository) imodel).getDataTable(numberTable); + } + + public Boolean setReserve(Integer numberTable, Date date, Time time) throws Exception{ + Presenter presenterItem = new Presenter(); + Boolean realStatus = presenterItem.isBusyTable(numberTable, date, time); + + if (realStatus) { + throw new Exception("The table is busy. Choose another."); + } + + Client clientItem = presenterItem.getDataClient(); + Boolean confirmItem = presenterItem.getConfirmReserve(); + + if (!confirmItem) { + throw new Exception("You canceled the reservation"); + } + + iModel imodel = new Repository(); + return ((Repository) imodel).updateDB(numberTable, date, time, clientItem); + } + + public Client getDataClient(){ + iView iview = new View(); + return iview.inputDataClient(); + } + + public Boolean getConfirmReserve(){ + iView iview = new View(); + return iview.confirmReserve(); + } +} diff --git a/hw_8/src/Presenter/iModel.java b/hw_8/src/Presenter/iModel.java new file mode 100644 index 0000000..7d3e5f8 --- /dev/null +++ b/hw_8/src/Presenter/iModel.java @@ -0,0 +1,25 @@ +package Presenter; + +import Model.Client; +import Model.Table; +import View.Area; + +import java.sql.Time; +import java.util.ArrayList; +import java.util.Date; + + +/** + * iModel - интерфейс, позволяющий избежать зависимости более абстрактного класс Presenter + * * от менее абстрактного класса Repository + */ +public interface iModel { + + ArrayList
getTables(Date date, Integer seats, Time time, Boolean smoking, Area area) throws Exception; + + public Boolean getStatusOccupationTable(Integer number, Date date, Time time); + + public Table getDataTable(Integer numberTable); + + public Boolean updateDB(Integer numberTable, Date date, Time time, Client client); +} diff --git a/hw_8/src/Presenter/iView.java b/hw_8/src/Presenter/iView.java new file mode 100644 index 0000000..b961537 --- /dev/null +++ b/hw_8/src/Presenter/iView.java @@ -0,0 +1,12 @@ +package Presenter; + +import Model.Client; + +/** + * iView - интерфейс, позволяющий избежать зависимости более абстрактного класс Presenter + * * от менее абстрактного класса View + */ +public interface iView { + public Client inputDataClient(); + public Boolean confirmReserve(); +} diff --git a/hw_8/src/View/Area.java b/hw_8/src/View/Area.java new file mode 100644 index 0000000..3feae68 --- /dev/null +++ b/hw_8/src/View/Area.java @@ -0,0 +1,15 @@ +package View; + +/** + * Area - отдельные зоны, на которые можно поделить ресторан. Каждой зоне характерны свои особенности. + * * Клиент при выборе столика может на них ориентироваться + */ +public enum Area { + barArea, + windowArea, + centralArea, + secludedArea, + danceArea, + stageArea, + streetArea + } diff --git a/hw_8/src/View/View.java b/hw_8/src/View/View.java new file mode 100644 index 0000000..af8cfe2 --- /dev/null +++ b/hw_8/src/View/View.java @@ -0,0 +1,51 @@ +package View; + +import Model.Client; +import Presenter.Presenter; +import Presenter.iView; +import java.sql.Time; +import java.util.Date; + +/** + * View - класс, содержащий методы для работы свнешней частью приложения, для взаимодействия с клиентом + * selectTables(Date date, Time time, Integer seats, Boolean smoking, Area area) - инициализирует процесс + * * подбора столиков, удовлетворяющих заданным критериям + * isTableFree(Integer numberTable, Date date, Time time) - предоставляет клиету информацию о занятости столика + * infOfTable(Integer numberTable) - предоставляет клиету подробную информацию о выбранном столике + * reserveTable(Integer numberTable,Date date, Time time) - инициализирует процесс бронирования столика + * inputDataClient() - запрашивает личные данные для бронирования у клиента + * confirmReserve() - запрашивает подтверждение о бронировании у клиента + */ +public class View implements iView { + + public void selectTables(Date date, Time time, Integer seats, Boolean smoking, Area area) throws Exception { + Presenter presenterItem = new Presenter(); + presenterItem.getData(date, seats, time, smoking, area); + } + + public Boolean isTableFree(Integer numberTable, Date date, Time time) { + Presenter presenterItem = new Presenter(); + return !(presenterItem.isBusyTable(numberTable, date, time)); + } + + public void infOfTable(Integer numberTable){ + Presenter presenterItem = new Presenter(); + presenterItem.getDetailsTable(numberTable); + } + + public void reserveTable(Integer numberTable,Date date, Time time) throws Exception { + Presenter presenterItem = new Presenter(); + Boolean reserveItem = presenterItem.setReserve(numberTable,date, time); + + System.out.println("Table reservation was successful"); + } + + public Client inputDataClient(){ + return new Client(); + } + + public Boolean confirmReserve(){ + System.out.println("Confirmation received"); + return true; + } +}