Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add persistent category #68

Open
wants to merge 16 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
plugins {
id 'org.springframework.boot' version '2.2.1.RELEASE'
id 'org.springframework.boot' version '2.4.4'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
Expand All @@ -22,6 +22,9 @@ 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'
implementation 'org.springframework.boot:spring-boot-starter-validation'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.0-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
@@ -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:";
}

}
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package org.launchcode.codingevents.controllers;

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.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 org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;
import javax.validation.Valid;

/**
* Created by Chris Bay
Expand All @@ -17,24 +18,52 @@
@RequestMapping("events")
public class EventController {

private static List<String> events = new ArrayList<>();
@Autowired
private EventRepository eventRepository;

@GetMapping
public String displayAllEvents(Model model) {
model.addAttribute("title", "All Events");
model.addAttribute("events", events);
model.addAttribute("events", eventRepository.findAll());
return "events/index";
}

@GetMapping("create")
public String displayCreateEventForm(Model model) {
model.addAttribute("title", "Create Event");
model.addAttribute(new Event());
model.addAttribute("types", EventType.values());
return "events/create";
}

@PostMapping("create")
public String processCreateEventForm(@RequestParam String eventName) {
events.add(eventName);
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:";
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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<EventCategory, Integer> {

}
Original file line number Diff line number Diff line change
@@ -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<Event, Integer> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package org.launchcode.codingevents.models;

import org.springframework.data.annotation.Id;

import javax.persistence.GeneratedValue;
import javax.persistence.MappedSuperclass;
import java.util.Objects;

@MappedSuperclass
public abstract class AbstractEntity {

@Id
@GeneratedValue
public int id;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

@Override
public boolean equals(Object o) {
// Check if both references point to the same object in memory
if (this == o) return true;
// Check if the object being compared is null or is not of the same class
if (o == null || getClass() != o.getClass()) return false;
// Cast the object to AbstractEntity since we're comparing ids
AbstractEntity entity = (AbstractEntity) o;
// Compare the id of the current object with the id of the object being compared
return id == entity.id;
}

@Override
public int hashCode() {
return Objects.hash(id);
}
}
97 changes: 97 additions & 0 deletions src/main/java/org/launchcode/codingevents/models/Event.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
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 extends AbstractEntity {

@Override
public String toString() {
return name;
}

// @Id
// @GeneratedValue
// private int id;

@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;

private EventType type;

public Event(String name, String description, String contactEmail, EventType type) {
this.name = name;
this.description = description;
this.contactEmail = contactEmail;
this.type = type;
}

public Event() {}

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 String getContactEmail() {
return contactEmail;
}

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;
}



// @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);

Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
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 extends AbstractEntity {

// @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);
// }
}
Loading