From 94dbe1487e77c7102287c5fb4f5fea0e38bf3735 Mon Sep 17 00:00:00 2001 From: Vicente Figueroa Date: Mon, 14 Nov 2022 09:43:22 -0600 Subject: [PATCH 01/28] first commit --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 22a2e9c039..6369f10418 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.28 From 55eaf5bac2356779fe741ef2f12028d7b4ea231d Mon Sep 17 00:00:00 2001 From: Vicente Figueroa Date: Mon, 14 Nov 2022 10:27:02 -0600 Subject: [PATCH 02/28] Updated users table to have unique usernames and emails. --- migration.sql | 4 ++-- pom.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/migration.sql b/migration.sql index a70d2eab38..9488cbfb17 100644 --- a/migration.sql +++ b/migration.sql @@ -5,8 +5,8 @@ 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, + username VARCHAR(240) NOT NULL UNIQUE, + email VARCHAR(240) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, PRIMARY KEY (id) ); diff --git a/pom.xml b/pom.xml index 6369f10418..1a6edd18a0 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ mysql mysql-connector-java - 8.0.28 + 8.0.31 From 93ebab950d02b28248b35e7f1948f7fe12c0fd76 Mon Sep 17 00:00:00 2001 From: Casanova Geary Date: Mon, 14 Nov 2022 10:29:24 -0600 Subject: [PATCH 03/28] updated database tables and Maven. --- migration.sql | 4 ++-- pom.xml | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/migration.sql b/migration.sql index a70d2eab38..9488cbfb17 100644 --- a/migration.sql +++ b/migration.sql @@ -5,8 +5,8 @@ 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, + username VARCHAR(240) NOT NULL UNIQUE, + email VARCHAR(240) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, PRIMARY KEY (id) ); diff --git a/pom.xml b/pom.xml index 6369f10418..ee75d4a6ae 100644 --- a/pom.xml +++ b/pom.xml @@ -42,8 +42,9 @@ mysql mysql-connector-java - 8.0.28 + 8.0.31 + \ No newline at end of file From d5e414ca6b05eb4327d78ce820f50ceeb9aff65f Mon Sep 17 00:00:00 2001 From: Yogesh Adhikari Date: Mon, 14 Nov 2022 10:29:34 -0600 Subject: [PATCH 04/28] updated for users where they can only have unique username and email --- migration.sql | 4 ++-- pom.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/migration.sql b/migration.sql index a70d2eab38..d64a31ab92 100644 --- a/migration.sql +++ b/migration.sql @@ -5,8 +5,8 @@ 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, + username VARCHAR(240) NOT NULL UNIQUE , + email VARCHAR(240) NOT NULL UNIQUE , password VARCHAR(255) NOT NULL, PRIMARY KEY (id) ); diff --git a/pom.xml b/pom.xml index 6369f10418..1a6edd18a0 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ mysql mysql-connector-java - 8.0.28 + 8.0.31 From 44ffdf9adaefac247df4b91a4b190131d3764474 Mon Sep 17 00:00:00 2001 From: Casanova Geary Date: Mon, 14 Nov 2022 10:58:45 -0600 Subject: [PATCH 05/28] Completed new navbar when user is logged in. --- src/main/webapp/WEB-INF/navbar-logged-in.jsp | 19 +++++++++++++++++++ src/main/webapp/WEB-INF/partials/navbar.jsp | 6 ++++-- 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/main/webapp/WEB-INF/navbar-logged-in.jsp diff --git a/src/main/webapp/WEB-INF/navbar-logged-in.jsp b/src/main/webapp/WEB-INF/navbar-logged-in.jsp new file mode 100644 index 0000000000..83e25fa5b8 --- /dev/null +++ b/src/main/webapp/WEB-INF/navbar-logged-in.jsp @@ -0,0 +1,19 @@ +<%-- + Created by IntelliJ IDEA. + User: casanovageary + Date: 11/14/22 + Time: 10:45 AM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + \ 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..86d3f87df7 100644 --- a/src/main/webapp/WEB-INF/partials/navbar.jsp +++ b/src/main/webapp/WEB-INF/partials/navbar.jsp @@ -1,3 +1,5 @@ +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + From c6a99355f2f72230afeb3b2566a950a2ec7d85dc Mon Sep 17 00:00:00 2001 From: Casanova Geary Date: Mon, 14 Nov 2022 14:37:15 -0600 Subject: [PATCH 06/28] Created jsps for various navbars per particular page(s). --- migration.sql | 1 + src/main/webapp/WEB-INF/ads/create.jsp | 2 ++ src/main/webapp/WEB-INF/login.jsp | 5 +++- .../WEB-INF/partials/navbar-create-ad.jsp | 27 +++++++++++++++++++ .../{ => partials}/navbar-logged-in.jsp | 12 +++++++-- src/main/webapp/WEB-INF/partials/navbar.jsp | 7 +++-- src/main/webapp/WEB-INF/profile.jsp | 7 +++-- src/main/webapp/WEB-INF/register.jsp | 1 + src/main/webapp/index.jsp | 5 +++- 9 files changed, 57 insertions(+), 10 deletions(-) create mode 100644 src/main/webapp/WEB-INF/partials/navbar-create-ad.jsp rename src/main/webapp/WEB-INF/{ => partials}/navbar-logged-in.jsp (55%) diff --git a/migration.sql b/migration.sql index 9488cbfb17..b70107032d 100644 --- a/migration.sql +++ b/migration.sql @@ -20,3 +20,4 @@ CREATE TABLE ads ( FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE ); + diff --git a/src/main/webapp/WEB-INF/ads/create.jsp b/src/main/webapp/WEB-INF/ads/create.jsp index f6332692f7..e5d33d8ae5 100644 --- a/src/main/webapp/WEB-INF/ads/create.jsp +++ b/src/main/webapp/WEB-INF/ads/create.jsp @@ -4,8 +4,10 @@ + create ad +

Create a new Ad

diff --git a/src/main/webapp/WEB-INF/login.jsp b/src/main/webapp/WEB-INF/login.jsp index 83ce2d0a1f..56495e4d00 100644 --- a/src/main/webapp/WEB-INF/login.jsp +++ b/src/main/webapp/WEB-INF/login.jsp @@ -1,14 +1,17 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + <%@ page contentType="text/html;charset=UTF-8" language="java" %> + login
-

Please Log In

+

Please log In

diff --git a/src/main/webapp/WEB-INF/partials/navbar-create-ad.jsp b/src/main/webapp/WEB-INF/partials/navbar-create-ad.jsp new file mode 100644 index 0000000000..58cea361d4 --- /dev/null +++ b/src/main/webapp/WEB-INF/partials/navbar-create-ad.jsp @@ -0,0 +1,27 @@ +<%-- + Created by IntelliJ IDEA. + User: casanovageary + Date: 11/14/22 + Time: 2:24 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" %> + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/navbar-logged-in.jsp b/src/main/webapp/WEB-INF/partials/navbar-logged-in.jsp similarity index 55% rename from src/main/webapp/WEB-INF/navbar-logged-in.jsp rename to src/main/webapp/WEB-INF/partials/navbar-logged-in.jsp index 83e25fa5b8..a99b98a7ad 100644 --- a/src/main/webapp/WEB-INF/navbar-logged-in.jsp +++ b/src/main/webapp/WEB-INF/partials/navbar-logged-in.jsp @@ -5,7 +5,10 @@ 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" %> +
- \ 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 86d3f87df7..0389a37bf5 100644 --- a/src/main/webapp/WEB-INF/partials/navbar.jsp +++ b/src/main/webapp/WEB-INF/partials/navbar.jsp @@ -7,9 +7,8 @@ Adlister
-
-<%-- --%> + diff --git a/src/main/webapp/WEB-INF/profile.jsp b/src/main/webapp/WEB-INF/profile.jsp index 05e3fa7a91..48b16551a3 100644 --- a/src/main/webapp/WEB-INF/profile.jsp +++ b/src/main/webapp/WEB-INF/profile.jsp @@ -1,15 +1,18 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + <%@ page contentType="text/html;charset=UTF-8" language="java" %> + my profile - +
-

Welcome, ${sessionScope.user.username}!

+

welcome, ${sessionScope.user.username}!

diff --git a/src/main/webapp/WEB-INF/register.jsp b/src/main/webapp/WEB-INF/register.jsp index 4b64e10a43..f169b6a4eb 100644 --- a/src/main/webapp/WEB-INF/register.jsp +++ b/src/main/webapp/WEB-INF/register.jsp @@ -4,6 +4,7 @@ + registration diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp index 68cf346ec9..b47ff042c9 100644 --- a/src/main/webapp/index.jsp +++ b/src/main/webapp/index.jsp @@ -1,15 +1,18 @@ <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + <%@ page contentType="text/html;charset=UTF-8" language="java" %> + welcome to adlister
-

Welcome to the Adlister!

+

welcome to adlister!

+ ">
From baa5ca9ca10e6e92a388d82a9de209ed8b8c4fa2 Mon Sep 17 00:00:00 2001 From: Casanova Geary Date: Mon, 14 Nov 2022 14:53:16 -0600 Subject: [PATCH 07/28] added navbar for register jsp. --- .../WEB-INF/partials/navbar-register.jsp | 20 +++++++++++++++++++ src/main/webapp/WEB-INF/register.jsp | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/main/webapp/WEB-INF/partials/navbar-register.jsp diff --git a/src/main/webapp/WEB-INF/partials/navbar-register.jsp b/src/main/webapp/WEB-INF/partials/navbar-register.jsp new file mode 100644 index 0000000000..40e06548b0 --- /dev/null +++ b/src/main/webapp/WEB-INF/partials/navbar-register.jsp @@ -0,0 +1,20 @@ +<%-- + Created by IntelliJ IDEA. + User: casanovageary + Date: 11/14/22 + Time: 2:43 PM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + diff --git a/src/main/webapp/WEB-INF/register.jsp b/src/main/webapp/WEB-INF/register.jsp index f169b6a4eb..f0bb986903 100644 --- a/src/main/webapp/WEB-INF/register.jsp +++ b/src/main/webapp/WEB-INF/register.jsp @@ -7,7 +7,7 @@ registration - +

Please fill in your information.

From fcb494d000be704322ed76d967e4c74724cf6760 Mon Sep 17 00:00:00 2001 From: Casanova Geary Date: Mon, 14 Nov 2022 15:12:42 -0600 Subject: [PATCH 08/28] Completed creating navbars for separate jsps. --- src/main/webapp/WEB-INF/ads/index.jsp | 2 +- .../WEB-INF/partials/navbar-ads-index.jsp | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/main/webapp/WEB-INF/partials/navbar-ads-index.jsp diff --git a/src/main/webapp/WEB-INF/ads/index.jsp b/src/main/webapp/WEB-INF/ads/index.jsp index 6f4371f0bb..2ac5b160a2 100644 --- a/src/main/webapp/WEB-INF/ads/index.jsp +++ b/src/main/webapp/WEB-INF/ads/index.jsp @@ -7,7 +7,7 @@ - +

Here Are all the ads!

diff --git a/src/main/webapp/WEB-INF/partials/navbar-ads-index.jsp b/src/main/webapp/WEB-INF/partials/navbar-ads-index.jsp new file mode 100644 index 0000000000..57709246b7 --- /dev/null +++ b/src/main/webapp/WEB-INF/partials/navbar-ads-index.jsp @@ -0,0 +1,22 @@ +<%-- + Created by IntelliJ IDEA. + User: casanovageary + Date: 11/14/22 + Time: 3:08 PM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + From 35d2def63bd167c635d626271e5cd1ef6f150a8d Mon Sep 17 00:00:00 2001 From: Vicente Figueroa Date: Mon, 14 Nov 2022 16:58:35 -0600 Subject: [PATCH 09/28] saving update functionality progress --- .../adlister/controllers/AdsIndexServlet.java | 6 +++ .../adlister/controllers/UpdateAdServlet.java | 42 +++++++++++++++++++ .../java/com/codeup/adlister/dao/Ads.java | 4 ++ .../com/codeup/adlister/dao/ListAdsDao.java | 5 +++ .../com/codeup/adlister/dao/MySQLAdsDao.java | 22 ++++++++++ src/main/webapp/WEB-INF/ads/index.jsp | 1 + src/main/webapp/WEB-INF/ads/update.jsp | 31 ++++++++++++++ 7 files changed, 111 insertions(+) create mode 100644 src/main/java/com/codeup/adlister/controllers/UpdateAdServlet.java create mode 100644 src/main/webapp/WEB-INF/ads/update.jsp diff --git a/src/main/java/com/codeup/adlister/controllers/AdsIndexServlet.java b/src/main/java/com/codeup/adlister/controllers/AdsIndexServlet.java index 1763081228..2e08a088ef 100644 --- a/src/main/java/com/codeup/adlister/controllers/AdsIndexServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/AdsIndexServlet.java @@ -15,4 +15,10 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t request.setAttribute("ads", DaoFactory.getAdsDao().all()); request.getRequestDispatcher("/WEB-INF/ads/index.jsp").forward(request, response); } + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + long id = Long.parseLong(req.getParameter("id")); + resp.sendRedirect("/ads/update?id=" + id); + } } 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..6458f016e2 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/UpdateAdServlet.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(name = "controllers.UpdateAdServlet", urlPatterns = "/ads/update") +public class UpdateAdServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + if (request.getSession().getAttribute("user") == null) { + response.sendRedirect("/login"); + return; + } + System.out.println(request.getParameter("id")); + request.getRequestDispatcher("/WEB-INF/ads/update.jsp").forward(request, response); + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // Storing user input values from update form. + + String title = request.getParameter("title"); + String description = request.getParameter("description"); + System.out.println(title); + System.out.println(description); + Long id = Long.valueOf(request.getParameter("id")); + System.out.println(id); + + //TODO: Get id from ad. + // When submitting POST request, it currently returns the id as null. + DaoFactory.getAdsDao().updateAd(id, title, description); + + } +} diff --git a/src/main/java/com/codeup/adlister/dao/Ads.java b/src/main/java/com/codeup/adlister/dao/Ads.java index 79dc59f484..5bbb7e32f3 100644 --- a/src/main/java/com/codeup/adlister/dao/Ads.java +++ b/src/main/java/com/codeup/adlister/dao/Ads.java @@ -7,6 +7,10 @@ public interface Ads { // get a list of all the ads List all(); + // insert a new ad and return the new ad's id Long insert(Ad ad); + + // update exisiting ad + void updateAd(Long id, String title, String description); } diff --git a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java index 8d3baaa369..538523ae69 100644 --- a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java @@ -27,6 +27,11 @@ public Long insert(Ad ad) { return ad.getId(); } + @Override + public void updateAd(Long id, String title, String description) { + + } + 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..0648568283 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java @@ -3,6 +3,7 @@ import com.codeup.adlister.models.Ad; import com.mysql.cj.jdbc.Driver; +import javax.management.RuntimeErrorException; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; @@ -55,6 +56,27 @@ public Long insert(Ad ad) { } } + @Override + public void updateAd(Long id, String title, String description) { + // Storing update query in string. + String updateAdQuery = "UPDATE ads SET title = ?, description = ? WHERE id = ?"; + try { + // Preparing SQL statement. + PreparedStatement statement = connection.prepareStatement(updateAdQuery); + + // Setting update query values in "updateAdQuery". + statement.setString(1, title); + statement.setString(2, description); + statement.setLong(3, id); + + // Execute update query. + statement.executeUpdate(); + + } catch (SQLException e) { + throw new RuntimeException("Error updating current ad."); + } + } + private Ad extractAd(ResultSet rs) throws SQLException { return new Ad( rs.getLong("id"), diff --git a/src/main/webapp/WEB-INF/ads/index.jsp b/src/main/webapp/WEB-INF/ads/index.jsp index 6f4371f0bb..618c96f4bc 100644 --- a/src/main/webapp/WEB-INF/ads/index.jsp +++ b/src/main/webapp/WEB-INF/ads/index.jsp @@ -16,6 +16,7 @@

${ad.title}

${ad.description}

+
Update Ad
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..e255a4ce12 --- /dev/null +++ b/src/main/webapp/WEB-INF/ads/update.jsp @@ -0,0 +1,31 @@ +<%-- + Created by IntelliJ IDEA. + User: vicente + Date: 11/14/22 + Time: 11:09 AM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + + +
+

Edit Your Ad

+ +
+ + +
+
+ + +
+ + +
+ + From f5f35f1d14ed7806a1f0a57359bf1cbc9395fc7f Mon Sep 17 00:00:00 2001 From: Casanova Geary Date: Mon, 14 Nov 2022 17:12:52 -0600 Subject: [PATCH 10/28] Working on Individual Ad Servlet and ad.jsp for each ad. --- .../controllers/IndividualAdServlet.java | 24 +++++++++++++++++++ .../java/com/codeup/adlister/dao/Ads.java | 7 +++++- .../com/codeup/adlister/dao/ListAdsDao.java | 10 ++++++++ .../com/codeup/adlister/dao/MySQLAdsDao.java | 23 +++++++++++++++--- src/main/webapp/WEB-INF/ad.jsp | 21 ++++++++++++++++ src/main/webapp/WEB-INF/ads/create.jsp | 8 ++++--- src/main/webapp/WEB-INF/ads/index.jsp | 4 ++-- 7 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/codeup/adlister/controllers/IndividualAdServlet.java create mode 100644 src/main/webapp/WEB-INF/ad.jsp 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..9efcb27395 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/IndividualAdServlet.java @@ -0,0 +1,24 @@ +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; + +@WebServlet(name = "controllers.IndividualAdServlet", urlPatterns = "/ad") +public class IndividualAdServlet extends HttpServlet +{ + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException + { + Long id = Long.parseLong(req.getParameter("id")); + System.out.println(id); + Ad ad = DaoFactory.getAdsDao().findById(id); + req.getRequestDispatcher("/WEB-INF/ad.jsp").forward(req, resp); + } +} diff --git a/src/main/java/com/codeup/adlister/dao/Ads.java b/src/main/java/com/codeup/adlister/dao/Ads.java index 79dc59f484..1087392554 100644 --- a/src/main/java/com/codeup/adlister/dao/Ads.java +++ b/src/main/java/com/codeup/adlister/dao/Ads.java @@ -4,9 +4,14 @@ import java.util.List; -public interface Ads { +public interface Ads +{ // get a list of all the ads List all(); // insert a new ad and return the new ad's id Long insert(Ad ad); + + Ad findById(Long id); + + Ad findById(long id); } diff --git a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java index 8d3baaa369..f2bc87fa41 100644 --- a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java @@ -27,6 +27,16 @@ public Long insert(Ad ad) { return ad.getId(); } + @Override + public Ad findById(Long id) { + return null; + } + + @Override + public Ad findById(long id) { + 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..c1fdcd5ad8 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java @@ -3,9 +3,6 @@ import com.codeup.adlister.models.Ad; 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; @@ -55,6 +52,25 @@ public Long insert(Ad ad) { } } + @Override + public Ad findById(Long id) { + return null; + } + + @Override + public Ad findById(long id) { + String query = String.format("SELECT * FROM ads WHERE id = %d", id); + try { + Statement stmt = connection.createStatement(); + ResultSet rs = stmt.executeQuery(query); + if(rs.next()){ + return extractAd(rs); + } + return null; + } catch (SQLException e) { + throw new RuntimeException("Error retrieving all ads.", e); + } + } private Ad extractAd(ResultSet rs) throws SQLException { return new Ad( rs.getLong("id"), @@ -71,4 +87,5 @@ private List createAdsFromResults(ResultSet rs) throws SQLException { } return ads; } + } diff --git a/src/main/webapp/WEB-INF/ad.jsp b/src/main/webapp/WEB-INF/ad.jsp new file mode 100644 index 0000000000..10fd1b5b30 --- /dev/null +++ b/src/main/webapp/WEB-INF/ad.jsp @@ -0,0 +1,21 @@ +<%-- + Created by IntelliJ IDEA. + User: casanovageary + Date: 11/14/22 + Time: 3:32 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" %> + + + ad + + + +
+

${ad.id}

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

Create a new Ad

+

create a new ad

- +
- +
diff --git a/src/main/webapp/WEB-INF/ads/index.jsp b/src/main/webapp/WEB-INF/ads/index.jsp index 2ac5b160a2..f9ccd6d046 100644 --- a/src/main/webapp/WEB-INF/ads/index.jsp +++ b/src/main/webapp/WEB-INF/ads/index.jsp @@ -5,6 +5,7 @@ + ad @@ -14,11 +15,10 @@
-

${ad.title}

+

${ad.title}

${ad.description}

- From 7e0d686256e807409f0d22046dfcc9708f854d75 Mon Sep 17 00:00:00 2001 From: Yogesh Adhikari Date: Tue, 15 Nov 2022 12:17:13 -0600 Subject: [PATCH 11/28] Delete method added --- migration.sql | 2 +- pom.xml | 2 +- .../adlister/controllers/DeleteAdServlet.java | 27 +++++++++++++++++++ .../java/com/codeup/adlister/dao/Ads.java | 2 ++ .../com/codeup/adlister/dao/ListAdsDao.java | 9 +++++++ .../com/codeup/adlister/dao/MySQLAdsDao.java | 18 +++++++++++++ .../codeup/adlister/dao/MySQLUsersDao.java | 2 ++ src/main/webapp/WEB-INF/ads/create.jsp | 2 +- 8 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java diff --git a/migration.sql b/migration.sql index d64a31ab92..6f3beed49b 100644 --- a/migration.sql +++ b/migration.sql @@ -5,7 +5,7 @@ DROP TABLE IF EXISTS users; CREATE TABLE users ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, - username VARCHAR(240) NOT NULL UNIQUE , + username VARCHAR(240) NOT NULL , email VARCHAR(240) NOT NULL UNIQUE , password VARCHAR(255) NOT NULL, PRIMARY KEY (id) diff --git a/pom.xml b/pom.xml index 1a6edd18a0..392a549420 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ javax.servlet javax.servlet-api - 3.0.1 + 4.0.1 jstl 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..0e1f0e8279 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java @@ -0,0 +1,27 @@ +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 = "DeleteAdServlet", urlPatterns = "/deleteAd") +public class DeleteAdServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + if (req.getSession().getAttribute("user") != null) { + long adId = Long.parseLong(req.getParameter("adId")); + DaoFactory.getAdsDao().deleteAd(adId); + req.getRequestDispatcher("WEB-INF/ads/index.jsp").forward(req, resp); + } else { + resp.sendRedirect("/login"); + } + } + +} \ No newline at end of file diff --git a/src/main/java/com/codeup/adlister/dao/Ads.java b/src/main/java/com/codeup/adlister/dao/Ads.java index 79dc59f484..23bfdd7256 100644 --- a/src/main/java/com/codeup/adlister/dao/Ads.java +++ b/src/main/java/com/codeup/adlister/dao/Ads.java @@ -9,4 +9,6 @@ public interface Ads { List all(); // insert a new ad and return the new ad's id Long insert(Ad ad); + + void deleteAd(long ad_id); } diff --git a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java index 8d3baaa369..672a26e471 100644 --- a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java @@ -27,6 +27,15 @@ public Long insert(Ad ad) { return ad.getId(); } + @Override + public void deleteAd(long ad_id) { + if (ads == null){ + ads = generateAds(); + } + + } + + 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..03ea14547b 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java @@ -55,6 +55,22 @@ public Long insert(Ad ad) { } } + @Override + public void deleteAd(long ad_id) { + try { + String query = "DELETE FROM ads WHERE id = ?"; + PreparedStatement ps = connection.prepareStatement(query); + ps.setLong(1, ad_id); + ps.executeUpdate(); + + }catch (SQLException e){ + throw new RuntimeException("Error deleting ad."); + } + + } + + + private Ad extractAd(ResultSet rs) throws SQLException { return new Ad( rs.getLong("id"), @@ -71,4 +87,6 @@ private List createAdsFromResults(ResultSet rs) throws SQLException { } return ads; } + + } diff --git a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java index 4e69e57044..7b1d9257b8 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java @@ -63,4 +63,6 @@ private User extractUser(ResultSet rs) throws SQLException { ); } + + } diff --git a/src/main/webapp/WEB-INF/ads/create.jsp b/src/main/webapp/WEB-INF/ads/create.jsp index f6332692f7..bd784f4d85 100644 --- a/src/main/webapp/WEB-INF/ads/create.jsp +++ b/src/main/webapp/WEB-INF/ads/create.jsp @@ -1,4 +1,4 @@ -<%@ page contentType="text/html;charset=UTF-8" language="java" %> +git <%@ page contentType="text/html;charset=UTF-8" language="java" %> From 8fe8fb7377d9c9ac86495dcd9b694bd64d069c98 Mon Sep 17 00:00:00 2001 From: Casanova Geary Date: Tue, 15 Nov 2022 12:29:57 -0600 Subject: [PATCH 12/28] Completed creating a page for each ad clicked on. --- .../com/codeup/adlister/controllers/IndividualAdServlet.java | 4 ++-- src/main/java/com/codeup/adlister/dao/Ads.java | 2 -- src/main/java/com/codeup/adlister/dao/ListAdsDao.java | 5 ----- src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java | 5 ----- src/main/webapp/WEB-INF/ad.jsp | 4 +++- 5 files changed, 5 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/codeup/adlister/controllers/IndividualAdServlet.java b/src/main/java/com/codeup/adlister/controllers/IndividualAdServlet.java index 9efcb27395..3e66ff8bf1 100644 --- a/src/main/java/com/codeup/adlister/controllers/IndividualAdServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/IndividualAdServlet.java @@ -16,9 +16,9 @@ public class IndividualAdServlet extends HttpServlet @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - Long id = Long.parseLong(req.getParameter("id")); - System.out.println(id); + long id = Long.parseLong(req.getParameter("id")); Ad ad = DaoFactory.getAdsDao().findById(id); + req.setAttribute("singleAd", ad); req.getRequestDispatcher("/WEB-INF/ad.jsp").forward(req, resp); } } diff --git a/src/main/java/com/codeup/adlister/dao/Ads.java b/src/main/java/com/codeup/adlister/dao/Ads.java index 1087392554..4cbb290500 100644 --- a/src/main/java/com/codeup/adlister/dao/Ads.java +++ b/src/main/java/com/codeup/adlister/dao/Ads.java @@ -11,7 +11,5 @@ public interface Ads // insert a new ad and return the new ad's id Long insert(Ad ad); - Ad findById(Long id); - Ad findById(long id); } diff --git a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java index f2bc87fa41..1f4a973f08 100644 --- a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java @@ -27,11 +27,6 @@ public Long insert(Ad ad) { return ad.getId(); } - @Override - public Ad findById(Long id) { - return null; - } - @Override public Ad findById(long id) { return null; diff --git a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java index c1fdcd5ad8..109fd30a91 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java @@ -52,11 +52,6 @@ public Long insert(Ad ad) { } } - @Override - public Ad findById(Long id) { - return null; - } - @Override public Ad findById(long id) { String query = String.format("SELECT * FROM ads WHERE id = %d", id); diff --git a/src/main/webapp/WEB-INF/ad.jsp b/src/main/webapp/WEB-INF/ad.jsp index 10fd1b5b30..cbecfd94ae 100644 --- a/src/main/webapp/WEB-INF/ad.jsp +++ b/src/main/webapp/WEB-INF/ad.jsp @@ -11,11 +11,13 @@ ad +
-

${ad.id}

+

${singleAd.title}

+

${singleAd.description}

From 6518e11ac7172fd5d821ccb96505f047c1594288 Mon Sep 17 00:00:00 2001 From: Christian Carter Date: Tue, 15 Nov 2022 13:59:17 -0600 Subject: [PATCH 13/28] Working on User profile ads to pop up once logged in to any user --- migration.sql | 4 ++-- pom.xml | 6 +++--- .../adlister/controllers/LoginServlet.java | 9 ++++---- .../adlister/controllers/RegisterServlet.java | 9 ++++---- .../controllers/ViewProfileServlet.java | 21 ++++++++++++++++++- .../java/com/codeup/adlister/dao/Ads.java | 3 +++ .../com/codeup/adlister/dao/ListAdsDao.java | 7 +++++++ .../com/codeup/adlister/dao/MySQLAdsDao.java | 14 +++++++++++++ src/main/webapp/WEB-INF/profile.jsp | 9 ++++++++ 9 files changed, 67 insertions(+), 15 deletions(-) diff --git a/migration.sql b/migration.sql index a70d2eab38..9488cbfb17 100644 --- a/migration.sql +++ b/migration.sql @@ -5,8 +5,8 @@ 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, + username VARCHAR(240) NOT NULL UNIQUE, + email VARCHAR(240) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, PRIMARY KEY (id) ); diff --git a/pom.xml b/pom.xml index 22a2e9c039..392a549420 100644 --- a/pom.xml +++ b/pom.xml @@ -27,12 +27,12 @@ org.mindrot jbcrypt - 0.3m + 0.4 javax.servlet javax.servlet-api - 3.0.1 + 4.0.1 jstl @@ -42,7 +42,7 @@ mysql mysql-connector-java - 6.0.5 + 8.0.31 diff --git a/src/main/java/com/codeup/adlister/controllers/LoginServlet.java b/src/main/java/com/codeup/adlister/controllers/LoginServlet.java index e5c52723a2..62a0e817d9 100644 --- a/src/main/java/com/codeup/adlister/controllers/LoginServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/LoginServlet.java @@ -17,7 +17,9 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t if (request.getSession().getAttribute("user") != null) { response.sendRedirect("/profile"); return; + } + request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); } @@ -26,13 +28,10 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) String password = request.getParameter("password"); User user = DaoFactory.getUsersDao().findByUsername(username); - if (user == null) { - response.sendRedirect("/login"); - return; - } - boolean validAttempt = Password.check(password, user.getPassword()); + + if (validAttempt) { request.getSession().setAttribute("user", user); response.sendRedirect("/profile"); diff --git a/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java b/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java index e1e997c17a..bc3417b6a6 100644 --- a/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java @@ -24,9 +24,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"); @@ -37,5 +37,6 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) User user = new User(username, email, password); DaoFactory.getUsersDao().insert(user); response.sendRedirect("/login"); - } + } + } \ No newline at end of file diff --git a/src/main/java/com/codeup/adlister/controllers/ViewProfileServlet.java b/src/main/java/com/codeup/adlister/controllers/ViewProfileServlet.java index e1b8941067..ce10e9424c 100644 --- a/src/main/java/com/codeup/adlister/controllers/ViewProfileServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/ViewProfileServlet.java @@ -1,19 +1,38 @@ 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 { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + User user = (User) request.getSession().getAttribute("user"); + Long userId = user.getId(); + System.out.println(user.getId()); + List ads = DaoFactory.getAdsDao().findPostByUserId(userId); + + request.setAttribute("ads", ads); + + + + if (request.getSession().getAttribute("user") == null) { response.sendRedirect("/login"); return; + + } 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..26f301c311 100644 --- a/src/main/java/com/codeup/adlister/dao/Ads.java +++ b/src/main/java/com/codeup/adlister/dao/Ads.java @@ -9,4 +9,7 @@ public interface Ads { List all(); // insert a new ad and return the new ad's id Long insert(Ad ad); + + //method for finding posts by userid + List findPostByUserId(Long userId); } diff --git a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java index 8d3baaa369..8c950a4b87 100644 --- a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java @@ -2,6 +2,8 @@ import com.codeup.adlister.models.Ad; +import java.sql.PreparedStatement; +import java.sql.SQLException; import java.util.ArrayList; import java.util.List; @@ -27,6 +29,11 @@ public Long insert(Ad ad) { return ad.getId(); } + @Override + public List findPostByUserId(Long userId) { + 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..702ac6a882 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java @@ -26,6 +26,7 @@ public MySQLAdsDao(Config config) { } } + @Override public List all() { PreparedStatement stmt = null; @@ -55,6 +56,19 @@ public Long insert(Ad ad) { } } + @Override + public List findPostByUserId(Long userId) { + try { + String findQuery = "SELECT * FROM ads WHERE user_id = ?"; + PreparedStatement stmt1 = connection.prepareStatement(findQuery); + stmt1.setLong(1, userId); + return createAdsFromResults(stmt1.executeQuery()); + } catch (SQLException e) { + throw new RuntimeException("Error creating a new ad.", e); + } + + } + private Ad extractAd(ResultSet rs) throws SQLException { return new Ad( rs.getLong("id"), diff --git a/src/main/webapp/WEB-INF/profile.jsp b/src/main/webapp/WEB-INF/profile.jsp index 05e3fa7a91..6e5f1f4dd9 100644 --- a/src/main/webapp/WEB-INF/profile.jsp +++ b/src/main/webapp/WEB-INF/profile.jsp @@ -1,3 +1,4 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> @@ -10,6 +11,14 @@

Welcome, ${sessionScope.user.username}!

+

${sessionScope.ads}

+ + +
+

${ad.title}

+

${ad.description}

+
+
From 927062b907d5c1e455a5b922de9332d44b9f41a8 Mon Sep 17 00:00:00 2001 From: Casanova Geary Date: Tue, 15 Nov 2022 14:14:47 -0600 Subject: [PATCH 14/28] added search bar to navbar-ads-index.jsp. --- src/main/webapp/WEB-INF/partials/navbar-ads-index.jsp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/webapp/WEB-INF/partials/navbar-ads-index.jsp b/src/main/webapp/WEB-INF/partials/navbar-ads-index.jsp index 57709246b7..c9c864608f 100644 --- a/src/main/webapp/WEB-INF/partials/navbar-ads-index.jsp +++ b/src/main/webapp/WEB-INF/partials/navbar-ads-index.jsp @@ -19,4 +19,8 @@
  • register
  • + + + + From 82a0519891e767ca0f39cd9ecbdc2df48c1c0c44 Mon Sep 17 00:00:00 2001 From: Vicente Figueroa Date: Tue, 15 Nov 2022 14:33:03 -0600 Subject: [PATCH 15/28] Update functionality saved --- .../adlister/controllers/UpdateAdServlet.java | 16 ++++++++-------- src/main/webapp/WEB-INF/ads/update.jsp | 1 + 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/codeup/adlister/controllers/UpdateAdServlet.java b/src/main/java/com/codeup/adlister/controllers/UpdateAdServlet.java index 6458f016e2..d74cacb2f8 100644 --- a/src/main/java/com/codeup/adlister/controllers/UpdateAdServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/UpdateAdServlet.java @@ -19,24 +19,24 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t response.sendRedirect("/login"); return; } - System.out.println(request.getParameter("id")); + + request.setAttribute("adId", request.getParameter("id")); request.getRequestDispatcher("/WEB-INF/ads/update.jsp").forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - // Storing user input values from update form. + // Storing user input values from update form. String title = request.getParameter("title"); String description = request.getParameter("description"); - System.out.println(title); - System.out.println(description); - Long id = Long.valueOf(request.getParameter("id")); - System.out.println(id); + Long id = Long.valueOf(request.getParameter("adId")); + - //TODO: Get id from ad. - // When submitting POST request, it currently returns the id as null. + // Using DAO factory to access our update method. DaoFactory.getAdsDao().updateAd(id, title, description); + // Redirecting user to ads page after submitting update form. + response.sendRedirect("/ads"); } } diff --git a/src/main/webapp/WEB-INF/ads/update.jsp b/src/main/webapp/WEB-INF/ads/update.jsp index e255a4ce12..c65918106e 100644 --- a/src/main/webapp/WEB-INF/ads/update.jsp +++ b/src/main/webapp/WEB-INF/ads/update.jsp @@ -16,6 +16,7 @@

    Edit Your Ad

    +
    From 9317f3404c92461025bb18db111cadabddaebb6d Mon Sep 17 00:00:00 2001 From: Yogesh Adhikari Date: Tue, 15 Nov 2022 14:36:16 -0600 Subject: [PATCH 16/28] delete ads method added --- migration.sql | 6 +++--- .../com/codeup/adlister/controllers/DeleteAdServlet.java | 2 +- src/main/java/com/codeup/adlister/dao/Ads.java | 2 +- src/main/java/com/codeup/adlister/dao/ListAdsDao.java | 2 +- src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/migration.sql b/migration.sql index 6f3beed49b..2a77cdf959 100644 --- a/migration.sql +++ b/migration.sql @@ -4,9 +4,9 @@ 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 UNIQUE , + id INT UNSIGNED NOT NULL AUTO_INCREMENT , + username VARCHAR(240) NOT NULL UNIQUE, + email VARCHAR(240) NOT NULL UNIQUE UNIQUE , password VARCHAR(255) NOT NULL, PRIMARY KEY (id) ); diff --git a/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java b/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java index 0e1f0e8279..c78c1714f3 100644 --- a/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java @@ -16,7 +16,7 @@ public class DeleteAdServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if (req.getSession().getAttribute("user") != null) { - long adId = Long.parseLong(req.getParameter("adId")); + long adId = Long.parseLong(req.getParameter("id")); DaoFactory.getAdsDao().deleteAd(adId); req.getRequestDispatcher("WEB-INF/ads/index.jsp").forward(req, resp); } else { diff --git a/src/main/java/com/codeup/adlister/dao/Ads.java b/src/main/java/com/codeup/adlister/dao/Ads.java index 23bfdd7256..8d05e11f46 100644 --- a/src/main/java/com/codeup/adlister/dao/Ads.java +++ b/src/main/java/com/codeup/adlister/dao/Ads.java @@ -10,5 +10,5 @@ public interface Ads { // insert a new ad and return the new ad's id Long insert(Ad ad); - void deleteAd(long ad_id); + void deleteAd(long id); } diff --git a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java index 672a26e471..729a2afa6b 100644 --- a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java @@ -28,7 +28,7 @@ public Long insert(Ad ad) { } @Override - public void deleteAd(long ad_id) { + public void deleteAd(long id) { if (ads == null){ ads = generateAds(); } diff --git a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java index 03ea14547b..579429de4c 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java @@ -56,11 +56,11 @@ public Long insert(Ad ad) { } @Override - public void deleteAd(long ad_id) { + public void deleteAd(long id) { try { String query = "DELETE FROM ads WHERE id = ?"; PreparedStatement ps = connection.prepareStatement(query); - ps.setLong(1, ad_id); + ps.setLong(1, id); ps.executeUpdate(); }catch (SQLException e){ From 44c6eca10aa2b454357a16aaf61d15aa2156a91f Mon Sep 17 00:00:00 2001 From: Casanova Geary Date: Tue, 15 Nov 2022 14:43:29 -0600 Subject: [PATCH 17/28] refactored profile.jsp, adding href. --- src/main/webapp/WEB-INF/profile.jsp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/webapp/WEB-INF/profile.jsp b/src/main/webapp/WEB-INF/profile.jsp index 57f7fccaec..bdd37d31e6 100644 --- a/src/main/webapp/WEB-INF/profile.jsp +++ b/src/main/webapp/WEB-INF/profile.jsp @@ -15,10 +15,10 @@

    ${sessionScope.ads}

    -
    -

    ${ad.title}

    -

    ${ad.description}

    -
    +
    +

    ${ad.title}

    +

    ${ad.description}

    +
    From 5173822421437915843a8c4f9b89151535ee09f9 Mon Sep 17 00:00:00 2001 From: Yogesh Adhikari Date: Tue, 15 Nov 2022 15:09:20 -0600 Subject: [PATCH 18/28] update --- .../com/codeup/adlister/controllers/DeleteAdServlet.java | 8 ++++---- src/main/java/com/codeup/adlister/dao/Ads.java | 2 +- src/main/java/com/codeup/adlister/dao/ListAdsDao.java | 2 +- src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java | 2 +- src/main/webapp/WEB-INF/profile.jsp | 6 ++++++ 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java b/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java index c78c1714f3..ddf1de35d4 100644 --- a/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java @@ -11,14 +11,14 @@ import java.io.IOException; import java.util.List; -@WebServlet(name = "DeleteAdServlet", urlPatterns = "/deleteAd") +@WebServlet(name = "DeleteAdServlet", urlPatterns = "ads/delete") public class DeleteAdServlet extends HttpServlet { @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if (req.getSession().getAttribute("user") != null) { long adId = Long.parseLong(req.getParameter("id")); - DaoFactory.getAdsDao().deleteAd(adId); - req.getRequestDispatcher("WEB-INF/ads/index.jsp").forward(req, resp); + DaoFactory.getAdsDao().delete(adId); + req.getRequestDispatcher("WEB-INF/ads/adindex.jsp").forward(req, resp); } else { resp.sendRedirect("/login"); } diff --git a/src/main/java/com/codeup/adlister/dao/Ads.java b/src/main/java/com/codeup/adlister/dao/Ads.java index e13aef27e9..5bcf449af7 100644 --- a/src/main/java/com/codeup/adlister/dao/Ads.java +++ b/src/main/java/com/codeup/adlister/dao/Ads.java @@ -12,7 +12,7 @@ public interface Ads Long insert(Ad ad); - void deleteAd(long id); + void delete(long id); //method for finding posts by userid diff --git a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java index 3ab6a8d6b8..d9c60b3675 100644 --- a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java @@ -30,7 +30,7 @@ public Long insert(Ad ad) { } @Override - public void deleteAd(long id) { + public void delete(long id) { if (ads == null){ ads = generateAds(); } diff --git a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java index d700be9549..07670312a7 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java @@ -54,7 +54,7 @@ public Long insert(Ad ad) { } @Override - public void deleteAd(long id) { + public void delete(long id) { try { String query = "DELETE FROM ads WHERE id = ?"; PreparedStatement ps = connection.prepareStatement(query); diff --git a/src/main/webapp/WEB-INF/profile.jsp b/src/main/webapp/WEB-INF/profile.jsp index bdd37d31e6..fbf5892712 100644 --- a/src/main/webapp/WEB-INF/profile.jsp +++ b/src/main/webapp/WEB-INF/profile.jsp @@ -18,6 +18,12 @@

    ${ad.title}

    ${ad.description}

    + + + + + +
    From 5160bddc4149f3764d93a3d72f1d0497b3142d60 Mon Sep 17 00:00:00 2001 From: Yogesh Adhikari Date: Tue, 15 Nov 2022 15:18:02 -0600 Subject: [PATCH 19/28] delete method added, User can delete their add from profile --- .../com/codeup/adlister/controllers/DeleteAdServlet.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java b/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java index ddf1de35d4..514c1ee465 100644 --- a/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java @@ -11,14 +11,15 @@ import java.io.IOException; import java.util.List; -@WebServlet(name = "DeleteAdServlet", urlPatterns = "ads/delete") +@WebServlet(name = "DeleteAdServlet", urlPatterns = "/ads/delete") public class DeleteAdServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if (req.getSession().getAttribute("user") != null) { long adId = Long.parseLong(req.getParameter("id")); DaoFactory.getAdsDao().delete(adId); - req.getRequestDispatcher("WEB-INF/ads/adindex.jsp").forward(req, resp); + resp.sendRedirect("/profile"); +// req.getRequestDispatcher("WEB-INF/profile.jsp").forward(req, resp); } else { resp.sendRedirect("/login"); } From 78f403536e1f3fde53195a8c1241c00efa3e0c7e Mon Sep 17 00:00:00 2001 From: Vicente Figueroa Date: Tue, 15 Nov 2022 21:51:32 -0600 Subject: [PATCH 20/28] Update functionality tested and completed. --- src/main/webapp/WEB-INF/ads/index.jsp | 1 - src/main/webapp/WEB-INF/profile.jsp | 8 ++++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/webapp/WEB-INF/ads/index.jsp b/src/main/webapp/WEB-INF/ads/index.jsp index 797030e71f..f9ccd6d046 100644 --- a/src/main/webapp/WEB-INF/ads/index.jsp +++ b/src/main/webapp/WEB-INF/ads/index.jsp @@ -17,7 +17,6 @@

    ${ad.title}

    ${ad.description}

    -
    Update Ad
    diff --git a/src/main/webapp/WEB-INF/profile.jsp b/src/main/webapp/WEB-INF/profile.jsp index fbf5892712..177b9498ba 100644 --- a/src/main/webapp/WEB-INF/profile.jsp +++ b/src/main/webapp/WEB-INF/profile.jsp @@ -19,8 +19,12 @@

    ${ad.title}

    ${ad.description}

    -
    - + + + + + +
    From 117d28c99d4599fe86f54d955063a93e27654f02 Mon Sep 17 00:00:00 2001 From: Vicente Figueroa Date: Wed, 16 Nov 2022 14:56:47 -0600 Subject: [PATCH 21/28] users can now update their profile information --- .../controllers/UpdateProfileServlet.java | 41 +++++++++++++++++++ .../codeup/adlister/dao/MySQLUsersDao.java | 23 ++++++++++- .../java/com/codeup/adlister/dao/Users.java | 1 + src/main/webapp/WEB-INF/ads/update.jsp | 1 + src/main/webapp/WEB-INF/profile.jsp | 3 ++ src/main/webapp/WEB-INF/update-profile.jsp | 36 ++++++++++++++++ 6 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/codeup/adlister/controllers/UpdateProfileServlet.java create mode 100644 src/main/webapp/WEB-INF/update-profile.jsp 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..ed2c5df972 --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/UpdateProfileServlet.java @@ -0,0 +1,41 @@ +package com.codeup.adlister.controllers; + +import com.codeup.adlister.dao.DaoFactory; +import com.codeup.adlister.util.Password; + +import javax.servlet.Servlet; +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 = "UpdateProfileServlet", urlPatterns = "/profile/update") +public class UpdateProfileServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + // Setting attribute with the value of userId in url string query. + request.setAttribute("userId", request.getParameter("userId")); + request.getRequestDispatcher("/WEB-INF/update-profile.jsp").forward(request, response); + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // Storing user input values from update profile form. + Long id = Long.valueOf(request.getParameter("userId")); + String username = request.getParameter("username"); + String email = request.getParameter("email"); + String password = request.getParameter("password"); + + password = Password.hash(password); + + // Accessing DAO to implement update users method. + DaoFactory.getUsersDao().updateUser(id, username, email, password); + + // Redirecting them to login again. + response.sendRedirect("/login"); + } +} diff --git a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java index 7b1d9257b8..e03acc2d34 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java @@ -51,6 +51,27 @@ public Long insert(User user) { } } + @Override + public void updateUser(Long id, String username, String email, String password) { + // Storing update query in string. + String updateUserQuery = "UPDATE users SET username = ?, email = ?, password = ? WHERE id = ?"; + try { + PreparedStatement statement = connection.prepareStatement(updateUserQuery); + + // Setting values of "?" in update user query. + statement.setString(1, username); + statement.setString(2, email); + statement.setString(3, password); + statement.setLong(4, id); + + // Execute update query. + statement.executeUpdate(); + + } catch (SQLException e) { + throw new RuntimeException("Error updating user information."); + } + } + private User extractUser(ResultSet rs) throws SQLException { if (! rs.next()) { return null; @@ -63,6 +84,4 @@ private User extractUser(ResultSet rs) throws SQLException { ); } - - } diff --git a/src/main/java/com/codeup/adlister/dao/Users.java b/src/main/java/com/codeup/adlister/dao/Users.java index 62da74d20b..2820be3b94 100644 --- a/src/main/java/com/codeup/adlister/dao/Users.java +++ b/src/main/java/com/codeup/adlister/dao/Users.java @@ -7,4 +7,5 @@ public interface Users { User findByUsername(String username); Long insert(User user); + void updateUser(Long id, String username, String email, String password); } diff --git a/src/main/webapp/WEB-INF/ads/update.jsp b/src/main/webapp/WEB-INF/ads/update.jsp index c65918106e..c4c3ad32bd 100644 --- a/src/main/webapp/WEB-INF/ads/update.jsp +++ b/src/main/webapp/WEB-INF/ads/update.jsp @@ -13,6 +13,7 @@
    +

    Edit Your Ad

    diff --git a/src/main/webapp/WEB-INF/profile.jsp b/src/main/webapp/WEB-INF/profile.jsp index 177b9498ba..964915a1e1 100644 --- a/src/main/webapp/WEB-INF/profile.jsp +++ b/src/main/webapp/WEB-INF/profile.jsp @@ -12,6 +12,9 @@

    Welcome, ${sessionScope.user.username}!

    + + +

    ${sessionScope.ads}

    diff --git a/src/main/webapp/WEB-INF/update-profile.jsp b/src/main/webapp/WEB-INF/update-profile.jsp new file mode 100644 index 0000000000..a9f5e0614e --- /dev/null +++ b/src/main/webapp/WEB-INF/update-profile.jsp @@ -0,0 +1,36 @@ +<%-- + Created by IntelliJ IDEA. + User: vicente + Date: 11/16/22 + Time: 2:09 PM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + Title + + +

    Edit Your Profile

    + + +
    + + +
    +
    + + +
    +
    + + +
    + + +
    + + From c2f6180b312fad82cd82ecf6e7a54f2fc306d54f Mon Sep 17 00:00:00 2001 From: Yogesh Adhikari Date: Wed, 16 Nov 2022 14:58:45 -0600 Subject: [PATCH 22/28] working on serach function --- .../com/codeup/adlister/controllers/HelloWorldServlet.java | 3 ++- .../com/codeup/adlister/controllers/SearchAdServlet.java | 7 +++++++ src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/codeup/adlister/controllers/SearchAdServlet.java diff --git a/src/main/java/com/codeup/adlister/controllers/HelloWorldServlet.java b/src/main/java/com/codeup/adlister/controllers/HelloWorldServlet.java index 4ab9b9da70..1a97cd3801 100644 --- a/src/main/java/com/codeup/adlister/controllers/HelloWorldServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/HelloWorldServlet.java @@ -6,9 +6,10 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; -@WebServlet(name = "controllers.HelloWorldServlet", urlPatterns = "/") +@WebServlet(name = "HelloWorldServlet", urlPatterns = "/") public class HelloWorldServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.getWriter().println("

    Hello, World!

    "); + return; } } diff --git a/src/main/java/com/codeup/adlister/controllers/SearchAdServlet.java b/src/main/java/com/codeup/adlister/controllers/SearchAdServlet.java new file mode 100644 index 0000000000..b06e4344ca --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/SearchAdServlet.java @@ -0,0 +1,7 @@ +package com.codeup.adlister.controllers; + +import javax.servlet.annotation.WebServlet; + +@WebServlet( name = "SearchAdServlet", urlPatterns = "/searchAds") +public class SearchAdServlet { +} diff --git a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java index d154c702d5..8a96531953 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java @@ -39,6 +39,8 @@ public List all() { } } + + @Override public Long insert(Ad ad) { try { From da46f356492ace20d27f5b23f8435afd0a27de17 Mon Sep 17 00:00:00 2001 From: Christian Carter Date: Wed, 16 Nov 2022 16:55:21 -0600 Subject: [PATCH 23/28] login pop up wrong password alert --- .../adlister/controllers/LoginServlet.java | 16 ++++++++++++++-- .../adlister/controllers/RegisterServlet.java | 4 ++++ src/main/webapp/WEB-INF/login.jsp | 4 ++++ src/main/webapp/WEB-INF/register.jsp | 2 ++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/codeup/adlister/controllers/LoginServlet.java b/src/main/java/com/codeup/adlister/controllers/LoginServlet.java index 62a0e817d9..c2edc74d69 100644 --- a/src/main/java/com/codeup/adlister/controllers/LoginServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/LoginServlet.java @@ -17,19 +17,31 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t if (request.getSession().getAttribute("user") != null) { response.sendRedirect("/profile"); return; - } + + request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); } - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String username = request.getParameter("username"); String password = request.getParameter("password"); User user = DaoFactory.getUsersDao().findByUsername(username); boolean validAttempt = Password.check(password, user.getPassword()); + boolean notCorrectPassword = !Password.check(password, user.getPassword()); + + + + + if(notCorrectPassword) { + request.setAttribute("password", true); + request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); + return; + } + if (validAttempt) { diff --git a/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java b/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java index bc3417b6a6..1c73e5f937 100644 --- a/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java @@ -13,6 +13,8 @@ @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); } @@ -28,11 +30,13 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) || password.isEmpty() || (!password.equals(passwordConfirmation)); + if (inputHasErrors) { response.sendRedirect("/register"); return; } + // create and save a new user User user = new User(username, email, password); DaoFactory.getUsersDao().insert(user); diff --git a/src/main/webapp/WEB-INF/login.jsp b/src/main/webapp/WEB-INF/login.jsp index 56495e4d00..72a1725539 100644 --- a/src/main/webapp/WEB-INF/login.jsp +++ b/src/main/webapp/WEB-INF/login.jsp @@ -17,10 +17,14 @@
    +
    + + Incorrect Password + diff --git a/src/main/webapp/WEB-INF/register.jsp b/src/main/webapp/WEB-INF/register.jsp index f0bb986903..b5ac9b44d1 100644 --- a/src/main/webapp/WEB-INF/register.jsp +++ b/src/main/webapp/WEB-INF/register.jsp @@ -1,3 +1,4 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> @@ -19,6 +20,7 @@ +
    From 4d976560eed80695c64259a7649e9f1c2ba3d511 Mon Sep 17 00:00:00 2001 From: Casanova Geary Date: Wed, 16 Nov 2022 17:27:44 -0600 Subject: [PATCH 24/28] Added validating input before submitting created ad, else page stays on /ads/create until user corrects input error. --- .../adlister/controllers/CreateAdServlet.java | 28 +++++++++++++------ src/main/webapp/WEB-INF/ads/create.jsp | 7 +++-- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java b/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java index 38775bc6f7..4e0960ef2d 100644 --- a/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java @@ -22,14 +22,26 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t .forward(request, response); } - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { 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"); + boolean invalidAdInput = title.isEmpty() || description.isEmpty(); + if (invalidAdInput) + { + request.setAttribute("inputIsNull", true); + request.getRequestDispatcher("/WEB-INF/ads/create.jsp").forward(request, response); + } else + { + Ad ad = new Ad( + user.getId(), + request.getParameter("title"), + request.getParameter("description") + ); + DaoFactory.getAdsDao().insert(ad); + response.sendRedirect("/ads"); + } + } } diff --git a/src/main/webapp/WEB-INF/ads/create.jsp b/src/main/webapp/WEB-INF/ads/create.jsp index 424ee69c2f..28e28dfd79 100644 --- a/src/main/webapp/WEB-INF/ads/create.jsp +++ b/src/main/webapp/WEB-INF/ads/create.jsp @@ -16,12 +16,15 @@
    - +
    - +
    + + Title cannot be blank. Please enter the name for your ad. +
    From 3a9374b34b9ea30af1248f594be39697c73aecdd Mon Sep 17 00:00:00 2001 From: Casanova Geary Date: Wed, 16 Nov 2022 18:06:52 -0600 Subject: [PATCH 25/28] Conmpleted user input validation for updating profile. --- .../controllers/UpdateProfileServlet.java | 16 ++++++-- src/main/webapp/WEB-INF/update-profile.jsp | 38 ++++++++++--------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/codeup/adlister/controllers/UpdateProfileServlet.java b/src/main/java/com/codeup/adlister/controllers/UpdateProfileServlet.java index ed2c5df972..96f86e3737 100644 --- a/src/main/java/com/codeup/adlister/controllers/UpdateProfileServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/UpdateProfileServlet.java @@ -32,10 +32,18 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) password = Password.hash(password); - // Accessing DAO to implement update users method. - DaoFactory.getUsersDao().updateUser(id, username, email, password); + boolean invalidInput = username.isEmpty() || email.isEmpty() || password.isEmpty(); + if (invalidInput) + { + request.setAttribute("inputIsNull", true); + request.getRequestDispatcher("/WEB-INF/profile/update.jsp").forward(request, response); + } else + { +// Accessing DAO to implement update users method. + DaoFactory.getUsersDao().updateUser(id, username, email, password); + // Redirecting them to login again. + response.sendRedirect("/login"); + } - // Redirecting them to login again. - response.sendRedirect("/login"); } } diff --git a/src/main/webapp/WEB-INF/update-profile.jsp b/src/main/webapp/WEB-INF/update-profile.jsp index a9f5e0614e..f956e2c42f 100644 --- a/src/main/webapp/WEB-INF/update-profile.jsp +++ b/src/main/webapp/WEB-INF/update-profile.jsp @@ -9,28 +9,30 @@ - + Title -

    Edit Your Profile

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

    Edit Your Profile

    +
    + +
    + +
    +
    + + +
    +
    + + +
    + + No fields left blank. + + +
    From 198de0e35389eb02384e0edc4554c43b48343665 Mon Sep 17 00:00:00 2001 From: Yogesh Adhikari Date: Wed, 16 Nov 2022 18:19:13 -0600 Subject: [PATCH 26/28] search function added --- .../adlister/controllers/DeleteAdServlet.java | 3 --- .../controllers/HelloWorldServlet.java | 2 +- .../adlister/controllers/SearchAdServlet.java | 20 ++++++++++++++-- .../java/com/codeup/adlister/dao/Ads.java | 2 ++ .../com/codeup/adlister/dao/ListAdsDao.java | 7 ++++-- .../com/codeup/adlister/dao/MySQLAdsDao.java | 15 ++++++++++++ src/main/webapp/WEB-INF/ads/result.jsp | 24 +++++++++++++++++++ .../WEB-INF/partials/navbar-ads-index.jsp | 13 ++++++---- .../WEB-INF/partials/navbar-create-ad.jsp | 10 ++++---- .../WEB-INF/partials/navbar-logged-in.jsp | 10 ++++---- 10 files changed, 86 insertions(+), 20 deletions(-) create mode 100644 src/main/webapp/WEB-INF/ads/result.jsp diff --git a/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java b/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java index 514c1ee465..ac0f2cc2f7 100644 --- a/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/DeleteAdServlet.java @@ -1,7 +1,6 @@ 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; @@ -9,7 +8,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.List; @WebServlet(name = "DeleteAdServlet", urlPatterns = "/ads/delete") public class DeleteAdServlet extends HttpServlet { @@ -19,7 +17,6 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws S long adId = Long.parseLong(req.getParameter("id")); DaoFactory.getAdsDao().delete(adId); resp.sendRedirect("/profile"); -// req.getRequestDispatcher("WEB-INF/profile.jsp").forward(req, resp); } else { 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 1a97cd3801..2a5e83d5cd 100644 --- a/src/main/java/com/codeup/adlister/controllers/HelloWorldServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/HelloWorldServlet.java @@ -6,7 +6,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; -@WebServlet(name = "HelloWorldServlet", urlPatterns = "/") +@WebServlet(name = "HelloWorldServlet", urlPatterns = "/hello") 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/SearchAdServlet.java b/src/main/java/com/codeup/adlister/controllers/SearchAdServlet.java index b06e4344ca..cef0b1f6a6 100644 --- a/src/main/java/com/codeup/adlister/controllers/SearchAdServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/SearchAdServlet.java @@ -1,7 +1,23 @@ 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 = "SearchAdServlet", urlPatterns = "/ads/search") +public class SearchAdServlet extends HttpServlet { + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + List ads = DaoFactory.getAdsDao().search(request.getParameter("title")); + request.setAttribute("ads", ads); + request.getRequestDispatcher("/WEB-INF/ads/result.jsp").forward(request, response); -@WebServlet( name = "SearchAdServlet", urlPatterns = "/searchAds") -public class SearchAdServlet { + } } diff --git a/src/main/java/com/codeup/adlister/dao/Ads.java b/src/main/java/com/codeup/adlister/dao/Ads.java index 1169263a74..88250d2b17 100644 --- a/src/main/java/com/codeup/adlister/dao/Ads.java +++ b/src/main/java/com/codeup/adlister/dao/Ads.java @@ -24,4 +24,6 @@ public interface Ads Ad findById(long id); + + List search(String title); } diff --git a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java index ec6ca1b654..5e7886046c 100644 --- a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java @@ -2,8 +2,6 @@ import com.codeup.adlister.models.Ad; -import java.sql.PreparedStatement; -import java.sql.SQLException; import java.util.ArrayList; import java.util.List; @@ -49,6 +47,11 @@ public Ad findById(long id) { return null; } + @Override + public List search(String title) { + return null; + } + private List generateAds() { List ads = new ArrayList<>(); diff --git a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java index 8a96531953..ee10cc3311 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java @@ -92,6 +92,20 @@ public void delete(long id) { } } + @Override + public List search(String title){ + try { + String searchQuery = "SELECT * FROM ads WHERE title LIKE CONCAT('%',?,'%')"; + PreparedStatement stmt = connection.prepareStatement(searchQuery); + stmt.setString(1, title); + return createAdsFromResults(stmt.executeQuery()); + }catch (SQLException e){ + throw new RuntimeException("Error finding results for that title.", e); + } + } + + + @Override public List findPostByUserId (Long userId){ try { @@ -138,4 +152,5 @@ private List createAdsFromResults(ResultSet rs) throws SQLException { } + } diff --git a/src/main/webapp/WEB-INF/ads/result.jsp b/src/main/webapp/WEB-INF/ads/result.jsp new file mode 100644 index 0000000000..f5002228e6 --- /dev/null +++ b/src/main/webapp/WEB-INF/ads/result.jsp @@ -0,0 +1,24 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + ad + + + + +
    +

    Here is the ad you are looking for!

    + + +
    +

    ${ad.title}

    +

    ${ad.description}

    +
    +
    +
    + + diff --git a/src/main/webapp/WEB-INF/partials/navbar-ads-index.jsp b/src/main/webapp/WEB-INF/partials/navbar-ads-index.jsp index c9c864608f..c5e762687a 100644 --- a/src/main/webapp/WEB-INF/partials/navbar-ads-index.jsp +++ b/src/main/webapp/WEB-INF/partials/navbar-ads-index.jsp @@ -1,3 +1,4 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%-- Created by IntelliJ IDEA. User: casanovageary @@ -19,8 +20,12 @@
  • register
  • -
    - - -
    +
    +
    + + +
    +
    + + diff --git a/src/main/webapp/WEB-INF/partials/navbar-create-ad.jsp b/src/main/webapp/WEB-INF/partials/navbar-create-ad.jsp index 58cea361d4..2c5a2c772f 100644 --- a/src/main/webapp/WEB-INF/partials/navbar-create-ad.jsp +++ b/src/main/webapp/WEB-INF/partials/navbar-create-ad.jsp @@ -20,8 +20,10 @@
  • logout
  • -
    - - -
    +
    +
    + + +
    +
    \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/partials/navbar-logged-in.jsp b/src/main/webapp/WEB-INF/partials/navbar-logged-in.jsp index a99b98a7ad..ea52aa875a 100644 --- a/src/main/webapp/WEB-INF/partials/navbar-logged-in.jsp +++ b/src/main/webapp/WEB-INF/partials/navbar-logged-in.jsp @@ -20,8 +20,10 @@
  • logout
  • -
    - - -
    +
    +
    + + +
    +
    From 0b742c566943e382fa5cd51e85a1d6dfa076bcb2 Mon Sep 17 00:00:00 2001 From: Casanova Geary Date: Wed, 16 Nov 2022 18:23:26 -0600 Subject: [PATCH 27/28] Completed user input validation for register. --- .../adlister/controllers/RegisterServlet.java | 22 +++++++++---------- src/main/webapp/WEB-INF/register.jsp | 3 +++ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java b/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java index 1c73e5f937..f02cf7cffc 100644 --- a/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java +++ b/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java @@ -18,7 +18,7 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t request.getRequestDispatcher("/WEB-INF/register.jsp").forward(request, response); } - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String username = request.getParameter("username"); String email = request.getParameter("email"); String password = request.getParameter("password"); @@ -32,15 +32,13 @@ protected void doPost(HttpServletRequest request, HttpServletResponse response) if (inputHasErrors) { - response.sendRedirect("/register"); - return; + request.setAttribute("inputHasErrors", true); + request.getRequestDispatcher("/WEB-INF/register.jsp").forward(request, response); + } 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"); - -} - } \ No newline at end of file + } +} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/register.jsp b/src/main/webapp/WEB-INF/register.jsp index b5ac9b44d1..2cf41bf079 100644 --- a/src/main/webapp/WEB-INF/register.jsp +++ b/src/main/webapp/WEB-INF/register.jsp @@ -29,6 +29,9 @@ + + No fields left blank. + From aeebf6d09ce9e1e4e165c8ba1e639bcac1213fad Mon Sep 17 00:00:00 2001 From: Vicente Figueroa Date: Wed, 16 Nov 2022 22:04:53 -0600 Subject: [PATCH 28/28] user can now delete profile --- .../controllers/DeleteUserServlet.java | 31 +++++++++++++++++++ .../codeup/adlister/dao/MySQLUsersDao.java | 16 ++++++++++ .../java/com/codeup/adlister/dao/Users.java | 2 ++ src/main/webapp/WEB-INF/delete-profile.jsp | 23 ++++++++++++++ src/main/webapp/WEB-INF/profile.jsp | 4 +++ src/main/webapp/WEB-INF/update-profile.jsp | 1 - 6 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/codeup/adlister/controllers/DeleteUserServlet.java create mode 100644 src/main/webapp/WEB-INF/delete-profile.jsp diff --git a/src/main/java/com/codeup/adlister/controllers/DeleteUserServlet.java b/src/main/java/com/codeup/adlister/controllers/DeleteUserServlet.java new file mode 100644 index 0000000000..2b7e22c5bc --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/DeleteUserServlet.java @@ -0,0 +1,31 @@ +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 = "DeleteUserServlet", urlPatterns = "/profile/delete") +public class DeleteUserServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setAttribute("userId", request.getParameter("userId")); + request.getRequestDispatcher("/WEB-INF/delete-profile.jsp").forward(request, response); + } + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + System.out.println(request.getParameter("userId")); + if (request.getSession().getAttribute("user") != null) { + Long userId = Long.valueOf(request.getParameter("userId")); + DaoFactory.getUsersDao().deleteUser(userId); + response.sendRedirect("/login"); + } else { + response.sendRedirect("/ads"); + } + } +} diff --git a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java index e03acc2d34..73adcdd4c3 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java @@ -72,6 +72,22 @@ public void updateUser(Long id, String username, String email, String password) } } + @Override + public void deleteUser(Long id) { + String deleteUserQuery = "DELETE FROM users WHERE id = ?"; + try { + PreparedStatement statement = connection.prepareStatement(deleteUserQuery); + + // Setting value of question mark in SQL query to the id that's being passed in as parameter. + statement.setLong(1, id); + + // Executing delete user query. + statement.executeUpdate(); + } catch (SQLException e) { + throw new RuntimeException("Error deleting user."); + } + } + 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 2820be3b94..edf3895c1f 100644 --- a/src/main/java/com/codeup/adlister/dao/Users.java +++ b/src/main/java/com/codeup/adlister/dao/Users.java @@ -8,4 +8,6 @@ public interface Users { User findByUsername(String username); Long insert(User user); void updateUser(Long id, String username, String email, String password); + + void deleteUser(Long id); } diff --git a/src/main/webapp/WEB-INF/delete-profile.jsp b/src/main/webapp/WEB-INF/delete-profile.jsp new file mode 100644 index 0000000000..20385bd429 --- /dev/null +++ b/src/main/webapp/WEB-INF/delete-profile.jsp @@ -0,0 +1,23 @@ +<%-- + Created by IntelliJ IDEA. + User: localdev + Date: 11/16/22 + Time: 9:52 PM + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> + + + + + + + + +

    Delete Your Profile

    +
    + + +
    + + diff --git a/src/main/webapp/WEB-INF/profile.jsp b/src/main/webapp/WEB-INF/profile.jsp index 964915a1e1..25ddd5a393 100644 --- a/src/main/webapp/WEB-INF/profile.jsp +++ b/src/main/webapp/WEB-INF/profile.jsp @@ -15,6 +15,10 @@ + + + +

    ${sessionScope.ads}

    diff --git a/src/main/webapp/WEB-INF/update-profile.jsp b/src/main/webapp/WEB-INF/update-profile.jsp index a9f5e0614e..a7f3d28a08 100644 --- a/src/main/webapp/WEB-INF/update-profile.jsp +++ b/src/main/webapp/WEB-INF/update-profile.jsp @@ -31,6 +31,5 @@ -