-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Expand file tree
/
Copy pathEventController.java
More file actions
149 lines (124 loc) · 5.08 KB
/
EventController.java
File metadata and controls
149 lines (124 loc) · 5.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package org.launchcode.codingevents.controllers;
import org.launchcode.codingevents.data.EventCategoryRepository;
import org.launchcode.codingevents.data.EventRepository;
import org.launchcode.codingevents.data.TagRepository;
import org.launchcode.codingevents.models.Event;
import org.launchcode.codingevents.models.EventCategory;
import org.launchcode.codingevents.models.Tag;
import org.launchcode.codingevents.models.dto.EventTagDTO;
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.*;
import javax.validation.Valid;
import java.util.Optional;
/**
* Created by Chris Bay
*/
@Controller
@RequestMapping("events")
public class EventController {
@Autowired
private EventRepository eventRepository;
@Autowired
private EventCategoryRepository eventCategoryRepository;
@Autowired
private TagRepository tagRepository;
@GetMapping
public String displayEvents(@RequestParam(required = false) Integer categoryId, Model model, @RequestParam(required = false) Integer tagId) {
if (categoryId == null & tagId == null) {
model.addAttribute("title", "All Events");
model.addAttribute("events", eventRepository.findAll());
} else {
Optional<Tag> output = tagRepository.findById(tagId);
if (output.isPresent()){
Tag tag = output.get();
model.addAttribute("title", "Events by Tag: " + tag.getName());
model.addAttribute("events", tag.getEvents());
} else {
Optional<EventCategory> 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";
}
@GetMapping("create")
public String displayCreateEventForm(Model model) {
model.addAttribute("title", "Create Event");
model.addAttribute(new Event());
model.addAttribute("categories", eventCategoryRepository.findAll());
return "events/create";
}
@PostMapping("create")
public String processCreateEventForm(@ModelAttribute @Valid Event newEvent,
Errors errors, Model model) {
if(errors.hasErrors()) {
model.addAttribute("title", "Create Event");
return "events/create";
}
eventRepository.save(newEvent);
return "redirect:";
}
@GetMapping("delete")
public String displayDeleteEventForm(Model model) {
model.addAttribute("title", "Delete Events");
model.addAttribute("events", eventRepository.findAll());
return "events/delete";
}
@PostMapping("delete")
public String processDeleteEventsForm(@RequestParam(required = false) int[] eventIds) {
if (eventIds != null) {
for (int id : eventIds) {
eventRepository.deleteById(id);
}
}
return "redirect:";
}
@GetMapping("detail")
public String displayEventDetails(@RequestParam Integer eventId, Model model) {
Optional<Event> result = eventRepository.findById(eventId);
if (result.isEmpty()) {
model.addAttribute("title", "Invalid Event ID: " + eventId);
} else {
Event event = result.get();
model.addAttribute("title", event.getName() + " Details");
model.addAttribute("event", event);
model.addAttribute("tags", event.getTags());
}
return "events/detail";
}
// responds to /events/add-tag?eventId=13
@GetMapping("add-tag")
public String displayAddTagForm(@RequestParam Integer eventId, Model model){
Optional<Event> result = eventRepository.findById(eventId);
Event event = result.get();
model.addAttribute("title", "Add Tag to: " + event.getName());
model.addAttribute("tags", tagRepository.findAll());
EventTagDTO eventTag = new EventTagDTO();
eventTag.setEvent(event);
model.addAttribute("eventTag", eventTag);
return "events/add-tag.html";
}
@PostMapping("add-tag")
public String processAddTagForm(@ModelAttribute @Valid EventTagDTO eventTag,
Errors errors,
Model model){
if (!errors.hasErrors()) {
Event event = eventTag.getEvent();
Tag tag = eventTag.getTag();
if (!event.getTags().contains(tag)){
event.addTag(tag);
eventRepository.save(event);
}
return "redirect:detail?eventId=" + event.getId();
}
return "redirect:add-tag";
}
}