Skip to content

Commit f8af4aa

Browse files
committed
working add-tags branch
version of spring and gradle needed to be updated in order to work with jakarta.persistence
1 parent 8abc920 commit f8af4aa

24 files changed

Lines changed: 518 additions & 138 deletions

build.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
plugins {
22
id 'java'
3-
id 'org.springframework.boot' version '3.1.1'
3+
id 'org.springframework.boot' version '3.1.0'
44
id 'io.spring.dependency-management' version '1.1.0'
55
}
66

@@ -16,10 +16,12 @@ repositories {
1616
}
1717

1818
dependencies {
19+
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
1920
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
2021
implementation 'org.springframework.boot:spring-boot-starter-validation'
2122
implementation 'org.springframework.boot:spring-boot-starter-web'
2223
developmentOnly 'org.springframework.boot:spring-boot-devtools'
24+
implementation 'mysql:mysql-connector-java:8.0.28'
2325
testImplementation 'org.springframework.boot:spring-boot-starter-test'
2426
}
2527

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
44
networkTimeout=10000
55
zipStoreBase=GRADLE_USER_HOME
66
zipStorePath=wrapper/dists
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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+
/**
16+
* Created by Chris Bay
17+
*/
18+
@Controller
19+
@RequestMapping("eventCategories")
20+
public class EventCategoryController {
21+
22+
@Autowired
23+
private EventCategoryRepository eventCategoryRepository;
24+
25+
@GetMapping
26+
public String displayAllCategories(Model model) {
27+
model.addAttribute("title", "All Categories");
28+
model.addAttribute("categories", eventCategoryRepository.findAll());
29+
return "eventCategories/index";
30+
}
31+
32+
@GetMapping("create")
33+
public String renderCreateEventCategoryForm(Model model) {
34+
model.addAttribute("title", "Create Category");
35+
model.addAttribute(new EventCategory());
36+
return "eventCategories/create";
37+
}
38+
39+
@PostMapping("create")
40+
public String processCreateEventCategoryForm(@Valid @ModelAttribute EventCategory eventCategory,
41+
Errors errors, Model model) {
42+
43+
if (errors.hasErrors()) {
44+
model.addAttribute("title", "Create Category");
45+
model.addAttribute(new EventCategory());
46+
return "eventCategories/create";
47+
}
48+
49+
eventCategoryRepository.save(eventCategory);
50+
return "redirect:/eventCategories";
51+
}
52+
53+
}
Lines changed: 47 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
package org.launchcode.codingevents.controllers;
22

33
import jakarta.validation.Valid;
4-
import org.launchcode.codingevents.data.EventData;
4+
import org.launchcode.codingevents.data.EventCategoryRepository;
5+
import org.launchcode.codingevents.data.EventRepository;
56
import org.launchcode.codingevents.models.Event;
6-
import org.launchcode.codingevents.models.EventType;
7+
import org.launchcode.codingevents.models.EventCategory;
8+
import org.springframework.beans.factory.annotation.Autowired;
79
import org.springframework.stereotype.Controller;
810
import org.springframework.web.bind.annotation.*;
911
import org.springframework.ui.Model;
1012
import org.springframework.validation.Errors;
1113

12-
import java.util.ArrayList;
13-
import java.util.List;
14+
import java.util.Optional;
1415

1516
/**
1617
* Created by Chris Bay
@@ -19,18 +20,37 @@
1920
@RequestMapping("events")
2021
public class EventController {
2122

23+
@Autowired
24+
private EventRepository eventRepository;
25+
26+
@Autowired
27+
private EventCategoryRepository eventCategoryRepository;
28+
2229
@GetMapping
23-
public String displayAllEvents(Model model) {
24-
model.addAttribute("title", "All Events");
25-
model.addAttribute("events", EventData.getAll());
30+
public String displayEvents(@RequestParam(required = false) Integer categoryId, Model model) {
31+
32+
if (categoryId == null) {
33+
model.addAttribute("title", "All Events");
34+
model.addAttribute("events", eventRepository.findAll());
35+
} else {
36+
Optional<EventCategory> result = eventCategoryRepository.findById(categoryId);
37+
if (result.isEmpty()) {
38+
model.addAttribute("title", "Invalid Category ID: " + categoryId);
39+
} else {
40+
EventCategory category = result.get();
41+
model.addAttribute("title", "Events in category: " + category.getName());
42+
model.addAttribute("events", category.getEvents());
43+
}
44+
}
45+
2646
return "events/index";
2747
}
2848

2949
@GetMapping("create")
3050
public String displayCreateEventForm(Model model) {
3151
model.addAttribute("title", "Create Event");
3252
model.addAttribute(new Event());
33-
model.addAttribute("types", EventType.values());
53+
model.addAttribute("categories", eventCategoryRepository.findAll());
3454
return "events/create";
3555
}
3656

@@ -42,14 +62,14 @@ public String processCreateEventForm(@ModelAttribute @Valid Event newEvent,
4262
return "events/create";
4363
}
4464

45-
EventData.add(newEvent);
65+
eventRepository.save(newEvent);
4666
return "redirect:/events";
4767
}
4868

4969
@GetMapping("delete")
5070
public String displayDeleteEventForm(Model model) {
5171
model.addAttribute("title", "Delete Events");
52-
model.addAttribute("events", EventData.getAll());
72+
model.addAttribute("events", eventRepository.findAll());
5373
return "events/delete";
5474
}
5575

@@ -58,11 +78,27 @@ public String processDeleteEventsForm(@RequestParam(required = false) int[] even
5878

5979
if (eventIds != null) {
6080
for (int id : eventIds) {
61-
EventData.remove(id);
81+
eventRepository.deleteById(id);
6282
}
6383
}
6484

6585
return "redirect:/events";
6686
}
6787

88+
@GetMapping("detail")
89+
public String displayEventDetails(@RequestParam Integer eventId, Model model) {
90+
91+
Optional<Event> result = eventRepository.findById(eventId);
92+
93+
if (result.isEmpty()) {
94+
model.addAttribute("title", "Invalid Event ID: " + eventId);
95+
} else {
96+
Event event = result.get();
97+
model.addAttribute("title", event.getName() + " Details");
98+
model.addAttribute("event", event);
99+
}
100+
101+
return "events/detail";
102+
}
103+
68104
}
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: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
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+
/**
8+
* Created by Chris Bay
9+
*/
10+
@Repository
11+
public interface EventCategoryRepository extends CrudRepository<EventCategory, Integer> {
12+
13+
}

src/main/java/org/launchcode/codingevents/data/EventData.java

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
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+
/**
8+
* Created by Chris Bay
9+
*/
10+
@Repository
11+
public interface EventRepository extends CrudRepository<Event, Integer> {
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
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+
* Created by Chris Bay
9+
*/
10+
@Repository
11+
public interface TagRepository extends CrudRepository<Tag, Integer> {
12+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.launchcode.codingevents.models;
2+
3+
import jakarta.persistence.GeneratedValue;
4+
import jakarta.persistence.Id;
5+
import jakarta.persistence.MappedSuperclass;
6+
7+
import java.util.Objects;
8+
9+
/**
10+
* Created by Chris Bay
11+
*/
12+
@MappedSuperclass
13+
public abstract class AbstractEntity {
14+
15+
@Id
16+
@GeneratedValue
17+
private int id;
18+
19+
public int getId() {
20+
return id;
21+
}
22+
23+
@Override
24+
public boolean equals(Object o) {
25+
if (this == o) return true;
26+
if (o == null || getClass() != o.getClass()) return false;
27+
AbstractEntity entity = (AbstractEntity) o;
28+
return id == entity.id;
29+
}
30+
31+
@Override
32+
public int hashCode() {
33+
return Objects.hash(id);
34+
}
35+
36+
}

0 commit comments

Comments
 (0)