Skip to content

Commit a993835

Browse files
committed
Solved hw
1 parent 765e1e1 commit a993835

File tree

12 files changed

+308
-4
lines changed

12 files changed

+308
-4
lines changed

src/main/java/mate/academy/Main.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,22 @@
22

33
import java.time.LocalDate;
44
import java.time.LocalDateTime;
5+
import mate.academy.exception.AuthenticationException;
6+
import mate.academy.exception.RegistrationException;
7+
import mate.academy.lib.Injector;
58
import mate.academy.model.CinemaHall;
69
import mate.academy.model.Movie;
710
import mate.academy.model.MovieSession;
11+
import mate.academy.model.User;
12+
import mate.academy.service.AuthenticationService;
813
import mate.academy.service.CinemaHallService;
914
import mate.academy.service.MovieService;
1015
import mate.academy.service.MovieSessionService;
1116

1217
public class Main {
13-
public static void main(String[] args) {
14-
MovieService movieService = null;
18+
public static void main(String[] args) throws RegistrationException, AuthenticationException {
19+
Injector injector = Injector.getInstance("mate.academy");
20+
MovieService movieService = (MovieService) injector.getInstance(MovieService.class);
1521

1622
Movie fastAndFurious = new Movie("Fast and Furious");
1723
fastAndFurious.setDescription("An action film about street racing, heists, and spies.");
@@ -27,7 +33,8 @@ public static void main(String[] args) {
2733
secondCinemaHall.setCapacity(200);
2834
secondCinemaHall.setDescription("second hall with capacity 200");
2935

30-
CinemaHallService cinemaHallService = null;
36+
CinemaHallService cinemaHallService = (CinemaHallService) injector
37+
.getInstance(CinemaHallService.class);
3138
cinemaHallService.add(firstCinemaHall);
3239
cinemaHallService.add(secondCinemaHall);
3340

@@ -44,12 +51,24 @@ public static void main(String[] args) {
4451
yesterdayMovieSession.setMovie(fastAndFurious);
4552
yesterdayMovieSession.setShowTime(LocalDateTime.now().minusDays(1L));
4653

47-
MovieSessionService movieSessionService = null;
54+
MovieSessionService movieSessionService = (MovieSessionService) injector
55+
.getInstance(MovieSessionService.class);
4856
movieSessionService.add(tomorrowMovieSession);
4957
movieSessionService.add(yesterdayMovieSession);
5058

5159
System.out.println(movieSessionService.get(yesterdayMovieSession.getId()));
5260
System.out.println(movieSessionService.findAvailableSessions(
5361
fastAndFurious.getId(), LocalDate.now()));
62+
63+
AuthenticationService authenticationService = (AuthenticationService) injector
64+
.getInstance(AuthenticationService.class);
65+
User david = new User();
66+
david.setEmail("david@gmail.com");
67+
david.setPassword("123456789");
68+
User registeredUser = authenticationService.register(david.getEmail(), david.getPassword());
69+
System.out.println("Successful registration: " + registeredUser);
70+
User loggedUser = authenticationService.login(david.getEmail(),
71+
david.getPassword());
72+
System.out.println("Successful login : " + loggedUser);
5473
}
5574
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package mate.academy.dao;
2+
3+
import java.util.Optional;
4+
import mate.academy.model.User;
5+
6+
public interface UserDao {
7+
User add(User user);
8+
9+
Optional<User> get(Long id);
10+
11+
public Optional<User> findByEmail(String email);
12+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package mate.academy.dao.impl;
2+
3+
import java.util.Optional;
4+
import mate.academy.dao.UserDao;
5+
import mate.academy.exception.DataProcessingException;
6+
import mate.academy.lib.Dao;
7+
import mate.academy.model.User;
8+
import mate.academy.util.HibernateUtil;
9+
import org.hibernate.Session;
10+
import org.hibernate.Transaction;
11+
12+
@Dao
13+
public class UserDaoImpl implements UserDao {
14+
@Override
15+
public User add(User user) {
16+
Transaction transaction = null;
17+
Session session = null;
18+
try {
19+
session = HibernateUtil.getSessionFactory().openSession();
20+
transaction = session.beginTransaction();
21+
session.persist(user);
22+
transaction.commit();
23+
return user;
24+
} catch (Exception e) {
25+
if (transaction != null) {
26+
transaction.rollback();
27+
}
28+
throw new DataProcessingException("Can't insert a user " + user, e);
29+
} finally {
30+
if (session != null) {
31+
session.close();
32+
}
33+
}
34+
}
35+
36+
@Override
37+
public Optional<User> get(Long id) {
38+
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
39+
return Optional.ofNullable(session.get(User.class, id));
40+
} catch (Exception e) {
41+
throw new DataProcessingException("Can't get a user by id: " + id, e);
42+
}
43+
}
44+
45+
@Override
46+
public Optional<User> findByEmail(String email) {
47+
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
48+
return session.createQuery("FROM User u where u.email = :email", User.class)
49+
.setParameter("email", email)
50+
.uniqueResultOptional();
51+
} catch (Exception e) {
52+
throw new DataProcessingException("Can't find user by email " + email, e);
53+
}
54+
}
55+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package mate.academy.exception;
2+
3+
public class AuthenticationException extends Exception {
4+
public AuthenticationException(String message) {
5+
super(message);
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package mate.academy.exception;
2+
3+
public class RegistrationException extends Exception {
4+
public RegistrationException(String message) {
5+
super(message);
6+
}
7+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package mate.academy.model;
2+
3+
import jakarta.persistence.Entity;
4+
import jakarta.persistence.GeneratedValue;
5+
import jakarta.persistence.GenerationType;
6+
import jakarta.persistence.Id;
7+
import jakarta.persistence.Table;
8+
import java.util.Arrays;
9+
10+
@Entity
11+
@Table(name = "users")
12+
public class User {
13+
@Id
14+
@GeneratedValue(strategy = GenerationType.IDENTITY)
15+
private Long id;
16+
private String email;
17+
private String password;
18+
private byte[] salt;
19+
20+
public Long getId() {
21+
return id;
22+
}
23+
24+
public String getEmail() {
25+
return email;
26+
}
27+
28+
public String getPassword() {
29+
return password;
30+
}
31+
32+
public byte[] getSalt() {
33+
return salt;
34+
}
35+
36+
public void setId(Long id) {
37+
this.id = id;
38+
}
39+
40+
public void setEmail(String login) {
41+
this.email = login;
42+
}
43+
44+
public void setPassword(String password) {
45+
this.password = password;
46+
}
47+
48+
public void setSalt(byte[] salt) {
49+
this.salt = salt;
50+
}
51+
52+
@Override
53+
public String toString() {
54+
return "User{"
55+
+ "id=" + id
56+
+ ", login='" + email + '\''
57+
+ ", password='" + password + '\''
58+
+ ", salt=" + Arrays.toString(salt)
59+
+ '}';
60+
}
61+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package mate.academy.service;
2+
3+
import mate.academy.exception.AuthenticationException;
4+
import mate.academy.exception.RegistrationException;
5+
import mate.academy.model.User;
6+
7+
public interface AuthenticationService {
8+
User login(String email, String password) throws AuthenticationException;
9+
10+
User register(String email, String password) throws RegistrationException;
11+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package mate.academy.service;
2+
3+
import java.util.Optional;
4+
import mate.academy.model.User;
5+
6+
public interface UserService {
7+
User add(User user);
8+
9+
Optional<User> findByEmail(String email);
10+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package mate.academy.service.impl;
2+
3+
import java.util.Optional;
4+
import mate.academy.exception.AuthenticationException;
5+
import mate.academy.exception.RegistrationException;
6+
import mate.academy.lib.Inject;
7+
import mate.academy.lib.Service;
8+
import mate.academy.model.User;
9+
import mate.academy.service.AuthenticationService;
10+
import mate.academy.service.UserService;
11+
import mate.academy.util.HashUtil;
12+
13+
@Service
14+
public class AuthenticationServiceImpl implements AuthenticationService {
15+
@Inject
16+
private UserService userService;
17+
18+
@Override
19+
public User login(String email, String password) throws AuthenticationException {
20+
Optional<User> userFromDbOptional = userService.findByEmail(email);
21+
if (userFromDbOptional.isEmpty()
22+
|| (!userFromDbOptional.get().getPassword().equals(
23+
HashUtil.hashPassword(password, userFromDbOptional.get().getSalt())))) {
24+
throw new AuthenticationException("Can't authenticate user");
25+
}
26+
return userFromDbOptional.get();
27+
}
28+
29+
@Override
30+
public User register(String email, String password) throws RegistrationException {
31+
if (userService.findByEmail(email).isPresent() || password.isEmpty()) {
32+
throw new RegistrationException("Incorrect data for user registration. "
33+
+ "User either already exists or a password was not provided.");
34+
}
35+
User user = new User();
36+
user.setEmail(email);
37+
user.setPassword(password);
38+
return userService.add(user);
39+
}
40+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package mate.academy.service.impl;
2+
3+
import java.util.Optional;
4+
import mate.academy.dao.UserDao;
5+
import mate.academy.lib.Inject;
6+
import mate.academy.lib.Service;
7+
import mate.academy.model.User;
8+
import mate.academy.service.UserService;
9+
import mate.academy.util.HashUtil;
10+
11+
@Service
12+
public class UserServiceImpl implements UserService {
13+
@Inject
14+
private UserDao userDao;
15+
16+
@Override
17+
public User add(User user) {
18+
user.setSalt(HashUtil.getSalt());
19+
user.setPassword(HashUtil.hashPassword(user.getPassword(), user.getSalt()));
20+
return userDao.add(user);
21+
}
22+
23+
@Override
24+
public Optional<User> findByEmail(String email) {
25+
return userDao.findByEmail(email);
26+
}
27+
}

0 commit comments

Comments
 (0)