From 058b05c27899e855fe2ed08417b1bd1d3ebe0825 Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Thu, 12 Dec 2019 07:33:01 -0600 Subject: [PATCH 01/20] Adds id field to Event --- .../controllers/EventController.java | 9 ++- .../launchcode/codingevents/models/Event.java | 60 +++++++++++++++++++ .../resources/templates/events/create.html | 17 +++++- .../resources/templates/events/index.html | 21 +++++-- src/main/resources/templates/fragments.html | 10 ++-- src/main/resources/templates/index.html | 2 +- 6 files changed, 101 insertions(+), 18 deletions(-) create mode 100644 src/main/java/org/launchcode/codingevents/models/Event.java diff --git a/src/main/java/org/launchcode/codingevents/controllers/EventController.java b/src/main/java/org/launchcode/codingevents/controllers/EventController.java index 2e837d2b0..34c54299e 100644 --- a/src/main/java/org/launchcode/codingevents/controllers/EventController.java +++ b/src/main/java/org/launchcode/codingevents/controllers/EventController.java @@ -1,5 +1,7 @@ package org.launchcode.codingevents.controllers; +import org.apache.coyote.Request; +import org.launchcode.codingevents.models.Event; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @@ -17,7 +19,7 @@ @RequestMapping("events") public class EventController { - private static List events = new ArrayList<>(); + private static List events = new ArrayList<>(); @GetMapping public String displayAllEvents(Model model) { @@ -33,8 +35,9 @@ public String displayCreateEventForm(Model model) { } @PostMapping("create") - public String processCreateEventForm(@RequestParam String eventName) { - events.add(eventName); + public String processCreateEventForm(@RequestParam String eventName, + @RequestParam String eventDescription) { + events.add(new Event(eventName, eventDescription)); return "redirect:"; } diff --git a/src/main/java/org/launchcode/codingevents/models/Event.java b/src/main/java/org/launchcode/codingevents/models/Event.java new file mode 100644 index 000000000..45625dad5 --- /dev/null +++ b/src/main/java/org/launchcode/codingevents/models/Event.java @@ -0,0 +1,60 @@ +package org.launchcode.codingevents.models; + +import java.util.Objects; + +/** + * Created by Chris Bay + */ +public class Event { + + private int id; + private static int nextId = 1; + + private String name; + private String description; + + public Event(String name, String description) { + this.name = name; + this.description = description; + this.id = nextId; + nextId++; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public int getId() { + return id; + } + + @Override + public String toString() { + return name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Event event = (Event) o; + return id == event.id; + } + + @Override + public int hashCode() { + return Objects.hash(id); + } +} diff --git a/src/main/resources/templates/events/create.html b/src/main/resources/templates/events/create.html index bac9ddef0..f7b590235 100644 --- a/src/main/resources/templates/events/create.html +++ b/src/main/resources/templates/events/create.html @@ -1,13 +1,24 @@ - +
- - +
+ +
+
+ +
+
+ +
diff --git a/src/main/resources/templates/events/index.html b/src/main/resources/templates/events/index.html index 561ce87e2..c9a70a344 100644 --- a/src/main/resources/templates/events/index.html +++ b/src/main/resources/templates/events/index.html @@ -1,15 +1,24 @@ - +
-
    - -
  • -
    -
+ + + + + + + + + + + + + +
IDNameDescription
\ No newline at end of file diff --git a/src/main/resources/templates/fragments.html b/src/main/resources/templates/fragments.html index 66b59a0f6..8a1629812 100644 --- a/src/main/resources/templates/fragments.html +++ b/src/main/resources/templates/fragments.html @@ -3,16 +3,16 @@ Coding Events - - + + diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index b8aaaaaeb..8315be5dc 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -1,7 +1,7 @@ - +

Coding Events

From 8c587e936d249032c984bb9c75ecf2dc1249afab Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Thu, 12 Dec 2019 07:56:20 -0600 Subject: [PATCH 02/20] Adds data layer for Event objects --- .../controllers/EventController.java | 7 ++-- .../codingevents/data/EventData.java | 32 +++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/launchcode/codingevents/data/EventData.java diff --git a/src/main/java/org/launchcode/codingevents/controllers/EventController.java b/src/main/java/org/launchcode/codingevents/controllers/EventController.java index 34c54299e..4cc5a3de8 100644 --- a/src/main/java/org/launchcode/codingevents/controllers/EventController.java +++ b/src/main/java/org/launchcode/codingevents/controllers/EventController.java @@ -1,6 +1,7 @@ package org.launchcode.codingevents.controllers; import org.apache.coyote.Request; +import org.launchcode.codingevents.data.EventData; import org.launchcode.codingevents.models.Event; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -19,12 +20,10 @@ @RequestMapping("events") public class EventController { - private static List events = new ArrayList<>(); - @GetMapping public String displayAllEvents(Model model) { model.addAttribute("title", "All Events"); - model.addAttribute("events", events); + model.addAttribute("events", EventData.getAll()); return "events/index"; } @@ -37,7 +36,7 @@ public String displayCreateEventForm(Model model) { @PostMapping("create") public String processCreateEventForm(@RequestParam String eventName, @RequestParam String eventDescription) { - events.add(new Event(eventName, eventDescription)); + EventData.add(new Event(eventName, eventDescription)); return "redirect:"; } diff --git a/src/main/java/org/launchcode/codingevents/data/EventData.java b/src/main/java/org/launchcode/codingevents/data/EventData.java new file mode 100644 index 000000000..89438ee52 --- /dev/null +++ b/src/main/java/org/launchcode/codingevents/data/EventData.java @@ -0,0 +1,32 @@ +package org.launchcode.codingevents.data; + +import org.launchcode.codingevents.models.Event; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by Chris Bay + */ +public class EventData { + + private static final Map events = new HashMap<>(); + + public static Collection getAll() { + return events.values(); + } + + public static Event getById(int id) { + return events.get(id); + } + + public static void add(Event event) { + events.put(event.getId(), event); + } + + public static void remove(int id) { + events.remove(id); + } + +} From 4cfd42d2b4ae6e01ca14f604bef1c80e731db63e Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Thu, 12 Dec 2019 08:21:47 -0600 Subject: [PATCH 03/20] Implements ability to delete events --- .../controllers/EventController.java | 19 +++++++++++++++ .../resources/templates/events/delete.html | 23 +++++++++++++++++++ src/main/resources/templates/fragments.html | 1 + 3 files changed, 43 insertions(+) create mode 100644 src/main/resources/templates/events/delete.html diff --git a/src/main/java/org/launchcode/codingevents/controllers/EventController.java b/src/main/java/org/launchcode/codingevents/controllers/EventController.java index 4cc5a3de8..008ebdf4c 100644 --- a/src/main/java/org/launchcode/codingevents/controllers/EventController.java +++ b/src/main/java/org/launchcode/codingevents/controllers/EventController.java @@ -40,4 +40,23 @@ public String processCreateEventForm(@RequestParam String eventName, return "redirect:"; } + @GetMapping("delete") + public String displayDeleteEventForm(Model model) { + model.addAttribute("title", "Delete Events"); + model.addAttribute("events", EventData.getAll()); + return "events/delete"; + } + + @PostMapping("delete") + public String processDeleteEventsForm(@RequestParam(required = false) int[] eventIds) { + + if (eventIds != null) { + for (int id : eventIds) { + EventData.remove(id); + } + } + + return "redirect:"; + } + } diff --git a/src/main/resources/templates/events/delete.html b/src/main/resources/templates/events/delete.html new file mode 100644 index 000000000..97a1d7f46 --- /dev/null +++ b/src/main/resources/templates/events/delete.html @@ -0,0 +1,23 @@ + + + + + +
+ +
+ + +
+ +
+
+ + +
+ + + \ No newline at end of file diff --git a/src/main/resources/templates/fragments.html b/src/main/resources/templates/fragments.html index 8a1629812..3d0b0b64e 100644 --- a/src/main/resources/templates/fragments.html +++ b/src/main/resources/templates/fragments.html @@ -13,6 +13,7 @@

Coding Events

From 7a735e78809dd65df83a79fb2a9c990d43e5b0eb Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Thu, 12 Dec 2019 08:27:48 -0600 Subject: [PATCH 04/20] Adds model binding --- .../codingevents/controllers/EventController.java | 14 +++----------- src/main/resources/templates/events/create.html | 4 ++-- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/launchcode/codingevents/controllers/EventController.java b/src/main/java/org/launchcode/codingevents/controllers/EventController.java index 008ebdf4c..aebfcff64 100644 --- a/src/main/java/org/launchcode/codingevents/controllers/EventController.java +++ b/src/main/java/org/launchcode/codingevents/controllers/EventController.java @@ -1,17 +1,10 @@ package org.launchcode.codingevents.controllers; -import org.apache.coyote.Request; import org.launchcode.codingevents.data.EventData; import org.launchcode.codingevents.models.Event; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; - -import java.util.ArrayList; -import java.util.List; +import org.springframework.web.bind.annotation.*; /** * Created by Chris Bay @@ -34,9 +27,8 @@ public String displayCreateEventForm(Model model) { } @PostMapping("create") - public String processCreateEventForm(@RequestParam String eventName, - @RequestParam String eventDescription) { - EventData.add(new Event(eventName, eventDescription)); + public String processCreateEventForm(@ModelAttribute Event newEvent) { + EventData.add(newEvent); return "redirect:"; } diff --git a/src/main/resources/templates/events/create.html b/src/main/resources/templates/events/create.html index f7b590235..87eac4d38 100644 --- a/src/main/resources/templates/events/create.html +++ b/src/main/resources/templates/events/create.html @@ -8,12 +8,12 @@
From bf923da4fa38addf115aad71c4845357b5418e4f Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Mon, 16 Dec 2019 05:32:54 -0600 Subject: [PATCH 05/20] Adds validation annotations to model --- .../launchcode/codingevents/models/Event.java | 21 ++++++++++++++++++- .../resources/templates/events/create.html | 5 +++++ .../resources/templates/events/index.html | 2 ++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/launchcode/codingevents/models/Event.java b/src/main/java/org/launchcode/codingevents/models/Event.java index 45625dad5..bb87b5268 100644 --- a/src/main/java/org/launchcode/codingevents/models/Event.java +++ b/src/main/java/org/launchcode/codingevents/models/Event.java @@ -1,5 +1,8 @@ package org.launchcode.codingevents.models; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; import java.util.Objects; /** @@ -10,12 +13,20 @@ public class Event { private int id; private static int nextId = 1; + @NotBlank + @Size(min = 3, max = 50, message = "Name must be between 3 and 50 characters") private String name; + + @Size(max = 500, message = "Description too long!") private String description; - public Event(String name, String description) { + @Email(message = "Invalid email. Try again.") + private String contactEmail; + + public Event(String name, String description, String contactEmail) { this.name = name; this.description = description; + this.contactEmail = contactEmail; this.id = nextId; nextId++; } @@ -36,6 +47,14 @@ public void setDescription(String description) { this.description = description; } + public String getContactEmail() { + return contactEmail; + } + + public void setContactEmail(String contactEmail) { + this.contactEmail = contactEmail; + } + public int getId() { return id; } diff --git a/src/main/resources/templates/events/create.html b/src/main/resources/templates/events/create.html index 87eac4d38..d9c5b5ebf 100644 --- a/src/main/resources/templates/events/create.html +++ b/src/main/resources/templates/events/create.html @@ -16,6 +16,11 @@
+
+ +
diff --git a/src/main/resources/templates/events/index.html b/src/main/resources/templates/events/index.html index c9a70a344..feceed35c 100644 --- a/src/main/resources/templates/events/index.html +++ b/src/main/resources/templates/events/index.html @@ -11,12 +11,14 @@ ID Name Description + Contact Email + From c80100b7e526acb4bc3562fe81348d3bad86969c Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Mon, 16 Dec 2019 06:02:46 -0600 Subject: [PATCH 06/20] Displays custom validation errors --- .../codingevents/controllers/EventController.java | 12 +++++++++++- .../org/launchcode/codingevents/models/Event.java | 5 ++++- src/main/resources/static/styles.css | 5 ++++- src/main/resources/templates/events/create.html | 9 ++++++--- src/main/resources/templates/fragments.html | 1 + 5 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/launchcode/codingevents/controllers/EventController.java b/src/main/java/org/launchcode/codingevents/controllers/EventController.java index aebfcff64..08bdcab79 100644 --- a/src/main/java/org/launchcode/codingevents/controllers/EventController.java +++ b/src/main/java/org/launchcode/codingevents/controllers/EventController.java @@ -4,8 +4,11 @@ import org.launchcode.codingevents.models.Event; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; +import org.springframework.validation.Errors; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; + /** * Created by Chris Bay */ @@ -23,11 +26,18 @@ public String displayAllEvents(Model model) { @GetMapping("create") public String displayCreateEventForm(Model model) { model.addAttribute("title", "Create Event"); + model.addAttribute(new Event()); return "events/create"; } @PostMapping("create") - public String processCreateEventForm(@ModelAttribute Event newEvent) { + public String processCreateEventForm(@ModelAttribute @Valid Event newEvent, + Errors errors, Model model) { + if(errors.hasErrors()) { + model.addAttribute("title", "Create Event"); + return "events/create"; + } + EventData.add(newEvent); return "redirect:"; } diff --git a/src/main/java/org/launchcode/codingevents/models/Event.java b/src/main/java/org/launchcode/codingevents/models/Event.java index bb87b5268..9fd81b74d 100644 --- a/src/main/java/org/launchcode/codingevents/models/Event.java +++ b/src/main/java/org/launchcode/codingevents/models/Event.java @@ -13,13 +13,14 @@ public class Event { private int id; private static int nextId = 1; - @NotBlank + @NotBlank(message = "Name is required") @Size(min = 3, max = 50, message = "Name must be between 3 and 50 characters") private String name; @Size(max = 500, message = "Description too long!") private String description; + @NotBlank(message = "Email is required") @Email(message = "Invalid email. Try again.") private String contactEmail; @@ -31,6 +32,8 @@ public Event(String name, String description, String contactEmail) { nextId++; } + public Event() {} + public String getName() { return name; } diff --git a/src/main/resources/static/styles.css b/src/main/resources/static/styles.css index 654f3c43a..5369ff798 100644 --- a/src/main/resources/static/styles.css +++ b/src/main/resources/static/styles.css @@ -1,3 +1,6 @@ body { - font-size: 18px; + font-size: 14px; +} +.error { + color: red; } \ No newline at end of file diff --git a/src/main/resources/templates/events/create.html b/src/main/resources/templates/events/create.html index d9c5b5ebf..e819af567 100644 --- a/src/main/resources/templates/events/create.html +++ b/src/main/resources/templates/events/create.html @@ -8,18 +8,21 @@
+

+

+

diff --git a/src/main/resources/templates/fragments.html b/src/main/resources/templates/fragments.html index 3d0b0b64e..9cd70c5f4 100644 --- a/src/main/resources/templates/fragments.html +++ b/src/main/resources/templates/fragments.html @@ -5,6 +5,7 @@ Coding Events + From 4dbb1153bc14c6eb35b1af01c12de0ddd86d716f Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Mon, 16 Dec 2019 06:38:47 -0600 Subject: [PATCH 07/20] Adds EventType enum --- .../controllers/EventController.java | 2 ++ .../launchcode/codingevents/models/Event.java | 19 +++++++++++++--- .../codingevents/models/EventType.java | 22 +++++++++++++++++++ .../resources/templates/events/create.html | 10 +++++++++ .../resources/templates/events/index.html | 2 ++ 5 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/launchcode/codingevents/models/EventType.java diff --git a/src/main/java/org/launchcode/codingevents/controllers/EventController.java b/src/main/java/org/launchcode/codingevents/controllers/EventController.java index 08bdcab79..0932cbbf7 100644 --- a/src/main/java/org/launchcode/codingevents/controllers/EventController.java +++ b/src/main/java/org/launchcode/codingevents/controllers/EventController.java @@ -2,6 +2,7 @@ import org.launchcode.codingevents.data.EventData; import org.launchcode.codingevents.models.Event; +import org.launchcode.codingevents.models.EventType; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.Errors; @@ -27,6 +28,7 @@ public String displayAllEvents(Model model) { public String displayCreateEventForm(Model model) { model.addAttribute("title", "Create Event"); model.addAttribute(new Event()); + model.addAttribute("types", EventType.values()); return "events/create"; } diff --git a/src/main/java/org/launchcode/codingevents/models/Event.java b/src/main/java/org/launchcode/codingevents/models/Event.java index 9fd81b74d..46733cd5a 100644 --- a/src/main/java/org/launchcode/codingevents/models/Event.java +++ b/src/main/java/org/launchcode/codingevents/models/Event.java @@ -24,16 +24,21 @@ public class Event { @Email(message = "Invalid email. Try again.") private String contactEmail; - public Event(String name, String description, String contactEmail) { + private EventType type; + + public Event(String name, String description, String contactEmail, EventType type) { + this(); this.name = name; this.description = description; this.contactEmail = contactEmail; + this.type = type; + } + + public Event() { this.id = nextId; nextId++; } - public Event() {} - public String getName() { return name; } @@ -58,6 +63,14 @@ public void setContactEmail(String contactEmail) { this.contactEmail = contactEmail; } + public EventType getType() { + return type; + } + + public void setType(EventType type) { + this.type = type; + } + public int getId() { return id; } diff --git a/src/main/java/org/launchcode/codingevents/models/EventType.java b/src/main/java/org/launchcode/codingevents/models/EventType.java new file mode 100644 index 000000000..027e089b5 --- /dev/null +++ b/src/main/java/org/launchcode/codingevents/models/EventType.java @@ -0,0 +1,22 @@ +package org.launchcode.codingevents.models; + +/** + * Created by Chris Bay + */ +public enum EventType { + + CONFERENCE("Conference"), + MEETUP("Meetup"), + WORKSHOP("Workshop"), + SOCIAL("Social"); + + private final String displayName; + + EventType(String displayName) { + this.displayName = displayName; + } + + public String getDisplayName() { + return displayName; + } +} diff --git a/src/main/resources/templates/events/create.html b/src/main/resources/templates/events/create.html index e819af567..04b1bbd1d 100644 --- a/src/main/resources/templates/events/create.html +++ b/src/main/resources/templates/events/create.html @@ -24,6 +24,16 @@

+
+ +
diff --git a/src/main/resources/templates/events/index.html b/src/main/resources/templates/events/index.html index feceed35c..5a0bd04b9 100644 --- a/src/main/resources/templates/events/index.html +++ b/src/main/resources/templates/events/index.html @@ -12,6 +12,7 @@ Name Description Contact Email + Type @@ -19,6 +20,7 @@ + From 65b4bdb33fb84b636a25de47d3e08bf3b76b36ef Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Tue, 14 Jan 2020 06:37:08 -0600 Subject: [PATCH 08/20] Configures app to connect to MySQL --- build.gradle | 2 ++ src/main/resources/application.properties | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/build.gradle b/build.gradle index 0f2b055d1..ac3577b28 100644 --- a/build.gradle +++ b/build.gradle @@ -22,6 +22,8 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'mysql:mysql-connector-java' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8b1378917..a1c8f509e 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1 +1,17 @@ +spring.datasource.url=jdbc:mysql://localhost:3306/coding_events +spring.datasource.username=coding_events +spring.datasource.password=Learn2code! + +# Specify the DBMS +spring.jpa.database = MYSQL + +# Show or not log for each sql query +spring.jpa.show-sql = false + +# Hibernate ddl auto (create, create-drop, update) +spring.jpa.hibernate.ddl-auto = update + +# Use spring.jpa.properties.* for Hibernate native properties (the prefix is +# stripped before adding them to the entity manager) +spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL8Dialect From 91fce26533d891b9a3010c90aab83998013f3c13 Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Tue, 14 Jan 2020 06:52:24 -0600 Subject: [PATCH 09/20] Enables persistence on Event class --- .../codingevents/data/EventRepository.java | 12 ++++++++++++ .../org/launchcode/codingevents/models/Event.java | 13 +++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 src/main/java/org/launchcode/codingevents/data/EventRepository.java diff --git a/src/main/java/org/launchcode/codingevents/data/EventRepository.java b/src/main/java/org/launchcode/codingevents/data/EventRepository.java new file mode 100644 index 000000000..6072b8fbf --- /dev/null +++ b/src/main/java/org/launchcode/codingevents/data/EventRepository.java @@ -0,0 +1,12 @@ +package org.launchcode.codingevents.data; + +import org.launchcode.codingevents.models.Event; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +/** + * Created by Chris Bay + */ +@Repository +public interface EventRepository extends CrudRepository { +} diff --git a/src/main/java/org/launchcode/codingevents/models/Event.java b/src/main/java/org/launchcode/codingevents/models/Event.java index 46733cd5a..11ed18d43 100644 --- a/src/main/java/org/launchcode/codingevents/models/Event.java +++ b/src/main/java/org/launchcode/codingevents/models/Event.java @@ -1,5 +1,8 @@ package org.launchcode.codingevents.models; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; @@ -8,10 +11,12 @@ /** * Created by Chris Bay */ +@Entity public class Event { + @Id + @GeneratedValue private int id; - private static int nextId = 1; @NotBlank(message = "Name is required") @Size(min = 3, max = 50, message = "Name must be between 3 and 50 characters") @@ -27,17 +32,13 @@ public class Event { private EventType type; public Event(String name, String description, String contactEmail, EventType type) { - this(); this.name = name; this.description = description; this.contactEmail = contactEmail; this.type = type; } - public Event() { - this.id = nextId; - nextId++; - } + public Event() {} public String getName() { return name; From 2fdf1ab0cb060a2d01a33ccfa84cc7f63da1da1a Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Tue, 14 Jan 2020 07:16:57 -0600 Subject: [PATCH 10/20] Uses EventRepository in EventController --- .../controllers/EventController.java | 14 +++++--- .../codingevents/data/EventData.java | 32 ------------------- src/main/resources/application.properties | 2 +- 3 files changed, 10 insertions(+), 38 deletions(-) delete mode 100644 src/main/java/org/launchcode/codingevents/data/EventData.java diff --git a/src/main/java/org/launchcode/codingevents/controllers/EventController.java b/src/main/java/org/launchcode/codingevents/controllers/EventController.java index 0932cbbf7..15c0a2550 100644 --- a/src/main/java/org/launchcode/codingevents/controllers/EventController.java +++ b/src/main/java/org/launchcode/codingevents/controllers/EventController.java @@ -1,8 +1,9 @@ package org.launchcode.codingevents.controllers; -import org.launchcode.codingevents.data.EventData; +import org.launchcode.codingevents.data.EventRepository; import org.launchcode.codingevents.models.Event; import org.launchcode.codingevents.models.EventType; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.Errors; @@ -17,10 +18,13 @@ @RequestMapping("events") public class EventController { + @Autowired + private EventRepository eventRepository; + @GetMapping public String displayAllEvents(Model model) { model.addAttribute("title", "All Events"); - model.addAttribute("events", EventData.getAll()); + model.addAttribute("events", eventRepository.findAll()); return "events/index"; } @@ -40,14 +44,14 @@ public String processCreateEventForm(@ModelAttribute @Valid Event newEvent, return "events/create"; } - EventData.add(newEvent); + eventRepository.save(newEvent); return "redirect:"; } @GetMapping("delete") public String displayDeleteEventForm(Model model) { model.addAttribute("title", "Delete Events"); - model.addAttribute("events", EventData.getAll()); + model.addAttribute("events", eventRepository.findAll()); return "events/delete"; } @@ -56,7 +60,7 @@ public String processDeleteEventsForm(@RequestParam(required = false) int[] even if (eventIds != null) { for (int id : eventIds) { - EventData.remove(id); + eventRepository.deleteById(id); } } diff --git a/src/main/java/org/launchcode/codingevents/data/EventData.java b/src/main/java/org/launchcode/codingevents/data/EventData.java deleted file mode 100644 index 89438ee52..000000000 --- a/src/main/java/org/launchcode/codingevents/data/EventData.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.launchcode.codingevents.data; - -import org.launchcode.codingevents.models.Event; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -/** - * Created by Chris Bay - */ -public class EventData { - - private static final Map events = new HashMap<>(); - - public static Collection getAll() { - return events.values(); - } - - public static Event getById(int id) { - return events.get(id); - } - - public static void add(Event event) { - events.put(event.getId(), event); - } - - public static void remove(int id) { - events.remove(id); - } - -} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a1c8f509e..f8244c57f 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -6,7 +6,7 @@ spring.datasource.password=Learn2code! spring.jpa.database = MYSQL # Show or not log for each sql query -spring.jpa.show-sql = false +spring.jpa.show-sql = true # Hibernate ddl auto (create, create-drop, update) spring.jpa.hibernate.ddl-auto = update From 34c1b4f5a9a8fd2f067b8c59ed51a7d3cb5c9a84 Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Tue, 14 Jan 2020 07:40:59 -0600 Subject: [PATCH 11/20] Adds persistent EventCategory model --- .../controllers/EventCategoryController.java | 54 ++++++++++++++++++ .../data/EventCategoryRepository.java | 13 +++++ .../codingevents/models/EventCategory.java | 57 +++++++++++++++++++ .../templates/eventCategories/create.html | 19 +++++++ .../templates/eventCategories/index.html | 21 +++++++ src/main/resources/templates/fragments.html | 11 +++- 6 files changed, 172 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/launchcode/codingevents/controllers/EventCategoryController.java create mode 100644 src/main/java/org/launchcode/codingevents/data/EventCategoryRepository.java create mode 100644 src/main/java/org/launchcode/codingevents/models/EventCategory.java create mode 100644 src/main/resources/templates/eventCategories/create.html create mode 100644 src/main/resources/templates/eventCategories/index.html diff --git a/src/main/java/org/launchcode/codingevents/controllers/EventCategoryController.java b/src/main/java/org/launchcode/codingevents/controllers/EventCategoryController.java new file mode 100644 index 000000000..9c521f433 --- /dev/null +++ b/src/main/java/org/launchcode/codingevents/controllers/EventCategoryController.java @@ -0,0 +1,54 @@ +package org.launchcode.codingevents.controllers; + +import org.launchcode.codingevents.data.EventCategoryRepository; +import org.launchcode.codingevents.models.EventCategory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.Errors; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.validation.Valid; + +/** + * Created by Chris Bay + */ +@Controller +@RequestMapping("eventCategories") +public class EventCategoryController { + + @Autowired + private EventCategoryRepository eventCategoryRepository; + + @GetMapping + public String displayAllCategories(Model model) { + model.addAttribute("title", "All Categories"); + model.addAttribute("categories", eventCategoryRepository.findAll()); + return "eventCategories/index"; + } + + @GetMapping("create") + public String renderCreateEventCategoryForm(Model model) { + model.addAttribute("title", "Create Category"); + model.addAttribute(new EventCategory()); + return "eventCategories/create"; + } + + @PostMapping("create") + public String processCreateEventCategoryForm(@Valid @ModelAttribute EventCategory eventCategory, + Errors errors, Model model) { + + if (errors.hasErrors()) { + model.addAttribute("title", "Create Category"); + model.addAttribute(new EventCategory()); + return "eventCategories/create"; + } + + eventCategoryRepository.save(eventCategory); + return "redirect:"; + } + +} diff --git a/src/main/java/org/launchcode/codingevents/data/EventCategoryRepository.java b/src/main/java/org/launchcode/codingevents/data/EventCategoryRepository.java new file mode 100644 index 000000000..b819c1a5b --- /dev/null +++ b/src/main/java/org/launchcode/codingevents/data/EventCategoryRepository.java @@ -0,0 +1,13 @@ +package org.launchcode.codingevents.data; + +import org.launchcode.codingevents.models.EventCategory; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +/** + * Created by Chris Bay + */ +@Repository +public interface EventCategoryRepository extends CrudRepository { + +} diff --git a/src/main/java/org/launchcode/codingevents/models/EventCategory.java b/src/main/java/org/launchcode/codingevents/models/EventCategory.java new file mode 100644 index 000000000..b088c7a0e --- /dev/null +++ b/src/main/java/org/launchcode/codingevents/models/EventCategory.java @@ -0,0 +1,57 @@ +package org.launchcode.codingevents.models; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.validation.constraints.Size; +import java.util.Objects; + +/** + * Created by Chris Bay + */ +@Entity +public class EventCategory { + + @Id + @GeneratedValue + private int id; + + @Size(min=3, message="Name must be at least 3 characters long") + private String name; + + public EventCategory(@Size(min = 3, message = "Name must be at least 3 characters long") String name) { + this.name = name; + } + + public EventCategory() {} + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getId() { + return id; + } + + @Override + public String toString() { + return name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + EventCategory that = (EventCategory) o; + return id == that.id; + } + + @Override + public int hashCode() { + return Objects.hash(id); + } +} diff --git a/src/main/resources/templates/eventCategories/create.html b/src/main/resources/templates/eventCategories/create.html new file mode 100644 index 000000000..20a307c64 --- /dev/null +++ b/src/main/resources/templates/eventCategories/create.html @@ -0,0 +1,19 @@ + + + + + +
+ + +
+ + +
+ + + + + diff --git a/src/main/resources/templates/eventCategories/index.html b/src/main/resources/templates/eventCategories/index.html new file mode 100644 index 000000000..1b6cfb64e --- /dev/null +++ b/src/main/resources/templates/eventCategories/index.html @@ -0,0 +1,21 @@ + + + + + +
+ + + + + + + + + + + +
Category Name
+ + + diff --git a/src/main/resources/templates/fragments.html b/src/main/resources/templates/fragments.html index 9cd70c5f4..5539c6a92 100644 --- a/src/main/resources/templates/fragments.html +++ b/src/main/resources/templates/fragments.html @@ -3,20 +3,25 @@ Coding Events + + + - + - \ No newline at end of file + From bf0c5fc1fb0f8965aef0c18061ec0da8dd96fd94 Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Wed, 15 Jan 2020 16:02:58 -0600 Subject: [PATCH 12/20] Creates AbstractEntity --- .../codingevents/models/AbstractEntity.java | 35 +++++++++++++++++++ .../launchcode/codingevents/models/Event.java | 25 +------------ .../codingevents/models/EventCategory.java | 25 +------------ 3 files changed, 37 insertions(+), 48 deletions(-) create mode 100644 src/main/java/org/launchcode/codingevents/models/AbstractEntity.java diff --git a/src/main/java/org/launchcode/codingevents/models/AbstractEntity.java b/src/main/java/org/launchcode/codingevents/models/AbstractEntity.java new file mode 100644 index 000000000..5fcdfb34f --- /dev/null +++ b/src/main/java/org/launchcode/codingevents/models/AbstractEntity.java @@ -0,0 +1,35 @@ +package org.launchcode.codingevents.models; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import java.util.Objects; + +/** + * Created by Chris Bay + */ +@MappedSuperclass +public abstract class AbstractEntity { + + @Id + @GeneratedValue + private int id; + + public int getId() { + return id; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + AbstractEntity entity = (AbstractEntity) o; + return id == entity.id; + } + + @Override + public int hashCode() { + return Objects.hash(id); + } + +} diff --git a/src/main/java/org/launchcode/codingevents/models/Event.java b/src/main/java/org/launchcode/codingevents/models/Event.java index 11ed18d43..8022dd938 100644 --- a/src/main/java/org/launchcode/codingevents/models/Event.java +++ b/src/main/java/org/launchcode/codingevents/models/Event.java @@ -1,22 +1,15 @@ package org.launchcode.codingevents.models; import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; -import java.util.Objects; /** * Created by Chris Bay */ @Entity -public class Event { - - @Id - @GeneratedValue - private int id; +public class Event extends AbstractEntity { @NotBlank(message = "Name is required") @Size(min = 3, max = 50, message = "Name must be between 3 and 50 characters") @@ -72,25 +65,9 @@ public void setType(EventType type) { this.type = type; } - public int getId() { - return id; - } - @Override public String toString() { return name; } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Event event = (Event) o; - return id == event.id; - } - - @Override - public int hashCode() { - return Objects.hash(id); - } } diff --git a/src/main/java/org/launchcode/codingevents/models/EventCategory.java b/src/main/java/org/launchcode/codingevents/models/EventCategory.java index b088c7a0e..9a9515a3f 100644 --- a/src/main/java/org/launchcode/codingevents/models/EventCategory.java +++ b/src/main/java/org/launchcode/codingevents/models/EventCategory.java @@ -1,20 +1,13 @@ package org.launchcode.codingevents.models; import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; import javax.validation.constraints.Size; -import java.util.Objects; /** * Created by Chris Bay */ @Entity -public class EventCategory { - - @Id - @GeneratedValue - private int id; +public class EventCategory extends AbstractEntity { @Size(min=3, message="Name must be at least 3 characters long") private String name; @@ -33,25 +26,9 @@ public void setName(String name) { this.name = name; } - public int getId() { - return id; - } - @Override public String toString() { return name; } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - EventCategory that = (EventCategory) o; - return id == that.id; - } - - @Override - public int hashCode() { - return Objects.hash(id); - } } From 3a1e42ff5429d81e7a08704e1f55f0e54b85d13f Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Wed, 15 Jan 2020 16:53:39 -0600 Subject: [PATCH 13/20] Adds one-to-many relationship --- .../controllers/EventController.java | 28 +++++++++++++++---- .../launchcode/codingevents/models/Event.java | 18 +++++++----- .../codingevents/models/EventCategory.java | 10 +++++++ .../codingevents/models/EventType.java | 22 --------------- .../templates/eventCategories/index.html | 2 +- .../resources/templates/events/create.html | 11 ++++---- .../resources/templates/events/index.html | 4 +-- 7 files changed, 53 insertions(+), 42 deletions(-) delete mode 100644 src/main/java/org/launchcode/codingevents/models/EventType.java diff --git a/src/main/java/org/launchcode/codingevents/controllers/EventController.java b/src/main/java/org/launchcode/codingevents/controllers/EventController.java index 15c0a2550..95b1f1f5e 100644 --- a/src/main/java/org/launchcode/codingevents/controllers/EventController.java +++ b/src/main/java/org/launchcode/codingevents/controllers/EventController.java @@ -1,8 +1,9 @@ package org.launchcode.codingevents.controllers; +import org.launchcode.codingevents.data.EventCategoryRepository; import org.launchcode.codingevents.data.EventRepository; import org.launchcode.codingevents.models.Event; -import org.launchcode.codingevents.models.EventType; +import org.launchcode.codingevents.models.EventCategory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -10,6 +11,7 @@ import org.springframework.web.bind.annotation.*; import javax.validation.Valid; +import java.util.Optional; /** * Created by Chris Bay @@ -21,10 +23,26 @@ public class EventController { @Autowired private EventRepository eventRepository; + @Autowired + private EventCategoryRepository eventCategoryRepository; + @GetMapping - public String displayAllEvents(Model model) { - model.addAttribute("title", "All Events"); - model.addAttribute("events", eventRepository.findAll()); + public String displayAllEvents(@RequestParam(required = false) Integer categoryId, Model model) { + + if (categoryId == null) { + model.addAttribute("title", "All Events"); + model.addAttribute("events", eventRepository.findAll()); + } else { + Optional result = eventCategoryRepository.findById(categoryId); + if (result.isEmpty()) { + model.addAttribute("title", "Invalid Category ID: " + categoryId); + } else { + EventCategory category = result.get(); + model.addAttribute("title", "Events in category: " + category.getName()); + model.addAttribute("events", category.getEvents()); + } + } + return "events/index"; } @@ -32,7 +50,7 @@ public String displayAllEvents(Model model) { public String displayCreateEventForm(Model model) { model.addAttribute("title", "Create Event"); model.addAttribute(new Event()); - model.addAttribute("types", EventType.values()); + model.addAttribute("categories", eventCategoryRepository.findAll()); return "events/create"; } diff --git a/src/main/java/org/launchcode/codingevents/models/Event.java b/src/main/java/org/launchcode/codingevents/models/Event.java index 8022dd938..15ee9ba20 100644 --- a/src/main/java/org/launchcode/codingevents/models/Event.java +++ b/src/main/java/org/launchcode/codingevents/models/Event.java @@ -1,8 +1,10 @@ package org.launchcode.codingevents.models; import javax.persistence.Entity; +import javax.persistence.ManyToOne; import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; /** @@ -22,13 +24,15 @@ public class Event extends AbstractEntity { @Email(message = "Invalid email. Try again.") private String contactEmail; - private EventType type; + @ManyToOne + @NotNull(message = "Category is required") + private EventCategory eventCategory; - public Event(String name, String description, String contactEmail, EventType type) { + public Event(String name, String description, String contactEmail, EventCategory eventCategory) { this.name = name; this.description = description; this.contactEmail = contactEmail; - this.type = type; + this.eventCategory = eventCategory; } public Event() {} @@ -57,12 +61,12 @@ public void setContactEmail(String contactEmail) { this.contactEmail = contactEmail; } - public EventType getType() { - return type; + public EventCategory getEventCategory() { + return eventCategory; } - public void setType(EventType type) { - this.type = type; + public void setEventCategory(EventCategory eventCategory) { + this.eventCategory = eventCategory; } @Override diff --git a/src/main/java/org/launchcode/codingevents/models/EventCategory.java b/src/main/java/org/launchcode/codingevents/models/EventCategory.java index 9a9515a3f..da508ec36 100644 --- a/src/main/java/org/launchcode/codingevents/models/EventCategory.java +++ b/src/main/java/org/launchcode/codingevents/models/EventCategory.java @@ -1,7 +1,10 @@ package org.launchcode.codingevents.models; import javax.persistence.Entity; +import javax.persistence.OneToMany; import javax.validation.constraints.Size; +import java.util.ArrayList; +import java.util.List; /** * Created by Chris Bay @@ -12,6 +15,9 @@ public class EventCategory extends AbstractEntity { @Size(min=3, message="Name must be at least 3 characters long") private String name; + @OneToMany(mappedBy = "eventCategory") + private final List events = new ArrayList<>(); + public EventCategory(@Size(min = 3, message = "Name must be at least 3 characters long") String name) { this.name = name; } @@ -26,6 +32,10 @@ public void setName(String name) { this.name = name; } + public List getEvents() { + return events; + } + @Override public String toString() { return name; diff --git a/src/main/java/org/launchcode/codingevents/models/EventType.java b/src/main/java/org/launchcode/codingevents/models/EventType.java deleted file mode 100644 index 027e089b5..000000000 --- a/src/main/java/org/launchcode/codingevents/models/EventType.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.launchcode.codingevents.models; - -/** - * Created by Chris Bay - */ -public enum EventType { - - CONFERENCE("Conference"), - MEETUP("Meetup"), - WORKSHOP("Workshop"), - SOCIAL("Social"); - - private final String displayName; - - EventType(String displayName) { - this.displayName = displayName; - } - - public String getDisplayName() { - return displayName; - } -} diff --git a/src/main/resources/templates/eventCategories/index.html b/src/main/resources/templates/eventCategories/index.html index 1b6cfb64e..f52d412d1 100644 --- a/src/main/resources/templates/eventCategories/index.html +++ b/src/main/resources/templates/eventCategories/index.html @@ -12,7 +12,7 @@ - + diff --git a/src/main/resources/templates/events/create.html b/src/main/resources/templates/events/create.html index 04b1bbd1d..f94272c66 100644 --- a/src/main/resources/templates/events/create.html +++ b/src/main/resources/templates/events/create.html @@ -25,13 +25,14 @@

-
diff --git a/src/main/resources/templates/events/index.html b/src/main/resources/templates/events/index.html index 5a0bd04b9..12b2e2635 100644 --- a/src/main/resources/templates/events/index.html +++ b/src/main/resources/templates/events/index.html @@ -12,7 +12,7 @@ Name Description Contact Email - Type + Category @@ -20,7 +20,7 @@ - + From eeb70c5a76eb1c739a024da3100c42530465c0ef Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Wed, 22 Jan 2020 06:01:28 -0600 Subject: [PATCH 14/20] Renames displayAllEvents > displayEvents --- .../launchcode/codingevents/controllers/EventController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/launchcode/codingevents/controllers/EventController.java b/src/main/java/org/launchcode/codingevents/controllers/EventController.java index 95b1f1f5e..93981bdc7 100644 --- a/src/main/java/org/launchcode/codingevents/controllers/EventController.java +++ b/src/main/java/org/launchcode/codingevents/controllers/EventController.java @@ -27,7 +27,7 @@ public class EventController { private EventCategoryRepository eventCategoryRepository; @GetMapping - public String displayAllEvents(@RequestParam(required = false) Integer categoryId, Model model) { + public String displayEvents(@RequestParam(required = false) Integer categoryId, Model model) { if (categoryId == null) { model.addAttribute("title", "All Events"); From 5099d9b7e2dee92a9727ec1e4c5c457b473c095f Mon Sep 17 00:00:00 2001 From: Chris Bay Date: Fri, 24 Jan 2020 10:35:27 -0600 Subject: [PATCH 15/20] Adds EventDetails class w/ one-to-one relationship to Event --- .../launchcode/codingevents/models/Event.java | 42 +++++++----------- .../codingevents/models/EventDetails.java | 44 +++++++++++++++++++ .../resources/templates/events/create.html | 8 ++-- .../resources/templates/events/index.html | 4 +- 4 files changed, 66 insertions(+), 32 deletions(-) create mode 100644 src/main/java/org/launchcode/codingevents/models/EventDetails.java diff --git a/src/main/java/org/launchcode/codingevents/models/Event.java b/src/main/java/org/launchcode/codingevents/models/Event.java index 15ee9ba20..33343c87b 100644 --- a/src/main/java/org/launchcode/codingevents/models/Event.java +++ b/src/main/java/org/launchcode/codingevents/models/Event.java @@ -1,8 +1,10 @@ package org.launchcode.codingevents.models; +import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.ManyToOne; -import javax.validation.constraints.Email; +import javax.persistence.OneToOne; +import javax.validation.Valid; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; @@ -17,21 +19,17 @@ public class Event extends AbstractEntity { @Size(min = 3, max = 50, message = "Name must be between 3 and 50 characters") private String name; - @Size(max = 500, message = "Description too long!") - private String description; - - @NotBlank(message = "Email is required") - @Email(message = "Invalid email. Try again.") - private String contactEmail; + @OneToOne(cascade = CascadeType.ALL) + @Valid + @NotNull + private EventDetails eventDetails; @ManyToOne @NotNull(message = "Category is required") private EventCategory eventCategory; - public Event(String name, String description, String contactEmail, EventCategory eventCategory) { + public Event(String name, EventCategory eventCategory) { this.name = name; - this.description = description; - this.contactEmail = contactEmail; this.eventCategory = eventCategory; } @@ -45,22 +43,6 @@ public void setName(String name) { this.name = name; } - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getContactEmail() { - return contactEmail; - } - - public void setContactEmail(String contactEmail) { - this.contactEmail = contactEmail; - } - public EventCategory getEventCategory() { return eventCategory; } @@ -69,6 +51,14 @@ public void setEventCategory(EventCategory eventCategory) { this.eventCategory = eventCategory; } + public EventDetails getEventDetails() { + return eventDetails; + } + + public void setEventDetails(EventDetails eventDetails) { + this.eventDetails = eventDetails; + } + @Override public String toString() { return name; diff --git a/src/main/java/org/launchcode/codingevents/models/EventDetails.java b/src/main/java/org/launchcode/codingevents/models/EventDetails.java new file mode 100644 index 000000000..6bb1bf876 --- /dev/null +++ b/src/main/java/org/launchcode/codingevents/models/EventDetails.java @@ -0,0 +1,44 @@ +package org.launchcode.codingevents.models; + +import javax.persistence.Entity; +import javax.persistence.OneToOne; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * Created by Chris Bay + */ +@Entity +public class EventDetails extends AbstractEntity { + + @Size(max = 500, message = "Description too long!") + private String description; + + @NotBlank(message = "Email is required") + @Email(message = "Invalid email. Try again.") + private String contactEmail; + + public EventDetails(@Size(max = 500, message = "Description too long!") String description, @NotBlank(message = "Email is required") @Email(message = "Invalid email. Try again.") String contactEmail) { + this.description = description; + this.contactEmail = contactEmail; + } + + public EventDetails() {} + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getContactEmail() { + return contactEmail; + } + + public void setContactEmail(String contactEmail) { + this.contactEmail = contactEmail; + } +} diff --git a/src/main/resources/templates/events/create.html b/src/main/resources/templates/events/create.html index f94272c66..5eb85493b 100644 --- a/src/main/resources/templates/events/create.html +++ b/src/main/resources/templates/events/create.html @@ -14,15 +14,15 @@
-

+

-

+