Skip to content

Commit 4d59ed4

Browse files
committed
1
1 parent 765e1e1 commit 4d59ed4

31 files changed

+928
-126
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ jobs:
77
runs-on: ubuntu-latest
88

99
steps:
10-
- uses: actions/checkout@v2
10+
- uses: actions/checkout@v3
1111
- name: Set up JDK 17
12-
uses: actions/setup-java@v2
12+
uses: actions/setup-java@v3
1313
with:
1414
java-version: '17'
15-
distribution: 'adopt'
15+
distribution: 'temurin'
1616
cache: maven
1717
- name: Build with Maven
1818
run: mvn --batch-mode --update-snapshots verify
Lines changed: 47 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,54 @@
11
package mate.academy;
22

3-
import java.time.LocalDate;
4-
import java.time.LocalDateTime;
5-
import mate.academy.model.CinemaHall;
6-
import mate.academy.model.Movie;
7-
import mate.academy.model.MovieSession;
8-
import mate.academy.service.CinemaHallService;
9-
import mate.academy.service.MovieService;
10-
import mate.academy.service.MovieSessionService;
3+
import mate.academy.lib.Injector;
4+
import mate.academy.model.User;
5+
import mate.academy.service.AuthenticationService;
6+
import mate.academy.service.UserService;
117

128
public class Main {
9+
private static final Injector injector = Injector.getInstance("mate.academy");
10+
1311
public static void main(String[] args) {
14-
MovieService movieService = null;
15-
16-
Movie fastAndFurious = new Movie("Fast and Furious");
17-
fastAndFurious.setDescription("An action film about street racing, heists, and spies.");
18-
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");
29-
30-
CinemaHallService cinemaHallService = null;
31-
cinemaHallService.add(firstCinemaHall);
32-
cinemaHallService.add(secondCinemaHall);
33-
34-
System.out.println(cinemaHallService.getAll());
35-
System.out.println(cinemaHallService.get(firstCinemaHall.getId()));
36-
37-
MovieSession tomorrowMovieSession = new MovieSession();
38-
tomorrowMovieSession.setCinemaHall(firstCinemaHall);
39-
tomorrowMovieSession.setMovie(fastAndFurious);
40-
tomorrowMovieSession.setShowTime(LocalDateTime.now().plusDays(1L));
41-
42-
MovieSession yesterdayMovieSession = new MovieSession();
43-
yesterdayMovieSession.setCinemaHall(firstCinemaHall);
44-
yesterdayMovieSession.setMovie(fastAndFurious);
45-
yesterdayMovieSession.setShowTime(LocalDateTime.now().minusDays(1L));
46-
47-
MovieSessionService movieSessionService = null;
48-
movieSessionService.add(tomorrowMovieSession);
49-
movieSessionService.add(yesterdayMovieSession);
50-
51-
System.out.println(movieSessionService.get(yesterdayMovieSession.getId()));
52-
System.out.println(movieSessionService.findAvailableSessions(
53-
fastAndFurious.getId(), LocalDate.now()));
12+
13+
// 0. INJECTING
14+
final var userService
15+
= (UserService) injector.getInstance(UserService.class);
16+
final var authenticationService
17+
= (AuthenticationService) injector.getInstance(AuthenticationService.class);
18+
19+
// 1. CREATING
20+
// User
21+
User user1 = new User();
22+
user1.setEmail("user1@gmail.com");
23+
user1.setPassword("password");
24+
25+
User user2 = new User();
26+
user2.setEmail("user2@gmail.com");
27+
user2.setPassword("password");
28+
29+
User user3 = new User();
30+
user3.setEmail("user3@gmail.com");
31+
user3.setPassword("password");
32+
33+
// 2. ADDING
34+
// User
35+
userService.add(user1);
36+
userService.add(user2);
37+
userService.add(user3);
38+
39+
// 3. GETTING BY EMAIL
40+
// User
41+
System.out.println("\n *** CREATE AND READ FUNCTIONS TEST *** \n");
42+
System.out.println(userService.findByEmail("user1@gmail.com"));
43+
System.out.println(userService.findByEmail("user2@gmail.com"));
44+
System.out.println(userService.findByEmail("user3@gmail.com"));
45+
46+
// 4. REGISTRATION
47+
// Correct
48+
authenticationService.registerUser("jan@gmail.com", "haslojana");
49+
System.out.println(userService.findByEmail("jan@gmail.com"));
50+
51+
// 5. LOGIN
52+
System.out.println(authenticationService.login("jan@gmail.com", "haslojana"));
5453
}
5554
}

src/main/java/mate/academy/dao/CinemaHallDao.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,8 @@ public interface CinemaHallDao {
1010
Optional<CinemaHall> get(Long id);
1111

1212
List<CinemaHall> getAll();
13+
14+
boolean update(CinemaHall cinemaHall);
15+
16+
boolean delete(Long id);
1317
}

src/main/java/mate/academy/dao/MovieDao.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,8 @@ public interface MovieDao {
1010
Optional<Movie> get(Long id);
1111

1212
List<Movie> getAll();
13+
14+
boolean update(Movie movie);
15+
16+
boolean delete(Long id);
1317
}

src/main/java/mate/academy/dao/MovieSessionDao.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,13 @@
66
import mate.academy.model.MovieSession;
77

88
public interface MovieSessionDao {
9-
List<MovieSession> findAvailableSessions(Long movieId, LocalDate date);
9+
MovieSession add(MovieSession movieSession);
1010

1111
Optional<MovieSession> get(Long id);
1212

13-
MovieSession add(MovieSession session);
13+
List<MovieSession> findAvailableSessions(Long movieId, LocalDate date);
14+
15+
boolean update(MovieSession movieSession);
16+
17+
boolean delete(Long id);
1418
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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(String email);
10+
}
11+
Lines changed: 55 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package mate.academy.dao.impl;
22

3-
import jakarta.persistence.criteria.CriteriaQuery;
43
import java.util.List;
54
import java.util.Optional;
65
import mate.academy.dao.CinemaHallDao;
@@ -9,14 +8,15 @@
98
import mate.academy.model.CinemaHall;
109
import mate.academy.util.HibernateUtil;
1110
import org.hibernate.Session;
11+
import org.hibernate.SessionFactory;
1212
import org.hibernate.Transaction;
1313

1414
@Dao
1515
public class CinemaHallDaoImpl implements CinemaHallDao {
1616
@Override
1717
public CinemaHall add(CinemaHall cinemaHall) {
18-
Session session = null;
1918
Transaction transaction = null;
19+
Session session = null;
2020
try {
2121
session = HibernateUtil.getSessionFactory().openSession();
2222
transaction = session.beginTransaction();
@@ -27,7 +27,7 @@ public CinemaHall add(CinemaHall cinemaHall) {
2727
if (transaction != null) {
2828
transaction.rollback();
2929
}
30-
throw new DataProcessingException("Can't insert cinema hall: " + cinemaHall, e);
30+
throw new DataProcessingException("Can't insert cinemaHall " + cinemaHall, e);
3131
} finally {
3232
if (session != null) {
3333
session.close();
@@ -40,19 +40,65 @@ public Optional<CinemaHall> get(Long id) {
4040
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
4141
return Optional.ofNullable(session.get(CinemaHall.class, id));
4242
} catch (Exception e) {
43-
throw new DataProcessingException("Can't get a cinema hall by id: " + id, e);
43+
throw new DataProcessingException("Can't get a cinemaHall by id: " + id, e);
4444
}
4545
}
4646

4747
@Override
4848
public List<CinemaHall> getAll() {
4949
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
50-
CriteriaQuery<CinemaHall> criteriaQuery = session.getCriteriaBuilder()
51-
.createQuery(CinemaHall.class);
52-
criteriaQuery.from(CinemaHall.class);
53-
return session.createQuery(criteriaQuery).getResultList();
50+
return session.createQuery("from CinemaHall").list();
51+
}
52+
}
53+
54+
@Override
55+
public boolean update(CinemaHall cinemaHall) {
56+
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
57+
Session session = null;
58+
Transaction transaction = null;
59+
60+
try {
61+
session = sessionFactory.openSession();
62+
transaction = session.beginTransaction();
63+
session.update(cinemaHall);
64+
transaction.commit();
65+
} catch (Exception e) {
66+
if (transaction != null) {
67+
transaction.rollback();
68+
}
69+
throw new DataProcessingException("update " + cinemaHall + " failed", e);
70+
} finally {
71+
if (session != null) {
72+
session.close();
73+
}
74+
}
75+
76+
return get(cinemaHall.getId()).get().equals(cinemaHall);
77+
}
78+
79+
@Override
80+
public boolean delete(Long id) {
81+
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
82+
Session session = null;
83+
Transaction transaction = null;
84+
85+
try {
86+
session = sessionFactory.openSession();
87+
transaction = session.beginTransaction();
88+
session.delete(get(id)
89+
.orElseThrow(() -> new RuntimeException("no object with id " + id)));
90+
transaction.commit();
5491
} catch (Exception e) {
55-
throw new DataProcessingException("Can't get all cinema halls", e);
92+
if (transaction != null) {
93+
transaction.rollback();
94+
}
95+
throw new DataProcessingException("removing movie with id: "
96+
+ id + " from database failed", e);
97+
} finally {
98+
if (session != null) {
99+
session.close();
100+
}
56101
}
102+
return get(id).isEmpty();
57103
}
58104
}

src/main/java/mate/academy/dao/impl/MovieDaoImpl.java

Lines changed: 52 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package mate.academy.dao.impl;
22

3-
import jakarta.persistence.criteria.CriteriaQuery;
43
import java.util.List;
54
import java.util.Optional;
65
import mate.academy.dao.MovieDao;
@@ -9,6 +8,7 @@
98
import mate.academy.model.Movie;
109
import mate.academy.util.HibernateUtil;
1110
import org.hibernate.Session;
11+
import org.hibernate.SessionFactory;
1212
import org.hibernate.Transaction;
1313

1414
@Dao
@@ -47,12 +47,58 @@ public Optional<Movie> get(Long id) {
4747
@Override
4848
public List<Movie> getAll() {
4949
try (Session session = HibernateUtil.getSessionFactory().openSession()) {
50-
CriteriaQuery<Movie> criteriaQuery = session.getCriteriaBuilder()
51-
.createQuery(Movie.class);
52-
criteriaQuery.from(Movie.class);
53-
return session.createQuery(criteriaQuery).getResultList();
50+
return session.createQuery("from Movie").list();
51+
}
52+
}
53+
54+
@Override
55+
public boolean update(Movie movie) {
56+
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
57+
Session session = null;
58+
Transaction transaction = null;
59+
60+
try {
61+
session = sessionFactory.openSession();
62+
transaction = session.beginTransaction();
63+
session.update(movie);
64+
transaction.commit();
65+
} catch (Exception e) {
66+
if (transaction != null) {
67+
transaction.rollback();
68+
}
69+
throw new DataProcessingException("updating " + movie + " failed", e);
70+
} finally {
71+
if (session != null) {
72+
session.close();
73+
}
74+
}
75+
76+
return get(movie.getId()).get().equals(movie);
77+
}
78+
79+
@Override
80+
public boolean delete(Long id) {
81+
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
82+
Session session = null;
83+
Transaction transaction = null;
84+
85+
try {
86+
session = sessionFactory.openSession();
87+
transaction = session.beginTransaction();
88+
session.delete(get(id)
89+
.orElseThrow(() -> new RuntimeException("no object with id " + id)));
90+
transaction.commit();
5491
} catch (Exception e) {
55-
throw new DataProcessingException("Can't get all movies", e);
92+
if (transaction != null) {
93+
transaction.rollback();
94+
}
95+
throw new DataProcessingException("removing movie with id: "
96+
+ id + " from database failed", e);
97+
} finally {
98+
if (session != null) {
99+
session.close();
100+
}
56101
}
102+
return get(id).isEmpty();
57103
}
58104
}

0 commit comments

Comments
 (0)