Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
Expand Down
41 changes: 41 additions & 0 deletions src/main/java/taxi/controller/LoginController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package taxi.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import taxi.exception.AuthenticationException;
import taxi.lib.Injector;
import taxi.model.Driver;
import taxi.service.AuthenticationService;

public class LoginController extends HttpServlet {
private static final Injector injector = Injector.getInstance("taxi");
private final AuthenticationService authenticationService =
(AuthenticationService) injector.getInstance(AuthenticationService.class);

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String login = req.getParameter("login");
String password = req.getParameter("password");

try {
Driver driver = authenticationService.login(login, password);
HttpSession session = req.getSession();
session.setAttribute("driver_id", driver.getId());
resp.sendRedirect(req.getContextPath() + "/index");
} catch (AuthenticationException e) {
req.setAttribute("errorMsg", e.getMessage());
req.getRequestDispatcher("/WEB-INF/views/login.jsp").forward(req, resp);
}
}
}
16 changes: 16 additions & 0 deletions src/main/java/taxi/controller/LogoutController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package taxi.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LogoutController extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.getSession().invalidate();
resp.sendRedirect("/login");
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lets add contextPath to all sendRedirect

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done, thanks!

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not done(
Be attentive
image

}
}
28 changes: 28 additions & 0 deletions src/main/java/taxi/controller/car/GetMyCurrentCarsController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package taxi.controller.car;

import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import taxi.lib.Injector;
import taxi.model.Car;
import taxi.service.CarService;
import taxi.service.DriverService;

public class GetMyCurrentCarsController extends HttpServlet {
private static final Injector injector = Injector.getInstance("taxi");
private final DriverService driverService =
(DriverService) injector.getInstance(DriverService.class);
private final CarService carService = (CarService) injector.getInstance(CarService.class);

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Long driverId = (Long) req.getSession().getAttribute("driver_id");
List<Car> allCarsByDriver = carService.getAllByDriver(driverId);
req.setAttribute("cars", allCarsByDriver);
req.getRequestDispatcher("/WEB-INF/views/cars/all.jsp").forward(req, resp);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ public void doGet(HttpServletRequest req, HttpServletResponse resp)
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String name = req.getParameter("name");
String licenseNumber = req.getParameter("license_number");
Driver driver = new Driver(name, licenseNumber);
String login = req.getParameter("login");
String password = req.getParameter("password");
Driver driver = new Driver(name, licenseNumber, login, password);
driverService.create(driver);
resp.sendRedirect(req.getContextPath() + "/drivers/add");
}
Expand Down
16 changes: 8 additions & 8 deletions src/main/java/taxi/dao/CarDaoImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ public List<Car> getAllByDriver(Long driverId) {
+ "m.country AS manufacturer_country "
+ "FROM cars c"
+ " JOIN manufacturers m ON c.manufacturer_id = m.id"
+ " JOIN cars_drivers cd ON c.id = cd.car_id"
+ " JOIN drivers_cars cd ON c.id = cd.car_id"
+ " JOIN drivers d ON cd.driver_id = d.id"
+ " WHERE c.is_deleted = FALSE AND driver_id = ?"
+ " AND d.is_deleted = FALSE";
Expand All @@ -160,7 +160,7 @@ private void insertAllDrivers(Car car) {
if (drivers.size() == 0) {
return;
}
String query = "INSERT INTO cars_drivers (car_id, driver_id) VALUES (?, ?)";
String query = "INSERT INTO drivers_cars (car_id, driver_id) VALUES (?, ?)";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
connection.prepareStatement(query)) {
Expand All @@ -175,7 +175,7 @@ private void insertAllDrivers(Car car) {
}

private void deleteAllDrivers(Car car) {
String query = "DELETE FROM cars_drivers WHERE car_id = ?";
String query = "DELETE FROM drivers_cars WHERE car_id = ?";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
connection.prepareStatement(query)) {
Expand All @@ -188,8 +188,8 @@ private void deleteAllDrivers(Car car) {
}

private List<Driver> getAllDriversByCarId(Long carId) {
String query = "SELECT id, name, license_number "
+ "FROM cars_drivers cd "
String query = "SELECT id, name, license_number, login, password "
+ "FROM drivers_cars cd "
+ "JOIN drivers d ON cd.driver_id = d.id "
+ "WHERE car_id = ? AND is_deleted = false";
try (Connection connection = ConnectionUtil.getConnection();
Expand All @@ -211,10 +211,10 @@ private Driver parseDriverFromResultSet(ResultSet resultSet) throws SQLException
Long driverId = resultSet.getObject("id", Long.class);
String name = resultSet.getString("name");
String licenseNumber = resultSet.getString("license_number");
Driver driver = new Driver();
String login = resultSet.getString("login");
String password = resultSet.getString("password");
Driver driver = new Driver(name, licenseNumber, login, password);
driver.setId(driverId);
driver.setName(name);
driver.setLicenseNumber(licenseNumber);
return driver;
}

Expand Down
2 changes: 2 additions & 0 deletions src/main/java/taxi/dao/DriverDao.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package taxi.dao;

import java.util.Optional;
import taxi.model.Driver;

public interface DriverDao extends GenericDao<Driver> {
Optional<Driver> findByLogin(String login);
}
34 changes: 28 additions & 6 deletions src/main/java/taxi/dao/DriverDaoImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@
public class DriverDaoImpl implements DriverDao {
@Override
public Driver create(Driver driver) {
String query = "INSERT INTO drivers (name, license_number) "
+ "VALUES (?, ?)";
String query = "INSERT INTO drivers (name, license_number, login, password) "
+ "VALUES (?, ?, ?, ?)";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement = connection.prepareStatement(query,
Statement.RETURN_GENERATED_KEYS)) {
statement.setString(1, driver.getName());
statement.setString(2, driver.getLicenseNumber());
statement.setString(3, driver.getLogin());
statement.setString(4, driver.getPassword());
statement.executeUpdate();
ResultSet resultSet = statement.getGeneratedKeys();
if (resultSet.next()) {
Expand Down Expand Up @@ -72,13 +74,16 @@ public List<Driver> getAll() {
public Driver update(Driver driver) {
String query = "UPDATE drivers "
+ "SET name = ?, license_number = ? "
+ ", login = ?, password = ? "
+ "WHERE id = ? AND is_deleted = FALSE";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement
= connection.prepareStatement(query)) {
statement.setString(1, driver.getName());
statement.setString(2, driver.getLicenseNumber());
statement.setLong(3, driver.getId());
statement.setString(3, driver.getLogin());
statement.setString(4, driver.getPassword());
statement.setLong(5, driver.getId());
statement.executeUpdate();
return driver;
} catch (SQLException e) {
Expand All @@ -98,14 +103,31 @@ public boolean delete(Long id) {
}
}

@Override
public Optional<Driver> findByLogin(String login) {
String query = "SELECT id, name, license_number, login, password "
+ "FROM drivers WHERE login = ? AND is_deleted = FALSE;";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(query)) {
preparedStatement.setString(1, login);
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
return Optional.of(parseDriverFromResultSet(resultSet));
}
} catch (SQLException e) {
throw new DataProcessingException("Can't get driver by login " + login, e);
}
return Optional.empty();
}

private Driver parseDriverFromResultSet(ResultSet resultSet) throws SQLException {
Long id = resultSet.getObject("id", Long.class);
String name = resultSet.getString("name");
String licenseNumber = resultSet.getString("license_number");
Driver driver = new Driver();
String login = resultSet.getString("login");
String password = resultSet.getString("password");
Driver driver = new Driver(name, licenseNumber, login, password);
driver.setId(id);
driver.setName(name);
driver.setLicenseNumber(licenseNumber);
return driver;
}
}
7 changes: 7 additions & 0 deletions src/main/java/taxi/exception/AuthenticationException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package taxi.exception;

public class AuthenticationException extends Exception {
public AuthenticationException(String message) {
super(message);
}
}
29 changes: 24 additions & 5 deletions src/main/java/taxi/model/Driver.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,14 @@ public class Driver {
private Long id;
private String name;
private String licenseNumber;
private String login;
private String password;

public Driver() {
}

public Driver(String name, String licenseNumber) {
public Driver(String name, String licenseNumber, String login, String password) {
this.name = name;
this.licenseNumber = licenseNumber;
this.login = login;
this.password = password;
}

public Long getId() {
Expand All @@ -39,6 +40,24 @@ public void setLicenseNumber(String licenseNumber) {
this.licenseNumber = licenseNumber;
}

public String getLogin() {
return login;
}

public Driver setLogin(String login) {
this.login = login;
return this;
}

public String getPassword() {
return password;
}

public Driver setPassword(String password) {
this.password = password;
return this;
}

@Override
public boolean equals(Object o) {
if (this == o) {
Expand All @@ -55,6 +74,6 @@ public boolean equals(Object o) {

@Override
public int hashCode() {
return Objects.hash(id, name, licenseNumber);
return Objects.hash(id, name, licenseNumber, login);
}
}
8 changes: 8 additions & 0 deletions src/main/java/taxi/service/AuthenticationService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package taxi.service;

import taxi.exception.AuthenticationException;
import taxi.model.Driver;

public interface AuthenticationService {
Driver login(String login, String password) throws AuthenticationException;
}
22 changes: 22 additions & 0 deletions src/main/java/taxi/service/AuthenticationServiceImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package taxi.service;

import java.util.Optional;
import taxi.exception.AuthenticationException;
import taxi.lib.Inject;
import taxi.lib.Service;
import taxi.model.Driver;

@Service
public class AuthenticationServiceImpl implements AuthenticationService {
@Inject
private DriverService driverService;

@Override
public Driver login(String login, String password) throws AuthenticationException {
Optional<Driver> driverDaoByLogin = driverService.findByLogin(login);
if (password.equals(driverDaoByLogin.get().getPassword())) {
return driverDaoByLogin.get();
}
throw new AuthenticationException("Login or Password is incorrect.");
}
}
2 changes: 2 additions & 0 deletions src/main/java/taxi/service/DriverService.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package taxi.service;

import java.util.Optional;
import taxi.model.Driver;

public interface DriverService extends GenericService<Driver> {
Optional<Driver> findByLogin(String login);
}
6 changes: 6 additions & 0 deletions src/main/java/taxi/service/DriverServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
import taxi.dao.DriverDao;
import taxi.lib.Inject;
import taxi.lib.Service;
Expand Down Expand Up @@ -38,4 +39,9 @@ public Driver update(Driver driver) {
public boolean delete(Long id) {
return driverDao.delete(id);
}

@Override
public Optional<Driver> findByLogin(String login) {
return driverDao.findByLogin(login);
}
}
8 changes: 4 additions & 4 deletions src/main/java/taxi/util/ConnectionUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
import java.util.Properties;

public class ConnectionUtil {
private static final String URL = "YOUR DATABASE URL";
private static final String USERNAME = "YOUR USERNAME";
private static final String PASSWORD = "YOUR PASSWORD";
private static final String JDBC_DRIVER = "YOUR DRIVER";
private static final String URL = "jdbc:mysql://localhost:3306/taxi_service_db";
private static final String USERNAME = "root";
private static final String PASSWORD = "Password";
private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";

static {
try {
Expand Down
Loading