Skip to content

Commit 38a95fe

Browse files
Exam: HTML, CSS, Servlets & Web Server - Solution
1 parent d637344 commit 38a95fe

File tree

227 files changed

+82979
-70
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

227 files changed

+82979
-70
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.itbulls.learnit.onlinestore.core.facades;
2+
3+
import com.itbulls.learnit.onlinestore.persistence.enteties.User;
4+
5+
public interface UserFacade {
6+
7+
void registerUser(User user, String partnerCode);
8+
9+
User getUserByEmail(String email);
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.itbulls.learnit.onlinestore.core.facades.impl;
2+
3+
import static com.itbulls.learnit.onlinestore.persistence.dto.RoleDto.CUSTOMER_ROLE_NAME;
4+
5+
import com.itbulls.learnit.onlinestore.core.facades.UserFacade;
6+
import com.itbulls.learnit.onlinestore.core.services.AffiliateMarketingService;
7+
import com.itbulls.learnit.onlinestore.core.services.impl.DefaultAffiliateMarketingService;
8+
import com.itbulls.learnit.onlinestore.persistence.dao.UserDao;
9+
import com.itbulls.learnit.onlinestore.persistence.dao.impl.MySqlJdbcUserDao;
10+
import com.itbulls.learnit.onlinestore.persistence.dto.converters.UserDtoToUserConverter;
11+
import com.itbulls.learnit.onlinestore.persistence.enteties.User;
12+
13+
public class DefaultUserFacade implements UserFacade {
14+
15+
private static DefaultUserFacade instance;
16+
private UserDao userDao = new MySqlJdbcUserDao();
17+
private UserDtoToUserConverter userConverter = new UserDtoToUserConverter();
18+
private AffiliateMarketingService marketingService = new DefaultAffiliateMarketingService();
19+
20+
public static synchronized DefaultUserFacade getInstance() {
21+
if (instance == null) {
22+
instance = new DefaultUserFacade();
23+
}
24+
25+
return instance;
26+
}
27+
28+
@Override
29+
public void registerUser(User user, String referrerCode) {
30+
user.setRoleName(CUSTOMER_ROLE_NAME);
31+
user.setPartnerCode(marketingService.generateUniquePartnerCode());
32+
user.setReferrerUser(userConverter.convertUserDtoToUser(userDao.getUserByPartnerCode(referrerCode)));
33+
userDao.saveUser(userConverter.convertUserToUserDto(user));
34+
}
35+
36+
37+
@Override
38+
public User getUserByEmail(String email) {
39+
return userConverter.convertUserDtoToUser(userDao.getUserByEmail(email));
40+
}
41+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.itbulls.learnit.onlinestore.core.services;
2+
3+
public interface AffiliateMarketingService {
4+
5+
String generateUniquePartnerCode();
6+
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.itbulls.learnit.onlinestore.core.services.impl;
2+
3+
import java.util.Random;
4+
5+
import com.itbulls.learnit.onlinestore.core.services.AffiliateMarketingService;
6+
import com.itbulls.learnit.onlinestore.persistence.dao.UserDao;
7+
import com.itbulls.learnit.onlinestore.persistence.dao.impl.MySqlJdbcUserDao;
8+
9+
public class DefaultAffiliateMarketingService implements AffiliateMarketingService {
10+
11+
private static final int MAX_CHARS_IN_PARTNER_CODE = 6;
12+
13+
private UserDao userDao = new MySqlJdbcUserDao();
14+
15+
@Override
16+
public String generateUniquePartnerCode() {
17+
StringBuilder sb = new StringBuilder();
18+
char[] charactersForPartnerCode = {'A', 'B', 'C', 'D', 'E', 'F', 'G',
19+
'H', 'I', 'J', 'K', 'L', 'M', 'N',
20+
'O', 'P', 'Q', 'R', 'S', 'T', 'U',
21+
'V', 'W', 'X', 'Y', 'Z', '0', '1',
22+
'2', '3', '4', '5', '6', '7', '8',
23+
'9'};
24+
Random r = new Random();
25+
for (int i = 0; i < MAX_CHARS_IN_PARTNER_CODE; i++) {
26+
sb.append(charactersForPartnerCode[r.nextInt(charactersForPartnerCode.length)]);
27+
}
28+
29+
30+
if (userDao.getUserByPartnerCode(sb.toString()) != null) {
31+
return this.generateUniquePartnerCode();
32+
} else {
33+
return sb.toString();
34+
}
35+
}
36+
37+
}

‎online-store.persistence/pom.xml

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
<?xml version="1.0" encoding="UTF-8"?>
2-
<project xmlns="http://maven.apache.org/POM/4.0.0"
3-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5-
<parent>
6-
<groupId>com.itbulls.learnit</groupId>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<parent>
4+
<groupId>com.itbulls.learnit</groupId>
75
<artifactId>online-store</artifactId>
8-
<version>${project.version}</version>
9-
</parent>
10-
<modelVersion>4.0.0</modelVersion>
6+
<version>${project.version}</version>
7+
</parent>
8+
<modelVersion>4.0.0</modelVersion>
119

1210

13-
<groupId>com.learnit.itbulls</groupId>
14-
<artifactId>online-store.persistence</artifactId>
15-
<version>${project.version}</version>
16-
<packaging>jar</packaging>
11+
<groupId>com.learnit.itbulls</groupId>
12+
<artifactId>online-store.persistence</artifactId>
13+
<version>${project.version}</version>
14+
<packaging>jar</packaging>
15+
16+
<dependencies>
17+
<dependency>
18+
<groupId>mysql</groupId>
19+
<artifactId>mysql-connector-java</artifactId>
20+
<version>8.0.28</version>
21+
</dependency>
22+
</dependencies>
1723

18-
1924

2025
</project>

‎online-store.persistence/src/main/java/com/itbulls/learnit/onlinestore/persistence/dao/RoleDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,6 @@ public interface RoleDao {
66

77
RoleDto getRoleById(int id);
88

9+
RoleDto getRoleByRoleName(String roleName);
10+
911
}

‎online-store.persistence/src/main/java/com/itbulls/learnit/onlinestore/persistence/dao/UserDao.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@ public interface UserDao {
1414

1515
UserDto getUserById(int id);
1616

17+
UserDto getUserByPartnerCode(String partnerCode);
18+
1719
}

‎online-store.persistence/src/main/java/com/itbulls/learnit/onlinestore/persistence/dao/impl/MySqlJdbcRoleDao.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,25 @@ public RoleDto getRoleById(int id) {
3030
return null;
3131
}
3232

33+
@Override
34+
public RoleDto getRoleByRoleName(String roleName) {
35+
try (var conn = DBUtils.getConnection();
36+
var ps = conn.prepareStatement("SELECT * FROM role WHERE role_name = ?")) {
37+
ps.setString(1, roleName);
38+
39+
try (var rs = ps.executeQuery()) {
40+
if (rs.next()) {
41+
RoleDto role = new RoleDto();
42+
role.setId(rs.getInt("id"));
43+
role.setRoleName(rs.getString("role_name"));
44+
return role;
45+
}
46+
}
47+
48+
} catch (SQLException e) {
49+
e.printStackTrace();
50+
}
51+
return null;
52+
}
53+
3354
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.itbulls.learnit.onlinestore.persistence.dao.impl;
22

3+
import java.sql.ResultSet;
34
import java.sql.SQLException;
45
import java.util.ArrayList;
56
import java.util.List;
@@ -10,34 +11,24 @@
1011
import com.itbulls.learnit.onlinestore.persistence.utils.DBUtils;
1112

1213
public class MySqlJdbcUserDao implements UserDao {
13-
14+
1415
private RoleDao roleDao;
15-
16+
1617
{
1718
roleDao = new MySqlJdbcRoleDao();
1819
}
1920

2021
@Override
2122
public UserDto getUserById(int id) {
22-
try (var conn = DBUtils.getConnection();
23-
var ps = conn.prepareStatement("SELECT * FROM user WHERE id = ?")) {
24-
23+
try (var conn = DBUtils.getConnection(); var ps = conn.prepareStatement("SELECT * FROM user WHERE id = ?")) {
24+
2525
ps.setInt(1, id);
2626
try (var rs = ps.executeQuery()) {
2727
if (rs.next()) {
28-
UserDto user = new UserDto();
29-
user.setId(rs.getInt("id"));
30-
user.setFirstName(rs.getString("first_name"));
31-
user.setLastName(rs.getString("last_name"));
32-
user.setEmail(rs.getString("email"));
33-
user.setRoleDto(roleDao.getRoleById(rs.getInt("fk_user_role")));
34-
user.setMoney(rs.getBigDecimal("money"));
35-
user.setCreditCard(rs.getString("credit_card"));
36-
user.setPassword(rs.getString("password"));
37-
return user;
28+
return parseUserDtoFromResultSet(rs);
3829
}
3930
}
40-
31+
4132
} catch (SQLException e) {
4233
e.printStackTrace();
4334
}
@@ -46,49 +37,49 @@ public UserDto getUserById(int id) {
4637

4738
@Override
4839
public UserDto getUserByEmail(String email) {
49-
try (var conn = DBUtils.getConnection();
50-
var ps = conn.prepareStatement("SELECT * FROM user WHERE email = ?")) {
51-
40+
try (var conn = DBUtils.getConnection(); var ps = conn.prepareStatement("SELECT * FROM user WHERE email = ?")) {
41+
5242
ps.setString(1, email);
5343
try (var rs = ps.executeQuery()) {
5444
if (rs.next()) {
55-
UserDto user = new UserDto();
56-
user.setId(rs.getInt("id"));
57-
user.setFirstName(rs.getString("first_name"));
58-
user.setLastName(rs.getString("last_name"));
59-
user.setEmail(rs.getString("email"));
60-
user.setRoleDto(roleDao.getRoleById(rs.getInt("fk_user_role")));
61-
user.setMoney(rs.getBigDecimal("money"));
62-
user.setCreditCard(rs.getString("credit_card"));
63-
user.setPassword(rs.getString("password"));
64-
return user;
45+
return parseUserDtoFromResultSet(rs);
6546
}
6647
}
67-
48+
6849
} catch (SQLException e) {
6950
e.printStackTrace();
7051
}
7152
return null;
7253
}
7354

74-
7555
@Override
7656
public boolean saveUser(UserDto user) {
7757
try (var conn = DBUtils.getConnection();
7858
var ps = conn.prepareStatement("INSERT INTO user (first_name, last_name, email, fk_user_role, "
79-
+ "money, credit_card, password) VALUES (?, ?, ?, ?, ?, ?, ?);")) {
59+
+ "money, credit_card, password, partner_code, referrer_user_id) "
60+
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);")) {
8061
ps.setString(1, user.getFirstName());
8162
ps.setString(2, user.getLastName());
8263
ps.setString(3, user.getEmail());
8364
if (user.getRoleDto() != null && user.getRoleDto().getId() != null) {
8465
ps.setInt(4, user.getRoleDto().getId());
66+
} else if (user.getRoleDto() != null && !user.getRoleDto().getRoleName().isEmpty()) {
67+
ps.setInt(4, roleDao.getRoleByRoleName(user.getRoleDto().getRoleName()).getId());
8568
} else {
8669
ps.setNull(4, java.sql.Types.NULL);
8770
}
8871
ps.setBigDecimal(5, user.getMoney());
8972
ps.setString(6, user.getCreditCard());
9073
ps.setString(7, user.getPassword());
74+
ps.setString(8, user.getPartnerCode());
75+
76+
if (user.getReferrerUser() != null) {
77+
ps.setInt(9, user.getReferrerUser().getId());
78+
} else {
79+
ps.setNull(9, java.sql.Types.NULL);
80+
}
9181

82+
9283
ps.executeUpdate();
9384
return true;
9485
} catch (SQLException e) {
@@ -97,33 +88,60 @@ public boolean saveUser(UserDto user) {
9788
}
9889
}
9990

100-
101-
10291
@Override
10392
public List<UserDto> getUsers() {
10493
try (var conn = DBUtils.getConnection();
10594
var ps = conn.prepareStatement("SELECT * FROM user");
10695
var rs = ps.executeQuery()) {
10796
List<UserDto> users = new ArrayList<>();
108-
97+
10998
while (rs.next()) {
110-
UserDto user = new UserDto();
111-
user.setId(rs.getInt("id"));
112-
user.setFirstName(rs.getString("first_name"));
113-
user.setLastName(rs.getString("last_name"));
114-
user.setEmail(rs.getString("email"));
115-
user.setRoleDto(roleDao.getRoleById(rs.getInt("fk_user_role")));
116-
user.setMoney(rs.getBigDecimal("money"));
117-
user.setCreditCard(rs.getString("credit_card"));
118-
user.setPassword(rs.getString("password"));
99+
UserDto user = parseUserDtoFromResultSet(rs);
119100
users.add(user);
120101
}
121-
102+
122103
return users;
123104
} catch (SQLException e) {
124105
e.printStackTrace();
125106
}
126107
return null;
127108
}
128109

110+
@Override
111+
public UserDto getUserByPartnerCode(String partnerCode) {
112+
try (var conn = DBUtils.getConnection();
113+
var ps = conn.prepareStatement("SELECT * FROM user WHERE partner_code = ?")) {
114+
115+
ps.setString(1, partnerCode);
116+
try (var rs = ps.executeQuery()) {
117+
if (rs.next()) {
118+
return parseUserDtoFromResultSet(rs);
119+
}
120+
}
121+
122+
} catch (SQLException e) {
123+
e.printStackTrace();
124+
}
125+
return null;
126+
}
127+
128+
private UserDto parseUserDtoFromResultSet(ResultSet rs) {
129+
UserDto user = new UserDto();
130+
try {
131+
user.setId(rs.getInt("id"));
132+
user.setFirstName(rs.getString("first_name"));
133+
user.setLastName(rs.getString("last_name"));
134+
user.setEmail(rs.getString("email"));
135+
user.setRoleDto(roleDao.getRoleById(rs.getInt("fk_user_role")));
136+
user.setMoney(rs.getBigDecimal("money"));
137+
user.setCreditCard(rs.getString("credit_card"));
138+
user.setPassword(rs.getString("password"));
139+
user.setPartnerCode(rs.getString("partner_code"));
140+
user.setReferrerUser(this.getUserById(rs.getInt("referrer_user_id")));
141+
} catch (SQLException e) {
142+
e.printStackTrace();
143+
}
144+
return user;
145+
}
146+
129147
}

‎online-store.persistence/src/main/java/com/itbulls/learnit/onlinestore/persistence/dto/RoleDto.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.itbulls.learnit.onlinestore.persistence.dto;
22

33
public class RoleDto {
4+
5+
public static final String ADMIN_ROLE_NAME = "ROLE_ADMIN";
6+
public static final String CUSTOMER_ROLE_NAME = "ROLE_CUSTOMER";
47

58
private Integer id;
69
private String roleName;

0 commit comments

Comments
 (0)