Skip to content

Commit 38d9e3a

Browse files
committed
Coding Events Java
1 parent 8219dea commit 38d9e3a

28 files changed

Lines changed: 843 additions & 49 deletions

build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ dependencies {
1919
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
2020
implementation 'org.springframework.boot:spring-boot-starter-validation'
2121
implementation 'org.springframework.boot:spring-boot-starter-web'
22+
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
23+
implementation 'mysql:mysql-connector-java:8.0.32'
24+
2225
developmentOnly 'org.springframework.boot:spring-boot-devtools'
2326
testImplementation 'org.springframework.boot:spring-boot-starter-test'
2427
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package org.launchcode.codingevents.controllers;
2+
3+
import jakarta.validation.Valid;
4+
import org.launchcode.codingevents.data.EventCategoryRepository;
5+
import org.launchcode.codingevents.models.EventCategory;
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+
@Controller
16+
@RequestMapping("eventCategories")
17+
public class EventCategoryController {
18+
19+
@Autowired
20+
private EventCategoryRepository eventCategoryRepository;
21+
22+
@GetMapping
23+
public String displayAllCategories(Model model) {
24+
model.addAttribute("title", "All Categories");
25+
model.addAttribute("categories", eventCategoryRepository.findAll());
26+
return "eventCategories/index";
27+
}
28+
29+
@GetMapping("create")
30+
public String renderCreateEventCategoryForm(Model model) {
31+
model.addAttribute("title", "Create Category");
32+
model.addAttribute(new EventCategory());
33+
return "eventCategories/create";
34+
}
35+
36+
@PostMapping("create")
37+
public String processCreateEventCategoryForm(@Valid @ModelAttribute EventCategory eventCategory,
38+
Errors errors, Model model) {
39+
40+
if (errors.hasErrors()) {
41+
model.addAttribute("title", "Create Category");
42+
model.addAttribute(new EventCategory());
43+
return "eventCategories/create";
44+
}
45+
46+
eventCategoryRepository.save(eventCategory);
47+
return "redirect:/eventCategories";
48+
}
49+
50+
}

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

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package org.launchcode.codingevents.controllers;
2+
3+
import org.launchcode.codingevents.data.EventCategoryRepository;
4+
import org.launchcode.codingevents.data.EventRepository;
5+
import org.launchcode.codingevents.data.TagRepository;
6+
import org.launchcode.codingevents.models.Event;
7+
import org.launchcode.codingevents.models.EventCategory;
8+
import org.launchcode.codingevents.models.Tag;
9+
import org.launchcode.codingevents.models.dto.EventTagDTO;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.stereotype.Controller;
12+
import org.springframework.ui.Model;
13+
import org.springframework.validation.Errors;
14+
import org.springframework.web.bind.annotation.*;
15+
16+
import jakarta.validation.Valid;
17+
import java.util.Optional;
18+
19+
@Controller
20+
@RequestMapping("events")
21+
public class EventsController {
22+
23+
@Autowired
24+
private EventRepository eventRepository;
25+
26+
@Autowired
27+
private EventCategoryRepository eventCategoryRepository;
28+
29+
@Autowired
30+
private TagRepository tagRepository;
31+
32+
@GetMapping
33+
public String displayAllEvents(@RequestParam(required = false) Integer categoryId,
34+
@RequestParam(required = false) Integer tagId, Model model) {
35+
36+
if (categoryId == null && tagId == null) {
37+
model.addAttribute("events", eventRepository.findAll());
38+
} else if (categoryId != null){
39+
Optional<EventCategory> result = eventCategoryRepository.findById(categoryId);
40+
if (result.isEmpty()) {
41+
model.addAttribute("title", "Invalid Category ID: " + categoryId);
42+
} else {
43+
EventCategory category = result.get();
44+
model.addAttribute("title", "Events in category: " + category.getName());
45+
model.addAttribute("events", category.getEvents());
46+
}
47+
} else {
48+
Optional<Tag> result = tagRepository.findById(tagId);
49+
if (result.isEmpty()) {
50+
model.addAttribute("title", "Invalid Tag ID: " + tagId);
51+
} else {
52+
Tag tag = result.get();
53+
model.addAttribute("title", "All tags: " + tag.getEvents());
54+
}
55+
}
56+
return "events/index";
57+
}
58+
59+
@GetMapping("create")
60+
public String renderCreateEventForm(Model model) {
61+
model.addAttribute("title", "Create Event");
62+
model.addAttribute(new Event());
63+
model.addAttribute("categories", eventCategoryRepository.findAll());
64+
return "events/create";
65+
}
66+
67+
@PostMapping("create")
68+
public String createEvent(@ModelAttribute @Valid Event newEvent,
69+
Errors errors, Model model) {
70+
if (errors.hasErrors()) {
71+
model.addAttribute("title", "Create Event");
72+
return "events/create";
73+
}
74+
75+
System.out.println("Hello again?");
76+
eventRepository.save(newEvent);
77+
return "redirect:/events";
78+
}
79+
80+
@GetMapping("delete")
81+
public String displayDeleteEventForm(Model model) {
82+
model.addAttribute("title", "Delete Events");
83+
model.addAttribute("events", eventRepository.findAll());
84+
return "events/delete";
85+
}
86+
87+
@PostMapping("delete")
88+
public String processDeleteEventsForm(@RequestParam(required = false) int[] eventIds) {
89+
90+
if (eventIds != null) {
91+
for (int id : eventIds) {
92+
eventRepository.deleteById(id);
93+
}
94+
}
95+
return "redirect:";
96+
}
97+
98+
@GetMapping("detail")
99+
public String displayEventDetails(@RequestParam Integer eventId, Model model) {
100+
101+
Optional<Event> result = eventRepository.findById(eventId);
102+
103+
if (result.isEmpty()) {
104+
model.addAttribute("title", "Invalid Event ID: " + eventId);
105+
} else {
106+
Event event = result.get();
107+
model.addAttribute("title", event.getName() + " Details");
108+
model.addAttribute("event", event);
109+
model.addAttribute("tags", event.getTags());
110+
}
111+
112+
return "events/detail";
113+
}
114+
115+
// responds to /events/add-tag?eventId=13
116+
@GetMapping("add-tag")
117+
public String displayAddTagForm(@RequestParam Integer eventId, Model model) {
118+
Optional<Event> result = eventRepository.findById(eventId);
119+
Event event = result.get();
120+
model.addAttribute("title", "Add Tag to : " + event.getName());
121+
model.addAttribute("tags", tagRepository.findAll());
122+
EventTagDTO eventTag = new EventTagDTO();
123+
eventTag.setEvent(event);
124+
model.addAttribute("eventTag", eventTag);
125+
return "events/add-tag";
126+
}
127+
128+
@PostMapping("add-tag")
129+
public String processAddTagForm(@ModelAttribute @Valid EventTagDTO eventTag,
130+
Errors errors,
131+
Model model) {
132+
133+
if (!errors.hasErrors()) {
134+
Event event = eventTag.getEvent();
135+
Tag tag = eventTag.getTag();
136+
if (!event.getTags().contains(tag)) {
137+
event.addTag(tag);
138+
eventRepository.save(event);
139+
}
140+
return "redirect:detail?eventId=" + event.getId();
141+
}
142+
143+
return "redirect:add-tag";
144+
145+
}
146+
147+
}
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 org.launchcode.codingevents.data.TagRepository;
4+
import org.launchcode.codingevents.models.Tag;
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.stereotype.Controller;
7+
import org.springframework.ui.Model;
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+
14+
import jakarta.validation.Valid;
15+
16+
@Controller
17+
@RequestMapping("tags")
18+
public class TagController {
19+
20+
@Autowired
21+
TagRepository tagRepository;
22+
23+
@GetMapping
24+
public String displayTags(Model model) {
25+
model.addAttribute("title", "All Tags");
26+
model.addAttribute("tags", tagRepository.findAll());
27+
return "tags/index";
28+
}
29+
30+
@GetMapping("create")
31+
public String displayCreateTagForm(Model model) {
32+
model.addAttribute("title", "Create Tag");
33+
model.addAttribute(new Tag());
34+
return "tags/create";
35+
}
36+
37+
@PostMapping("create")
38+
public String processCreateTagForm(@ModelAttribute @Valid Tag tag,
39+
Errors errors, Model model) {
40+
41+
if (errors.hasErrors()) {
42+
model.addAttribute("title", "Create Tag");
43+
model.addAttribute(tag);
44+
return "tags/create";
45+
}
46+
47+
tagRepository.save(tag);
48+
return "redirect:/tags";
49+
}
50+
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.EventCategory;
4+
import org.springframework.data.repository.CrudRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface EventCategoryRepository extends CrudRepository<EventCategory, Integer> {
9+
10+
}
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.Event;
4+
import org.springframework.data.repository.CrudRepository;
5+
import org.springframework.stereotype.Repository;
6+
7+
@Repository
8+
public interface EventRepository extends CrudRepository<Event, Integer> {
9+
10+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
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+
@Repository
8+
public interface TagRepository extends CrudRepository<Tag, Integer> {
9+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.launchcode.codingevents.models;
2+
3+
import jakarta.persistence.*;
4+
5+
@MappedSuperclass
6+
public abstract class AbstractEntity {
7+
8+
@Id
9+
@GeneratedValue
10+
public int id;
11+
12+
public int getId() {
13+
return id;
14+
}
15+
16+
}

0 commit comments

Comments
 (0)