diff --git a/migration.sql b/migration.sql index a70d2eab38..5ad56f9553 100644 --- a/migration.sql +++ b/migration.sql @@ -2,11 +2,13 @@ USE adlister_db; DROP TABLE IF EXISTS ads; DROP TABLE IF EXISTS users; +DROP TABLE IF EXISTS categories; +DROP TABLE IF EXISTS ads_categories; CREATE TABLE users ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, - username VARCHAR(240) NOT NULL, - email VARCHAR(240) NOT NULL, + username VARCHAR(240) NOT NULL UNIQUE, + email VARCHAR(240) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, PRIMARY KEY (id) ); @@ -20,3 +22,47 @@ CREATE TABLE ads ( FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); +# table to store category names being created +CREATE TABLE categories ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT, + category VARCHAR(240) UNIQUE NOT NULL, + PRIMARY KEY (id) +); +# table for the categories each add can fit into +CREATE TABLE ads_categories ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT, + ads_id INT UNSIGNED NOT NULL, + category_id INT UNSIGNED NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY (ads_id) REFERENCES ads(id), + FOREIGN KEY (category_id) REFERENCES categories(id) +); + +INSERT INTO categories (category) VALUES ('Automotive'); +INSERT INTO categories (category) VALUES ('Clothing'); +INSERT INTO categories (category) VALUES ('Electronics'); +INSERT INTO categories (category) VALUES ('Furniture'); +INSERT INTO categories (category) VALUES ('Home'); +INSERT INTO categories (category) VALUES ('Tools'); +INSERT INTO categories (category) VALUES ('Toys'); +INSERT INTO categories (category) VALUES ('Miscellaneous'); + + + +# DROP DATABASE IF EXISTS adlister_db; +# +# CREATE DATABASE IF NOT EXISTS adlister_db; + + + +SELECT * +FROM ads +WHERE id IN ( + SELECT ads_id + FROM ads_categories + WHERE category_id IN( + SELECT id + FROM categories + WHERE category LIKE 'Furniture' + ) +); \ No newline at end of file diff --git a/pom.xml b/pom.xml index 22a2e9c039..9bfc99d890 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.mindrot jbcrypt - 0.3m + 0.4 javax.servlet @@ -42,7 +42,7 @@ mysql mysql-connector-java - 6.0.5 + 8.0.23 diff --git a/src/main/java/com/codeup/adlister/controllers/ChangeEmailServlet.java b/src/main/java/com/codeup/adlister/controllers/ChangeEmailServlet.java new file mode 100644 index 0000000000..f02fed275c --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/ChangeEmailServlet.java @@ -0,0 +1,26 @@ +package com.codeup.adlister.controllers; + +import com.codeup.adlister.dao.DaoFactory; +import com.codeup.adlister.models.User; +import com.codeup.adlister.util.Password; + +import javax.imageio.IIOException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet(name = "ChangeEmailServlet", urlPatterns = "/user/email") +public class ChangeEmailServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + User editUser = (User) request.getSession().getAttribute("User"); + String newEmail = request.getParameter("newEmail"); + // String newPassword = null; + //String hashPower = Password.hash(newPassword); + +// DaoFactory.getUsersDao().updateUserEmail(editUser.getId(), newEmail); + response.sendRedirect("/profile"); + + } +} diff --git a/src/main/java/com/codeup/adlister/controllers/ChangePasswordServlet.java b/src/main/java/com/codeup/adlister/controllers/ChangePasswordServlet.java new file mode 100644 index 0000000000..fc60b1aa56 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/ChangePasswordServlet.java @@ -0,0 +1,25 @@ +package com.codeup.adlister.controllers; + + +import com.codeup.adlister.dao.DaoFactory; +import com.codeup.adlister.models.User; +import com.codeup.adlister.util.Password; + +import javax.imageio.IIOException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet(name = "ChangePasswordServlet", urlPatterns = "/user/password") +public class ChangePasswordServlet extends HttpServlet { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + User editUser = (User) request.getSession().getAttribute("user"); + String newPassword = request.getParameter("newPassword"); + String hashPassword = Password.hash(newPassword); + +// DaoFactory.getUsersDao().updateUserPassword(editUser.getId(),hashPassword); + response.sendRedirect("/profile"); + } +} diff --git a/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java b/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java index 38775bc6f7..413b222d02 100644 --- a/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java @@ -2,6 +2,7 @@ import com.codeup.adlister.dao.DaoFactory; import com.codeup.adlister.models.Ad; +import com.codeup.adlister.models.Category; import com.codeup.adlister.models.User; import javax.servlet.ServletException; @@ -10,6 +11,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.List; @WebServlet(name = "controllers.CreateAdServlet", urlPatterns = "/ads/create") public class CreateAdServlet extends HttpServlet { @@ -18,18 +20,49 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t response.sendRedirect("/login"); return; } + List allCategories = DaoFactory.getCategoriesDao().all(); + request.getSession().setAttribute("allCategories",allCategories); + request.getRequestDispatcher("/WEB-INF/ads/create.jsp") - .forward(request, response); + .forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { User user = (User) request.getSession().getAttribute("user"); - Ad ad = new Ad( - user.getId(), - request.getParameter("title"), - request.getParameter("description") - ); - DaoFactory.getAdsDao().insert(ad); - response.sendRedirect("/ads"); + String title = request.getParameter("title"); + String description = request.getParameter("description"); + + String [] selectedCategories = request.getParameterValues("categoryCheckbox"); +// List categoryObjects = new ArrayList<>(); +// for (int i = 0; i < selectedCategories.length; i++) { +// categoryObjects.add(DaoFactory.getCategoriesDao().getCategoryByCatName(selectedCategories[i])); +// } + + + //if title or description is missing error message will be created + if (title.isEmpty() || description.isEmpty()) { + String errorMessage = "Missing information."; + //errorMessage variable is set to attribute createError + request.getSession().setAttribute("createError", errorMessage); + //user is redirected to create page + response.sendRedirect("/ads/create"); + } else { + //when all conditions are met new ad is created + Ad ad = new Ad( + user.getId(), + request.getParameter("title"), + request.getParameter("description") + + ); + if (selectedCategories == null) { + DaoFactory.getAdsDao().insert(ad); + }else { + DaoFactory.getAdsDao().insertCategories(ad, selectedCategories); + } +// DaoFactory.getAdsDao().insert(ad); +// DaoFactory.getCategoriesDao().insert(categoryObjects); + response.sendRedirect("/ads"); + } + } } diff --git a/src/main/java/com/codeup/adlister/controllers/DeleteAdsServlet.java b/src/main/java/com/codeup/adlister/controllers/DeleteAdsServlet.java new file mode 100644 index 0000000000..05cd759c64 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/DeleteAdsServlet.java @@ -0,0 +1,21 @@ +package com.codeup.adlister.controllers; + +import com.codeup.adlister.dao.DaoFactory; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet(name = "DeleteAdsServlet", value = "/ads/delete") +public class DeleteAdsServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, IOException { + long id = Long.parseLong(request.getParameter("ad_id")); + DaoFactory.getAdsDao().deleteCategories(id); + DaoFactory.getAdsDao().delete(id); + response.sendRedirect("/profile"); + } +} diff --git a/src/main/java/com/codeup/adlister/controllers/EditProfileServlet.java b/src/main/java/com/codeup/adlister/controllers/EditProfileServlet.java new file mode 100644 index 0000000000..d1b38160a1 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/EditProfileServlet.java @@ -0,0 +1,91 @@ +package com.codeup.adlister.controllers; + + +import com.codeup.adlister.dao.DaoFactory; +import com.codeup.adlister.models.User; +import com.codeup.adlister.util.Password; +import com.codeup.adlister.util.Validate; + +import javax.imageio.IIOException; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet(name = "EditProfileServlet", urlPatterns = "/editProfile") +public class EditProfileServlet extends HttpServlet { + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + //if user is null, will be redirected to login page + if (request.getSession().getAttribute("user") == null) { + response.sendRedirect("/login"); + return; + } + request.getRequestDispatcher("/WEB-INF/editProfile.jsp").forward(request,response); + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String email = request.getParameter("email"); + String password = request.getParameter("password"); + String passwordConfirmation = request.getParameter("confirmPassword"); + //set hash password + String hash = Password.hash(password); + String errorMessage = ""; + //created user to access id and username + User user = (User) request.getSession().getAttribute("user"); + System.out.println(user.getId()); + System.out.println(email); + System.out.println(password); + System.out.println(passwordConfirmation); + + //boolean if email and password are empty or passwords don't match + boolean inputHasErrors = email.isEmpty() + || password.isEmpty() + || (! password.equals(passwordConfirmation)); + //if statement with inputHasErrors boolean + //if has any error then other if statements will add string to + //errorMessage variable + if(inputHasErrors){ + if(email.isEmpty()){ + errorMessage += "Please enter a valid email"; + } + if(password.isEmpty()){ + errorMessage += "Please enter a password"; + } + if(! password.equals(passwordConfirmation)){ + errorMessage += "Passwords do not match"; + } + + //sets errorMessage to editError + request.getSession().setAttribute("editError", errorMessage); + response.sendRedirect("/editProfile"); + }else if(!Validate.emailVal(email) || !Validate.passVal(password)){ + + if (!Validate.passVal(password)){ + errorMessage += "Password must have at least:
" + + " one numeric character
" + + "one lowercase character
" + + "one uppercase character
" + + "one special symbol of !@#$%
" + + "and 6-15 characters long
"; + } + if(!Validate.emailVal(email)){ + errorMessage +="Enter a valid email
"; + } + request.getSession().setAttribute("editError", errorMessage); + response.sendRedirect("/editProfile"); + }else{ + //create new User object called update adds User object user username and id with email and hash + User update = new User(user.getId(), user.getUsername(), email, hash); + DaoFactory.getUsersDao().updateUser(update); + request.getSession().removeAttribute("user"); + request.getSession().invalidate(); + response.sendRedirect("/login"); + + } + + + } +} diff --git a/src/main/java/com/codeup/adlister/controllers/IndividualAdServlet.java b/src/main/java/com/codeup/adlister/controllers/IndividualAdServlet.java new file mode 100644 index 0000000000..5f27b84376 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/IndividualAdServlet.java @@ -0,0 +1,26 @@ +package com.codeup.adlister.controllers; + +import com.codeup.adlister.dao.DaoFactory; +import com.codeup.adlister.models.Ad; +import com.codeup.adlister.models.User; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.SQLException; + +@WebServlet(name = "controllers.IndividualAdServlet", urlPatterns = "/ads/individualAd") +public class IndividualAdServlet extends HttpServlet { + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + long individualAd = Long.parseLong(request.getParameter("ad")); + User user = DaoFactory.getUsersDao().findByAd(individualAd); + //Ad ad = DaoFactory.getAdsDao().findById(individualAd); + request.setAttribute("ad", DaoFactory.getAdsDao().findById(individualAd)); + request.setAttribute("userAd", user.getUsername()); + request.getRequestDispatcher("/WEB-INF/ads/ShowIndvAd.jsp").forward(request, response); + } +} diff --git a/src/main/java/com/codeup/adlister/controllers/LoginServlet.java b/src/main/java/com/codeup/adlister/controllers/LoginServlet.java index e5c52723a2..148db41cbf 100644 --- a/src/main/java/com/codeup/adlister/controllers/LoginServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/LoginServlet.java @@ -25,19 +25,37 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) String username = request.getParameter("username"); String password = request.getParameter("password"); User user = DaoFactory.getUsersDao().findByUsername(username); + String errorMessage = ""; + //if username or password field is empty error message occurs + if(username.isEmpty() || password.isEmpty()){ + errorMessage = "Username and Password are required"; + request.getSession().setAttribute("loginError", errorMessage); + response.sendRedirect("/login"); + return; + } + + //if user doesn't exist message will occur then will redirect to login if (user == null) { + errorMessage = "You have entered an invalid username or password"; + request.getSession().setAttribute("loginError", errorMessage); response.sendRedirect("/login"); return; } + //boolean if password can be made into hash boolean validAttempt = Password.check(password, user.getPassword()); + //if boolean validattempt true user is redirected to profile + //if false error message is created if (validAttempt) { request.getSession().setAttribute("user", user); response.sendRedirect("/profile"); } else { + errorMessage = "You have entered an invalid username or password"; + request.getSession().setAttribute("loginError", errorMessage); response.sendRedirect("/login"); } + } } diff --git a/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java b/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java index e1e997c17a..079ececd71 100644 --- a/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java @@ -2,6 +2,8 @@ import com.codeup.adlister.dao.DaoFactory; import com.codeup.adlister.models.User; +import com.codeup.adlister.util.Password; +import com.codeup.adlister.util.Validate; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -13,6 +15,7 @@ @WebServlet(name = "controllers.RegisterServlet", urlPatterns = "/register") public class RegisterServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.getRequestDispatcher("/WEB-INF/register.jsp").forward(request, response); } @@ -21,6 +24,9 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) String email = request.getParameter("email"); String password = request.getParameter("password"); String passwordConfirmation = request.getParameter("confirm_password"); + String errorMessage = ""; + System.out.println(email + Validate.emailVal(email)); + System.out.println(password + Validate.passVal(password)); // validate input boolean inputHasErrors = username.isEmpty() @@ -28,14 +34,73 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) || password.isEmpty() || (! password.equals(passwordConfirmation)); + //added if statements under inputHasErrors if (inputHasErrors) { + // if user is missing a field then a string message is added to the var errorMessage + //and continues to the next if statement + if(username.isEmpty()){ + errorMessage += "Username is required for registration
"; + + } + if(email.isEmpty()){ + errorMessage += "Email is required for registration
"; + } + + if(password.isEmpty()){ + errorMessage += "Password is required for registration
"; + } + + if(! password.equals(passwordConfirmation)){ + errorMessage += "Passwords do not match"; + } + //var errorMessage is set to attribute error + request.getSession().setAttribute("error", errorMessage); + response.sendRedirect("/register"); + + + //username variable is input to findByUsername, if it is not null + //errorMessage will be assigned new string and will redirect to register + } else if(!Validate.emailVal(email) || !Validate.passVal(password)){ + + if (!Validate.passVal(password)){ + errorMessage += "Password must have at least:
" + + " one numeric character
" + + "one lowercase character
" + + "one uppercase character
" + + "one special symbol of @#$%^&+=
" + + "and 6-15 characters long
"; + } + if(!Validate.emailVal(email)){ + errorMessage +="Enter a valid email
"; + } + request.getSession().setAttribute("error", errorMessage); + response.sendRedirect("/register"); + }else if(DaoFactory.getUsersDao().findByUsername(username) != null){ + errorMessage = "Username already exists"; + + //var errorMessage is set to attribute error + request.getSession().setAttribute("error", errorMessage); response.sendRedirect("/register"); - return; + + //email variable is input to findByUserEmail, if it is not null + //errorMessage will be assigned new string and will redirect to register + }else if(DaoFactory.getUsersDao().findByUserEmail(email) != null){ + errorMessage = "Email is already used"; + + //var errorMessage is set to attribute error + request.getSession().setAttribute("error", errorMessage); + response.sendRedirect("/register"); + + }else{ + // create and save a new user + User user = new User(username, email, password); + DaoFactory.getUsersDao().insert(user); + response.sendRedirect("/login"); + } - // create and save a new user - User user = new User(username, email, password); - DaoFactory.getUsersDao().insert(user); - response.sendRedirect("/login"); + + + } } diff --git a/src/main/java/com/codeup/adlister/controllers/SearchAdsServlet.java b/src/main/java/com/codeup/adlister/controllers/SearchAdsServlet.java new file mode 100644 index 0000000000..046832f0f2 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/SearchAdsServlet.java @@ -0,0 +1,33 @@ +package com.codeup.adlister.controllers; + + +import com.codeup.adlister.dao.DaoFactory; +import com.codeup.adlister.models.Ad; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +@WebServlet(name = "controllers.SearchAdsServlet", urlPatterns = "/ads/search") +public class SearchAdsServlet extends HttpServlet { + + protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String keyword = request.getParameter("keyword"); + + if (keyword.isEmpty()){ + response.sendRedirect("/ads");// needs the page to be redirected + return; + } + + List ads = DaoFactory.getAdsDao().search(keyword); + request.setAttribute("ads", ads); +// System.out.println(ads); + request.getRequestDispatcher("/WEB-INF/ads/search.jsp").forward(request,response); + + } + +} diff --git a/src/main/java/com/codeup/adlister/controllers/SearchCategoriesServlet.java b/src/main/java/com/codeup/adlister/controllers/SearchCategoriesServlet.java new file mode 100644 index 0000000000..79e10b1a7a --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/SearchCategoriesServlet.java @@ -0,0 +1,75 @@ +package com.codeup.adlister.controllers; + +import com.codeup.adlister.dao.Categories; +import com.codeup.adlister.dao.DaoFactory; +import com.codeup.adlister.models.Ad; +import com.codeup.adlister.models.Category; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; + +@WebServlet(name = "controllers.SearchCategoriesServlet", urlPatterns = "/ads/categories") +public class SearchCategoriesServlet extends HttpServlet { + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ + String category = request.getParameter("category"); //gets category + String searchCategory = getCategory(category); + request.setAttribute("category", searchCategory); + + + + List ads = DaoFactory.getAdsDao().getAdByCategory(category); //gets all ads with category + + + request.setAttribute("ads", ads); //sets ad attribute + request.getRequestDispatcher("/WEB-INF/ads/categories.jsp").forward(request, response); + } + protected String getCategory(String category){ + String actualCategory = ""; + if(category.equals("Automotive")){ + actualCategory = "Automotive"; + } + else if(category.equals("Clothing")){ + actualCategory = "Clothing"; + } + else if(category.equals("Electronics")){ + actualCategory = "Electronics"; + } + else if(category.equals("Furniture")){ + actualCategory = "Furniture"; + } + else if(category.equals("Miscellaneous")){ + actualCategory = "Miscellaneous"; + } + else if(category.equals("Home")){ + actualCategory = "Home"; + } + else if(category.equals("Tools")){ + actualCategory = "Tools"; + } + else if(category.equals("Toys")){ + actualCategory = "Toys"; + } + return actualCategory; + } + +// protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// String keyword2 = request.getParameter("keyword2"); +// +// if (keyword2.isEmpty()){ +// response.sendRedirect("/ads"); +// return; +// } +// +// List categories = DaoFactory.getCategoriesDao().search(keyword2); +// request.setAttribute("ads", categories); +// System.out.println(categories); +// request.getRequestDispatcher("/WEB-INF/ads/categories.jsp").forward(request,response); +// +//} + +} diff --git a/src/main/java/com/codeup/adlister/controllers/ShowCategoriesServlet.java b/src/main/java/com/codeup/adlister/controllers/ShowCategoriesServlet.java new file mode 100644 index 0000000000..fb70ceee4c --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/ShowCategoriesServlet.java @@ -0,0 +1,26 @@ +package com.codeup.adlister.controllers; + +import com.codeup.adlister.dao.DaoFactory; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet(name = "controllers.ShowCategoriesServlet", urlPatterns = "/categories") +public class ShowCategoriesServlet extends HttpServlet { + +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// // request for all categories to populate the categories.jsp page +// request.setAttribute("categories", DaoFactory.getCategoriesDao().all()); +// +// +// // request so that specific category populates the categories.jsp page +// String categoryTitle = request.getParameter("categories"); +// request.setAttribute("categories", DaoFactory.getCategoriesDao().getCategoryByCatName(categoryTitle)); +// +// request.getRequestDispatcher("/WEB-INF/ads/categories.jsp").forward(request, response); +// } +} diff --git a/src/main/java/com/codeup/adlister/controllers/UpdateAdsServlet.java b/src/main/java/com/codeup/adlister/controllers/UpdateAdsServlet.java new file mode 100644 index 0000000000..cb494d71ac --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/UpdateAdsServlet.java @@ -0,0 +1,58 @@ +package com.codeup.adlister.controllers; + +import com.codeup.adlister.dao.DaoFactory; +import com.codeup.adlister.models.Ad; +import com.codeup.adlister.models.User; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet(name = "controllers.UpdateAdsServlet", urlPatterns = "/ads/updateAds") +public class UpdateAdsServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + if (request.getSession().getAttribute("user") == null) { + response.sendRedirect("/login"); + return; + } + + String errorMessage = request.getParameter("errorMessage"); + request.setAttribute("errorMessage", errorMessage); + + long ad_id = Long.parseLong(request.getParameter("ad_id")); + Ad ad = DaoFactory.getAdsDao().findById(ad_id); + + request.setAttribute("ad_id", request.getParameter("ad_id")); + request.setAttribute("title", ad.getTitle()); + request.setAttribute("description", ad.getDescription()); + request.getRequestDispatcher("/WEB-INF/ads/updateAds.jsp").forward(request, response); + + } + + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String updateTitle = request.getParameter("updateTitle"); + String updateDescription = request.getParameter("updateDescription"); + long updateID = Long.parseLong(request.getParameter("ad_id")); + + if(updateTitle == null || updateTitle.isEmpty()){ + response.sendRedirect("/ads/updateAds?ad_id=" + updateID+ "&errorMessage=TitleNull"); + return; + } + + if(updateDescription == null || updateDescription.isEmpty()){ + response.sendRedirect("/ads/updateAds?ad_id=" + updateID+ "&errorMessage=DescriptionNull"); + return; + } + + User user = (User) request.getSession().getAttribute("user"); + Ad ad = new Ad(updateID, user.getId(),updateTitle, updateDescription); + DaoFactory.getAdsDao().update(ad); + response.sendRedirect("/profile"); + } +} \ No newline at end of file diff --git a/src/main/java/com/codeup/adlister/controllers/UserDeleteServlet.java b/src/main/java/com/codeup/adlister/controllers/UserDeleteServlet.java new file mode 100644 index 0000000000..cfe453122e --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/UserDeleteServlet.java @@ -0,0 +1,26 @@ +package com.codeup.adlister.controllers; + +import com.codeup.adlister.dao.DaoFactory; +import com.codeup.adlister.models.User; + +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet(name = "UserDeleteServlet", urlPatterns = "/user/delete") +public class UserDeleteServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + User deleteUser = (User) request.getSession().getAttribute("User"); + DaoFactory.getUsersDao().deleteByID(deleteUser.getId()); + response.sendRedirect("/logout"); + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{ + User deleteUser = (User) request.getSession().getAttribute("user"); + DaoFactory.getUsersDao().deleteByID(deleteUser.getId()); + } +} diff --git a/src/main/java/com/codeup/adlister/controllers/ViewProfileServlet.java b/src/main/java/com/codeup/adlister/controllers/ViewProfileServlet.java index e1b8941067..a2541d3eab 100644 --- a/src/main/java/com/codeup/adlister/controllers/ViewProfileServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/ViewProfileServlet.java @@ -1,5 +1,8 @@ package com.codeup.adlister.controllers; +import com.codeup.adlister.dao.DaoFactory; +import com.codeup.adlister.models.User; + import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; @@ -14,6 +17,8 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t response.sendRedirect("/login"); return; } + User user = (User) request.getSession().getAttribute("user"); + request.setAttribute("userAd", DaoFactory.getAdsDao().getAd(user)); request.getRequestDispatcher("/WEB-INF/profile.jsp").forward(request, response); } } diff --git a/src/main/java/com/codeup/adlister/dao/Ads.java b/src/main/java/com/codeup/adlister/dao/Ads.java index 79dc59f484..2b2f69215f 100644 --- a/src/main/java/com/codeup/adlister/dao/Ads.java +++ b/src/main/java/com/codeup/adlister/dao/Ads.java @@ -1,12 +1,28 @@ package com.codeup.adlister.dao; import com.codeup.adlister.models.Ad; +import com.codeup.adlister.models.User; +import java.sql.SQLException; import java.util.List; public interface Ads { // get a list of all the ads List all(); + //get a list of ads by user id + List getAd(User user); // insert a new ad and return the new ad's id Long insert(Ad ad); + // get a single add to return + Ad findById(Long ad); + // search ads + List search(String keyword); + + void update(Ad ad); + void delete(long id); + void deleteCategories(long ad_Id); + void insertCategories(Ad ad, String[] selectedCategories); + List getAdByCategory(String category); + + } diff --git a/src/main/java/com/codeup/adlister/dao/Categories.java b/src/main/java/com/codeup/adlister/dao/Categories.java new file mode 100644 index 0000000000..97e4af846e --- /dev/null +++ b/src/main/java/com/codeup/adlister/dao/Categories.java @@ -0,0 +1,18 @@ +package com.codeup.adlister.dao; + +import com.codeup.adlister.models.Category; + +import java.util.List; + +public interface Categories { + //list of all categories + List all(); + + //Show category object by title + Category getCategoryByCatName(String category); + + + Long insert(List categoryObjects); + + List search(String keyword2); +} diff --git a/src/main/java/com/codeup/adlister/dao/DaoFactory.java b/src/main/java/com/codeup/adlister/dao/DaoFactory.java index e002140f85..da71385dfd 100644 --- a/src/main/java/com/codeup/adlister/dao/DaoFactory.java +++ b/src/main/java/com/codeup/adlister/dao/DaoFactory.java @@ -3,6 +3,7 @@ public class DaoFactory { private static Ads adsDao; private static Users usersDao; + private static Categories categoriesDao; private static Config config = new Config(); public static Ads getAdsDao() { @@ -18,4 +19,11 @@ public static Users getUsersDao() { } return usersDao; } + + public static Categories getCategoriesDao() { + if (categoriesDao == null) { + categoriesDao = new MySQLCategoriesDao(config); + } + return categoriesDao; + } } diff --git a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java index 8d3baaa369..f1e56c1731 100644 --- a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java @@ -1,11 +1,12 @@ package com.codeup.adlister.dao; import com.codeup.adlister.models.Ad; +import com.codeup.adlister.models.User; import java.util.ArrayList; import java.util.List; -public class ListAdsDao implements Ads { +public class ListAdsDao { private List ads; public List all() { @@ -15,6 +16,22 @@ public List all() { return ads; } + + //@Override + +// +// +// @Override +// public List getAd(User user) { +// return null; +// } + + + public List getAd(User user) { + return null; + } + + public Long insert(Ad ad) { // make sure we have ads if (ads == null) { @@ -27,6 +44,20 @@ public Long insert(Ad ad) { return ad.getId(); } + + //@Override + + +// @Override +// public List search(String keyword) { +// return null; +// } + + + public List search(String keyword) { + return null; + } + private List generateAds() { List ads = new ArrayList<>(); ads.add(new Ad( diff --git a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java index d58c45f985..c1386a492e 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java @@ -1,6 +1,7 @@ package com.codeup.adlister.dao; import com.codeup.adlister.models.Ad; +import com.codeup.adlister.models.User; import com.mysql.cj.jdbc.Driver; import java.io.FileInputStream; @@ -17,9 +18,9 @@ public MySQLAdsDao(Config config) { try { DriverManager.registerDriver(new Driver()); connection = DriverManager.getConnection( - config.getUrl(), - config.getUser(), - config.getPassword() + config.getUrl(), + config.getUser(), + config.getPassword() ); } catch (SQLException e) { throw new RuntimeException("Error connecting to the database!", e); @@ -38,6 +39,20 @@ public List all() { } } + @Override + public List getAd(User user) { + String sql = "SELECT * FROM ads WHERE user_id = " + user.getId(); + PreparedStatement stmt = null; + try { + stmt = connection.prepareStatement(sql); + ResultSet rs = stmt.executeQuery(); + return createAdsFromResults(rs); + } catch (SQLException e) { + throw new RuntimeException("Error retrieving ads.", e); + } + } + + @Override public Long insert(Ad ad) { try { @@ -53,14 +68,127 @@ public Long insert(Ad ad) { } catch (SQLException e) { throw new RuntimeException("Error creating a new ad.", e); } + + } + public void insertCategories(Ad ad, String[] selectedCategories) { + try { + String insertQuery = "INSERT INTO ads(user_id, title, description) VALUES (?, ?, ?)"; + PreparedStatement stmt = connection.prepareStatement(insertQuery, Statement.RETURN_GENERATED_KEYS); + stmt.setLong(1, ad.getUserId()); + stmt.setString(2, ad.getTitle()); + stmt.setString(3, ad.getDescription()); + stmt.executeUpdate(); + ResultSet rs = stmt.getGeneratedKeys(); + rs.next(); + } catch (SQLException e) { + throw new RuntimeException("Error creating a new ad.", e); + } + try { + String insertQuery = "INSERT INTO ads_categories (ads_id, category_id) VALUES (LAST_INSERT_ID(), ?)"; + PreparedStatement stmt = connection.prepareStatement(insertQuery, Statement.RETURN_GENERATED_KEYS); + for (String category : selectedCategories) { + stmt.setInt(1, Integer.parseInt(category)); + stmt.executeUpdate(); + } + ResultSet rs = stmt.getGeneratedKeys(); + rs.next(); + } catch (SQLException e) { + throw new RuntimeException("Error creating a new ad.", e); + } + } + + + //Method for search ads---------------------------AG + @Override + public List search(String keyword) { +// String query = "SELECT * FROM ads WHERE title LIKE ? OR description LIKE ?"; + String query = "SELECT * FROM ads WHERE title LIKE ? "; + try { + PreparedStatement stmt = connection.prepareStatement(query); + stmt.setString(1, keyword); + // change above code to : + stmt.setString(1, '%' + keyword + '%'); +// stmt.setString(2, keyword); + ResultSet rs = stmt.executeQuery(); + return createAdsFromResults(rs); + } catch (SQLException e) { + throw new RuntimeException("Error finding ad", e); + } + } + + + // method to update ads + @Override + public void update(Ad ad) { + String query = "update ads set title = ?, description = ? where id = ?"; + try { + PreparedStatement stmt = connection.prepareStatement(query); + stmt.setString(1, ad.getTitle()); + stmt.setString(2, ad.getDescription()); + stmt.setLong(3, ad.getId()); + stmt.executeUpdate(); + + } catch (SQLException e) { + throw new RuntimeException("Error updating ad", e); + } + } + + //method to delete ads + public void delete(long id) { + String Query = "DELETE FROM ads WHERE id = ?"; + try { + PreparedStatement stmt = connection.prepareStatement(Query); + stmt.setLong(1, id); + stmt.execute(); + } catch (SQLException e) { + throw new RuntimeException("Error finding ad with that ID", e); + } + + } + + @Override + public void deleteCategories(long ad_Id) { + try { + String insertQuery = "DELETE FROM ads_categories WHERE ads_id = ?"; + PreparedStatement stmt = connection.prepareStatement(insertQuery, Statement.RETURN_GENERATED_KEYS); + stmt.setLong(1, ad_Id); +// stmt.setLong(2, category_ID); + stmt.executeUpdate(); + } catch (SQLException throwables) { + throwables.printStackTrace(); + } + } + + + // --------------------------- + + @Override + public Ad findById(Long ad) { +// selecting all ads from the ads table with the specific id to show it individually + String insertQuery = "SELECT * FROM ads WHERE id = ? LIMIT 1"; + try { + PreparedStatement stmt = connection.prepareStatement(insertQuery); + stmt.setLong(1, ad); + //stmt.executeUpdate(); + ResultSet rs = stmt.executeQuery(); + if (rs.next()) { + return extractAd(rs); + } + return null; + } catch (SQLException e) { + throw new RuntimeException("Error finding Ad id", e); + } + } + + private Ad extractAd(ResultSet rs) throws SQLException { return new Ad( - rs.getLong("id"), - rs.getLong("user_id"), - rs.getString("title"), - rs.getString("description") + rs.getLong("id"), + rs.getLong("user_id"), + rs.getString("title"), + rs.getString("description") ); } @@ -71,4 +199,20 @@ private List createAdsFromResults(ResultSet rs) throws SQLException { } return ads; } -} + + @Override + public List getAdByCategory(String category) { + String sql = "SELECT * FROM ads WHERE id IN ( SELECT ads_id FROM ads_categories WHERE category_id IN(SELECT id FROM categories WHERE category LIKE ? ))"; + PreparedStatement stmt = null; + try { + stmt = connection.prepareStatement(sql); + stmt.setString(1, category); + ResultSet rs = stmt.executeQuery(); + return createAdsFromResults(rs); + } catch (SQLException e) { + throw new RuntimeException("Error retrieving ads", e); + } + } + + +} \ No newline at end of file diff --git a/src/main/java/com/codeup/adlister/dao/MySQLCategoriesDao.java b/src/main/java/com/codeup/adlister/dao/MySQLCategoriesDao.java new file mode 100644 index 0000000000..9a52a53bb9 --- /dev/null +++ b/src/main/java/com/codeup/adlister/dao/MySQLCategoriesDao.java @@ -0,0 +1,94 @@ +package com.codeup.adlister.dao; + +import com.codeup.adlister.models.Category; +import com.mysql.cj.jdbc.Driver; + +import java.sql.*; +import java.util.ArrayList; +import java.util.List; + +public class MySQLCategoriesDao implements Categories { + private Connection connection = null; + + public MySQLCategoriesDao(Config config) { + try { + DriverManager.registerDriver(new Driver()); + connection = DriverManager.getConnection( + config.getUrl(), + config.getUser(), + config.getPassword() + ); + } catch (SQLException e) { + throw new RuntimeException("Error connecting to the database!", e); + } + } + + @Override + public List all() { + PreparedStatement stmt = null; + try { + stmt = connection.prepareStatement("SELECT * FROM categories"); + ResultSet rs = stmt.executeQuery(); + return createCatsFromResults(rs); + } catch (SQLException e) { + throw new RuntimeException("Error retrieving all categories.", e); + } + } + + + @Override + public Category getCategoryByCatName(String category) { + String query = "SELECT * FROM categories WHERE category = ? LIMIT 1"; + try { + PreparedStatement stmt = connection.prepareStatement(query); + stmt.setString(1, category); + return extractCategory(stmt.executeQuery()); + } catch (SQLException e) { + throw new RuntimeException("Error finding a category", e); + } + } + + @Override + public Long insert(List categoryObjects) { + return null; + } + + @Override + public List search(String keyword2) { + String query = "SELECT * FROM ads WHERE title LIKE ? "; + try { + PreparedStatement stmt = connection.prepareStatement(query); +// stmt.setString(1, keyword2); + // change above code to : + stmt.setString(1, '%' + keyword2 + '%'); +// stmt.setString(2, keyword); + ResultSet rs = stmt.executeQuery(); + return createCatsFromResults(rs); + } catch (SQLException e) { + throw new RuntimeException("Error finding ad", e); + } + } + +// @Override +// public Category getAdsInsert(Category category) { +// +// } + + private Category extractCategory(ResultSet rs) throws SQLException { +// if (! rs.next()) { +// return null; +// } + return new Category( + rs.getLong("id"), + rs.getString("category") + ); + } + + private List createCatsFromResults(ResultSet rs) throws SQLException { + List categories = new ArrayList<>(); + while (rs.next()) { + categories.add(extractCategory(rs)); + } + return categories; + } +} diff --git a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java index 4e69e57044..642bbf1666 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java @@ -51,6 +51,86 @@ public Long insert(User user) { } } + @Override + public User findByUserID(long id) { + String query = "SELECT * FROM users WHERE id = ? LIMIT 1"; + try { + PreparedStatement stmt = connection.prepareStatement(query); + stmt.setLong(1, id); + return extractUser(stmt.executeQuery()); + } catch (SQLException e) { + throw new RuntimeException("Error finding a user by username", e); + } + } + + @Override + public User findByAd(long ad_id) { + String query = "SELECT * from users where id in (select user_id FROM ads where id = ?)"; + try { + PreparedStatement stmt = connection.prepareStatement(query); + stmt.setLong(1, ad_id); + ResultSet rs = stmt.executeQuery(); + System.out.println(rs); +// rs.next(); + return extractUser(rs); + } catch (SQLException e) { + throw new RuntimeException("Error finding ad username", e); + } + } + + @Override + public void updateUser(User user) { + //updates only password and email + String updateSql = "UPDATE users set password = ?, email = ? where id = ?"; + try { + PreparedStatement stmt = connection.prepareStatement(updateSql, Statement.RETURN_GENERATED_KEYS); + stmt.setString(1, user.getPassword()); + stmt.setString(2, user.getEmail()); + stmt.setLong(3, user.getId()); + stmt.executeUpdate(); + ResultSet rs = stmt.getGeneratedKeys(); + rs.next(); + // testing for the expected messages. + System.out.println(stmt); + System.out.println(stmt.executeUpdate()); + + } catch (SQLException e) { + throw new RuntimeException("Error Editing an Ad by ID", e); + } + + } + + + + + @Override + public User findByUserEmail(String email) { + String query = "SELECT * FROM users WHERE email = ? LIMIT 1"; + try { + PreparedStatement stmt = connection.prepareStatement(query); + stmt.setString(1, email); + return extractUser(stmt.executeQuery()); + } catch (SQLException e) { + throw new RuntimeException("Error finding a user by email", e); + } + + } + + @Override + public void deleteByID(long id) { + String query = "DELETE FROM users WHERE id = ? LIMIT 1";//? will be replaced by the ID to be deleted + try { + PreparedStatement stmt = connection.prepareStatement(query); + stmt.setLong(1, id); + System.out.println(stmt); + System.out.println(stmt.executeQuery()); + stmt.execute();// EXECUTES A QUERY + } catch (SQLException e){ + throw new RuntimeException("Error deleting a User by ID, e"); + } + + } + private User extractUser(ResultSet rs) throws SQLException { if (! rs.next()) { return null; diff --git a/src/main/java/com/codeup/adlister/dao/Users.java b/src/main/java/com/codeup/adlister/dao/Users.java index 62da74d20b..92a8879e53 100644 --- a/src/main/java/com/codeup/adlister/dao/Users.java +++ b/src/main/java/com/codeup/adlister/dao/Users.java @@ -7,4 +7,9 @@ public interface Users { User findByUsername(String username); Long insert(User user); + User findByUserID(long id); + void updateUser(User user); + User findByUserEmail(String email); + void deleteByID(long id); + User findByAd(long ad_id); } diff --git a/src/main/java/com/codeup/adlister/models/Category.java b/src/main/java/com/codeup/adlister/models/Category.java new file mode 100644 index 0000000000..e6ea068ff1 --- /dev/null +++ b/src/main/java/com/codeup/adlister/models/Category.java @@ -0,0 +1,29 @@ +package com.codeup.adlister.models; + +public class Category { + private long id; + private String category; + + + public Category(long id, String category) { + this.id = id; + this.category = category; + } + + public long getId() { + return id; + } + public void setId(long id) { + this.id = id; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } +} + + diff --git a/src/main/java/com/codeup/adlister/util/Validate.java b/src/main/java/com/codeup/adlister/util/Validate.java new file mode 100644 index 0000000000..b1e3e3a8d4 --- /dev/null +++ b/src/main/java/com/codeup/adlister/util/Validate.java @@ -0,0 +1,35 @@ +package com.codeup.adlister.util; + +import java.util.regex.Pattern; + +public class Validate { + + + //When a string of email gets passed it is ran against + //the regex and if it matches it will return true; + public static boolean emailVal(String email) { + //regex for emails to be like bob@mail.com + String emailRegex = "^[a-zA-Z0-9_+&*-]+(?:\\."+ + "[a-zA-Z0-9_+&*-]+)*@" + + "(?:[a-zA-Z0-9-]+\\.)+[a-z" + + "A-Z]{2,7}$"; + + Pattern pat = Pattern.compile(emailRegex); + + return pat.matcher(email).matches(); + + } + + //When a string of password gets passed it is ran against + //the regex and if it matches it will return true; + public static boolean passVal(String password){ + //regex for passwords to have 6-15 characters and at least one character + //of uppercase, lowercase, number, and symbol of @#$%^&+= example Java#@#8 is true + String passRegex ="^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])(?=\\S+$).{6,15}$"; + Pattern pat = Pattern.compile(passRegex); + + return pat.matcher(password).matches(); + + } + +} diff --git a/src/main/webapp/WEB-INF/ads/ShowIndvAd.jsp b/src/main/webapp/WEB-INF/ads/ShowIndvAd.jsp new file mode 100644 index 0000000000..9d08e14cc3 --- /dev/null +++ b/src/main/webapp/WEB-INF/ads/ShowIndvAd.jsp @@ -0,0 +1,60 @@ +<%-- + Created by IntelliJ IDEA. + User: jose + Date: 2/14/22 + Time: 2:03 PM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + + + + + + + + +
+

Your Ad

+ +
+
+

Title: ${ad.title}

+

Description: ${ad.description}

+

User: ${userAd}

+
+
+ +
+
+ Back to Ads +
+ +<%--after user logged in/ on user profile--%> + +
+
+

Title: ${ad.title}

+

Description: ${ad.description}

+

User: ${userAd}

+
+
+ +
+
+ Back to Profile + Back to Ads + + + +
+ + + + + + + diff --git a/src/main/webapp/WEB-INF/ads/categories.jsp b/src/main/webapp/WEB-INF/ads/categories.jsp new file mode 100644 index 0000000000..7056daa4df --- /dev/null +++ b/src/main/webapp/WEB-INF/ads/categories.jsp @@ -0,0 +1,66 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%-- + Created by IntelliJ IDEA. + User: jose + Date: 2/16/22 + Time: 11:09 AM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + + + + + +
+

All Categories

+ + + +
+

Category: ${category}

+
+ +
No ads found. Explore all ads
+
+ +
+
+ +

${ad.title}

+

${ad.description}

+ +
+
+
+
+ +<%--
--%> + + + +
+ + Return Home + + + + + + + diff --git a/src/main/webapp/WEB-INF/ads/create.jsp b/src/main/webapp/WEB-INF/ads/create.jsp index f6332692f7..eaf39d8196 100644 --- a/src/main/webapp/WEB-INF/ads/create.jsp +++ b/src/main/webapp/WEB-INF/ads/create.jsp @@ -1,11 +1,14 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + +

Create a new Ad

@@ -17,8 +20,27 @@
- + +
+ + + + + + +
+ + <%--createError attribute posts error message from createAdServlet --%> + +

${createError}

+ +<%--added link to get back to profile- AG--%> + Back to Profile + + + + diff --git a/src/main/webapp/WEB-INF/ads/index.jsp b/src/main/webapp/WEB-INF/ads/index.jsp index 6f4371f0bb..27379e8c94 100644 --- a/src/main/webapp/WEB-INF/ads/index.jsp +++ b/src/main/webapp/WEB-INF/ads/index.jsp @@ -5,20 +5,64 @@ + -
+ + + + +<%--after user logged in--%> + + + + diff --git a/src/main/webapp/WEB-INF/ads/search.jsp b/src/main/webapp/WEB-INF/ads/search.jsp new file mode 100644 index 0000000000..bbffd8c324 --- /dev/null +++ b/src/main/webapp/WEB-INF/ads/search.jsp @@ -0,0 +1,70 @@ +<%-- + Created by IntelliJ IDEA. + User: aidajimenez + Date: 2/14/22 + Time: 3:07 PM + To change this template use File | Settings | File Templates. +--%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + + Search + + + + + +
+ +

You Search Results:

+ +<%--//added some style to show add in a card*** Agutierrez +NOTE: when click to indv ad gives error--%> + +
+ +
+ + + + +
+
+
+ +

${ad.title}

+

${ad.description}

+ +
+
+
+ + + +
+
+ + + +

No Search Results Found

+
+ + +
+ + Back to Profile + + + +
+ + + + + diff --git a/src/main/webapp/WEB-INF/ads/updateAds.jsp b/src/main/webapp/WEB-INF/ads/updateAds.jsp new file mode 100644 index 0000000000..9c3fec8bf1 --- /dev/null +++ b/src/main/webapp/WEB-INF/ads/updateAds.jsp @@ -0,0 +1,43 @@ +<%-- + Created by IntelliJ IDEA. + User: aidajimenez + Date: 2/16/22 + Time: 9:27 AM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + + + + + +
+

Update your Ad

+ + + +
+
+ + + +
+
+ + +
+ +
+ +
+ + + + diff --git a/src/main/webapp/WEB-INF/editProfile.jsp b/src/main/webapp/WEB-INF/editProfile.jsp new file mode 100644 index 0000000000..53f6c35467 --- /dev/null +++ b/src/main/webapp/WEB-INF/editProfile.jsp @@ -0,0 +1,53 @@ +<%-- + Created by IntelliJ IDEA. + User: jevian + Date: 2/16/22 + Time: 10:45 AM + To change this template use File | Settings | File Templates. +--%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + + + + +
+ +

Update your Profile:

+ +
+
+
+
+ + + + +
+
+ + +
+
+ + +
+
+ + +
+

${editError}

+ +
+
+ Back to Profile +
+
+ + + diff --git a/src/main/webapp/WEB-INF/login.jsp b/src/main/webapp/WEB-INF/login.jsp index 83ce2d0a1f..95ff63d26d 100644 --- a/src/main/webapp/WEB-INF/login.jsp +++ b/src/main/webapp/WEB-INF/login.jsp @@ -4,11 +4,14 @@ +

Please Log In

+ +
@@ -18,8 +21,20 @@
- + <%--loginError allows error message to display --%> +

${loginError}

+
+ + + Return Home + +
+ + + + + diff --git a/src/main/webapp/WEB-INF/partials/footer.jsp b/src/main/webapp/WEB-INF/partials/footer.jsp new file mode 100644 index 0000000000..d6426e2769 --- /dev/null +++ b/src/main/webapp/WEB-INF/partials/footer.jsp @@ -0,0 +1,9 @@ +
+ +

Adlister Red Team

+
+ + +
+ + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/partials/head.jsp b/src/main/webapp/WEB-INF/partials/head.jsp index a33443d65c..51e219f43d 100644 --- a/src/main/webapp/WEB-INF/partials/head.jsp +++ b/src/main/webapp/WEB-INF/partials/head.jsp @@ -1,2 +1,9 @@ ${param.title} - +<%----%> + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/partials/navbar.jsp b/src/main/webapp/WEB-INF/partials/navbar.jsp index 8e1f98f662..828b4d20ba 100644 --- a/src/main/webapp/WEB-INF/partials/navbar.jsp +++ b/src/main/webapp/WEB-INF/partials/navbar.jsp @@ -1,13 +1,65 @@ -
- +<%--addded taglib and JSP Directives--%> + + +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + +<%--New Dynamic Navbar--%> +<%--on main page--%> + + + + +<%--after user logged in/ on user profile--%> + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/profile.jsp b/src/main/webapp/WEB-INF/profile.jsp index 05e3fa7a91..092f4e22f2 100644 --- a/src/main/webapp/WEB-INF/profile.jsp +++ b/src/main/webapp/WEB-INF/profile.jsp @@ -1,16 +1,50 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> - + + - + -
-

Welcome, ${sessionScope.user.username}!

+
+

Welcome, !

+
+ +
+ +

Your Ads:

+
+ +
+

${ad.title}

+

${ad.description}

+
+
+ Update + Delete +
+
+
+ + +
+
+
+ + Edit Profile + +
+ + + diff --git a/src/main/webapp/WEB-INF/register.jsp b/src/main/webapp/WEB-INF/register.jsp index 4b64e10a43..30a317924f 100644 --- a/src/main/webapp/WEB-INF/register.jsp +++ b/src/main/webapp/WEB-INF/register.jsp @@ -1,33 +1,64 @@ <%@ page contentType="text/html;charset=UTF-8" language="java" %> + - + + + - -
-

Please fill in your information.

-
-
- - -
-
- - -
-
- - -
-
- - -
- -
-
+ + + + + +
+

Please fill in your information.

+ +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ <%--error attribute posts error message from registerservlet --%> +

${error}

+ +
+
+ + + Return Home + +
+ + + + + diff --git a/src/main/webapp/images/flea-market.jpg b/src/main/webapp/images/flea-market.jpg new file mode 100644 index 0000000000..1618ffd7b8 Binary files /dev/null and b/src/main/webapp/images/flea-market.jpg differ diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp index 68cf346ec9..6fae678ba6 100644 --- a/src/main/webapp/index.jsp +++ b/src/main/webapp/index.jsp @@ -5,11 +5,54 @@ + + + + +
+
+

Welcome to the Adlister!

+
+ + + + +
+ + + +
+
+
+ +
-

Welcome to the Adlister!

+
+<%--

--%> + +
+
+ + + diff --git a/src/main/webapp/stylesheets/styles.css b/src/main/webapp/stylesheets/styles.css new file mode 100644 index 0000000000..0d53dde25f --- /dev/null +++ b/src/main/webapp/stylesheets/styles.css @@ -0,0 +1,73 @@ +body, h1, h2, h3, h4, h5, h6, .back-button { + font-family: "Monserrat", sans-serif; +} + +.nav-item, .nav-link { + font-family: "Monserrat", sans-serif; + color: #92A9BD; + margin-left:30px; + margin-right:30px; +} + +.navbar-brand{ + color:dimgray +} + +/*.main{*/ +/* background-image: url("/images/flea-market.jpg");*/ +/* */ +/*}*/ + +.search-bar{ + width: 430px; +} + +.container > h1 { + display: flex; justify-content: center; +} + +.categories-container { + display: flex; flex-direction: column +} + +.category { + display: flex; justify-content: space-evenly; margin-right: 10px; +} + +#profile-logo { + display: flex; justify-content: center +} + +.users-name { + display: flex; justify-content: center +} + +.display-cards { + display: flex; flex-wrap: wrap; justify-content: center; align-items: center +} + +.back-button { + font-family: "Monserrat", sans-serif; color:#92A9BD +} + +.navbar-brand, .display-4 { + font-family: "Monserrat"; color: #92A9BD +} + +.navbar-brand { + font-size: large; color:#92A9BD +} + + +.JumboHeaderImg { + background-image: url("/images/flea-market.jpg"); + height:100px; + width:100px; + background-size: cover; + background-repeat: no-repeat; +} + + +.footer{ + margin-top: 300px; +}