Skip to content

Commit 4079b6d

Browse files
author
Mateusz
committed
First solution
1 parent bd5a8f1 commit 4079b6d

File tree

12 files changed

+378
-35
lines changed

12 files changed

+378
-35
lines changed

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

Lines changed: 56 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2,54 +2,79 @@
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 {
1318
public static void main(String[] args) {
14-
MovieService movieService = null;
19+
final AuthenticationService authService = (AuthenticationService)
20+
Injector.getInstance("mate.academy")
21+
.getInstance(AuthenticationService.class);
22+
final MovieService movieService = (MovieService)
23+
Injector.getInstance("mate.academy")
24+
.getInstance(MovieService.class);
25+
26+
try {
27+
User registered = authService.register("user@example.com", "pass123");
28+
System.out.println("Zarejestrowano użytkownika: " + registered);
29+
User logged = authService.login("user@example.com", "pass123");
30+
System.out.println("Zalogowano użytkownika: " + logged);
31+
} catch (RegistrationException | AuthenticationException e) {
32+
e.printStackTrace();
33+
}
1534

1635
Movie fastAndFurious = new Movie("Fast and Furious");
17-
fastAndFurious.setDescription("An action film about street racing, heists, and spies.");
36+
fastAndFurious.setDescription("Film akcji o wyścigach ulicznych, napadach i agentach.");
1837
movieService.add(fastAndFurious);
19-
System.out.println(movieService.get(fastAndFurious.getId()));
20-
movieService.getAll().forEach(System.out::println);
21-
22-
CinemaHall firstCinemaHall = new CinemaHall();
23-
firstCinemaHall.setCapacity(100);
24-
firstCinemaHall.setDescription("first hall with capacity 100");
25-
26-
CinemaHall secondCinemaHall = new CinemaHall();
27-
secondCinemaHall.setCapacity(200);
28-
secondCinemaHall.setDescription("second hall with capacity 200");
38+
System.out.println("Pobierz film: " + movieService.get(fastAndFurious.getId()));
39+
movieService.getAll().forEach(m -> System.out.println("Lista filmów: " + m));
2940

30-
CinemaHallService cinemaHallService = null;
31-
cinemaHallService.add(firstCinemaHall);
32-
cinemaHallService.add(secondCinemaHall);
41+
final CinemaHallService cinemaHallService = (CinemaHallService)
42+
Injector.getInstance("mate.academy")
43+
.getInstance(CinemaHallService.class);
44+
CinemaHall firstHall = new CinemaHall();
45+
firstHall.setCapacity(100);
46+
firstHall.setDescription("Pierwsza sala, 100 miejsc");
47+
cinemaHallService.add(firstHall);
3348

34-
System.out.println(cinemaHallService.getAll());
35-
System.out.println(cinemaHallService.get(firstCinemaHall.getId()));
49+
CinemaHall secondHall = new CinemaHall();
50+
secondHall.setCapacity(200);
51+
secondHall.setDescription("Druga sala, 200 miejsc");
52+
cinemaHallService.add(secondHall);
3653

37-
MovieSession tomorrowMovieSession = new MovieSession();
38-
tomorrowMovieSession.setCinemaHall(firstCinemaHall);
39-
tomorrowMovieSession.setMovie(fastAndFurious);
40-
tomorrowMovieSession.setShowTime(LocalDateTime.now().plusDays(1L));
54+
System.out.println("Wszystkie sale: " + cinemaHallService.getAll());
55+
System.out.println("Sala o id=" + firstHall.getId() + ": "
56+
+ cinemaHallService.get(firstHall.getId()));
4157

42-
MovieSession yesterdayMovieSession = new MovieSession();
43-
yesterdayMovieSession.setCinemaHall(firstCinemaHall);
44-
yesterdayMovieSession.setMovie(fastAndFurious);
45-
yesterdayMovieSession.setShowTime(LocalDateTime.now().minusDays(1L));
58+
final MovieSessionService movieSessionService = (MovieSessionService)
59+
Injector.getInstance("mate.academy")
60+
.getInstance(MovieSessionService.class);
61+
MovieSession tomorrowSession = new MovieSession();
62+
tomorrowSession.setMovie(fastAndFurious);
63+
tomorrowSession.setCinemaHall(firstHall);
64+
tomorrowSession.setShowTime(LocalDateTime.now().plusDays(1));
65+
movieSessionService.add(tomorrowSession);
4666

47-
MovieSessionService movieSessionService = null;
48-
movieSessionService.add(tomorrowMovieSession);
49-
movieSessionService.add(yesterdayMovieSession);
67+
MovieSession yesterdaySession = new MovieSession();
68+
yesterdaySession.setMovie(fastAndFurious);
69+
yesterdaySession.setCinemaHall(firstHall);
70+
yesterdaySession.setShowTime(LocalDateTime.now().minusDays(1));
71+
movieSessionService.add(yesterdaySession);
5072

51-
System.out.println(movieSessionService.get(yesterdayMovieSession.getId()));
52-
System.out.println(movieSessionService.findAvailableSessions(
53-
fastAndFurious.getId(), LocalDate.now()));
73+
System.out.println("Sesja wczorajsza: "
74+
+ movieSessionService.get(yesterdaySession.getId()));
75+
System.out.println("Dostępne sesje na dziś dla filmu id="
76+
+ fastAndFurious.getId()
77+
+ ": " + movieSessionService.findAvailableSessions(fastAndFurious.getId(),
78+
LocalDate.now()));
5479
}
5580
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
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> findByEmail(String email);
10+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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+
import org.hibernate.query.Query;
12+
13+
@Dao
14+
public class UserDaoImpl implements UserDao {
15+
@Override
16+
public User add(User user) {
17+
Transaction tx = null;
18+
try (Session session = HibernateUtil.getSessionFactory()
19+
.openSession()) {
20+
tx = session.beginTransaction();
21+
session.persist(user);
22+
tx.commit();
23+
return user;
24+
} catch (Exception e) {
25+
if (tx != null) {
26+
tx.rollback();
27+
}
28+
throw new DataProcessingException("Can't add user: "
29+
+ user, e);
30+
}
31+
}
32+
33+
@Override
34+
public Optional<User> findByEmail(String email) {
35+
try (Session session = HibernateUtil.getSessionFactory()
36+
.openSession()) {
37+
Query<User> query = session.createQuery(
38+
"FROM User u WHERE u.email = :email", User.class);
39+
query.setParameter("email", email);
40+
return query.uniqueResultOptional();
41+
} catch (Exception e) {
42+
throw new DataProcessingException("Error finding user by email: "
43+
+ email, e);
44+
}
45+
}
46+
}
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+
}

src/main/java/mate/academy/model/MovieSession.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import jakarta.persistence.GeneratedValue;
66
import jakarta.persistence.GenerationType;
77
import jakarta.persistence.Id;
8+
import jakarta.persistence.JoinColumn;
89
import jakarta.persistence.ManyToOne;
910
import jakarta.persistence.Table;
1011
import java.time.LocalDateTime;
@@ -15,18 +16,22 @@ public class MovieSession {
1516
@Id
1617
@GeneratedValue(strategy = GenerationType.IDENTITY)
1718
private Long id;
19+
1820
@ManyToOne(fetch = FetchType.LAZY)
21+
@JoinColumn(name = "movie_id", nullable = false)
1922
private Movie movie;
23+
2024
@ManyToOne(fetch = FetchType.LAZY)
25+
@JoinColumn(name = "cinema_hall_id", nullable = false)
2126
private CinemaHall cinemaHall;
27+
2228
private LocalDateTime showTime;
2329

24-
public Long getId() {
25-
return id;
30+
public MovieSession() {
2631
}
2732

28-
public void setId(Long id) {
29-
this.id = id;
33+
public Long getId() {
34+
return id;
3035
}
3136

3237
public Movie getMovie() {
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
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+
import jakarta.persistence.UniqueConstraint;
10+
11+
@Entity
12+
@Table(name = "users", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
13+
public class User {
14+
@Id
15+
@GeneratedValue(strategy = GenerationType.IDENTITY)
16+
private Long id;
17+
18+
@Column(nullable = false, unique = true)
19+
private String email;
20+
21+
@Column(name = "password_hash", nullable = false)
22+
private String passwordHash;
23+
24+
@Column(nullable = false)
25+
private String salt;
26+
27+
public User() {
28+
}
29+
30+
public Long getId() {
31+
return id;
32+
}
33+
34+
public void setId(Long id) {
35+
this.id = id;
36+
}
37+
38+
public String getEmail() {
39+
return email;
40+
}
41+
42+
public void setEmail(String email) {
43+
this.email = email;
44+
}
45+
46+
public String getPasswordHash() {
47+
return passwordHash;
48+
}
49+
50+
public void setPasswordHash(String passwordHash) {
51+
this.passwordHash = passwordHash;
52+
}
53+
54+
public String getSalt() {
55+
return salt;
56+
}
57+
58+
public void setSalt(String salt) {
59+
this.salt = salt;
60+
}
61+
62+
@Override
63+
public String toString() {
64+
return "User{id=" + id + ", email='" + email + "'}";
65+
}
66+
}
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+
}

0 commit comments

Comments
 (0)