From 149e0caf9a2d36b0dfd9254b37c62c2bb73d2f0c Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Mon, 15 Dec 2025 09:40:48 +0000 Subject: [PATCH 1/9] add deadline --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5150e50f..05def9a9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-22041afd0340ce965d47ae6ef1cefeee28c7c493a6346c4f15d667ab976d596c.svg)](https://classroom.github.com/a/_uV8Mn8f) # 📘 Projektarbete: JPA + Hibernate med GitHub-flöde Projektet genomförs som antingen en Java CLI-applikation eller med hjälp av JavaFX om ni vill ha ett grafiskt gränssnitt. From 946936da744aa0bb734394e0c36839ee241609b3 Mon Sep 17 00:00:00 2001 From: EraiicPhu Date: Tue, 16 Dec 2025 10:45:21 +0100 Subject: [PATCH 2/9] Test av implementation av docker + env --- .gitignore | 1 + Dockerfile | 6 +++ dfg | 42 +++++++++++++++++++++ docker-compose.yaml | 16 ++++++++ src/main/resources/META-INF/persistence.xml | 22 +++++++++++ 5 files changed, 87 insertions(+) create mode 100644 Dockerfile create mode 100644 dfg create mode 100644 docker-compose.yaml create mode 100644 src/main/resources/META-INF/persistence.xml diff --git a/.gitignore b/.gitignore index 6ac465db..244268f9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ target/ /.idea/ +.env diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..2213772e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM eclipse-temurin:21-jdk + +COPY src/main/java/org/example/App.java /App.java + +ENTRYPOINT ["java", "/App.java"] + diff --git a/dfg b/dfg new file mode 100644 index 00000000..6dac856d --- /dev/null +++ b/dfg @@ -0,0 +1,42 @@ +commit 149e0caf9a2d36b0dfd9254b37c62c2bb73d2f0c (HEAD -> main, origin/main, origin/HEAD) +Author: github-classroom[bot] <66690702+github-classroom[bot]@users.noreply.github.com> +Date: Mon Dec 15 09:40:48 2025 +0000 + + add deadline + +commit 879440803daa45b536e2ea5f3ec269d1be62bf04 (upstream/main, upstream/HEAD) +Author: Martin Blomberg +Date: Sun Dec 14 16:07:37 2025 +0100 + + Setup for JPA application + +commit 539e1a559ab7607b40651315e45ef50074c51b8c +Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +Date: Sun Dec 14 12:52:36 2025 +0000 + + Bump org.mockito:mockito-junit-jupiter in the maven-deps group (#1) + + Bumps the maven-deps group with 1 update: [org.mockito:mockito-junit-jupiter](https://github.com/mockito/mockito). + + + Updates `org.mockito:mockito-junit-jupiter` from 5.20.0 to 5.21.0 + - [Release notes](https://github.com/mockito/mockito/releases) + - [Commits](https://github.com/mockito/mockito/compare/v5.20.0...v5.21.0) + + --- + updated-dependencies: + - dependency-name: org.mockito:mockito-junit-jupiter + dependency-version: 5.21.0 + dependency-type: direct:development + update-type: version-update:semver-minor + dependency-group: maven-deps + ... + + Signed-off-by: dependabot[bot] + Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> + +commit c9a2be0c3d4286e6322bb017f66aa77bbaaa5a00 +Author: github-classroom[bot] <66690702+github-classroom[bot]@users.noreply.github.com> +Date: Sun Dec 14 12:51:33 2025 +0000 + + Initial commit diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 00000000..18509cce --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,16 @@ +services: + mysql: + image: mysql:9.5.0 + container_name: mysql + restart: always + environment: + MYSQL_ROOT_PASSWORD: rootpassword + MYSQL_DATABASE: app_db + MYSQL_USER: + MYSQL_PASSWORD: + ports: + - "3306:3306" + volumes: + - mysql_data:/var/lib/mysql +volumes: + mysql_data: diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml new file mode 100644 index 00000000..22226c06 --- /dev/null +++ b/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,22 @@ + + + + org.example.Product + + + + + + + + + + + + + + + From 9076609d44543e3d0265c05c07dc67d913f52881 Mon Sep 17 00:00:00 2001 From: EraiicPhu Date: Tue, 16 Dec 2025 10:55:41 +0100 Subject: [PATCH 3/9] Change of password + review of code branch Co-authored-by: Anna Ziafar --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 18509cce..282619f1 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -7,7 +7,7 @@ services: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: app_db MYSQL_USER: - MYSQL_PASSWORD: + MYSQL_PASSWORD: PASSWORD ports: - "3306:3306" volumes: From d6402c7203a49464f17bd0c0d6c0bfcae1db86d3 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Tue, 16 Dec 2025 12:04:41 +0100 Subject: [PATCH 4/9] Docker-compose klar Man kan nu koppla upp sig till databasen --- docker-compose.yaml | 8 +++++--- src/docker/Dockerfile | 4 ++++ src/docker/docker-compose.yml | 17 +++++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 src/docker/Dockerfile create mode 100644 src/docker/docker-compose.yml diff --git a/docker-compose.yaml b/docker-compose.yaml index 282619f1..bfc28754 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -2,15 +2,17 @@ services: mysql: image: mysql:9.5.0 container_name: mysql - restart: always environment: MYSQL_ROOT_PASSWORD: rootpassword + MYSQL_ROOT_HOST: "%" MYSQL_DATABASE: app_db - MYSQL_USER: - MYSQL_PASSWORD: PASSWORD + MYSQL_USER: grupp2 + MYSQL_PASSWORD: ${PASSWORD} ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql volumes: mysql_data: + + diff --git a/src/docker/Dockerfile b/src/docker/Dockerfile new file mode 100644 index 00000000..46a05dd0 --- /dev/null +++ b/src/docker/Dockerfile @@ -0,0 +1,4 @@ +FROM eclipse-temurin:25-jdk +COPY target/classes/org/example/App.class /app/Docker/App.class +ENTRYPOINT ["java", "-cp", "/app", "Docker.Demo"] + diff --git a/src/docker/docker-compose.yml b/src/docker/docker-compose.yml new file mode 100644 index 00000000..7b240fc2 --- /dev/null +++ b/src/docker/docker-compose.yml @@ -0,0 +1,17 @@ +services: + mysql: + image: mysql:9.5.0 + environment: + MYSQL_ROOT_PASSWORD: root + MYSQL_ROOT_HOST: "%" + MYSQL_DATABASE: test + MYSQL_USER: grupp2 + MYSQL_PASSWORD: morot7 + ports: + - "3306:3306" + volumes: + - mysql_data:/var/lib/mysql + + +volumes: + mysql_data: From 2888c12bbca211fad52b9f7a07a25bfffe88b02e Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Wed, 17 Dec 2025 14:28:06 +0100 Subject: [PATCH 5/9] Two new entities - Restaurant and OpeningHours --- .../org/example/entities/OpeningHours.java | 57 +++++++++++ .../java/org/example/entities/Restaurant.java | 96 +++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 src/main/java/org/example/entities/OpeningHours.java create mode 100644 src/main/java/org/example/entities/Restaurant.java diff --git a/src/main/java/org/example/entities/OpeningHours.java b/src/main/java/org/example/entities/OpeningHours.java new file mode 100644 index 00000000..7cc363f2 --- /dev/null +++ b/src/main/java/org/example/entities/OpeningHours.java @@ -0,0 +1,57 @@ +package org.example.entities; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +import java.time.LocalTime; + +@Entity +public class OpeningHours { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private int restaurantID; + private String weekday; + private LocalTime openingTime; + private LocalTime closingTime; + + public Long getId() { + return id; + } + + public int getRestaurantID() { + return restaurantID; + } + + public void setRestaurantID(int restaurantID) { + this.restaurantID = restaurantID; + } + + public String getWeekday() { + return weekday; + } + + public void setWeekday(String weekday) { + this.weekday = weekday; + } + + public LocalTime getOpeningTime() { + return openingTime; + } + + public void setOpeningTime(LocalTime opening_time) { + this.openingTime = opening_time; + } + + public LocalTime getClosingTime() { + return closingTime; + } + + public void setClosingTime(LocalTime closing_time) { + this.closingTime = closing_time; + } +} diff --git a/src/main/java/org/example/entities/Restaurant.java b/src/main/java/org/example/entities/Restaurant.java new file mode 100644 index 00000000..47248069 --- /dev/null +++ b/src/main/java/org/example/entities/Restaurant.java @@ -0,0 +1,96 @@ +package org.example.entities; + +import jakarta.persistence.*; + +import java.math.BigDecimal; +import java.time.LocalTime; + +@Entity +public class Restaurant { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + private String name; + private String category; + private String address; + private BigDecimal priceRange; + private double rating; + private LocalTime openingTime; + private LocalTime closingTime; + + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public BigDecimal getPriceRange() { + return priceRange; + } + + public void setPriceRange(BigDecimal price_range) { + this.priceRange = price_range; + } + + public double getRating() { + return rating; + } + + public void setRating(double rating) { + this.rating = rating; + } + + public LocalTime getOpeningTime() { + return openingTime; + } + + public void setOpeningTime(LocalTime opening_time) { + this.openingTime = opening_time; + } + + public LocalTime getClosingTime() { + return closingTime; + } + + public void setClosingTime(LocalTime closing_time) { + this.closingTime = closing_time; + } + + @Override + public String toString() { + return "Restaurant{" + + "id=" + id + + ", name='" + name + '\'' + + ", category='" + category + '\'' + + ", address='" + address + '\'' + + ", priceRange=" + priceRange + + ", rating=" + rating + + ", openingTime=" + openingTime + + ", closingTime=" + closingTime + + '}'; + } +} From 929e8bc95a5815f1eb43178f6186c3ce4b0c683b Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Wed, 17 Dec 2025 17:50:55 +0100 Subject: [PATCH 6/9] Two new entities - Restaurant and OpeningHours --- .../org/example/entities/OpeningHours.java | 43 ++++++++++++++----- .../java/org/example/entities/Restaurant.java | 31 +++++-------- 2 files changed, 43 insertions(+), 31 deletions(-) diff --git a/src/main/java/org/example/entities/OpeningHours.java b/src/main/java/org/example/entities/OpeningHours.java index 7cc363f2..5bed3656 100644 --- a/src/main/java/org/example/entities/OpeningHours.java +++ b/src/main/java/org/example/entities/OpeningHours.java @@ -1,9 +1,6 @@ package org.example.entities; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; import java.time.LocalTime; @@ -14,25 +11,38 @@ public class OpeningHours { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - private int restaurantID; + @ManyToOne + @JoinColumn(name = "restaurant_id") + private Restaurant restaurant; + private String weekday; private LocalTime openingTime; private LocalTime closingTime; + public OpeningHours(Long id, Restaurant restaurant, String weekday, LocalTime openingTime, LocalTime closingTime) { + this.id = id; + this.restaurant = restaurant; + this.weekday = weekday; + this.openingTime = openingTime; + this.closingTime = closingTime; + } + + public OpeningHours(){} + public Long getId() { return id; } - public int getRestaurantID() { - return restaurantID; + public String getWeekday() { + return weekday; } - public void setRestaurantID(int restaurantID) { - this.restaurantID = restaurantID; + public Restaurant getRestaurant() { + return restaurant; } - public String getWeekday() { - return weekday; + public void setRestaurant(Restaurant restaurant) { + this.restaurant = restaurant; } public void setWeekday(String weekday) { @@ -54,4 +64,15 @@ public LocalTime getClosingTime() { public void setClosingTime(LocalTime closing_time) { this.closingTime = closing_time; } + + @Override + public String toString() { + return "OpeningHours{" + + "id=" + id + + ", restaurant=" + restaurant + + ", weekday='" + weekday + '\'' + + ", openingTime=" + openingTime + + ", closingTime=" + closingTime + + '}'; + } } diff --git a/src/main/java/org/example/entities/Restaurant.java b/src/main/java/org/example/entities/Restaurant.java index 47248069..0eb1ca61 100644 --- a/src/main/java/org/example/entities/Restaurant.java +++ b/src/main/java/org/example/entities/Restaurant.java @@ -17,8 +17,17 @@ public class Restaurant { private String address; private BigDecimal priceRange; private double rating; - private LocalTime openingTime; - private LocalTime closingTime; + + public Restaurant(Long id, String name, String category, String address, BigDecimal priceRange, double rating) { + this.id = id; + this.name = name; + this.category = category; + this.address = address; + this.priceRange = priceRange; + this.rating = rating; + } + + public Restaurant(){} public Long getId() { return id; @@ -64,22 +73,6 @@ public void setRating(double rating) { this.rating = rating; } - public LocalTime getOpeningTime() { - return openingTime; - } - - public void setOpeningTime(LocalTime opening_time) { - this.openingTime = opening_time; - } - - public LocalTime getClosingTime() { - return closingTime; - } - - public void setClosingTime(LocalTime closing_time) { - this.closingTime = closing_time; - } - @Override public String toString() { return "Restaurant{" + @@ -89,8 +82,6 @@ public String toString() { ", address='" + address + '\'' + ", priceRange=" + priceRange + ", rating=" + rating + - ", openingTime=" + openingTime + - ", closingTime=" + closingTime + '}'; } } From 1b0618e6c48e91dd10ab65d05f3af9efbe51cc4e Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Thu, 18 Dec 2025 11:22:55 +0100 Subject: [PATCH 7/9] Create entities Restaurant and OpeningHours --- .../java/org/example/entities/OpeningHours.java | 14 -------------- src/main/java/org/example/entities/Restaurant.java | 7 ++++++- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/example/entities/OpeningHours.java b/src/main/java/org/example/entities/OpeningHours.java index 5bed3656..9dbf732c 100644 --- a/src/main/java/org/example/entities/OpeningHours.java +++ b/src/main/java/org/example/entities/OpeningHours.java @@ -11,17 +11,12 @@ public class OpeningHours { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @ManyToOne - @JoinColumn(name = "restaurant_id") - private Restaurant restaurant; - private String weekday; private LocalTime openingTime; private LocalTime closingTime; public OpeningHours(Long id, Restaurant restaurant, String weekday, LocalTime openingTime, LocalTime closingTime) { this.id = id; - this.restaurant = restaurant; this.weekday = weekday; this.openingTime = openingTime; this.closingTime = closingTime; @@ -37,14 +32,6 @@ public String getWeekday() { return weekday; } - public Restaurant getRestaurant() { - return restaurant; - } - - public void setRestaurant(Restaurant restaurant) { - this.restaurant = restaurant; - } - public void setWeekday(String weekday) { this.weekday = weekday; } @@ -69,7 +56,6 @@ public void setClosingTime(LocalTime closing_time) { public String toString() { return "OpeningHours{" + "id=" + id + - ", restaurant=" + restaurant + ", weekday='" + weekday + '\'' + ", openingTime=" + openingTime + ", closingTime=" + closingTime + diff --git a/src/main/java/org/example/entities/Restaurant.java b/src/main/java/org/example/entities/Restaurant.java index 0eb1ca61..742d8d8f 100644 --- a/src/main/java/org/example/entities/Restaurant.java +++ b/src/main/java/org/example/entities/Restaurant.java @@ -3,7 +3,8 @@ import jakarta.persistence.*; import java.math.BigDecimal; -import java.time.LocalTime; +import java.util.ArrayList; +import java.util.List; @Entity public class Restaurant { @@ -12,6 +13,10 @@ public class Restaurant { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @OneToMany + @JoinColumn(name = "openingHoursId") + private List openingHours = new ArrayList<>(); + private String name; private String category; private String address; From e51c6ec408b19314372aab05a6bcf71d11206d31 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Thu, 18 Dec 2025 12:43:30 +0100 Subject: [PATCH 8/9] Add enum for weekday and validate that closing time is after opening time --- .../org/example/entities/OpeningHours.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/example/entities/OpeningHours.java b/src/main/java/org/example/entities/OpeningHours.java index 9dbf732c..26a2ad27 100644 --- a/src/main/java/org/example/entities/OpeningHours.java +++ b/src/main/java/org/example/entities/OpeningHours.java @@ -11,15 +11,19 @@ public class OpeningHours { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - private String weekday; + @Enumerated(EnumType.ORDINAL) + private Weekday weekday; + private LocalTime openingTime; private LocalTime closingTime; - public OpeningHours(Long id, Restaurant restaurant, String weekday, LocalTime openingTime, LocalTime closingTime) { + public OpeningHours(Long id, Weekday weekday, LocalTime openingTime, LocalTime closingTime) { this.id = id; this.weekday = weekday; this.openingTime = openingTime; this.closingTime = closingTime; + if(openingTime.isAfter(closingTime)) + throw new RuntimeException("Opening time cannot be after closing time"); } public OpeningHours(){} @@ -28,11 +32,11 @@ public Long getId() { return id; } - public String getWeekday() { + public Weekday getWeekday() { return weekday; } - public void setWeekday(String weekday) { + public void setWeekday(Weekday weekday) { this.weekday = weekday; } @@ -61,4 +65,14 @@ public String toString() { ", closingTime=" + closingTime + '}'; } + + enum Weekday{ + MONDAY, + TUESDAY, + WEDNESDAY, + THURSDAY, + FRIDAY, + SATURDAY, + SUNDAY + } } From 8651770931727dc1a8b2efbd96099420d1118270 Mon Sep 17 00:00:00 2001 From: Anna Ziafar Date: Thu, 18 Dec 2025 12:51:17 +0100 Subject: [PATCH 9/9] Add enum for weekday and validate that closing time is after opening time --- src/main/java/org/example/entities/OpeningHours.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/example/entities/OpeningHours.java b/src/main/java/org/example/entities/OpeningHours.java index 26a2ad27..9427662e 100644 --- a/src/main/java/org/example/entities/OpeningHours.java +++ b/src/main/java/org/example/entities/OpeningHours.java @@ -11,7 +11,7 @@ public class OpeningHours { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Enumerated(EnumType.ORDINAL) + @Enumerated(EnumType.STRING) private Weekday weekday; private LocalTime openingTime;