Skip to content

Commit 2fe991a

Browse files
committed
updated
1 parent 352cb33 commit 2fe991a

17 files changed

Lines changed: 412 additions & 46 deletions

File tree

src/main/java/org/launchcode/codingevents/controllers/EventController.java

Lines changed: 79 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,62 @@
11
package org.launchcode.codingevents.controllers;
22

33
import jakarta.validation.Valid;
4+
import org.launchcode.codingevents.data.EventCategoryRepository;
45
import org.launchcode.codingevents.data.EventRepository;
6+
import org.launchcode.codingevents.data.TagRepository;
57
import org.launchcode.codingevents.models.Event;
6-
import org.launchcode.codingevents.models.EventType;
8+
import org.launchcode.codingevents.models.EventCategory;
9+
import org.launchcode.codingevents.models.Tag;
10+
import org.launchcode.codingevents.models.dto.EventTagDTO;
711
import org.springframework.beans.factory.annotation.Autowired;
812
import org.springframework.stereotype.Controller;
913
import org.springframework.web.bind.annotation.*;
1014
import org.springframework.ui.Model;
1115
import org.springframework.validation.Errors;
1216

17+
import java.util.Optional;
18+
1319
/**
1420
* Created by Chris Bay
1521
*/
1622
@Controller
1723
@RequestMapping("events")
1824
public class EventController {
25+
1926
@Autowired
2027
private EventRepository eventRepository;
2128

29+
@Autowired
30+
private EventCategoryRepository eventCategoryRepository;
31+
32+
@Autowired
33+
private TagRepository tagRepository;
34+
2235
@GetMapping
23-
public String displayAllEvents(Model model) {
24-
model.addAttribute("title", "All Events");
25-
model.addAttribute("events", eventRepository.findAll());
36+
public String displayEvents(@RequestParam(required = false) Integer categoryId, Model model) {
37+
38+
if (categoryId == null) {
39+
model.addAttribute("title", "All Events");
40+
model.addAttribute("events", eventRepository.findAll());
41+
} else {
42+
Optional<Event> result = eventCategoryRepository.findById(categoryId);
43+
if (result.isEmpty()) {
44+
model.addAttribute("title", "Invalid Category ID: " + categoryId);
45+
} else {
46+
EventCategory category = result.get().getEventCategory();
47+
model.addAttribute("title", "Events in category: " + category.getName());
48+
model.addAttribute("events", category.getEvents());
49+
}
50+
}
51+
2652
return "events/index";
2753
}
2854

2955
@GetMapping("create")
3056
public String displayCreateEventForm(Model model) {
3157
model.addAttribute("title", "Create Event");
3258
model.addAttribute(new Event());
33-
model.addAttribute("types", EventType.values());
59+
model.addAttribute("categories", eventCategoryRepository.findAll());
3460
return "events/create";
3561
}
3662

@@ -65,4 +91,52 @@ public String processDeleteEventsForm(@RequestParam(required = false) int[] even
6591
return "redirect:/events";
6692
}
6793

94+
@GetMapping("detail")
95+
public String displayEventDetails(@RequestParam Integer eventId, Model model) {
96+
97+
Optional<Event> result = eventRepository.findById(eventId);
98+
99+
if (result.isEmpty()) {
100+
model.addAttribute("title", "Invalid Event ID: " + eventId);
101+
} else {
102+
Event event = result.get();
103+
model.addAttribute("title", event.getName() + " Details");
104+
model.addAttribute("event", event);
105+
model.addAttribute("tags", event.getTags());
106+
}
107+
108+
return "events/detail";
109+
}
110+
111+
// responds to /events/add-tag?eventId=13
112+
@GetMapping("add-tag")
113+
public String displayAddTagForm(@RequestParam Integer eventId, Model model){
114+
Optional<Event> result = eventRepository.findById(eventId);
115+
Event event = result.get();
116+
model.addAttribute("title", "Add Tag to: " + event.getName());
117+
model.addAttribute("tags", tagRepository.findAll());
118+
EventTagDTO eventTag = new EventTagDTO();
119+
eventTag.setEvent(event);
120+
model.addAttribute("eventTag", eventTag);
121+
return "events/add-tag.html";
122+
}
123+
124+
@PostMapping("add-tag")
125+
public String processAddTagForm(@ModelAttribute @Valid EventTagDTO eventTag,
126+
Errors errors,
127+
Model model){
128+
129+
if (!errors.hasErrors()) {
130+
Event event = eventTag.getEvent();
131+
Tag tag = eventTag.getTag();
132+
if (!event.getTags().contains(tag)){
133+
event.addTag(tag);
134+
eventRepository.save(event);
135+
}
136+
return "redirect:detail?eventId=" + event.getId();
137+
}
138+
139+
return "redirect:add-tag";
140+
}
141+
68142
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package org.launchcode.codingevents.controllers;
2+
3+
import jakarta.validation.Valid;
4+
import org.launchcode.codingevents.data.TagRepository;
5+
import org.launchcode.codingevents.models.Tag;
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
import org.springframework.stereotype.Controller;
8+
import org.springframework.validation.Errors;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.ModelAttribute;
11+
import org.springframework.web.bind.annotation.PostMapping;
12+
import org.springframework.web.bind.annotation.RequestMapping;
13+
import org.springframework.ui.Model;
14+
15+
/**
16+
* Created by Chris Bay
17+
*/
18+
@Controller
19+
@RequestMapping("tags")
20+
public class TagController {
21+
22+
@Autowired
23+
TagRepository tagRepository;
24+
25+
@GetMapping
26+
public String displayTags(Model model) {
27+
model.addAttribute("title", "All Tags");
28+
model.addAttribute("tags", tagRepository.findAll());
29+
return "tags/index";
30+
}
31+
32+
@GetMapping("create")
33+
public String displayCreateTagForm(Model model) {
34+
model.addAttribute("title", "Create Tag");
35+
model.addAttribute(new Tag());
36+
return "tags/create";
37+
}
38+
39+
@PostMapping("create")
40+
public String processCreateTagForm(@ModelAttribute @Valid Tag tag,
41+
Errors errors, Model model) {
42+
43+
if (errors.hasErrors()) {
44+
model.addAttribute("title", "Create Tag");
45+
model.addAttribute(tag);
46+
return "tags/create";
47+
}
48+
49+
tagRepository.save(tag);
50+
return "redirect:/tags";
51+
}
52+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.launchcode.codingevents.data;
2+
3+
import org.launchcode.codingevents.models.Tag;
4+
import org.springframework.data.repository.CrudRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
8+
@Repository
9+
public interface TagRepository extends CrudRepository<Tag, Integer> {
10+
}

src/main/java/org/launchcode/codingevents/models/Event.java

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package org.launchcode.codingevents.models;
22

3-
import jakarta.persistence.Entity;
3+
import jakarta.persistence.*;
4+
import jakarta.validation.Valid;
45
import jakarta.validation.constraints.Email;
56
import jakarta.validation.constraints.NotBlank;
7+
import jakarta.validation.constraints.NotNull;
68
import jakarta.validation.constraints.Size;
79

10+
import java.util.ArrayList;
11+
import java.util.List;
12+
813
/**
914
* Created by Chris Bay
1015
*/
@@ -14,21 +19,21 @@ public class Event extends AbstractEntity {
1419
@NotBlank(message = "Name is required")
1520
@Size(min = 3, max = 50, message = "Name must be between 3 and 50 characters")
1621
private String name;
22+
@OneToOne(cascade = CascadeType.ALL)
23+
@Valid
24+
@NotNull
25+
private EventDetails eventDetails;
1726

18-
@Size(max = 500, message = "Description too long!")
19-
private String description;
20-
21-
@NotBlank(message = "Email is required")
22-
@Email(message = "Invalid email. Try again.")
23-
private String contactEmail;
2427

25-
private EventType type;
28+
@ManyToOne
29+
@NotNull(message = "Category is required")
30+
private EventCategory eventCategory;
31+
@ManyToMany
32+
private final List<Tag> tags = new ArrayList<>();
2633

27-
public Event(String name, String description, String contactEmail, EventType type) {
34+
public Event(String name, EventCategory eventCategory) {
2835
this.name = name;
29-
this.description = description;
30-
this.contactEmail = contactEmail;
31-
this.type = type;
36+
this.eventCategory = eventCategory;
3237
}
3338

3439
public Event() {}
@@ -41,28 +46,28 @@ public void setName(String name) {
4146
this.name = name;
4247
}
4348

44-
public String getDescription() {
45-
return description;
49+
public EventCategory getEventCategory() {
50+
return eventCategory;
4651
}
4752

48-
public void setDescription(String description) {
49-
this.description = description;
53+
public void setEventCategory(EventCategory eventCategory) {
54+
this.eventCategory = eventCategory;
5055
}
5156

52-
public String getContactEmail() {
53-
return contactEmail;
57+
public EventDetails getEventDetails() {
58+
return eventDetails;
5459
}
5560

56-
public void setContactEmail(String contactEmail) {
57-
this.contactEmail = contactEmail;
58-
}
61+
public void setEventDetails(EventDetails eventDetails) {
62+
this.eventDetails = eventDetails;
5963

60-
public EventType getType() {
61-
return type;
6264
}
6365

64-
public void setType(EventType type) {
65-
this.type = type;
66+
public List<Tag> getTags() {
67+
return tags;
68+
}
69+
public void addTag(Tag tag){
70+
this.tags.add(tag);
6671
}
6772

6873
@Override

src/main/java/org/launchcode/codingevents/models/EventCategory.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package org.launchcode.codingevents.models;
22

33
import jakarta.persistence.Entity;
4+
import jakarta.persistence.OneToMany;
45
import jakarta.validation.constraints.Size;
56

7+
import java.util.ArrayList;
8+
import java.util.List;
9+
610
/**
711
* Created by Chris Bay
812
*/
@@ -11,6 +15,8 @@ public class EventCategory extends AbstractEntity {
1115

1216
@Size(min=3, message="Name must be at least 3 characters long")
1317
private String name;
18+
@OneToMany(mappedBy = "eventCategory")
19+
private final List<Event> events = new ArrayList<>();
1420

1521
public EventCategory(@Size(min = 3, message = "Name must be at least 3 characters long") String name) {
1622
this.name = name;
@@ -26,6 +32,10 @@ public void setName(String name) {
2632
this.name = name;
2733
}
2834

35+
public List<Event> getEvents() {
36+
return events;
37+
}
38+
2939
@Override
3040
public String toString() {
3141
return name;
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package org.launchcode.codingevents.models;
2+
3+
import jakarta.persistence.Entity;
4+
import jakarta.persistence.OneToOne;
5+
import jakarta.validation.constraints.Email;
6+
import jakarta.validation.constraints.NotBlank;
7+
import jakarta.validation.constraints.Size;
8+
9+
@Entity
10+
public class EventDetails extends AbstractEntity {
11+
12+
@Size(max = 500, message = "Description too long!")
13+
private String description;
14+
15+
@NotBlank(message = "Email is required")
16+
@Email(message = "Invalid email. Try again.")
17+
private String contactEmail;
18+
@OneToOne(mappedBy = "eventDetails")
19+
private Event event;
20+
21+
public EventDetails(String description, String contactEmail) {
22+
this.description = description;
23+
this.contactEmail = contactEmail;
24+
}
25+
26+
public EventDetails() {}
27+
28+
public String getDescription() {
29+
return description;
30+
}
31+
32+
public void setDescription(String description) {
33+
this.description = description;
34+
}
35+
36+
public String getContactEmail() {
37+
return contactEmail;
38+
}
39+
40+
public void setContactEmail(String contactEmail) {
41+
this.contactEmail = contactEmail;
42+
}
43+
}

src/main/java/org/launchcode/codingevents/models/EventType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ public enum EventType {
44
CONFERENCE("Conference"),
55
MEETUP("Meetup"),
66
WORKSHOP("Workshop"),
7-
SOCIAL("Social");;
7+
SOCIAL("Social");
88

99
private final String displayName;
1010

0 commit comments

Comments
 (0)