Skip to content
Open
Show file tree
Hide file tree
Changes from all 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: 0 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
https://raw.githubusercontent.com/mate-academy/style-guides/master/java/checkstyle.xml
</maven.checkstyle.plugin.configLocation>
</properties>

<dependencies>
<dependency>
<groupId>mysql</groupId>
Expand All @@ -37,7 +36,6 @@
<version>1.2</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
Expand Down
40 changes: 40 additions & 0 deletions src/main/java/taxi/controller/LoginController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package taxi.controller;

import java.io.IOException;
import javax.naming.AuthenticationException;
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.lib.Injector;
import taxi.model.Driver;
import taxi.service.AuthenticationService;

public class LoginController extends HttpServlet {
private static final Injector injector = Injector.getInstance("taxi");
private 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("user_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);
}
}
}
21 changes: 21 additions & 0 deletions src/main/java/taxi/controller/LogoutController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
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.lib.Injector;

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

@Override
protected void doGet(HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
session.invalidate();
resp.sendRedirect(req.getContextPath() + "/index");
}
}
27 changes: 27 additions & 0 deletions src/main/java/taxi/controller/car/GetMyCurrentCarsController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
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 javax.servlet.http.HttpSession;
import taxi.lib.Injector;
import taxi.model.Car;
import taxi.service.CarService;

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

@Override
protected void doGet(HttpServletRequest req,
HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
Long userId = (Long) session.getAttribute("user_id");
List<Car> cars = carService.getAllByDriver(userId);
req.setAttribute("cars", cars);
req.getRequestDispatcher("/WEB-INF/views/cars/all.jsp").forward(req, resp);
}
}
10 changes: 7 additions & 3 deletions src/main/java/taxi/controller/driver/AddDriverController.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@

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

@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
Expand All @@ -24,8 +24,12 @@ 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");
String login = req.getParameter("login");
String password = req.getParameter("password");
Driver driver = new Driver(name, licenseNumber);
driver.setLogin(login);
driver.setPassword(password);
driverService.create(driver);
resp.sendRedirect(req.getContextPath() + "/drivers/add");
resp.sendRedirect(req.getContextPath() + "/index");
}
}
76 changes: 40 additions & 36 deletions src/main/java/taxi/dao/CarDaoImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ public class CarDaoImpl implements CarDao {
@Override
public Car create(Car car) {
String query = "INSERT INTO cars (model, manufacturer_id)"
+ "VALUES (?, ?)";
+ "VALUES (?, ?)";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
connection.prepareStatement(
query, Statement.RETURN_GENERATED_KEYS)) {
query, Statement.RETURN_GENERATED_KEYS)) {
statement.setString(1, car.getModel());
statement.setLong(2, car.getManufacturer().getId());
statement.executeUpdate();
Expand All @@ -42,13 +42,13 @@ public Car create(Car car) {
@Override
public Optional<Car> get(Long id) {
String query = "SELECT c.id AS id, "
+ "model, "
+ "manufacturer_id, "
+ "m.name AS manufacturer_name, "
+ "m.country AS manufacturer_country "
+ "FROM cars c "
+ "JOIN manufacturers m ON c.manufacturer_id = m.id "
+ "WHERE c.id = ? AND c.is_deleted = FALSE";
+ "model, "
+ "manufacturer_id, "
+ "m.name AS manufacturer_name, "
+ "m.country AS manufacturer_country "
+ "FROM cars c "
+ "JOIN manufacturers m ON c.manufacturer_id = m.id "
+ "WHERE c.id = ? AND c.is_deleted = FALSE";
Car car = null;
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
Expand All @@ -70,13 +70,13 @@ public Optional<Car> get(Long id) {
@Override
public List<Car> getAll() {
String query = "SELECT c.id AS id, "
+ "model, "
+ "manufacturer_id, "
+ "m.name AS manufacturer_name, "
+ "m.country AS manufacturer_country "
+ "FROM cars c"
+ " JOIN manufacturers m ON c.manufacturer_id = m.id"
+ " WHERE c.is_deleted = FALSE";
+ "model, "
+ "manufacturer_id, "
+ "m.name AS manufacturer_name, "
+ "m.country AS manufacturer_country "
+ "FROM cars c"
+ " JOIN manufacturers m ON c.manufacturer_id = m.id"
+ " WHERE c.is_deleted = FALSE";
List<Car> cars = new ArrayList<>();
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
Expand All @@ -95,7 +95,7 @@ public List<Car> getAll() {
@Override
public Car update(Car car) {
String query = "UPDATE cars SET model = ?, manufacturer_id = ? WHERE id = ?"
+ " AND is_deleted = FALSE";
+ " AND is_deleted = FALSE";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
connection.prepareStatement(query)) {
Expand All @@ -114,10 +114,10 @@ public Car update(Car car) {
@Override
public boolean delete(Long id) {
String query = "UPDATE cars SET is_deleted = TRUE WHERE id = ?"
+ " AND is_deleted = FALSE";
+ " AND is_deleted = FALSE";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
connection.prepareStatement(query)) {
PreparedStatement statement =
connection.prepareStatement(query)) {
statement.setLong(1, id);
return statement.executeUpdate() > 0;
} catch (SQLException e) {
Expand All @@ -128,16 +128,16 @@ public boolean delete(Long id) {
@Override
public List<Car> getAllByDriver(Long driverId) {
String query = "SELECT c.id AS id, "
+ "model, "
+ "manufacturer_id, "
+ "m.name AS manufacturer_name, "
+ "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 d ON cd.driver_id = d.id"
+ " WHERE c.is_deleted = FALSE AND driver_id = ?"
+ " AND d.is_deleted = FALSE";
+ "model, "
+ "manufacturer_id, "
+ "m.name AS manufacturer_name, "
+ "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 d ON cd.driver_id = d.id"
+ " WHERE c.is_deleted = FALSE AND driver_id = ?"
+ " AND d.is_deleted = FALSE";
List<Car> cars = new ArrayList<>();
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
Expand All @@ -149,7 +149,7 @@ public List<Car> getAllByDriver(Long driverId) {
}
} catch (SQLException e) {
throw new DataProcessingException("Can't get all cars for driver with id: "
+ driverId, e);
+ driverId, e);
}
cars.forEach(car -> car.setDrivers(getAllDriversByCarId(car.getId())));
return cars;
Expand Down Expand Up @@ -183,15 +183,15 @@ private void deleteAllDrivers(Car car) {
statement.executeUpdate();
} catch (SQLException e) {
throw new DataProcessingException("Can't delete drivers " + car.getDrivers()
+ " of car with id: " + car.getId(), e);
+ " of car with id: " + car.getId(), e);
}
}

private List<Driver> getAllDriversByCarId(Long carId) {
String query = "SELECT id, name, license_number "
+ "FROM cars_drivers cd "
+ "JOIN drivers d ON cd.driver_id = d.id "
+ "WHERE car_id = ? AND is_deleted = false";
String query = "SELECT id, name, license_number, login, password "
+ "FROM cars_drivers cd "
+ "JOIN drivers d ON cd.driver_id = d.id "
+ "WHERE car_id = ? AND is_deleted = false";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement =
connection.prepareStatement(query)) {
Expand All @@ -211,10 +211,14 @@ 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");
String login = resultSet.getString("login");
String password = resultSet.getString("password");
Driver driver = new Driver();
driver.setId(driverId);
driver.setName(name);
driver.setLicenseNumber(licenseNumber);
driver.setLogin(login);
driver.setPassword(password);
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);
}
39 changes: 33 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,16 @@
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)) {
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 @@ -71,8 +74,8 @@ public List<Driver> getAll() {
@Override
public Driver update(Driver driver) {
String query = "UPDATE drivers "
+ "SET name = ?, license_number = ? "
+ "WHERE id = ? AND is_deleted = FALSE";
+ "SET name = ?, license_number = ?, login = ?, password = ? "
+ "WHERE id = ? AND is_deleted = FALSE";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement
= connection.prepareStatement(query)) {
Expand All @@ -98,14 +101,38 @@ public boolean delete(Long id) {
}
}

@Override
public Optional<Driver> findByLogin(String login) {
String query = "SELECT * "
+ "FROM drivers "
+ "WHERE login = ? AND is_deleted = FALSE";
try (Connection connection = ConnectionUtil.getConnection();
PreparedStatement statement
= connection.prepareStatement(query)) {
statement.setString(1, login);
Driver driver = null;
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
driver = parseDriverFromResultSet(resultSet);
}
return Optional.ofNullable(driver);
} catch (SQLException ex) {
throw new DataProcessingException("Can't not find driver with login " + login, ex);
}
}

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");
String login = resultSet.getString("login");
String password = resultSet.getString("password");
Driver driver = new Driver();
driver.setId(id);
driver.setName(name);
driver.setLicenseNumber(licenseNumber);
driver.setLogin(login);
driver.setPassword(password);
return driver;
}
}
Loading