Skip to content
This repository was archived by the owner on Jun 11, 2022. It is now read-only.

Commit f39cb32

Browse files
committed
Add User model and Dao
1 parent c738e72 commit f39cb32

File tree

4 files changed

+197
-7
lines changed

4 files changed

+197
-7
lines changed

sakila-min.sql

+14-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
11
-- CREDITS: https://github.com/math-g/sakila-h2
22

3+
CREATE CACHED TABLE PUBLIC.USER(
4+
USER_ID INT NOT NULL,
5+
NAME VARCHAR(45) NOT NULL,
6+
TOKEN VARCHAR(64) NOT NULL,
7+
USED INT NOT NULL DEFAULT 0,
8+
`LIMIT` INT NOT NULL,
9+
DATE_REGISTERED TIMESTAMP NOT NULL,
10+
LAST_UPDATE TIMESTAMP NOT NULL
11+
);
12+
ALTER TABLE PUBLIC.USER ADD CONSTRAINT PUBLIC.CONSTRAINT_1 PRIMARY KEY(USER_ID);
13+
314
CREATE CACHED TABLE PUBLIC.ACTOR(
415
ACTOR_ID INT NOT NULL,
516
FIRST_NAME VARCHAR(45) NOT NULL,
617
LAST_NAME VARCHAR(45) NOT NULL,
718
LAST_UPDATE TIMESTAMP NOT NULL
819
);
9-
ALTER TABLE PUBLIC.ACTOR ADD CONSTRAINT PUBLIC.CONSTRAINT_3 PRIMARY KEY(ACTOR_ID);
20+
ALTER TABLE PUBLIC.ACTOR ADD CONSTRAINT PUBLIC.CONSTRAINT_2 PRIMARY KEY(ACTOR_ID);
1021

1122
CREATE CACHED TABLE PUBLIC.FILM(
1223
FILM_ID INT NOT NULL,
@@ -23,14 +34,14 @@ CREATE CACHED TABLE PUBLIC.FILM(
2334
SPECIAL_FEATURES VARCHAR(54),
2435
LAST_UPDATE TIMESTAMP NOT NULL
2536
);
26-
ALTER TABLE PUBLIC.FILM ADD CONSTRAINT PUBLIC.CONSTRAINT_2 PRIMARY KEY(FILM_ID);
37+
ALTER TABLE PUBLIC.FILM ADD CONSTRAINT PUBLIC.CONSTRAINT_3 PRIMARY KEY(FILM_ID);
2738

2839
CREATE CACHED TABLE PUBLIC.LANGUAGE(
2940
LANGUAGE_ID INT NOT NULL,
3041
NAME VARCHAR(20) NOT NULL,
3142
LAST_UPDATE TIMESTAMP NOT NULL
3243
);
33-
ALTER TABLE PUBLIC.LANGUAGE ADD CONSTRAINT PUBLIC.CONSTRAINT_C PRIMARY KEY(LANGUAGE_ID);
44+
ALTER TABLE PUBLIC.LANGUAGE ADD CONSTRAINT PUBLIC.CONSTRAINT_4 PRIMARY KEY(LANGUAGE_ID);
3445

3546
INSERT INTO PUBLIC.ACTOR (ACTOR_ID, FIRST_NAME, LAST_NAME, LAST_UPDATE) VALUES (1, 'PENELOPE', 'GUINESS', '2006-02-15 04:34:33.000000000');
3647
INSERT INTO PUBLIC.ACTOR (ACTOR_ID, FIRST_NAME, LAST_NAME, LAST_UPDATE) VALUES (2, 'NICK', 'WAHLBERG', '2006-02-15 04:34:33.000000000');

server/src/main/java/com/balinski/api_project/database/DaoManager.java

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package com.balinski.api_project.database;
22

3-
import com.balinski.api_project.database.dao.ActorDao;
4-
import com.balinski.api_project.database.dao.DaoException;
5-
import com.balinski.api_project.database.dao.FilmDao;
6-
import com.balinski.api_project.database.dao.LanguageDao;
3+
import com.balinski.api_project.database.dao.*;
74
import com.balinski.api_project.util.FilePropertiesLoader;
85
import com.balinski.api_project.util.SqlExceptionPrinter;
96

@@ -34,6 +31,10 @@ public LanguageDao getLanguageDao() {
3431
return new LanguageDao(this, false);
3532
}
3633

34+
public UserDao getUserDao() {
35+
return new UserDao(this, false);
36+
}
37+
3738
public ActorDao getActorDao(boolean transaction) {
3839
return new ActorDao(this, transaction);
3940
}
@@ -46,6 +47,10 @@ public LanguageDao getLanguageDao (boolean transaction) {
4647
return new LanguageDao(this, transaction);
4748
}
4849

50+
public UserDao getUserDao (boolean transaction) {
51+
return new UserDao(this, transaction);
52+
}
53+
4954
public List<Map<String, Object>> queryGetData(String sql) {
5055
List<Map<String, Object>> data = null;
5156

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package com.balinski.api_project.database.dao;
2+
3+
import com.balinski.api_project.database.DaoManager;
4+
import com.balinski.api_project.database.model.User;
5+
6+
import java.sql.Timestamp;
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
import java.util.Map;
10+
11+
public class UserDao extends Dao {
12+
public UserDao(DaoManager manager, boolean transaction) {
13+
super(manager, transaction);
14+
}
15+
16+
public User getById(int id) {
17+
List<Map<String, Object>> result = manager.queryGetData(
18+
"SELECT * FROM USER U WHERE U.USER_ID = " + id + ";"
19+
);
20+
21+
return result.size() > 0 ? toListOfUsers(result).get(0) : null;
22+
}
23+
24+
public List<User> getByName(String name) {
25+
List<Map<String, Object>> result = manager.queryGetData(
26+
"SELECT * FROM USER U WHERE lower(U.NAME) = '" + name.toLowerCase() + "';"
27+
);
28+
29+
return toListOfUsers(result);
30+
}
31+
32+
@Override
33+
public Integer getCount() {
34+
List<Map<String, Object>> result = manager.queryGetData(
35+
"SELECT COUNT(*) AS COUNT FROM USER;"
36+
);
37+
38+
return ((Long)result.get(0).get("COUNT")).intValue();
39+
}
40+
41+
@Override
42+
public List<?> getAll() {
43+
List<Map<String, Object>> result = manager.queryGetData(
44+
"SELECT * FROM USER;"
45+
);
46+
47+
return toListOfUsers(result);
48+
}
49+
50+
@Override
51+
public List<?> getIdBetween(int start, int stop) {
52+
List<Map<String, Object>> result = manager.queryGetData(
53+
"SELECT * FROM USERS U WHERE U.USER_ID BETWEEN " + start + " AND " + stop + ";"
54+
);
55+
56+
return toListOfUsers(result);
57+
}
58+
59+
@Override
60+
public int add(Object obj) {
61+
if(!(obj instanceof User))
62+
return 0;
63+
64+
User user = (User) obj;
65+
66+
String sql = String.format("INSERT INTO USER VALUES (%d, '%s', '%s', %d, TIMESTAMP '%s', TIMESTAMP '%s');",
67+
user.getId(), user.getName(), user.getToken(), user.getLimit(),
68+
user.getDateRegistered().format(toDateTime), user.getLastUpdate().format(toDateTime));
69+
70+
int rowsAdded = manager.queryModify(sql, transaction);
71+
count += rowsAdded;
72+
73+
return rowsAdded;
74+
}
75+
76+
@Override
77+
public int addAll(List<Object> list) {
78+
if(list == null || list.size() == 0)
79+
return 0;
80+
81+
StringBuilder sql = new StringBuilder("INSERT INTO USER VALUES ");
82+
83+
for(Object obj : list) {
84+
User user = (User) obj;
85+
86+
sql.append(String.format("(%d, '%s', '%s', %d, TIMESTAMP '%s', TIMESTAMP '%s');",
87+
user.getId(), user.getName(), user.getToken(), user.getLimit(),
88+
user.getDateRegistered().format(toDateTime), user.getLastUpdate().format(toDateTime)));
89+
}
90+
91+
sql.replace(sql.lastIndexOf(", "), sql.length(), ";");
92+
93+
int rowsAdded = manager.queryModify(sql.toString(), transaction);
94+
count += rowsAdded;
95+
96+
return rowsAdded;
97+
}
98+
99+
public List<User> toListOfUsers(List<Map<String, Object>> listOfMaps) {
100+
if(listOfMaps == null)
101+
return null;
102+
103+
List<User> listOfUsers = new ArrayList<>(listOfMaps.size());
104+
105+
for(var user : listOfMaps) {
106+
listOfUsers.add(new User((int)user.get("USER_ID"), (String)user.get("NAME"),
107+
(String)user.get("TOKEN"), (int)user.get("USED"), (int)user.get("LIMIT"),
108+
((Timestamp)user.get("DATE_REGISTERED")).toLocalDateTime(),
109+
((Timestamp)user.get("LAST_UPDATE")).toLocalDateTime()));
110+
}
111+
112+
return listOfUsers;
113+
}
114+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package com.balinski.api_project.database.model;
2+
3+
import java.time.LocalDateTime;
4+
5+
public class User {
6+
final int id;
7+
final String name;
8+
final String token;
9+
int used;
10+
final int limit;
11+
final LocalDateTime dateRegistered;
12+
LocalDateTime lastUpdate;
13+
14+
public User(int id, String name, String token, int used, int limit,
15+
LocalDateTime dateRegistered, LocalDateTime lastUpdate) {
16+
this.id = id;
17+
this.name = name;
18+
this.token = token;
19+
this.used = used;
20+
this.limit = limit;
21+
this.dateRegistered = dateRegistered;
22+
this.lastUpdate = lastUpdate;
23+
}
24+
25+
public int getId() {
26+
return id;
27+
}
28+
29+
public String getName() {
30+
return name;
31+
}
32+
33+
public String getToken() {
34+
return token;
35+
}
36+
37+
public int getUsed() {
38+
return used;
39+
}
40+
41+
public int getLimit() {
42+
return limit;
43+
}
44+
45+
public LocalDateTime getDateRegistered() {
46+
return dateRegistered;
47+
}
48+
49+
public LocalDateTime getLastUpdate() {
50+
return lastUpdate;
51+
}
52+
53+
public void setUsed(int used) {
54+
this.used = used;
55+
}
56+
57+
public void setLastUpdate(LocalDateTime lastUpdate) {
58+
this.lastUpdate = lastUpdate;
59+
}
60+
}

0 commit comments

Comments
 (0)