Skip to content

Commit 13393af

Browse files
resolve
1 parent 765e1e1 commit 13393af

File tree

10 files changed

+226
-0
lines changed

10 files changed

+226
-0
lines changed

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,26 @@
22

33
import java.time.LocalDate;
44
import java.time.LocalDateTime;
5+
import mate.academy.lib.Injector;
56
import mate.academy.model.CinemaHall;
67
import mate.academy.model.Movie;
78
import mate.academy.model.MovieSession;
9+
import mate.academy.security.AuthenticationService;
810
import mate.academy.service.CinemaHallService;
911
import mate.academy.service.MovieService;
1012
import mate.academy.service.MovieSessionService;
1113

1214
public class Main {
15+
public static final Injector injector = Injector.getInstance("mate.academy");
16+
private static final MovieService movieService =
17+
(MovieService) injector.getInstance(MovieService.class);
18+
private static final MovieSessionService movieSessionService =
19+
(MovieSessionService) injector.getInstance(MovieSessionService.class);
20+
private static final CinemaHallService cinemaHallService =
21+
(CinemaHallService) injector.getInstance(CinemaHallService.class);
22+
private static final AuthenticationService authenticationService =
23+
(AuthenticationService) injector.getInstance(AuthenticationService.class);
24+
1325
public static void main(String[] args) {
1426
MovieService movieService = null;
1527

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+
User get(Long id);
10+
11+
Optional<User> findByEmail(String email);
12+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
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.model.User;
7+
import mate.academy.util.HibernateUtil;
8+
import org.hibernate.HibernateException;
9+
import org.hibernate.Session;
10+
import org.hibernate.Transaction;
11+
12+
public class UserDaoImpl implements UserDao {
13+
@Override
14+
public User add(User user) {
15+
Session session = null;
16+
Transaction transaction = null;
17+
try {
18+
session = HibernateUtil.getSessionFactory().openSession();
19+
transaction = session.beginTransaction();
20+
session.persist(user);
21+
transaction.commit();
22+
return user;
23+
} catch (Exception e) {
24+
if (transaction != null) {
25+
transaction.rollback();
26+
}
27+
throw new RuntimeException("can't save user to db" + user);
28+
} finally {
29+
if (session != null) {
30+
session.close();
31+
}
32+
}
33+
}
34+
35+
@Override
36+
public User get(Long id) {
37+
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
38+
return session.get(User.class, id);
39+
} catch (Exception e) {
40+
throw new DataProcessingException("can't get user by id:" + id, e);
41+
}
42+
}
43+
44+
@Override
45+
public Optional<User> findByEmail(String email) {
46+
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
47+
return session.createQuery("FROM User u where u.email = :email", User.class)
48+
.setParameter("email", email)
49+
.uniqueResultOptional();
50+
} catch (HibernateException e) {
51+
throw new DataProcessingException("can't find user by email " + email, e);
52+
}
53+
}
54+
}
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 RuntimeException {
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 RuntimeException {
4+
public RegistrationException(String message) {
5+
super(message);
6+
}
7+
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package mate.academy.model;
2+
3+
import jakarta.persistence.Column;
4+
import jakarta.persistence.Entity;
5+
import jakarta.persistence.GeneratedValue;
6+
import jakarta.persistence.GenerationType;
7+
import jakarta.persistence.Id;
8+
import jakarta.persistence.Table;
9+
10+
@Entity
11+
@Table(name = "users")
12+
public class User {
13+
@Id
14+
@GeneratedValue(strategy = GenerationType.IDENTITY)
15+
private Long id;
16+
@Column(unique = true)
17+
private String email;
18+
private String password;
19+
private byte[] salt;
20+
21+
public User() {
22+
}
23+
24+
public User(String email, String password) {
25+
this.email = email;
26+
this.password = password;
27+
}
28+
29+
public Long getId() {
30+
return id;
31+
}
32+
33+
public void setId(Long id) {
34+
this.id = id;
35+
}
36+
37+
public String getEmail() {
38+
return email;
39+
}
40+
41+
public void setEmail(String email) {
42+
this.email = email;
43+
}
44+
45+
public String getPassword() {
46+
return password;
47+
}
48+
49+
public void setPassword(String password) {
50+
this.password = password;
51+
}
52+
53+
public byte[] getSalt() {
54+
return salt;
55+
}
56+
57+
public void setSalt(byte[] salt) {
58+
this.salt = salt;
59+
}
60+
61+
@Override
62+
public String toString() {
63+
return "User{"
64+
+ "id=" + id
65+
+ ", email=" + email + '\''
66+
+ '}';
67+
}
68+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package mate.academy.security;
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+
/**
11+
* We should register a new user. The new user entity will contain the email and password
12+
* @param email - user email. should be unique for each user
13+
* @param password - user password
14+
* @return new user instance
15+
*/
16+
User register(String email, String password) throws RegistrationException;
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package mate.academy.security;
2+
3+
import mate.academy.exception.AuthenticationException;
4+
import mate.academy.exception.RegistrationException;
5+
import mate.academy.model.User;
6+
7+
public class AuthenticationServiceImpl implements AuthenticationService {
8+
@Override
9+
public User login(String email, String password) throws AuthenticationException {
10+
return null;
11+
}
12+
13+
@Override
14+
public User register(String email, String password) throws RegistrationException {
15+
return null;
16+
}
17+
}
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: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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.model.User;
7+
import mate.academy.service.UserService;
8+
9+
public class UserServiceImpl implements UserService {
10+
@Inject
11+
private UserDao userDao;
12+
13+
@Override
14+
public User add(User user) {
15+
return userDao.add(user);
16+
}
17+
18+
@Override
19+
public Optional<User> findByEmail(String email) {
20+
return userDao.findByEmail(email);
21+
}
22+
}

0 commit comments

Comments
 (0)