From 8dd45e163d5dd3b06c26d1c9f94afc5a5deb4880 Mon Sep 17 00:00:00 2001 From: Eloys Robles Aguilar Date: Mon, 14 Feb 2022 11:38:18 -0600 Subject: [PATCH 01/88] first commit switching over to mysql 8.0.23 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 22a2e9c039..47304fd49f 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ mysql mysql-connector-java - 6.0.5 + 8.0.23 From fe65416a2cf5abedbb2dfae55a43c76cec6ca19a Mon Sep 17 00:00:00 2001 From: Julian-H-Martinez Date: Mon, 14 Feb 2022 13:42:31 -0600 Subject: [PATCH 02/88] created categories table, and many:many table; added UNIQUE to username and email in users table --- migration.sql | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/migration.sql b/migration.sql index a70d2eab38..dbf9bf0a4e 100644 --- a/migration.sql +++ b/migration.sql @@ -2,21 +2,44 @@ USE adlister_db; DROP TABLE IF EXISTS ads; DROP TABLE IF EXISTS users; +DROP TABLE IF EXISTS categories; +DROP TABLE IF EXISTS ad_category; -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) ); -CREATE TABLE ads ( +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, + PRIMARY KEY (id), + FOREIGN KEY (user_id) REFERENCES users (id) + ON DELETE CASCADE +); + +CREATE TABLE categories +( id INT UNSIGNED NOT NULL AUTO_INCREMENT, - user_id INT UNSIGNED NOT NULL, - title VARCHAR(240) NOT NULL, - description TEXT NOT NULL, + ad_id INT UNSIGNED NOT NULL, + categoryName VARCHAR(240) NOT NULL, PRIMARY KEY (id), - FOREIGN KEY (user_id) REFERENCES users(id) + FOREIGN KEY (ad_id) REFERENCES ads (id) ON DELETE CASCADE ); + +CREATE TABLE ad_category +( + category_id INT UNSIGNED NOT NULL AUTO_INCREMENT, + ad_id INT UNSIGNED NOT NULL, + FOREIGN KEY (ad_id) REFERENCES ads (id) + ON DELETE CASCADE, + FOREIGN KEY (category_id) REFERENCES categories(id) +); \ No newline at end of file From 585221750226438eb41eb26c979908f6a6400c9c Mon Sep 17 00:00:00 2001 From: Eloys Robles Aguilar Date: Mon, 14 Feb 2022 14:19:01 -0600 Subject: [PATCH 03/88] added deleting and updating functionality to the MySQLUsersDao --- src/main/java/Test.java | 21 ++++++++++ .../codeup/adlister/dao/MySQLUsersDao.java | 42 +++++++++++++++---- .../java/com/codeup/adlister/dao/Users.java | 2 + 3 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 src/main/java/Test.java diff --git a/src/main/java/Test.java b/src/main/java/Test.java new file mode 100644 index 0000000000..2cb7119135 --- /dev/null +++ b/src/main/java/Test.java @@ -0,0 +1,21 @@ +import com.codeup.adlister.dao.DaoFactory; +import com.codeup.adlister.models.User; + +public class Test { + public static void main(String[] args) { + User user = new User("eloys", "test", "fun"); + +// DaoFactory.getUsersDao().insert(user); + + + + + user.setId(DaoFactory.getUsersDao().findByUsername("eloys").getId()); + user.setUsername("it is definitely working"); + DaoFactory.getUsersDao().update(user); + + + + + } +} diff --git a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java index 4e69e57044..149685f4fd 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java @@ -12,9 +12,9 @@ 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 +34,31 @@ public User findByUsername(String username) { } } + 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, Statement.RETURN_GENERATED_KEYS); + 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,15 +76,16 @@ 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") ); } diff --git a/src/main/java/com/codeup/adlister/dao/Users.java b/src/main/java/com/codeup/adlister/dao/Users.java index 62da74d20b..3f4cb304f7 100644 --- a/src/main/java/com/codeup/adlister/dao/Users.java +++ b/src/main/java/com/codeup/adlister/dao/Users.java @@ -7,4 +7,6 @@ public interface Users { User findByUsername(String username); Long insert(User user); + void delete(String user); + void update(User user); } From 61313de72b2840963a352669ac7d5a48b0836a0d Mon Sep 17 00:00:00 2001 From: Julian-H-Martinez Date: Mon, 14 Feb 2022 14:21:38 -0600 Subject: [PATCH 04/88] added to dao Categories interface; added models Category model --- .../com/codeup/adlister/dao/Categories.java | 12 +++++ .../com/codeup/adlister/models/Category.java | 46 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 src/main/java/com/codeup/adlister/dao/Categories.java create mode 100644 src/main/java/com/codeup/adlister/models/Category.java 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..2a673f137a --- /dev/null +++ b/src/main/java/com/codeup/adlister/dao/Categories.java @@ -0,0 +1,12 @@ +package com.codeup.adlister.dao; + +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); +} 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..19ab2dc879 --- /dev/null +++ b/src/main/java/com/codeup/adlister/models/Category.java @@ -0,0 +1,46 @@ +package com.codeup.adlister.models; + +public class Category { + private long id; + private long adId; + private String name; + + // CONSTRUCTORS + public Category(){} + + public Category(String name){ + this.name = name; + } + + public Category(long id, long adId, String name){ + this.id = id; + this.adId = adId; + this.name = name; + } + + // GETTERS/SETTERS + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public long getAdId() { + return adId; + } + + public void setAdId(long adId) { + this.adId = adId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} From af8fb166f70f679064f36b363d844533373a0792 Mon Sep 17 00:00:00 2001 From: Eloys Robles Aguilar Date: Mon, 14 Feb 2022 16:30:10 -0600 Subject: [PATCH 05/88] added update and delete functionality to the MySQLAdsDao --- .../com/codeup/adlister/dao/MySQLAdsDao.java | 24 +++++++++++++++++++ .../codeup/adlister/dao/MySQLUsersDao.java | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java index d58c45f985..703e78f187 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java @@ -38,6 +38,30 @@ public List all() { } } + 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); + } + } + @Override public Long insert(Ad ad) { try { diff --git a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java index 149685f4fd..6b410db266 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java @@ -48,7 +48,7 @@ public void delete(String username) { public void update(User user) { String query = "UPDATE users SET username = (?), email = (?), password = (?) WHERE id = (?)"; try{ - PreparedStatement stmt = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS); + PreparedStatement stmt = connection.prepareStatement(query); stmt.setString(1, user.getUsername()); stmt.setString(2, user.getEmail()); stmt.setString(3, user.getPassword()); From f18bca7091fc3316b09d1bb6f6a71b944b53e4cc Mon Sep 17 00:00:00 2001 From: Julian-H-Martinez Date: Mon, 14 Feb 2022 17:43:39 -0600 Subject: [PATCH 06/88] working on jsp for showing one ad --- .../adlister/controllers/ShowAdServlet.java | 16 +++++++++ .../java/com/codeup/adlister/dao/Ads.java | 2 ++ src/main/webapp/WEB-INF/ads/showAd.jsp | 36 +++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 src/main/java/com/codeup/adlister/controllers/ShowAdServlet.java create mode 100644 src/main/webapp/WEB-INF/ads/showAd.jsp 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..4833e97aea --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/ShowAdServlet.java @@ -0,0 +1,16 @@ +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("/ad/id") +public class ShowAdServlet extends HttpServlet { + protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { + + req.getRequestDispatcher("/WEB-INF/ads/showAd.jsp").forward(req, res); + } +} diff --git a/src/main/java/com/codeup/adlister/dao/Ads.java b/src/main/java/com/codeup/adlister/dao/Ads.java index 79dc59f484..ca2f735afe 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); + // get single ad + List singleAd(); } 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..7c88fcf7b6 --- /dev/null +++ b/src/main/webapp/WEB-INF/ads/showAd.jsp @@ -0,0 +1,36 @@ +<%@ 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" %> + + + Title + + + +<%--consider page being a card--%> +
+

Your Ad Title:

+<%--

${ad.description}

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

Ad Title

+

ad.description

+
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
  • +
+
+ + From 4dfae354bfcb39aa2421626e11cf17b7c0f599b0 Mon Sep 17 00:00:00 2001 From: Nicholas Diaz Date: Tue, 15 Feb 2022 07:01:23 -0600 Subject: [PATCH 07/88] searchAdsServlet-mainNav_css-keywordsAds_jsp --- pom.xml | 1 + .../controllers/SearchAdsServlet.java | 39 ++++++++++ .../java/com/codeup/adlister/dao/Ads.java | 4 + .../com/codeup/adlister/dao/ListAdsDao.java | 6 ++ .../com/codeup/adlister/dao/MySQLAdsDao.java | 12 +++ .../codeup/adlister/dao/MySQLUsersDao.java | 1 - src/main/webapp/WEB-INF/ads/keywordsAds.jsp | 16 ++++ src/main/webapp/WEB-INF/mainNav.css | 25 ++++++ src/main/webapp/WEB-INF/partials/head.jsp | 3 +- src/main/webapp/WEB-INF/partials/navbar.jsp | 72 ++++++++++++++++-- src/main/webapp/img/img.png | Bin 0 -> 38465 bytes 11 files changed, 171 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/codeup/adlister/controllers/SearchAdsServlet.java create mode 100644 src/main/webapp/WEB-INF/ads/keywordsAds.jsp create mode 100644 src/main/webapp/WEB-INF/mainNav.css create mode 100644 src/main/webapp/img/img.png diff --git a/pom.xml b/pom.xml index 47304fd49f..a2f4c27fa0 100644 --- a/pom.xml +++ b/pom.xml @@ -39,6 +39,7 @@ jstl 1.2 + mysql mysql-connector-java 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..e513e4203b --- /dev/null +++ b/src/main/java/com/codeup/adlister/controllers/SearchAdsServlet.java @@ -0,0 +1,39 @@ +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.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.SQLException; +import java.util.List; + +@WebServlet(name="SearchAdsServlet", urlPatterns="searchAds") +public class SearchAdsServlet { + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + } + public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String keyword = request.getParameter("keyword"); + try { + List keywordAds = DaoFactory.getAdsDao().findAdByKeyword(keyword); + 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/keywordAds.jsp"); + for (Ad ad : keywordAds) { + System.out.println(ad.getTitle()); + } + }catch(SQLException e){ + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/codeup/adlister/dao/Ads.java b/src/main/java/com/codeup/adlister/dao/Ads.java index 79dc59f484..a47dde14d5 100644 --- a/src/main/java/com/codeup/adlister/dao/Ads.java +++ b/src/main/java/com/codeup/adlister/dao/Ads.java @@ -2,6 +2,7 @@ import com.codeup.adlister.models.Ad; +import java.sql.SQLException; import java.util.List; public interface Ads { @@ -9,4 +10,7 @@ public interface Ads { List all(); // insert a new ad and return the new ad's id Long insert(Ad ad); + + //added by ND + List findAdByKeyword(String keyword) throws SQLException; } diff --git a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java index 8d3baaa369..b793001849 100644 --- a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java @@ -2,6 +2,7 @@ import com.codeup.adlister.models.Ad; +import java.sql.SQLException; import java.util.ArrayList; import java.util.List; @@ -27,6 +28,11 @@ public Long insert(Ad ad) { return ad.getId(); } + @Override + public List findAdByKeyword(String keyword) throws SQLException { + 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..eb1d0fb705 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java @@ -26,6 +26,8 @@ public MySQLAdsDao(Config config) { } } + + @Override public List all() { PreparedStatement stmt = null; @@ -55,6 +57,16 @@ public Long insert(Ad ad) { } } + //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"), diff --git a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java index 4e69e57044..30bcb58ac2 100644 --- a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java +++ b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java @@ -2,7 +2,6 @@ import com.codeup.adlister.models.User; import com.mysql.cj.jdbc.Driver; - import java.sql.*; public class MySQLUsersDao implements Users { diff --git a/src/main/webapp/WEB-INF/ads/keywordsAds.jsp b/src/main/webapp/WEB-INF/ads/keywordsAds.jsp new file mode 100644 index 0000000000..1cf9de9b20 --- /dev/null +++ b/src/main/webapp/WEB-INF/ads/keywordsAds.jsp @@ -0,0 +1,16 @@ +<%-- + 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" %> + + + keywordAds + + + + + diff --git a/src/main/webapp/WEB-INF/mainNav.css b/src/main/webapp/WEB-INF/mainNav.css new file mode 100644 index 0000000000..ae5093bc15 --- /dev/null +++ b/src/main/webapp/WEB-INF/mainNav.css @@ -0,0 +1,25 @@ +#mainNav{ + background-color: aquamarine; + /*background-img: url(".png");*/ + +} +/*remember this for other additions like a footer?*/ +#side-nav> a:hover, a:visited{ + background-color: #a74a42; +} +a{ + text-decoration: none; +} +.w-text, a.w-text:link, a.w-text:visited{ + color: brown; +} +a.blk:link, a.blk:visited, a.blk:hover{ + color: black; +} +a.red-hover:hover{ + color: red; + text-decoration: none; +} +a.blk:hover{ + color: black; +} \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/partials/head.jsp b/src/main/webapp/WEB-INF/partials/head.jsp index a33443d65c..9a4f71890d 100644 --- a/src/main/webapp/WEB-INF/partials/head.jsp +++ b/src/main/webapp/WEB-INF/partials/head.jsp @@ -1,2 +1,3 @@ ${param.title} - + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/partials/navbar.jsp b/src/main/webapp/WEB-INF/partials/navbar.jsp index 8e1f98f662..808ab5beeb 100644 --- a/src/main/webapp/WEB-INF/partials/navbar.jsp +++ b/src/main/webapp/WEB-INF/partials/navbar.jsp @@ -1,13 +1,73 @@ -