diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000..a2b7aa3f3d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+*.iml
+target/
+.idea/
+Config.java
diff --git a/migration.sql b/migration.sql
new file mode 100644
index 0000000000..a70d2eab38
--- /dev/null
+++ b/migration.sql
@@ -0,0 +1,22 @@
+USE adlister_db;
+
+DROP TABLE IF EXISTS ads;
+DROP TABLE IF EXISTS users;
+
+CREATE TABLE users (
+ id INT UNSIGNED NOT NULL AUTO_INCREMENT,
+ username VARCHAR(240) NOT NULL,
+ email VARCHAR(240) NOT NULL,
+ password VARCHAR(255) NOT NULL,
+ PRIMARY KEY (id)
+);
+
+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
+);
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000000..aa004087cd
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,44 @@
+
+
+ 4.0.0
+
+ com.codeup.adlister
+ adlister
+ 1.0-SNAPSHOT
+ war
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.6.0
+
+ 1.8
+ 1.8
+
+
+
+
+
+
+
+ javax.servlet
+ javax.servlet-api
+ 3.0.1
+
+
+ jstl
+ jstl
+ 1.2
+
+
+ mysql
+ mysql-connector-java
+ 6.0.5
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/codeup/adlister/controllers/AdsIndexServlet.java b/src/main/java/com/codeup/adlister/controllers/AdsIndexServlet.java
new file mode 100644
index 0000000000..1763081228
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/controllers/AdsIndexServlet.java
@@ -0,0 +1,18 @@
+package com.codeup.adlister.controllers;
+
+import com.codeup.adlister.dao.DaoFactory;
+
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@WebServlet(name = "controllers.AdsIndexServlet", urlPatterns = "/ads")
+public class AdsIndexServlet extends HttpServlet {
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ request.setAttribute("ads", DaoFactory.getAdsDao().all());
+ request.getRequestDispatcher("/WEB-INF/ads/index.jsp").forward(request, response);
+ }
+}
diff --git a/src/main/java/com/codeup/adlister/controllers/CounterServlet.java b/src/main/java/com/codeup/adlister/controllers/CounterServlet.java
new file mode 100644
index 0000000000..f66c52d7aa
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/controllers/CounterServlet.java
@@ -0,0 +1,17 @@
+package com.codeup.adlister.controllers;
+
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@WebServlet(name = "controllers.CounterServlet", urlPatterns = "/count")
+public class CounterServlet extends HttpServlet {
+ private int counter = 0;
+
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ counter += 1;
+ response.getWriter().println("
The count is " + counter + ".
");
+ }
+}
diff --git a/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java b/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java
new file mode 100644
index 0000000000..5fd38ad79d
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java
@@ -0,0 +1,29 @@
+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.CreateAdServlet", urlPatterns = "/ads/create")
+public class CreateAdServlet extends HttpServlet {
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ request.getRequestDispatcher("/WEB-INF/ads/create.jsp")
+ .forward(request, response);
+ }
+
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ Ad ad = new Ad(
+ 1, // for now we'll hardcode the user id
+ request.getParameter("title"),
+ request.getParameter("description")
+ );
+ DaoFactory.getAdsDao().insert(ad);
+ response.sendRedirect("/ads");
+ }
+}
diff --git a/src/main/java/com/codeup/adlister/controllers/HelloWorldServlet.java b/src/main/java/com/codeup/adlister/controllers/HelloWorldServlet.java
new file mode 100644
index 0000000000..4ab9b9da70
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/controllers/HelloWorldServlet.java
@@ -0,0 +1,14 @@
+package com.codeup.adlister.controllers;
+
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@WebServlet(name = "controllers.HelloWorldServlet", urlPatterns = "/")
+public class HelloWorldServlet extends HttpServlet {
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ response.getWriter().println("Hello, World!
");
+ }
+}
diff --git a/src/main/java/com/codeup/adlister/controllers/LoginServlet.java b/src/main/java/com/codeup/adlister/controllers/LoginServlet.java
new file mode 100644
index 0000000000..8e320d737f
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/controllers/LoginServlet.java
@@ -0,0 +1,37 @@
+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(name = "controllers.LoginServlet", urlPatterns = "/login")
+public class LoginServlet extends HttpServlet {
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ 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 {
+ String username = request.getParameter("username");
+ String password = request.getParameter("password");
+
+ // TODO: find a record in your database that matches the submitted password
+ // TODO: make sure we find a user with that username
+ // TODO: check the submitted password against what you have in your database
+ boolean validAttempt = false;
+
+ if (validAttempt) {
+ // TODO: store the logged in user object in the session, instead of just the username
+ request.getSession().setAttribute("user", username);
+ response.sendRedirect("/profile");
+ } else {
+ response.sendRedirect("/login");
+ }
+ }
+}
diff --git a/src/main/java/com/codeup/adlister/controllers/LogoutServlet.java b/src/main/java/com/codeup/adlister/controllers/LogoutServlet.java
new file mode 100644
index 0000000000..e88f9d5241
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/controllers/LogoutServlet.java
@@ -0,0 +1,16 @@
+package com.codeup.adlister.controllers;
+
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+@WebServlet(name = "controllers.LogoutServlet", urlPatterns = "/logout")
+public class LogoutServlet extends HttpServlet {
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ request.getSession().removeAttribute("user");
+ request.getSession().invalidate();
+ response.sendRedirect("/login");
+ }
+}
diff --git a/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java b/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java
new file mode 100644
index 0000000000..f0fbfff3a9
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/controllers/RegisterServlet.java
@@ -0,0 +1,20 @@
+package com.codeup.adlister.controllers;
+
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet(name = "controllers.RegisterServlet", urlPatterns = "/register")
+public class RegisterServlet extends HttpServlet {
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) {
+ // TODO: show the registration form
+ }
+
+ protected void doPost(HttpServletRequest request, HttpServletResponse response) {
+ // TODO: ensure the submitted information is valid
+ // TODO: create a new user based off of the submitted information
+ // TODO: if a user was successfully created, send them to their profile
+ }
+}
+//
\ 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
new file mode 100644
index 0000000000..e1b8941067
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/controllers/ViewProfileServlet.java
@@ -0,0 +1,19 @@
+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(name = "controllers.ViewProfileServlet", urlPatterns = "/profile")
+public class ViewProfileServlet extends HttpServlet {
+ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
+ 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
new file mode 100644
index 0000000000..79dc59f484
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/dao/Ads.java
@@ -0,0 +1,12 @@
+package com.codeup.adlister.dao;
+
+import com.codeup.adlister.models.Ad;
+
+import java.util.List;
+
+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);
+}
diff --git a/src/main/java/com/codeup/adlister/dao/DaoFactory.java b/src/main/java/com/codeup/adlister/dao/DaoFactory.java
new file mode 100644
index 0000000000..05f2dafc28
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/dao/DaoFactory.java
@@ -0,0 +1,13 @@
+package com.codeup.adlister.dao;
+
+public class DaoFactory {
+ private static Ads adsDao;
+ private static Config config = new Config();
+
+ public static Ads getAdsDao() {
+ if (adsDao == null) {
+ adsDao = new MySQLAdsDao(config);
+ }
+ return adsDao;
+ }
+}
diff --git a/src/main/java/com/codeup/adlister/dao/ListAdsDao.java b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java
new file mode 100644
index 0000000000..8d3baaa369
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/dao/ListAdsDao.java
@@ -0,0 +1,58 @@
+package com.codeup.adlister.dao;
+
+import com.codeup.adlister.models.Ad;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ListAdsDao implements Ads {
+ private List ads;
+
+ public List all() {
+ if (ads == null) {
+ ads = generateAds();
+ }
+ return ads;
+ }
+
+ public Long insert(Ad ad) {
+ // make sure we have ads
+ if (ads == null) {
+ ads = generateAds();
+ }
+ // we'll assign an "id" here based on the size of the ads list
+ // really the dao would handle this
+ ad.setId((long) ads.size());
+ ads.add(ad);
+ return ad.getId();
+ }
+
+ private List generateAds() {
+ List ads = new ArrayList<>();
+ ads.add(new Ad(
+ 1,
+ 1,
+ "playstation for sale",
+ "This is a slightly used playstation"
+ ));
+ ads.add(new Ad(
+ 2,
+ 1,
+ "Super Nintendo",
+ "Get your game on with this old-school classic!"
+ ));
+ ads.add(new Ad(
+ 3,
+ 2,
+ "Junior Java Developer Position",
+ "Minimum 7 years of experience required. You will be working in the scripting language for Java, JavaScript"
+ ));
+ ads.add(new Ad(
+ 4,
+ 2,
+ "JavaScript Developer needed",
+ "Must have strong Java skills"
+ ));
+ return ads;
+ }
+}
diff --git a/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java
new file mode 100644
index 0000000000..a29871d531
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/dao/MySQLAdsDao.java
@@ -0,0 +1,79 @@
+//package com.codeup.adlister.dao;
+//
+//import com.codeup.adlister.models.Ad;
+//import com.mysql.cj.jdbc.Driver;
+//import sun.security.krb5.Config;
+//
+//import java.io.FileInputStream;
+//import java.io.IOException;
+//import java.io.InputStream;
+//import java.sql.*;
+//import java.util.ArrayList;
+//import java.util.List;
+//
+//public class MySQLAdsDao implements Ads {
+// private Connection connection = null;
+//
+// public MySQLAdsDao(Config config) {
+// try {
+// DriverManager.registerDriver(new Driver());
+// connection = DriverManager.getConnection(
+// config.getUrl(),
+// config.getUser(),
+// config.getPassword()
+// );
+// } catch (SQLException e) {
+// throw new RuntimeException("Error connecting to the database!", e);
+// }
+// }
+//
+// @Override
+// public List all() {
+// Statement stmt = null;
+// try {
+// stmt = connection.createStatement();
+// ResultSet rs = stmt.executeQuery("SELECT * FROM ads");
+// return createAdsFromResults(rs);
+// } catch (SQLException e) {
+// throw new RuntimeException("Error retrieving all ads.", e);
+// }
+// }
+//
+// @Override
+// public Long insert(Ad ad) {
+// try {
+// Statement stmt = connection.createStatement();
+// stmt.executeUpdate(createInsertQuery(ad), Statement.RETURN_GENERATED_KEYS);
+// ResultSet rs = stmt.getGeneratedKeys();
+// rs.next();
+// return rs.getLong(1);
+// } catch (SQLException e) {
+// throw new RuntimeException("Error creating a new ad.", e);
+// }
+// }
+//
+// private String createInsertQuery(Ad ad) {
+// return "INSERT INTO ads(user_id, title, description) VALUES "
+// + "(" + ad.getUserId() + ", "
+// + "'" + ad.getTitle() +"', "
+// + "'" + ad.getDescription() + "')";
+// }
+//
+// private Ad extractAd(ResultSet rs) throws SQLException {
+// return new Ad(
+// rs.getLong("id"),
+// rs.getLong("user_id"),
+// rs.getString("title"),
+// rs.getString("description")
+// );
+// }
+//
+// private List createAdsFromResults(ResultSet rs) throws SQLException {
+// List ads = new ArrayList<>();
+// while (rs.next()) {
+// ads.add(extractAd(rs));
+// }
+// return ads;
+// }
+//}
+////
\ No newline at end of file
diff --git a/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java
new file mode 100644
index 0000000000..8bb1d57974
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/dao/MySQLUsersDao.java
@@ -0,0 +1,4 @@
+package com.codeup.adlister.dao;
+
+public class MySQLUsersDao {
+}
diff --git a/src/main/java/com/codeup/adlister/dao/Users.java b/src/main/java/com/codeup/adlister/dao/Users.java
new file mode 100644
index 0000000000..62da74d20b
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/dao/Users.java
@@ -0,0 +1,10 @@
+package com.codeup.adlister.dao;
+
+import com.codeup.adlister.models.User;
+
+import java.util.List;
+
+public interface Users {
+ User findByUsername(String username);
+ Long insert(User user);
+}
diff --git a/src/main/java/com/codeup/adlister/models/Ad.java b/src/main/java/com/codeup/adlister/models/Ad.java
new file mode 100644
index 0000000000..9e9e02d87e
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/models/Ad.java
@@ -0,0 +1,53 @@
+package com.codeup.adlister.models;
+
+public class Ad {
+ private long id;
+ private long userId;
+ private String title;
+ private String description;
+
+ public Ad(long id, long userId, String title, String description) {
+ this.id = id;
+ this.userId = userId;
+ this.title = title;
+ this.description = description;
+ }
+
+ public Ad(long userId, String title, String description) {
+ this.userId = userId;
+ this.title = title;
+ this.description = description;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public long getUserId() {
+ return userId;
+ }
+
+ public void setUserId(long userId) {
+ this.userId = userId;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+}
diff --git a/src/main/java/com/codeup/adlister/models/User.java b/src/main/java/com/codeup/adlister/models/User.java
new file mode 100644
index 0000000000..1c9c75cdb7
--- /dev/null
+++ b/src/main/java/com/codeup/adlister/models/User.java
@@ -0,0 +1,49 @@
+package com.codeup.adlister.models;
+
+public class User {
+ private long id;
+ private String username;
+ private String email;
+ private String password;
+
+ public User() {}
+
+ public User(long id, String username, String email, String password) {
+ this.id = id;
+ this.username = username;
+ this.email = email;
+ this.password = password;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
diff --git a/src/main/webapp/WEB-INF/ads/create.jsp b/src/main/webapp/WEB-INF/ads/create.jsp
new file mode 100644
index 0000000000..f6332692f7
--- /dev/null
+++ b/src/main/webapp/WEB-INF/ads/create.jsp
@@ -0,0 +1,24 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/ads/index.jsp b/src/main/webapp/WEB-INF/ads/index.jsp
new file mode 100644
index 0000000000..6f4371f0bb
--- /dev/null
+++ b/src/main/webapp/WEB-INF/ads/index.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" %>
+
+
+
+
+
+
+
+
+
+
+
Here Are all the ads!
+
+
+
+
${ad.title}
+
${ad.description}
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/login.jsp b/src/main/webapp/WEB-INF/login.jsp
new file mode 100644
index 0000000000..83ce2d0a1f
--- /dev/null
+++ b/src/main/webapp/WEB-INF/login.jsp
@@ -0,0 +1,25 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/partials/head.jsp b/src/main/webapp/WEB-INF/partials/head.jsp
new file mode 100644
index 0000000000..a33443d65c
--- /dev/null
+++ b/src/main/webapp/WEB-INF/partials/head.jsp
@@ -0,0 +1,2 @@
+${param.title}
+
diff --git a/src/main/webapp/WEB-INF/partials/navbar.jsp b/src/main/webapp/WEB-INF/partials/navbar.jsp
new file mode 100644
index 0000000000..8e1f98f662
--- /dev/null
+++ b/src/main/webapp/WEB-INF/partials/navbar.jsp
@@ -0,0 +1,13 @@
+
diff --git a/src/main/webapp/WEB-INF/profile.jsp b/src/main/webapp/WEB-INF/profile.jsp
new file mode 100644
index 0000000000..384c2081c6
--- /dev/null
+++ b/src/main/webapp/WEB-INF/profile.jsp
@@ -0,0 +1,16 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+
+
+
+
+
+
+
+
+
+
+
Welcome, ${sessionScope.user}!
+
+
+
+
diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp
new file mode 100644
index 0000000000..68cf346ec9
--- /dev/null
+++ b/src/main/webapp/index.jsp
@@ -0,0 +1,15 @@
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+
+
+
+
+
+
+
+
+
+
Welcome to the Adlister!
+
+
+
diff --git a/src/main/webapp/register.jsp b/src/main/webapp/register.jsp
new file mode 100644
index 0000000000..ba990e6dfa
--- /dev/null
+++ b/src/main/webapp/register.jsp
@@ -0,0 +1,17 @@
+<%--
+ Created by IntelliJ IDEA.
+ User: amanda
+ Date: 11/18/21
+ Time: 9:17 PM
+ To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+
+
+ Register
+
+
+
+
+
+<%----%>
\ No newline at end of file