diff --git a/src/main/java/dev/example/restaurantManager/RestaurantManagerApplication.java b/src/main/java/dev/example/restaurantManager/RestaurantManagerApplication.java index d10fad7..a9b399c 100644 --- a/src/main/java/dev/example/restaurantManager/RestaurantManagerApplication.java +++ b/src/main/java/dev/example/restaurantManager/RestaurantManagerApplication.java @@ -1,7 +1,15 @@ package dev.example.restaurantManager; + +import dev.example.restaurantManager.utilities.CustomerDataLoader; +//import dev.example.restaurantManager.utilities.EatInOrderDataLoader; +import dev.example.restaurantManager.utilities.MenuDataLoader; +import dev.example.restaurantManager.utilities.TableDataLoader; +import org.springframework.boot.ApplicationRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; + @SpringBootApplication public class RestaurantManagerApplication { @@ -10,4 +18,23 @@ public static void main(String[] args) { SpringApplication.run(RestaurantManagerApplication.class, args); } + @Bean + public ApplicationRunner CustomerDataLoader(CustomerDataLoader customerDataLoader) { + return args -> customerDataLoader.createFakeCustomers(); + } + + @Bean + public ApplicationRunner TableDataLoader(TableDataLoader tableDataLoader) { + return args -> tableDataLoader.createFakeTables(); + } + + @Bean + public ApplicationRunner MenuDataLoader(MenuDataLoader menuDataLoader) { + return args -> menuDataLoader.createFakeMenus(); + } + + /*@Bean + public ApplicationRunner EatInOrderDataLoader(EatInOrderDataLoader eatInOrderDataLoader) { + return args -> eatInOrderDataLoader.createFakeEatInOrders(); + }*/ } \ No newline at end of file diff --git a/src/main/java/dev/example/restaurantManager/controller/TableRestaurantController.java b/src/main/java/dev/example/restaurantManager/controller/TableRestaurantController.java new file mode 100644 index 0000000..cec56c5 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/controller/TableRestaurantController.java @@ -0,0 +1,95 @@ +package dev.example.restaurantManager.controller; + +import dev.example.restaurantManager.model.TableRestaurant; +import dev.example.restaurantManager.service.TableService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import java.util.Date; +import java.util.List; + +@RequestMapping("/api/v1/table") +@RestController +public class TableRestaurantController { + + // inject from application.properties endpoint.url.tables + @Value("${endpoint.url.tables}") + private String endpointUrlTables; + + @Autowired + private TableService tableService; + + @GetMapping("/show-endpoint") + public String showEndpointTables() { + + return "The tables endpoint URL is: " + endpointUrlTables; + } + + // manage request by ResponseEntity with all tables + @GetMapping("/allTables") + public ResponseEntity> getAllCustomers( ) { + List tables = tableService.getAllTables(); + HttpHeaders headers = getCommonHeaders("Get all tables"); + + return tables != null && !tables.isEmpty() + ? new ResponseEntity<>(tables, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @PostMapping + public ResponseEntity createCustomer(@RequestBody TableRestaurant tables) { + TableRestaurant createdTable = tableService.createTable(tables); + HttpHeaders headers = getCommonHeaders("Create a new table"); + + return createdTable != null + ? new ResponseEntity<>(createdTable, headers, HttpStatus.CREATED) + : new ResponseEntity<>(headers, HttpStatus.BAD_REQUEST); + } + + @PutMapping("/{id}") + public ResponseEntity updateTable(@PathVariable String id, @RequestBody TableRestaurant tableDetails) { + TableRestaurant updatedTable = tableService.updateTable(id, tableDetails); + HttpHeaders headers = getCommonHeaders("Update a table"); + + return updatedTable != null + ? new ResponseEntity<>(updatedTable, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @DeleteMapping("/{id}") + public ResponseEntity deleteTable(@PathVariable String id) { + boolean deleted = tableService.deleteTable(id); + HttpHeaders headers = getCommonHeaders("Delete a table"); + headers.add("deleted", String.valueOf(deleted)); + + + return deleted + ? new ResponseEntity<>(headers, HttpStatus.NO_CONTENT) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + @GetMapping("/{id}") + public ResponseEntity getTableById(@PathVariable String id) { + TableRestaurant table = tableService.getTableById(id); + HttpHeaders headers = getCommonHeaders("Get a table by Id"); + + return table != null + ? new ResponseEntity<>(table, headers, HttpStatus.OK) + : new ResponseEntity<>(headers, HttpStatus.NOT_FOUND); + } + + private HttpHeaders getCommonHeaders(String description) { + HttpHeaders headers = new HttpHeaders(); + headers.add("desc", description); + headers.add("content-type", "application/json"); + headers.add("date", new Date().toString()); + headers.add("server", "H2 Database"); + headers.add("version", "1.0.0"); + headers.add("customer-count", String.valueOf(tableService.countTables())); + headers.add("object", "tables"); + return headers; + } +} diff --git a/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java b/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java index 2461711..0fd41ac 100644 --- a/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java +++ b/src/main/java/dev/example/restaurantManager/model/EatInOrderRestaurant.java @@ -1,32 +1,43 @@ package dev.example.restaurantManager.model; +import com.fasterxml.jackson.annotation.JsonIgnore; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; + import java.util.ArrayList; import java.util.Date; -import java.util.stream.Collectors; @Data @AllArgsConstructor @NoArgsConstructor +@Entity public class EatInOrderRestaurant extends OrderRestaurant { - private ArrayList tableRestaurants = new ArrayList<>(); - //private TableRestaurant orderedTableRestaurant; + @Id + @GeneratedValue(strategy = GenerationType.AUTO) // Generate ID automatically + private String id; + //Relation with RestaurantTable Many to One + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "TABLE_EATIN_FK_ID") + @JsonIgnore + //private ArrayList tableRestaurants = new ArrayList<>(); + private TableRestaurant orderedTableRestaurant; + public EatInOrderRestaurant(String id, Date date, String waiter, int peopleQty, double totalPayment, boolean paid, ArrayList menus, - ArrayList tableRestaurants) { + TableRestaurant orderedTableRestaurant) { super(id, date, waiter, peopleQty, totalPayment, paid, menus); - this.tableRestaurants = tableRestaurants; + this.orderedTableRestaurant = orderedTableRestaurant; } @Override public String toString() { return super.toString() + "\n" + "Type: Eat In\n" + - "Tables: " + tableRestaurants.stream().map(TableRestaurant::getName).collect(Collectors.joining(", ")); + "Tables: " + (orderedTableRestaurant != null ? orderedTableRestaurant.getName() : "No table assigned"); } -} +} \ No newline at end of file diff --git a/src/main/java/dev/example/restaurantManager/model/OrderRestaurant.java b/src/main/java/dev/example/restaurantManager/model/OrderRestaurant.java index 177c3b6..2c0fc17 100644 --- a/src/main/java/dev/example/restaurantManager/model/OrderRestaurant.java +++ b/src/main/java/dev/example/restaurantManager/model/OrderRestaurant.java @@ -14,6 +14,7 @@ @Entity @Table(name = "ORDER_RESTAURANT") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) + public class OrderRestaurant { @Id diff --git a/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java b/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java index bc13e0a..e97b531 100644 --- a/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java +++ b/src/main/java/dev/example/restaurantManager/model/TableRestaurant.java @@ -8,6 +8,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.util.ArrayList; +import java.util.UUID; @Data @AllArgsConstructor @@ -25,12 +26,29 @@ public class TableRestaurant { @OneToMany(mappedBy = "tableRestaurantMapped", cascade = CascadeType.ALL) private ArrayList bookings ; + @OneToMany(mappedBy = "orderedTableRestaurant", cascade = CascadeType.ALL) + private ArrayList EatInOrders; - // we must create a VERY CONCRETE constructor to RUN the OLD tests + //we must create a VERY CONCRETE constructor to RUN the OLD tests public TableRestaurant(String name, String description , int qty, boolean busy) { + this.name = name; + this.description = description; + this.qty = qty; + this.busy = busy; + + } + + public TableRestaurant(String id, String name, String description, Integer qty, Boolean busy, ArrayList EatInOrders) { + this.id = id; + this.name = name; + this.description = description; + this.qty = qty; + this.busy = busy; + this.EatInOrders = EatInOrders; } + //method to add public void addBooking(Booking booking) { this.getBookings().add(booking); diff --git a/src/main/java/dev/example/restaurantManager/repository/EatInOrderRepository.java b/src/main/java/dev/example/restaurantManager/repository/EatInOrderRepository.java new file mode 100644 index 0000000..79f5f91 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/repository/EatInOrderRepository.java @@ -0,0 +1,57 @@ +package dev.example.restaurantManager.repository; + +import dev.example.restaurantManager.model.EatInOrderRestaurant; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public interface EatInOrderRepository extends JpaRepository { + + // 0. Count tables by name + int countByDate(Date date); + // 1. Find tables by name + ArrayList findByDate(Date date); + // 3. Find tables by name + long count(); + + + // 1. Find tables by id + //EatInOrderRestaurant findById(String id); + + // 2. Find tables by capacity + //Table findByPhoneNumber(String phoneNumber); + + // 3. Find orders by waiter + EatInOrderRestaurant findByWaiter(String waiter); + + // 4. Find Orders by date + //EatInOrderRestaurant findByDate(Date date); + + // 5. Find tables by age greater than a specified value + //List findByAgeGreaterThan(int age); + + // 6. Find tables by age less than a specified value and not deleted + //List findByAgeLessThanAndDeletedFalse(int age); + + // 7. Find tables by name containing a specific string (case-insensitive) + //List findByNameContainingIgnoreCase(String namePart); + + // 8. Count tables by age + //long countByAge(int age); + + // 9. Find tables by email ending with a specific domain + //List findByEmailEndingWith(String domain); + + // 10. Find top 5 oldest customers + //List findTop5ByOrderByAgeDesc(); + + // 11. Find customers by name and age + //List findByNameAndAge(String name, int age); + + // 12. Find non-deleted tables ordered by name + //List findByVipCustomerFalseOrderByNameAsc(); + + +} \ No newline at end of file diff --git a/src/main/java/dev/example/restaurantManager/repository/MenuRestaurantRepository.java b/src/main/java/dev/example/restaurantManager/repository/MenuRestaurantRepository.java index 1f8820a..f7f2b1e 100644 --- a/src/main/java/dev/example/restaurantManager/repository/MenuRestaurantRepository.java +++ b/src/main/java/dev/example/restaurantManager/repository/MenuRestaurantRepository.java @@ -3,5 +3,54 @@ import dev.example.restaurantManager.model.MenuRestaurant; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.ArrayList; +import java.util.List; + public interface MenuRestaurantRepository extends JpaRepository { -} + + // 0. Count menu by name + int countByName(String name); + // 1. Find menus by name + ArrayList findByName(String name); + // 3. Find menus by name + long count(); + + + // 1. Find menus by email + //Optional findByEmail(String email); + + // 2. Find menus by phone number + //Menu findByPhoneNumber(String phoneNumber); + + // 3. Find menus by name + //Menu findByNameAndEmail(String name, String email); + + // 4. Find menus by name + MenuRestaurant findByNameContaining(String letter); + + // 5. Find menus by age greater than a specified value + //List findByAgeGreaterThan(int age); + + // 6. Find menus by age less than a specified value and not deleted + //List findByAgeLessThanAndDeletedFalse(int age); + + // 7. Find menus by name containing a specific string (case-insensitive) + List findByNameContainingIgnoreCase(String namePart); + + // 8. Count menus by age + //long countByAge(int age); + + // 9. Find menus by email ending with a specific domain + //List findByEmailEndingWith(String domain); + + // 10. Find top 5 oldest menus + //List findTop5ByOrderByAgeDesc(); + + // 11. Find menus by name and age + //List findByNameAndAge(String name, int age); + + // 12. Find non-deleted menus ordered by name + //List findByVipCustomerFalseOrderByNameAsc(); + + +} \ No newline at end of file diff --git a/src/main/java/dev/example/restaurantManager/repository/TableRestaurantRepository.java b/src/main/java/dev/example/restaurantManager/repository/TableRestaurantRepository.java index f789c82..8b20c18 100644 --- a/src/main/java/dev/example/restaurantManager/repository/TableRestaurantRepository.java +++ b/src/main/java/dev/example/restaurantManager/repository/TableRestaurantRepository.java @@ -1,9 +1,16 @@ package dev.example.restaurantManager.repository; - - import dev.example.restaurantManager.model.TableRestaurant; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + public interface TableRestaurantRepository extends JpaRepository { -} + + + + Optional findByName(String name); + + } \ No newline at end of file diff --git a/src/main/java/dev/example/restaurantManager/service/EatInOrderService.java b/src/main/java/dev/example/restaurantManager/service/EatInOrderService.java new file mode 100644 index 0000000..df6b994 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/EatInOrderService.java @@ -0,0 +1,17 @@ +package dev.example.restaurantManager.service; + + +import dev.example.restaurantManager.model.EatInOrderRestaurant; + +import java.util.List; + +public interface EatInOrderService { + List getAllEatInOrders(); + EatInOrderRestaurant createEatInOrder(EatInOrderRestaurant eatInOrderRestaurant); + EatInOrderRestaurant getEatInOrderById(String id); + EatInOrderRestaurant updateEatInOrder(String id, EatInOrderRestaurant eatInOrderRestaurantDetails); + boolean deleteEatInOrder(String id); + long countEatInOrders(); +} + + diff --git a/src/main/java/dev/example/restaurantManager/service/EatInOrderServiceImpl.java b/src/main/java/dev/example/restaurantManager/service/EatInOrderServiceImpl.java new file mode 100644 index 0000000..93350df --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/EatInOrderServiceImpl.java @@ -0,0 +1,66 @@ +package dev.example.restaurantManager.service; + + +import dev.example.restaurantManager.model.EatInOrderRestaurant; +import dev.example.restaurantManager.model.TableRestaurant; +import dev.example.restaurantManager.repository.EatInOrderRepository; +import dev.example.restaurantManager.repository.TableRestaurantRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +@Service +public class EatInOrderServiceImpl implements EatInOrderService { + + @Autowired + private EatInOrderRepository eatInOrderRepository; + + @Override + public List getAllEatInOrders() { return eatInOrderRepository.findAll(); } + + @Override + public EatInOrderRestaurant createEatInOrder(EatInOrderRestaurant eatInOrderRestaurant) { + eatInOrderRestaurant.setId(UUID.randomUUID().toString()); + return eatInOrderRepository.save(eatInOrderRestaurant); + } + + @Override + public EatInOrderRestaurant getEatInOrderById(String id) { + return eatInOrderRepository.findById(id).orElse(null); + } + + @Override + public EatInOrderRestaurant updateEatInOrder(String id, EatInOrderRestaurant eatInOrderRestaurantDetails) { + EatInOrderRestaurant eatInOrderRestaurant = eatInOrderRepository.findById(id).orElse(null); + if (eatInOrderRestaurant != null) { + if (eatInOrderRestaurantDetails.getId() != null) { + eatInOrderRestaurant.setId(eatInOrderRestaurantDetails.getId()); + } + /*if (customerDetails.getEmail() != null) { + customer.setEmail(customerDetails.getEmail()); + } + if (customerDetails.getPhoneNumber() != null) { + customer.setPhoneNumber(customerDetails.getPhoneNumber()); + }*/ + return eatInOrderRepository.save(eatInOrderRestaurant); + } + return null; + } + + @Override + public boolean deleteEatInOrder (String id) { + eatInOrderRepository.deleteById(id); + Optional eatInOrderRestaurant = eatInOrderRepository.findById(id); + return eatInOrderRestaurant.isEmpty() + ? false : true ; + } + + @Override + public long countEatInOrders() { + return eatInOrderRepository.count(); + } + + +} diff --git a/src/main/java/dev/example/restaurantManager/service/MenuService.java b/src/main/java/dev/example/restaurantManager/service/MenuService.java new file mode 100644 index 0000000..41f8966 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/MenuService.java @@ -0,0 +1,17 @@ +package dev.example.restaurantManager.service; + + +import dev.example.restaurantManager.model.MenuRestaurant; + +import java.util.List; + +public interface MenuService { + List getAllMenus(); + MenuRestaurant createMenu(MenuRestaurant menu); + MenuRestaurant getMenuById(String id); + MenuRestaurant updateMenu(String id, MenuRestaurant menuDetails); + boolean deleteMenu(String id); + long countMenus(); +} + + diff --git a/src/main/java/dev/example/restaurantManager/service/MenuServiceImpl.java b/src/main/java/dev/example/restaurantManager/service/MenuServiceImpl.java new file mode 100644 index 0000000..4e99a8e --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/MenuServiceImpl.java @@ -0,0 +1,68 @@ +package dev.example.restaurantManager.service; + + + +import dev.example.restaurantManager.model.MenuRestaurant; +import dev.example.restaurantManager.repository.MenuRestaurantRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +@Service +public class MenuServiceImpl implements MenuService { + + @Autowired + private MenuRestaurantRepository menuRestaurantRepository; + + @Override + public List getAllMenus() { + return menuRestaurantRepository.findAll(); + } + + @Override + public MenuRestaurant createMenu(MenuRestaurant menu) { + menu.setId(UUID.randomUUID().toString()); + return menuRestaurantRepository.save(menu); + } + + @Override + public MenuRestaurant getMenuById(String id) { + return menuRestaurantRepository.findById(id).orElse(null); + } + + @Override + public MenuRestaurant updateMenu(String id, MenuRestaurant menuDetails) { + MenuRestaurant menu = menuRestaurantRepository.findById(id).orElse(null); + if (menu != null) { + if (menuDetails.getName() != null) { + menu.setName(menuDetails.getName()); + } +/* if (menuDetails.getEmail() != null) { + menu.setEmail(menuDetails.getEmail()); + } + if (menuDetails.getPhoneNumber() != null) { + menu.setPhoneNumber(menuDetails.getPhoneNumber()); + }*/ + return menuRestaurantRepository.save(menu); + } + return null; + } + + @Override + public boolean deleteMenu(String id) { + menuRestaurantRepository.deleteById(id); + Optional menu = menuRestaurantRepository.findById(id); + return menu.isEmpty() + ? false : true ; + } + + @Override + public long countMenus() { + return menuRestaurantRepository.count(); + } + + +} diff --git a/src/main/java/dev/example/restaurantManager/service/TableService.java b/src/main/java/dev/example/restaurantManager/service/TableService.java new file mode 100644 index 0000000..d636142 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/TableService.java @@ -0,0 +1,17 @@ +package dev.example.restaurantManager.service; + + +import dev.example.restaurantManager.model.TableRestaurant; + +import java.util.List; + +public interface TableService { + List getAllTables(); + TableRestaurant createTable(TableRestaurant table); + TableRestaurant getTableById(String id); + TableRestaurant updateTable(String id, TableRestaurant tableDetails); + boolean deleteTable(String id); + long countTables(); +} + + diff --git a/src/main/java/dev/example/restaurantManager/service/TableServiceImpl.java b/src/main/java/dev/example/restaurantManager/service/TableServiceImpl.java new file mode 100644 index 0000000..f45b1a2 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/service/TableServiceImpl.java @@ -0,0 +1,64 @@ +package dev.example.restaurantManager.service; + + +import dev.example.restaurantManager.model.TableRestaurant; +import dev.example.restaurantManager.repository.TableRestaurantRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +@Service +public class TableServiceImpl implements TableService { + + @Autowired + private TableRestaurantRepository tableRestaurantRepository; + + @Override + public List getAllTables() { return tableRestaurantRepository.findAll(); } + + @Override + public TableRestaurant createTable(TableRestaurant table) { + table.setId(UUID.randomUUID().toString()); + return tableRestaurantRepository.save(table); + } + + @Override + public TableRestaurant getTableById(String id) { + return tableRestaurantRepository.findById(id).orElse(null); + } + + @Override + public TableRestaurant updateTable(String id, TableRestaurant tableDetails) { + TableRestaurant table = tableRestaurantRepository.findById(id).orElse(null); + if (table != null) { + if (tableDetails.getName() != null) { + table.setName(tableDetails.getName()); + } + /*if (customerDetails.getEmail() != null) { + customer.setEmail(customerDetails.getEmail()); + } + if (customerDetails.getPhoneNumber() != null) { + customer.setPhoneNumber(customerDetails.getPhoneNumber()); + }*/ + return tableRestaurantRepository.save(table); + } + return null; + } + + @Override + public boolean deleteTable(String id) { + tableRestaurantRepository.deleteById(id); + Optional table = tableRestaurantRepository.findById(id); + return table.isEmpty() + ? false : true ; + } + + @Override + public long countTables() { + return tableRestaurantRepository.count(); + } + + +} diff --git a/src/main/java/dev/example/restaurantManager/utilities/EatInOrderDataLoader.java b/src/main/java/dev/example/restaurantManager/utilities/EatInOrderDataLoader.java new file mode 100644 index 0000000..e4e9393 --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/utilities/EatInOrderDataLoader.java @@ -0,0 +1,46 @@ +/* +package dev.example.restaurantManager.utilities; + +import com.github.javafaker.Faker; +import dev.example.restaurantManager.model.EatInOrderRestaurant; +import dev.example.restaurantManager.repository.EatInOrderRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Locale; +import java.util.UUID; + +@Component +public class EatInOrderDataLoader { + + @Autowired + private EatInOrderRepository eatInOrderRepository; + + public void createFakeEatInOrders() { + // Check if the database is empty + if (eatInOrderRepository.count() == 0) { + System.out.println(" 0 records at the database found"); + Faker faker = new Faker(new Locale("en-US")); + + int qty = 10; + // Create and save 5 fake eatinorders + + //String id, Date date, String waiter, int peopleQty, double totalPayment, boolean paid + for (int i = 0; i < qty; i++) { + EatInOrderRestaurant eatInOrderRestaurant = new EatInOrderRestaurant( + UUID.randomUUID().toString(), + faker.date(), + faker.friends().character(), + faker.random().nextInt(1, 10), + faker.random().nextDouble(), + faker.random().nextBoolean() + + ); + eatInOrderRepository.save(eatInOrderRestaurant); + } + + System.out.println(qty + " fake EatInOrders have been created and saved to the database."); + } + } +} +*/ diff --git a/src/main/java/dev/example/restaurantManager/utilities/MenuDataLoader.java b/src/main/java/dev/example/restaurantManager/utilities/MenuDataLoader.java new file mode 100644 index 0000000..2ae5ebf --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/utilities/MenuDataLoader.java @@ -0,0 +1,42 @@ +package dev.example.restaurantManager.utilities; + +import com.github.javafaker.Faker; +import dev.example.restaurantManager.model.MenuRestaurant; +import dev.example.restaurantManager.repository.MenuRestaurantRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Locale; +import java.util.UUID; + +@Component +public class MenuDataLoader { + + @Autowired + private MenuRestaurantRepository menuRepository; + + public void createFakeMenus() { + // Check if the database is empty + if (menuRepository.count() == 0) { + System.out.println(" 0 records at the database found"); + Faker faker = new Faker(new Locale("en-US")); + + int qty = 5; + // Create and save 5 fake menus + for (int i = 0; i < qty; i++) { + MenuRestaurant menu = new MenuRestaurant( + UUID.randomUUID().toString(), + faker.friends().character(), + faker.random().nextDouble(), + faker.food().dish(), + faker.random().nextBoolean(), + faker.random().nextBoolean() + + ); + menuRepository.save(menu); + } + + System.out.println(qty + " fake menus have been created and saved to the database."); + } + } +} diff --git a/src/main/java/dev/example/restaurantManager/utilities/TableDataLoader.java b/src/main/java/dev/example/restaurantManager/utilities/TableDataLoader.java new file mode 100644 index 0000000..5a87a3d --- /dev/null +++ b/src/main/java/dev/example/restaurantManager/utilities/TableDataLoader.java @@ -0,0 +1,41 @@ +package dev.example.restaurantManager.utilities; + +import com.github.javafaker.Faker; +import dev.example.restaurantManager.model.TableRestaurant; +import dev.example.restaurantManager.repository.TableRestaurantRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Locale; +import java.util.UUID; + +@Component +public class TableDataLoader { + + @Autowired + private TableRestaurantRepository tableRepository; + + public void createFakeTables() { + // Check if the database is empty + if (tableRepository.count() == 0) { + System.out.println(" 0 records at the database found"); + Faker faker = new Faker(new Locale("en-US")); + + int qty = 10; + // Create and save 100 fake customers + for (int i = 0; i < qty; i++) { + TableRestaurant table_rest = new TableRestaurant(); + table_rest.setId(UUID.randomUUID().toString()); + table_rest.setName("Table " + (i + 1)); + table_rest.setDescription(faker.lorem().sentence()); + table_rest.setQty(faker.number().numberBetween(1, 10)); + table_rest.setBusy(faker.bool().bool()); // + + + tableRepository.save(table_rest); + } + + System.out.println(qty + " fake customers have been created and saved to the database."); + } + } +} diff --git a/src/main/resources/application-local.properties b/src/main/resources/application-local.properties index b773357..04fd785 100644 --- a/src/main/resources/application-local.properties +++ b/src/main/resources/application-local.properties @@ -2,9 +2,9 @@ # H2 LOCAL DB SERVER -spring.datasource.url=jdbc:h2:/home/albert/MyProjects/DataBase/customerdb -spring.datasource.username=albert -spring.datasource.password=1234 +spring.datasource.url=jdbc:h2:/home/isaac/MyPROJECTS/Database/customerdb +spring.datasource.username=sa +spring.datasource.password= # DDL OPTIONS: create-drop, create, update, none, validate spring.jpa.hibernate.ddl-auto=update diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 56fa3b7..dcde56b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,17 +1,19 @@ spring.application.name=restaurantManager # application.properties -spring.profiles.active=memory +spring.profiles.active=local # H2 DATABASE SERVER -spring.datasource.driverClassName=org.h2.Driver +#spring.datasource.url=jdbc:h2:mem:testdb +#spring.datasource.url=jdbc:h2:/home/isaac/MyPROJECTS/Database/customerdb +#spring.datasource.driverClassName=org.h2.Driver spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.h2.console.enabled=true # DDL OPTIONS: create-drop, create, update, none, validate -#spring.jpa.hibernate.ddl-auto=create-drop +spring.jpa.hibernate.ddl-auto=create # SWAGGER @@ -25,7 +27,8 @@ spring.config.import=optional:file:.env # import from environment variables #endpoint.url.customers=${ENDPOINT_URL_CUSTOMERS} endpoint.url.customers=/api/v1/customers/ +endpoint.url.tables=/api/v1/tables/ # Enable debug logging #logging.level.org.springframework=DEBUG -#logging.level.dev.example.restaurantManager=DEBUG \ No newline at end of file +#logging.level.dev.example.restaurantManager=DEBUG diff --git a/src/test/java/dev/example/restaurantManager/RelationshipsOrderRestaurantTest.java b/src/test/java/dev/example/restaurantManager/RelationshipsOrderRestaurantTest.java index a3c8f84..268d908 100644 --- a/src/test/java/dev/example/restaurantManager/RelationshipsOrderRestaurantTest.java +++ b/src/test/java/dev/example/restaurantManager/RelationshipsOrderRestaurantTest.java @@ -57,9 +57,9 @@ public void TestCreateOrder() { OrderRestaurant shippingOrder3 = new ShippingOrderRestaurant("SO3", new Date(), "Emily", 3, 32.97, false, new ArrayList<>(Arrays.asList(menuRestaurant1, menuRestaurant2, menuRestaurant3)), "789 Oak St", "Chicago", "Lisa"); // Create 3 EatInOrder objects - OrderRestaurant eatInOrder1 = new EatInOrderRestaurant("EO1", new Date(), "David", 4, 43.96, true, new ArrayList<>(Arrays.asList(menuRestaurant1, menuRestaurant1, menuRestaurant2, menuRestaurant2)), new ArrayList<>(Arrays.asList(table1))); - OrderRestaurant eatInOrder2 = new EatInOrderRestaurant("EO2", new Date(), "Anna", 2, 21.98, false, new ArrayList<>(Arrays.asList(menuRestaurant2, menuRestaurant3)), new ArrayList<>(Arrays.asList(table2))); - OrderRestaurant eatInOrder3 = new EatInOrderRestaurant("EO3", new Date(), "Mark", 6, 65.94, true, new ArrayList<>(Arrays.asList(menuRestaurant1, menuRestaurant1, menuRestaurant2, menuRestaurant2, menuRestaurant3, menuRestaurant3)), new ArrayList<>(Arrays.asList(table1, table2))); + //OrderRestaurant eatInOrder1 = new EatInOrderRestaurant("EO1", new Date(), "David", 4, 43.96, true, new ArrayList<>(Arrays.asList(menuRestaurant1, menuRestaurant1, menuRestaurant2, menuRestaurant2)), new ArrayList<>(Arrays.asList(table1))); + //OrderRestaurant eatInOrder2 = new EatInOrderRestaurant("EO2", new Date(), "Anna", 2, 21.98, false, new ArrayList<>(Arrays.asList(menuRestaurant2, menuRestaurant3)), new ArrayList<>(Arrays.asList(table2))); + //OrderRestaurant eatInOrder3 = new EatInOrderRestaurant("EO3", new Date(), "Mark", 6, 65.94, true, new ArrayList<>(Arrays.asList(menuRestaurant1, menuRestaurant1, menuRestaurant2, menuRestaurant2, menuRestaurant3, menuRestaurant3)), new ArrayList<>(Arrays.asList(table1, table2))); // Create 3 TakeAwayOrder objects OrderRestaurant takeAwayOrder1 = new TakeAwayOrder("TO1", new Date(), "Alice", 1, 10.99, true, new ArrayList<>(Arrays.asList(menuRestaurant1)), customer1 ); @@ -70,7 +70,7 @@ public void TestCreateOrder() { // Create a list of all orders ArrayList orders = new ArrayList<>(); orders.addAll(Arrays.asList(shippingOrder1, shippingOrder2, shippingOrder3, - eatInOrder1, eatInOrder2, eatInOrder3, + // eatInOrder1, eatInOrder2, eatInOrder3, takeAwayOrder1, takeAwayOrder2, takeAwayOrder3, takeAwayOrder4)); // Print the number of orders diff --git a/src/test/java/dev/example/restaurantManager/TestEatInOrder.java b/src/test/java/dev/example/restaurantManager/TestEatInOrder.java new file mode 100644 index 0000000..1200f91 --- /dev/null +++ b/src/test/java/dev/example/restaurantManager/TestEatInOrder.java @@ -0,0 +1,67 @@ +package dev.example.restaurantManager; + + +import dev.example.restaurantManager.model.EatInOrderRestaurant; +import dev.example.restaurantManager.model.TableRestaurant; +import dev.example.restaurantManager.repository.EatInOrderRepository; +import dev.example.restaurantManager.repository.TableRestaurantRepository; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import static org.assertj.core.api.Assertions.assertThat; + + +import java.util.ArrayList; +import java.util.Date; +import java.util.Optional; + +@DataJpaTest +public class TestEatInOrder { + + @Autowired + private EatInOrderRepository eatInRepository; + @Autowired + private TableRestaurantRepository tableRepository; + + @Test + public void TestCreateEatIn(){ + + //Create Table + + TableRestaurant table1 = new TableRestaurant("T01", "Redonda","Mesa pequeña y redonda" , 4,false, new ArrayList<>()); + TableRestaurant table2 = new TableRestaurant("T02", "Cuadrada","Mesa pequeña y cuadrada" ,6,false, new ArrayList<>()); + TableRestaurant table3 = new TableRestaurant("T03", "Rectangular","Mesa grande y rectangular" ,10,false, new ArrayList<>()); + TableRestaurant table4 = new TableRestaurant("T04", "Rectangular","Mesa grande y rectangular" ,10,false, new ArrayList<>()); + + tableRepository.save(table1); + tableRepository.save(table2); + tableRepository.save(table3); + //create EainOrder + + EatInOrderRestaurant order1 = new EatInOrderRestaurant(); + order1.setId("O001"); + order1.setDate(new Date()); + order1.setWaiter("John Doe"); + order1.setPeopleQty(4); + order1.setTotalPayment(100.50); + order1.setPaid(true); + order1.setOrderedTableRestaurant(table1); + + // Asignar la orden a la mesa + table1.getEatInOrders().add(order1); + + // Guardar mesa y orden + eatInRepository.save(order1); + + // Verificar que la orden ha sido guardada + Optional foundOrder = eatInRepository.findById("O001"); + System.out.println("Order1: "); + System.out.println(foundOrder.get()); + System.out.println("--------------------"); + + // Comprobar que la orden se encuentra presente + assertThat(foundOrder).isPresent(); + + } + +} \ No newline at end of file