diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000..2f7e633a57 Binary files /dev/null and b/.DS_Store differ diff --git a/migration.sql b/migration.sql index a70d2eab38..e2e07da10e 100644 --- a/migration.sql +++ b/migration.sql @@ -1,22 +1,56 @@ USE adlister_db; - -DROP TABLE IF EXISTS ads; DROP TABLE IF EXISTS users; - -CREATE TABLE users ( - id INT UNSIGNED NOT NULL AUTO_INCREMENT, - username VARCHAR(240) NOT NULL, - email VARCHAR(240) NOT NULL, +CREATE TABLE users +( + id INT UNSIGNED NOT NULL AUTO_INCREMENT, + username VARCHAR(240) NOT NULL UNIQUE, + email VARCHAR(240) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, - PRIMARY KEY (id) + PRIMARY KEY (id) # added these ND + # maybe only dateCreated could be added + # UNIQUE is identified in username/email above + # will comment out until okayed by team + # dateCreated VARCHAR (50) NOT NULL + # UNIQUE (username), + # UNIQUE (email) + ); -CREATE TABLE ads ( - id INT UNSIGNED NOT NULL AUTO_INCREMENT, - user_id INT UNSIGNED NOT NULL, - title VARCHAR(240) NOT NULL, - description TEXT NOT NULL, +DROP TABLE IF EXISTS ads; +CREATE TABLE ads +( + id INT UNSIGNED NOT NULL AUTO_INCREMENT, + user_id INT UNSIGNED NOT NULL, + title VARCHAR(240) NOT NULL, + description VARCHAR(400) NOT NULL, PRIMARY KEY (id), - FOREIGN KEY (user_id) REFERENCES users(id) + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE + +-- # added these ND + + # commenting out the below, + # don't believe is needed + # will discuss with team + # dateCreated VARCHAR (50) NOT NULL, + # categoryName VARCHAR(255) NOT NULL, + # UNIQUE (user_id, title, description) +); + +DROP TABLE IF EXISTS categories; +CREATE TABLE categories +( + id INT UNSIGNED NOT NULL AUTO_INCREMENT, + categoryName VARCHAR(240) NOT NULL, + PRIMARY KEY (id) +); + +DROP TABLE IF EXISTS ad_category; +CREATE TABLE ad_category +( + category_id INT UNSIGNED NOT NULL, + ad_id INT UNSIGNED NOT NULL, + FOREIGN KEY (ad_id) REFERENCES ads (id) + ON DELETE CASCADE, + FOREIGN KEY (category_id) REFERENCES categories (id) ); diff --git a/pom.xml b/pom.xml index 22a2e9c039..3608498c21 100644 --- a/pom.xml +++ b/pom.xml @@ -27,22 +27,23 @@ org.mindrot jbcrypt - 0.3m + 0.4 javax.servlet javax.servlet-api - 3.0.1 + 4.0.1 jstl jstl 1.2 + mysql mysql-connector-java - 6.0.5 + 8.0.23 diff --git a/seeder.sql b/seeder.sql new file mode 100644 index 0000000000..22ceed8c5f --- /dev/null +++ b/seeder.sql @@ -0,0 +1,13 @@ +USE adlister_db; + +-- # TRUNCATE categories; + +INSERT INTO categories (categoryName) +VALUES ('For Sale'), + ('Auto'), + ('Housing'), + ('Jobs'), + ('Community'); + +SELECT * FROM categories; + diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000..82a8397492 Binary files /dev/null and b/src/.DS_Store differ diff --git a/src/main/java/com/codeup/adlister/controllers/AdsIndexServlet.java b/src/main/java/com/codeup/adlister/controllers/AdsIndexServlet.java index 1763081228..e573affaf7 100644 --- a/src/main/java/com/codeup/adlister/controllers/AdsIndexServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/AdsIndexServlet.java @@ -13,6 +13,21 @@ public class AdsIndexServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("ads", DaoFactory.getAdsDao().all()); + +// if (request.getSession().getAttribute("vp") != null) { +// request.getSession().removeAttribute("vp"); +// } +// request.getSession().setAttribute("vi", "hi"); request.getRequestDispatcher("/WEB-INF/ads/index.jsp").forward(request, response); + + } + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + } } + +// urlPattern does not work; get a 500 error code stating +// Error retrieving all ads +// Root Cause: Unknown database 'ads' \ No newline at end of file diff --git a/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java b/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java index 38775bc6f7..be1628d522 100644 --- a/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java @@ -30,6 +30,7 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) request.getParameter("description") ); DaoFactory.getAdsDao().insert(ad); + // consider changing redirect to /profile until adIndex is setup response.sendRedirect("/ads"); } } diff --git a/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java b/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java new file mode 100644 index 0000000000..6219a31e43 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java @@ -0,0 +1,42 @@ +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("/ads/delete") +public class DeleteAdServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + +// String idQuery = req.getParameter("id"); +// Ad ad = DaoFactory.getAdsDao().findByStringId(idQuery); +// User user = (User) req.getSession().getAttribute("user"); +// if (ad.getUserId() != user.getId()) { +// resp.sendRedirect("/profile"); +// } else { +// req.getSession().setAttribute("ad", ad); +// } + req.getRequestDispatcher("/WEB-INF/ads/delete.jsp").forward(req, resp); + } + + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + Long id = Long.parseLong(req.getParameter("ad_id")); + Ad ad = DaoFactory.getAdsDao().findById(id); + DaoFactory.getAdsDao().delete(ad); + if (req.getSession().getAttribute("vp") == null){ + resp.sendRedirect("/ads"); + } else { + resp.sendRedirect("/profile"); + } + } +} diff --git a/src/main/java/com/codeup/adlister/controllers/DeleteProfileServlet.java b/src/main/java/com/codeup/adlister/controllers/DeleteProfileServlet.java new file mode 100644 index 0000000000..071edffc74 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/DeleteProfileServlet.java @@ -0,0 +1,36 @@ +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; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet("/profile/delete") +public class DeleteProfileServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + if (req.getSession().getAttribute("user") == null) { + resp.sendRedirect("/login"); + return; + } + req.getRequestDispatcher("/WEB-INF/profile/delete.jsp").forward(req,resp); + } + + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + User user = (User) req.getSession().getAttribute("user"); + DaoFactory.getUsersDao().delete(user.getUsername()); + req.getSession().removeAttribute("user"); + req.getSession().invalidate(); + resp.sendRedirect("/login"); + + + } +} diff --git a/src/main/java/com/codeup/adlister/controllers/HelloWorldServlet.java b/src/main/java/com/codeup/adlister/controllers/HelloWorldServlet.java index 4ab9b9da70..7370de77c0 100644 --- a/src/main/java/com/codeup/adlister/controllers/HelloWorldServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/HelloWorldServlet.java @@ -1,14 +1,14 @@ -package com.codeup.adlister.controllers; - -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.HelloWorldServlet", urlPatterns = "/") -public class HelloWorldServlet extends HttpServlet { - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - response.getWriter().println("

Hello, World!

"); - } -} +//package com.codeup.adlister.controllers; +// +//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.HelloWorldServlet", urlPatterns = "/") +//public class HelloWorldServlet extends HttpServlet { +// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { +// response.getWriter().println("

Hello, World!

"); +// } +//} diff --git a/src/main/java/com/codeup/adlister/controllers/PickAdServlet.java b/src/main/java/com/codeup/adlister/controllers/PickAdServlet.java new file mode 100644 index 0000000000..b8f19faab2 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/PickAdServlet.java @@ -0,0 +1,22 @@ +package com.codeup.adlister.controllers; + +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("/pickad") +public class PickAdServlet extends HttpServlet { + + protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { + req.getRequestDispatcher("/WEB-INF/profile/profile.jsp").forward(req, res); + } + + protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { + String selectAd = req.getParameter("id"); + req.setAttribute("ad", selectAd); + res.sendRedirect("/ad?id=" + selectAd); + } +} \ No newline at end of file diff --git a/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java b/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java index e1e997c17a..77c7a0f649 100644 --- a/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java @@ -9,10 +9,13 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.sql.SQLException; -@WebServlet(name = "controllers.RegisterServlet", urlPatterns = "/register") +@WebServlet(name = "RegisterServlet", urlPatterns = "/register") public class RegisterServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String errorMessage = request.getParameter("errorMessage"); + request.setAttribute("errorMessage", errorMessage); request.getRequestDispatcher("/WEB-INF/register.jsp").forward(request, response); } @@ -24,9 +27,9 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) // validate input boolean inputHasErrors = username.isEmpty() - || email.isEmpty() - || password.isEmpty() - || (! password.equals(passwordConfirmation)); + || email.isEmpty() + || password.isEmpty() + || (!password.equals(passwordConfirmation)); if (inputHasErrors) { response.sendRedirect("/register"); @@ -35,7 +38,42 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) // create and save a new user User user = new User(username, email, password); - DaoFactory.getUsersDao().insert(user); - response.sendRedirect("/login"); + + try { + boolean usernameAndEmailNotValid = DaoFactory.getUsersDao().validateUsername(username) && + DaoFactory.getUsersDao().validateEmail(email); + boolean usernameNotValid = DaoFactory.getUsersDao().validateUsername(username); + boolean userEmailNotValid = DaoFactory.getUsersDao().validateEmail(email); + + if (usernameAndEmailNotValid) { + request.setAttribute("bothTaken", true); + request.getRequestDispatcher("/WEB-INF/register.jsp").forward(request, response); + } else if (usernameNotValid) { + request.setAttribute("usernameTaken", true); + request.getRequestDispatcher("/WEB-INF/register.jsp").forward(request, response); + } else if (userEmailNotValid) { + request.setAttribute("emailTRaken", true); + request.getRequestDispatcher("/WEB-INF/register.jsp").forward(request, response); + } + } catch (SQLException e) { + e.printStackTrace(); + } catch (ServletException e) { + e.printStackTrace(); + } + try { + user = new User(username, email, password); + request.getSession().setAttribute("user", user); + DaoFactory.getUsersDao().insert(user); + response.sendRedirect("/profile"); +// } catch (SQLException e) { +// e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + +// request.getSession().setAttribute("username", null); +// request.getSession().setAttribute("email", null); +// DaoFactory.getUsersDao().insert(user); +// response.sendRedirect("/login"); } -} +} \ No newline at end of file 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..e0c4a4b5c5 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/SearchAdsServlet.java @@ -0,0 +1,48 @@ +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.sql.SQLException; +import java.util.List; + +@WebServlet(name="controllers.SearchAdsServlet", urlPatterns="/searchAds") +public class SearchAdsServlet extends HttpServlet { +// public void doGet(HttpServletRequest request, HttpServletResponse response) +// throws IOException{ +// +// } +protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + String keyword = request.getParameter("keyword"); + if(keyword.isEmpty()) { + response.sendRedirect("/ads"); + return; + } + try{ + List keywordAds = DaoFactory.getAdsDao().findAdByKeyword(keyword); + request.setAttribute("ads", keywordAds); + request.getRequestDispatcher("/WEB-INF/ads/keywordAds.jsp").forward(request, response); + if (keywordAds.size() == 0) { + request.setAttribute("zeroResults", true); + } else { + request.setAttribute("zeroResults", false); + } + request.setAttribute("keyword", keyword.toLowerCase()); + request.setAttribute("ads", keywordAds); + request.getRequestDispatcher("/WEB-INF/ads/showAd.jsp").forward(request, response); + for (Ad ad : keywordAds) { + System.out.println(ad.getTitle()); + } + }catch(SQLException e){ + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/codeup/adlister/controllers/ShowAdServlet.java b/src/main/java/com/codeup/adlister/controllers/ShowAdServlet.java new file mode 100644 index 0000000000..1e358c4606 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/ShowAdServlet.java @@ -0,0 +1,98 @@ +package com.codeup.adlister.controllers; + +import com.codeup.adlister.dao.DaoFactory; +import com.codeup.adlister.models.Ad; +import com.codeup.adlister.models.AdCategory; +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; +import java.util.ArrayList; +import java.util.List; + +@WebServlet(name="controllers.SearchAdsServlet", urlPatterns="/Categories/category") +public class ShowAdServlet extends HttpServlet { + protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { + String category = req.getParameter("category"); + String searchCategory = getCategory(category); + req.setAttribute("category", searchCategory); + + List categories = DaoFactory.getAdsDao().getAdsFromCategory(searchCategory); + req.setAttribute("ads", category); + req.getRequestDispatcher("/WEB-INF/ads/category.jsp").forward(req, res); + } + + protected String getCategory(String category) { + String actualCategory = ""; + if (category.equals("For Sale")) { + actualCategory = "For Sale"; + } else if (category.equals("Automotive")) { + actualCategory = "Automotive"; + } else if (category.equals("Jobs")) { + actualCategory = "Jobs"; + } else if (category.equals("Community")) { + actualCategory = "Community"; +// } else if (category.equals("")) { +// actualCategory = ""; + } + return actualCategory; + } +} +// @WebServlet("/ad") +// public class ShowAdServlet extends HttpServlet { +// protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { +// long id = Long.parseLong(req.getParameter("id")); +// try { +// Ad ad = DaoFactory.getAdsDao().findOne(id); +// req.setAttribute("ad", ad); +// User user = DaoFactory.getUsersDao().findById(ad.getUserId()); +// req.setAttribute("adUser", user); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// req.getRequestDispatcher("/WEB-INF/ads/showAd.jsp").forward(req, res); +// } +// +// public static void main(String[] args) { +// +// } +//early version ND +// long id = Long.parseLong(req.getParameter("id")); +// String adId = req.getParameter("id"); +// req.setAttribute("ad", adId); +// if(adId != null){ +// +// } + +// need to get id of ad +// here we will bring in DaoFactory here to getAdById() +// need to set id of ad to "ad" +// req.setAttribute("ad", id) +// req.getRequestDispatcher("/WEB-INF/ads/search.jsp").forward(req, res); +// } +// +// public static void main(String[] args) { +// +// @WebServlet("/ad") +// public class ShowAdServlet extends HttpServlet { +// protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { +// long id = Long.parseLong(req.getParameter("id")); +// try { +// Ad ad = DaoFactory.getAdsDao().findOne(id); +// req.setAttribute("ad", ad); +// User user = DaoFactory.getUsersDao().findById(ad.getUserId()); +// req.setAttribute("adUser", user); +// } catch (SQLException e) { +// e.printStackTrace(); +// } +// req.getRequestDispatcher("/WEB-INF/ads/showAd.jsp").forward(req, res); +// } +// +// public static void main(String[] args) { +// +// } +//} diff --git a/src/main/java/com/codeup/adlister/controllers/UpdateAdServlet.java b/src/main/java/com/codeup/adlister/controllers/UpdateAdServlet.java new file mode 100644 index 0000000000..76383d6a8e --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/UpdateAdServlet.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("/ads/update") +public class UpdateAdServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { +// String idQuery = req.getParameter("id"); +// Ad ad = DaoFactory.getAdsDao().findByStringId(idQuery); +// User user = (User) req.getSession().getAttribute("user"); +// if (ad.getUserId() != user.getId()) { +// resp.sendRedirect("/profile"); +// } else { +// req.getSession().setAttribute("ad", ad); +// } + + + Long id = Long.parseLong(req.getParameter("ad_id")); + Ad ad = DaoFactory.getAdsDao().findById(id); + req.getSession().setAttribute("ad", ad); + req.getRequestDispatcher("/WEB-INF/ads/update.jsp").forward(req,resp); + } + + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String title = req.getParameter("title"); + String description = req.getParameter("description"); + + boolean inputHasErrors = title.isEmpty() || description.isEmpty(); + + if (inputHasErrors) { + resp.sendRedirect("/ads/update"); + } + + Ad ad = (Ad) req.getSession().getAttribute("ad"); + ad.setTitle(title); + ad.setDescription(description); + + DaoFactory.getAdsDao().update(ad); + if (req.getSession().getAttribute("vp") == null){ + resp.sendRedirect("/ads"); + } else { + resp.sendRedirect("/profile"); + } + + } +} diff --git a/src/main/java/com/codeup/adlister/controllers/UpdateProfileServlet.java b/src/main/java/com/codeup/adlister/controllers/UpdateProfileServlet.java new file mode 100644 index 0000000000..426b18c946 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/UpdateProfileServlet.java @@ -0,0 +1,47 @@ +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; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet("/profile/update") +public class UpdateProfileServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + if (req.getSession().getAttribute("user") == null) { + resp.sendRedirect("/login"); + return; + } + req.getRequestDispatcher("/WEB-INF/profile/update.jsp").forward(req,resp); + } + + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + String username = req.getParameter("username"); + String email = req.getParameter("email"); + + boolean inputHasErrors = username.isEmpty() || email.isEmpty(); + + if (inputHasErrors) { + resp.sendRedirect("/profile/update"); + return; + } + + User user = (User) req.getSession().getAttribute("user"); + + user.setUsername(username); + user.setEmail(email); + + DaoFactory.getUsersDao().update(user); + req.getSession().setAttribute("user", user); + resp.sendRedirect("/profile"); + + } +} diff --git a/src/main/java/com/codeup/adlister/controllers/ViewProfileServlet.java b/src/main/java/com/codeup/adlister/controllers/ViewProfileServlet.java index e1b8941067..d68f8a2f21 100644 --- a/src/main/java/com/codeup/adlister/controllers/ViewProfileServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/ViewProfileServlet.java @@ -1,11 +1,16 @@ 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.util.List; @WebServlet(name = "controllers.ViewProfileServlet", urlPatterns = "/profile") public class ViewProfileServlet extends HttpServlet { @@ -14,6 +19,19 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t response.sendRedirect("/login"); return; } + + if (request.getSession().getAttribute("vi") != null) { + request.getSession().removeAttribute("vi"); + } + request.getSession().setAttribute("vp", "hi"); + + //shows all of the current users ads in the profile by userid + + User user = (User)request.getSession().getAttribute("user"); + long userId = user.getId(); + + List results = DaoFactory.getAdsDao().allAdsByUserId(userId); + request.setAttribute("ads", results); 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..c7b1ef3f9d 100644 --- a/src/main/java/com/codeup/adlister/dao/Ads.java +++ b/src/main/java/com/codeup/adlister/dao/Ads.java @@ -1,7 +1,9 @@ package com.codeup.adlister.dao; import com.codeup.adlister.models.Ad; +import com.codeup.adlister.models.AdCategory; +import java.sql.SQLException; import java.util.List; public interface Ads { @@ -9,4 +11,33 @@ public interface Ads { List all(); // insert a new ad and return the new ad's id Long insert(Ad ad); + // get single ad + Ad findOne(long id) throws SQLException; + // from reading should add all CRUD methods to DAO + void update(Ad ad); + void delete(Ad ad); + + //added by ND + List findAdByKeyword(String keyword) throws SQLException; + List search(String keyword); + + //show all ads on profile + List allAdsByUserId(long userId); + + Ad findByStringId(String id); + Ad findById(long id); + + Ad findById(Long id); + + List getAdsFromCategory(String searchCategory); + + List keywordAds(String keyword); + + +// have these methods here just in case*********************** +// List getAdsFromCategory(String category); +// void removeCategories(Long ad_id); +// void addCategory(Long ad_id, Long category_id); + } + 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..ec2bf85bcc --- /dev/null +++ b/src/main/java/com/codeup/adlister/dao/Categories.java @@ -0,0 +1,19 @@ +package com.codeup.adlister.dao; + +import com.codeup.adlister.models.Ad; +import com.codeup.adlister.models.Category; + +import java.util.List; + +public interface Categories { + // get all categories + List all(); + // insert a new Category + Long insert(Category category); + +// ND +// made these just in case + void addCategory(Long ad_id, Long category_id); + void removeCategories(Long ad_id); + List getAdsFromCategory(String category); +} diff --git a/src/main/java/com/codeup/adlister/dao/DaoFactory.java b/src/main/java/com/codeup/adlister/dao/DaoFactory.java index e002140f85..d7f7bc2097 100644 --- a/src/main/java/com/codeup/adlister/dao/DaoFactory.java +++ b/src/main/java/com/codeup/adlister/dao/DaoFactory.java @@ -3,7 +3,7 @@ public class DaoFactory { private static Ads adsDao; private static Users usersDao; - private static Config config = new Config(); + private static final Config config = new Config(); public static Ads getAdsDao() { if (adsDao == null) { @@ -18,4 +18,11 @@ public static Users getUsersDao() { } return usersDao; } +// +// public static Categories getCategoriesDao() { +// if (categoriesDao == null) { +// categoriesDao = new Categories(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 deleted file mode 100644 index 8d3baaa369..0000000000 --- a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.codeup.adlister.dao; - -import com.codeup.adlister.models.Ad; - -import java.util.ArrayList; -import java.util.List; - -public class ListAdsDao implements Ads { - private List ads; - - public List all() { - if (ads == null) { - ads = generateAds(); - } - return ads; - } - - public Long insert(Ad ad) { - // make sure we have ads - if (ads == null) { - ads = generateAds(); - } - // we'll assign an "id" here based on the size of the ads list - // really the dao would handle this - ad.setId((long) ads.size()); - ads.add(ad); - return ad.getId(); - } - - private List generateAds() { - List ads = new ArrayList<>(); - ads.add(new Ad( - 1, - 1, - "playstation for sale", - "This is a slightly used playstation" - )); - ads.add(new Ad( - 2, - 1, - "Super Nintendo", - "Get your game on with this old-school classic!" - )); - ads.add(new Ad( - 3, - 2, - "Junior Java Developer Position", - "Minimum 7 years of experience required. You will be working in the scripting language for Java, JavaScript" - )); - ads.add(new Ad( - 4, - 2, - "JavaScript Developer needed", - "Must have strong Java skills" - )); - return ads; - } -} diff --git a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java index d58c45f985..95feb8ecf5 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java @@ -1,11 +1,9 @@ package com.codeup.adlister.dao; - +import com.codeup.adlister.dao.Config; import com.codeup.adlister.models.Ad; +import com.codeup.adlister.models.AdCategory; import com.mysql.cj.jdbc.Driver; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; import java.sql.*; import java.util.ArrayList; import java.util.List; @@ -17,16 +15,15 @@ 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); } } - @Override public List all() { PreparedStatement stmt = null; try { @@ -38,7 +35,31 @@ public List all() { } } - @Override + public void delete(Ad ad) { + String query = "DELETE FROM ads WHERE id = ?"; + try { + PreparedStatement stmt = connection.prepareStatement(query); + stmt.setLong(1, ad.getId()); + stmt.executeUpdate(); + } catch (SQLException e) { + throw new RuntimeException("Error deleting an ad by id", e); + } + } + + 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 the existing ad", e); + } + } + + public Long insert(Ad ad) { try { String insertQuery = "INSERT INTO ads(user_id, title, description) VALUES (?, ?, ?)"; @@ -55,12 +76,33 @@ public Long insert(Ad ad) { } } + @Override + public Ad findOne(long id) throws SQLException { + return null; + } + + +// @Override +// public List findAdByKeyword(String keyword) throws SQLException { +// return null; +// } + + //need to add arraylist methods, etc. ND +// @Override +// public List findAdByKeyword(String keyword) throws SQLException { +// String query = "SELECT *, users.userName FROM ads\n + "; +// +//// prepped statement +// //while(rs.nets()) +// return null; +// } + 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 +113,105 @@ private List createAdsFromResults(ResultSet rs) throws SQLException { } return ads; } + + //need to add arraylist methods, etc. ND + @Override + public List findAdByKeyword(String keyword) throws SQLException { + String query = "SELECT *, users.userName FROM ads" + + "JOIN users" + "ON users.id = ads.user_id" + + "WHERE ads.title LIKE ?"; + + PreparedStatement pstmt = connection.prepareStatement(query); + pstmt.setString(1, "%" + keyword + "%"); + ResultSet rs = pstmt.executeQuery(); + List keywordAds = new ArrayList<>(); + while (rs.next()) { +// name of the columns of list? Check on changes as needed. i.e. categories, etc. + Ad newAd = new Ad( + rs.getLong("id"), + rs.getString("user_id"), + rs.getString("username"), + rs.getString("title"), + rs.getString("description"), + rs.getString("category") + ); +// check on method for keywordAds//nvm-i need .add for adding to the list. + keywordAds.add(newAd); + } + return keywordAds; + } + + + //shows all of the current users ads in the profile by userid +//@Override + public List allAdsByUserId(long userId) { + String query = "SELECT * FROM ads WHERE user_id = ?"; + try { + PreparedStatement stmt = connection.prepareStatement(query); + stmt.setLong(1, userId); + ResultSet rs = stmt.executeQuery(); + return createAdsFromResults(rs); + } catch (SQLException e) { + throw new RuntimeException("Error: cannot retrieve ads", e); + } + } + + public Ad findByStringId(String id) { + String findquery = "SELECT * FROM ads WHERE id like (?)"; + try{ + PreparedStatement stmt = connection.prepareStatement(findquery); + stmt.setString(1, id); + ResultSet rs =stmt.executeQuery(); + rs.next(); + return extractAd(rs); + } catch (SQLException e) { + throw new RuntimeException("Error finding the ad by string id"); + } + } + + @Override + public Ad findById(long id) { + return null; + } + + @Override + public Ad findById(Long id) { + return null; + } + + + @Override + public List getAdsFromCategory(String searchCategory) { + return null; + } +//the "SEARCH" + @Override + public List keywordAds(String keyword) { + String query = " SELECT * FROM ads WHERE title LIKE ? OR description LIKE ? "; + try { + PreparedStatement stmt = connection.prepareStatement(query); + 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); + } + } + + @Override + public List search(String keyword) { + String query = "SELECT * FROM ads WHERE title LIKE ? OR description LIKE ?"; + try{ + PreparedStatement pstmt = connection.prepareStatement(query); + pstmt.setString(1, '%' + keyword + '%'); + pstmt.setString(2, '%' + keyword + '%'); + ResultSet rs = pstmt.executeQuery(); + return createAdsFromResults(rs); + }catch (SQLException e) { + throw new RuntimeException("Error find the ad", e); + } + } + + } diff --git a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java index 4e69e57044..e926e87969 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java @@ -1,5 +1,5 @@ package com.codeup.adlister.dao; - +import com.codeup.adlister.util.Password; import com.codeup.adlister.models.User; import com.mysql.cj.jdbc.Driver; @@ -7,14 +7,15 @@ public class MySQLUsersDao implements Users { private Connection connection; + private Config config = new Config(); public MySQLUsersDao(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); @@ -34,6 +35,101 @@ public User findByUsername(String username) { } } + // findByid needed in order to grab from 1:n relation with ads + @Override + public User findById(long id){ + String query = "SELECT * FROM users WHERE id = ?"; + 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 id", e); + } + } + + @Override + public boolean validateEmail(String email) throws SQLException { + boolean emailExist = false; + DriverManager.registerDriver(new Driver()); + connection = DriverManager.getConnection( + config.getUrl(), + config.getUser(), + config.getPassword() + ); + String query =" SELECT * FROM users WHERE email = ?"; + PreparedStatement pstmt = connection.prepareStatement(query); + pstmt.setString(1, email); + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + if(rs.getString("email").equals(email)){ + emailExist = true; + } + } + return emailExist; +} + @Override + public boolean validateUsername(String username) throws SQLException { + boolean usernameExist = false; + DriverManager.registerDriver(new Driver()); + connection = DriverManager.getConnection( + config.getUrl(), + config.getUser(), + config.getPassword() + ); + String query =" SELECT * FROM users WHERE username = ?"; + PreparedStatement pstmt = connection.prepareStatement(query); + pstmt.setString(1, username); + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + if(rs.getString("username").equals(username)){ + usernameExist = true; + } + } + return usernameExist; + } + + @Override + public boolean validatePassword(String password) throws SQLException { + boolean passwordCorrect = false; + + String query = " SELECT * FROM users WHERE password = ?"; + PreparedStatement pstmt = connection.prepareStatement(query); + pstmt.setString(1, password); + ResultSet rs = pstmt.executeQuery(); + while (rs.next()) { + if (rs.getString("password").equals(password)) { + passwordCorrect = true; + } + } + return passwordCorrect; + } + + public void delete(String username) { + String query = "DELETE FROM users WHERE username = ?"; + try { + PreparedStatement stmt = connection.prepareStatement(query); + stmt.setString(1, username); + stmt.executeUpdate(); + } catch (SQLException e) { + throw new RuntimeException("Error deleting a user by username", e); + } + } + + public void update(User user) { + String query = "UPDATE users SET username = (?), email = (?), password = (?) WHERE id = (?)"; + try{ + PreparedStatement stmt = connection.prepareStatement(query); + stmt.setString(1, user.getUsername()); + stmt.setString(2, user.getEmail()); + stmt.setString(3, user.getPassword()); + stmt.setLong(4, user.getId()); + stmt.executeUpdate(); + } catch (SQLException e) { + throw new RuntimeException("Error updating the existing user", e); + } + } + @Override public Long insert(User user) { String query = "INSERT INTO users(username, email, password) VALUES (?, ?, ?)"; @@ -51,16 +147,17 @@ public Long insert(User user) { } } + private User extractUser(ResultSet rs) throws SQLException { - if (! rs.next()) { + if (!rs.next()) { return null; } return new User( - rs.getLong("id"), - rs.getString("username"), - rs.getString("email"), - rs.getString("password") + rs.getLong("id"), + rs.getString("username"), + rs.getString("email"), + rs.getString("password") ); } -} +} \ No newline at end of file diff --git a/src/main/java/com/codeup/adlister/dao/Users.java b/src/main/java/com/codeup/adlister/dao/Users.java index 62da74d20b..de1ad17055 100644 --- a/src/main/java/com/codeup/adlister/dao/Users.java +++ b/src/main/java/com/codeup/adlister/dao/Users.java @@ -2,9 +2,19 @@ import com.codeup.adlister.models.User; +import java.sql.SQLException; import java.util.List; public interface Users { User findByUsername(String username); Long insert(User user); -} + + void delete(String user); + void update(User user); + // findByid needed in order to grab from 1:n relation with ads + User findById(long id); + + boolean validateEmail(String username) throws SQLException; + boolean validateUsername(String username) throws SQLException; + boolean validatePassword(String password) throws SQLException; +} \ No newline at end of file diff --git a/src/main/java/com/codeup/adlister/models/Ad.java b/src/main/java/com/codeup/adlister/models/Ad.java index 9e9e02d87e..24a472ddb2 100644 --- a/src/main/java/com/codeup/adlister/models/Ad.java +++ b/src/main/java/com/codeup/adlister/models/Ad.java @@ -2,10 +2,25 @@ public class Ad { private long id; + //ND + private String dateCreated; + private String username; + private String category; + private long userId; + private long categoryId; private String title; private String description; + // CONSTRUCTORS + public Ad(){} + + public Ad(long userId, String title, String description) { + this.userId = userId; + this.title = title; + this.description = description; + } + public Ad(long id, long userId, String title, String description) { this.id = id; this.userId = userId; @@ -13,41 +28,80 @@ public Ad(long id, long userId, String title, String description) { this.description = description; } - public Ad(long userId, String title, String description) { + public Ad(long id, long userId, long categoryId, String title, String description) { + this.categoryId = categoryId; + this.id = id; this.userId = userId; this.title = title; this.description = description; } + //ND + public Ad(long id, String username, String title, String description, String category, String dateCreated){ + this.id = id; + this.username = username; + this.title = title; + this.description = description; + this.category = category; + this.dateCreated = dateCreated; + } + // waiting for changes. + + public String getDateCreated() { + return dateCreated; + } + + public void setDateCreated(String dateCreated) { + this.dateCreated = dateCreated; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + + + // GETTERS/SETTERS public long getId() { return id; } - public void setId(long id) { this.id = id; } - public long getUserId() { return userId; } - public void setUserId(long userId) { this.userId = userId; } - public String getTitle() { return title; } - public void setTitle(String title) { this.title = title; } - public String getDescription() { return description; } - public void setDescription(String description) { this.description = description; } -} + public long getCategoryId() { + return categoryId; + } + public void setCategoryId(long categoryId) { + this.categoryId = categoryId; + } +} \ No newline at end of file diff --git a/src/main/java/com/codeup/adlister/models/AdCategory.java b/src/main/java/com/codeup/adlister/models/AdCategory.java new file mode 100644 index 0000000000..f0c6845ed1 --- /dev/null +++ b/src/main/java/com/codeup/adlister/models/AdCategory.java @@ -0,0 +1,31 @@ +package com.codeup.adlister.models; + +public class AdCategory { + private long categoryId; + private long adId; + + // CONSTRUCTORS + public AdCategory(){} + + public AdCategory(long categoryId, long adId){ + this.categoryId = categoryId; + this.adId = adId; + } + + // GETTERS/SETTERS + public long getCategoryId() { + return categoryId; + } + public void setCategoryId(long categoryId) { + this.categoryId = categoryId; + } + public long getAdId() { + return adId; + } + public void setAdId(long adId) { + this.adId = adId; + } + +} + + 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..311ec3b3a7 --- /dev/null +++ b/src/main/java/com/codeup/adlister/models/Category.java @@ -0,0 +1,35 @@ +package com.codeup.adlister.models; + + + +public class Category { + private long id; + private String name; + + // CONSTRUCTORS + public Category(){} + + public Category(String name){ + this.name = name; + } + + public Category(long id, String name){ + this.id = id; + this.name = name; + } + + + // GETTERS/SETTERS + public long getId() { + return id; + } + public void setId(long id) { + this.id = id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } +} \ No newline at end of file diff --git a/src/main/java/com/codeup/adlister/models/User.java b/src/main/java/com/codeup/adlister/models/User.java index e43bc0dc81..9b092d5cf5 100644 --- a/src/main/java/com/codeup/adlister/models/User.java +++ b/src/main/java/com/codeup/adlister/models/User.java @@ -7,6 +7,7 @@ public class User { private String username; private String email; private String password; + private String date; public User() {} @@ -23,6 +24,13 @@ public User(long id, String username, String email, String password) { this.password = password; } + public User(String username, String email, String password, String date) { + this.username = username; + this.email = email; + setPassword(password); + this.date = date; + } + public long getId() { return id; } diff --git a/src/main/webapp/WEB-INF/ads/category.jsp b/src/main/webapp/WEB-INF/ads/category.jsp new file mode 100644 index 0000000000..65d2c7128a --- /dev/null +++ b/src/main/webapp/WEB-INF/ads/category.jsp @@ -0,0 +1,16 @@ +<%-- + Created by IntelliJ IDEA. + User: nicholasdiazjr + Date: 2/18/22 + Time: 1:33 PM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Title + + + + + diff --git a/src/main/webapp/WEB-INF/ads/delete.jsp b/src/main/webapp/WEB-INF/ads/delete.jsp new file mode 100644 index 0000000000..03968cc5dd --- /dev/null +++ b/src/main/webapp/WEB-INF/ads/delete.jsp @@ -0,0 +1,25 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%-- + Created by IntelliJ IDEA. + User: eloysbook + Date: 2/17/22 + Time: 3:59 PM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Title + + + +

+

+ +
+ + +
+ + + diff --git a/src/main/webapp/WEB-INF/ads/deletedAd.jsp b/src/main/webapp/WEB-INF/ads/deletedAd.jsp new file mode 100644 index 0000000000..44a3644d23 --- /dev/null +++ b/src/main/webapp/WEB-INF/ads/deletedAd.jsp @@ -0,0 +1,16 @@ +<%-- + Created by IntelliJ IDEA. + User: nicholasdiazjr + Date: 2/18/22 + Time: 1:33 PM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + delete Ad + + + + + diff --git a/src/main/webapp/WEB-INF/ads/index.jsp b/src/main/webapp/WEB-INF/ads/index.jsp index 6f4371f0bb..7a9ce1d973 100644 --- a/src/main/webapp/WEB-INF/ads/index.jsp +++ b/src/main/webapp/WEB-INF/ads/index.jsp @@ -3,22 +3,62 @@ - + -
-

Here Are all the ads!

+ + + + +
+

Here Are all the ads!

+
+ + For Sale + + + Automotive + + + Jobs
-

${ad.title}

-

${ad.description}

+

+

+ +
+ + +
+
+ + +
+
- + + Community +
+
+


+
+
+ +
+
+

+ ${ad.title} +

+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/ads/keywordAds.jsp b/src/main/webapp/WEB-INF/ads/keywordAds.jsp new file mode 100644 index 0000000000..1afe05b0a6 --- /dev/null +++ b/src/main/webapp/WEB-INF/ads/keywordAds.jsp @@ -0,0 +1,67 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%-- + Created by IntelliJ IDEA. + User: nicholasdiazjr + Date: 2/14/22 + Time: 4:31 PM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + <%-- needed this for css stylesheet!! --%> + + + + + Search + + + + +
+ <%-- //add a sticky?--%> +
+ <%-- add side image?? --%> +
+ +
+
+
+

Category of the Ads

+ +

No results for

+
+ + +

All ads in reference to:

+ + +
+

${ad.title}

+

${ad.descritpion}

+

Created date: ${ad.dateCreated}

+

Categories: ${ad.category}

+
+
+
+
+
+<%-- Do we need/want a footer?--%> +
+ + + diff --git a/src/main/webapp/WEB-INF/ads/showAd.jsp b/src/main/webapp/WEB-INF/ads/showAd.jsp new file mode 100644 index 0000000000..e47424b6de --- /dev/null +++ b/src/main/webapp/WEB-INF/ads/showAd.jsp @@ -0,0 +1,59 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%-- + Created by IntelliJ IDEA. + User: julianmartinez + Date: 2/14/22 + Time: 14:54 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + +<%-- added by ND--%> + + + + + Title + <c:out value="${ad.title}" /> + + + + + + +<%--added back button--%> + +
+<%--

Your Ad Title:

--%> +<%--

${ad.description}

--%> +<%--
${ad.user_id.getName()}
--%> +<%--
${ad.user_id.getEmail()}
--%> +
+
< +

Ad Title

+

${ad.description}

+ +
Contact Info
+
User: ${user.username}
+
Email: ${user.email}
+ +
ad.user_id.getName()
+
ad.user_id.getEmail()
+

Categories

+ <%--FOR LOOP to display all categories an ad belongs to ad.category_id.getName()--%> +
    +
  • Jobs
  • +
  • Housing
  • +
  • For Sale
  • +
  • Community
  • +
+
+
+
+ + diff --git a/src/main/webapp/WEB-INF/ads/update.jsp b/src/main/webapp/WEB-INF/ads/update.jsp new file mode 100644 index 0000000000..4acb6241a0 --- /dev/null +++ b/src/main/webapp/WEB-INF/ads/update.jsp @@ -0,0 +1,26 @@ +<%-- + Created by IntelliJ IDEA. + User: eloysbook + Date: 2/17/22 + Time: 2:15 PM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + Title + + +
+
+ + +
+
+ + +
+ +
+ + diff --git a/src/main/webapp/WEB-INF/login.jsp b/src/main/webapp/WEB-INF/login.jsp index 83ce2d0a1f..23be6eb192 100644 --- a/src/main/webapp/WEB-INF/login.jsp +++ b/src/main/webapp/WEB-INF/login.jsp @@ -4,21 +4,28 @@ + Login + + +

Please Log In

-
-
- - -
-
- - -
+ +
+
+ + +
+
+ + +
+
+
diff --git a/src/main/webapp/WEB-INF/partials/head.jsp b/src/main/webapp/WEB-INF/partials/head.jsp index a33443d65c..a70b310338 100644 --- a/src/main/webapp/WEB-INF/partials/head.jsp +++ b/src/main/webapp/WEB-INF/partials/head.jsp @@ -1,2 +1,7 @@ ${param.title} - + + + + + diff --git a/src/main/webapp/WEB-INF/partials/navbar.jsp b/src/main/webapp/WEB-INF/partials/navbar.jsp index 8e1f98f662..0c5c49260c 100644 --- a/src/main/webapp/WEB-INF/partials/navbar.jsp +++ b/src/main/webapp/WEB-INF/partials/navbar.jsp @@ -1,13 +1,102 @@ -