Skip to content
Snippets Groups Projects
Commit 4bb64683 authored by Martin Staehr's avatar Martin Staehr
Browse files

#40 feat: implement getGroupByProjectId for database operations

parent 66a7c0e7
No related branches found
No related tags found
No related merge requests found
......@@ -37,7 +37,12 @@ public interface Management {
*/
void create(Project project);
void create(Group group, String projectId);
/**
* create a Group in the database
*
* @param group
*/
void create(Group group);
/**
* Delete a Project in the database
......
......@@ -18,6 +18,8 @@ import javax.annotation.Resource;
import javax.inject.Singleton;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
......@@ -53,7 +55,6 @@ public class ManagementImpl implements Management {
// TODO implmement UserProfile @Mar
}
// TODO: naming convention discussion? all is named create, but group is named createGroup
@Override
public void create(Project project) {
UUID uuid = UUID.randomUUID();
......@@ -77,6 +78,9 @@ public class ManagementImpl implements Management {
connect.connect();
String mysqlRequest = "DELETE FROM projects where id = (?)";
connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId());
// TODO: delete all groups of project?
connect.close();
}
......@@ -93,8 +97,11 @@ public class ManagementImpl implements Management {
public void update(User user) {
MysqlConnect connect = new MysqlConnect();
connect.connect();
String mysqlRequest = "UPDATE `users` SET `name`=?,`password`=?,`email`=?,`token`=?,`isStudent`=?, `rocketChatId`=?,`rocketChatAuthToken`=? WHERE email=? LIMIT 1";
String mysqlRequest = "UPDATE `users` SET `name`=?,`password`=?,`email`=?,`token`=?,`isStudent`=?," +
"`rocketChatId`=?,`rocketChatAuthToken`=? WHERE email=? LIMIT 1";
//TODO: maybe add handling if a line is actually updated
//TODO: if user is updated, it also must update all other tables which includes some information about the user, for example project user
connect.issueUpdateStatement(mysqlRequest, user.getName(), user.getPassword(), user.getEmail(),
user.getToken(), user.getStudent(), user.getRocketChatId(), user.getRocketChatAuthToken(), user.getEmail());
connect.close();
......@@ -157,10 +164,11 @@ public class ManagementImpl implements Management {
String name = vereinfachtesResultSet.getString("name");
String password = vereinfachtesResultSet.getString("password");
String email = vereinfachtesResultSet.getString("email");
String token = vereinfachtesResultSet.getString("token");
String rocketChatId = vereinfachtesResultSet.getString("rocketChatId");
String rocketChatAuthToken = vereinfachtesResultSet.getString("rocketChatAuthToken");
Boolean isStudent = vereinfachtesResultSet.getBoolean("isStudent");
return new User(name, password, email, rocketChatId, rocketChatAuthToken, isStudent);
return new User(name, password, email, token, rocketChatId, rocketChatAuthToken, isStudent);
}
private Project getProjectFromResultSet(VereinfachtesResultSet vereinfachtesResultSet) {
......@@ -173,15 +181,21 @@ public class ManagementImpl implements Management {
String token = vereinfachtesResultSet.getString("token");
String phase = vereinfachtesResultSet.getString("phase");
return new Project(id, password, active, timestamp, author, adminPassword, token);
return new Project(id, password, active, timestamp, author, adminPassword, token, phase);
}
private Group getGroupFromResultSet(VereinfachtesResultSet vereinfachtesResultSet) {
private void fillGroupFromResultSet(VereinfachtesResultSet vereinfachtesResultSet, HashMap<Integer, Group> existingGroups) {
int id = vereinfachtesResultSet.getInt("id");
String projectId = vereinfachtesResultSet.getString("projectId");
String chatRoomId = vereinfachtesResultSet.getString("chatRoomId");
// TODO: determine how to get all User
return new Group(id, new ArrayList<>(), projectId, chatRoomId);
if (existingGroups.containsKey(id)) {
existingGroups.get(id).addMember(getUserFromResultSet(vereinfachtesResultSet));
} else {
String projectId = vereinfachtesResultSet.getString("projectId");
User user = getUserFromResultSet(vereinfachtesResultSet);
String chatRoomId = vereinfachtesResultSet.getString("chatRoomId");
ArrayList<User> userList = new ArrayList<>(Collections.singletonList(user));
Group group = new Group(userList, projectId, chatRoomId);
existingGroups.put(id, group);
}
}
@Override
......@@ -214,14 +228,15 @@ public class ManagementImpl implements Management {
/**
* TODO @Axel bitte in modules/asessment verschieben
*
* @param projectId
* @param quizId
* @return
*/
public Quiz getQuizByProjectGroupId(String projectId, String quizId){
public Quiz getQuizByProjectGroupId(String projectId, String quizId) {
MysqlConnect connect = new MysqlConnect();
connect.connect();
String mysqlRequest = "SELECT * FROM quiz where projectId=" + projectId + " , question="+quizId;
String mysqlRequest = "SELECT * FROM quiz where projectId=" + projectId + " , question=" + quizId;
VereinfachtesResultSet vereinfachtesResultSet =
connect.issueSelectStatement(mysqlRequest, "");
boolean next = vereinfachtesResultSet.next();
......@@ -236,14 +251,14 @@ public class ManagementImpl implements Management {
question = vereinfachtesResultSet.getString("question");
answer = vereinfachtesResultSet.getString("answer");
correct = vereinfachtesResultSet.getBoolean("correct");
if (correct){
if (correct) {
correctAnswers.add(answer);
}else{
} else {
incorrectAnswers.add(answer);
}
next = vereinfachtesResultSet.next();
}
Quiz quiz = new Quiz(mcType,question, correctAnswers, incorrectAnswers);
Quiz quiz = new Quiz(mcType, question, correctAnswers, incorrectAnswers);
connect.close();
return quiz;
}
......@@ -283,61 +298,57 @@ public class ManagementImpl implements Management {
}
}
@Override
public void create(Group group, String projectId) {
public void create(Group group) {
MysqlConnect connect = new MysqlConnect();
connect.connect();
Project project = getProjectById(projectId);
Group newGroup = new Group(projectId);
String mysqlRequestGroup = "INSERT INTO groups (`projectId`,`chatRoomId`) values (?,?)";
connect.issueInsertOrDeleteStatement(mysqlRequestGroup, newGroup.getProjectId(), newGroup.getChatRoomId());
connect.issueInsertOrDeleteStatement(mysqlRequestGroup, group.getProjectId(), group.getChatRoomId());
for (User groupMember : group.getMembers()) {
String mysqlRequest2 = "INSERT INTO groupuser (`userEmail`, `groupId`) values (?,?)";
connect.issueInsertOrDeleteStatement(mysqlRequest2, groupMember.getEmail(), project.getId());
connect.issueInsertOrDeleteStatement(mysqlRequest2, groupMember.getEmail(), group.getProjectId());
}
connect.close();
}
@Override
public void addGroupMember(User groupMember, int groupId) {
// TODO: implement
}
@Override
public void deleteGroupMember(User groupMember, int groupId) {
// TODO: implement
}
@Override
public List<Group> getGroupsByProjectId(String projectId) {
MysqlConnect connect = new MysqlConnect();
connect.connect();
// TODO: implement correct join and finish implementation
//SELECT * FROM groupuser gu JOIN groups g ON g.id=gu.groupId JOIN users u ON u.email=gu.userEmail WHERE g.projectId = '1'
String mysqlRequest = "SELECT * FROM groups g " +
"JOIN groupuser gu u ON g.id=gu.groupId " + "JOIN users u ON gu.userEmail=u.email" +
"JOIN groupuser gu ON g.id=gu.groupId " + "JOIN users u ON gu.userEmail=u.email" +
"where g.projectId = ?";
VereinfachtesResultSet vereinfachtesResultSet =
connect.issueSelectStatement(mysqlRequest, projectId);
ArrayList<Group> groups = new ArrayList<>();
HashMap<Integer, Group> groupHashMap = new HashMap<>();
while (vereinfachtesResultSet.next()) {
//groups.add()
fillGroupFromResultSet(vereinfachtesResultSet, groupHashMap);
}
ArrayList<Group> groups = new ArrayList<>();
groupHashMap.forEach((key, group) -> groups.add(group));
if (groups.isEmpty()) {
return null;
} else {
return groups;
}
return groups;
}
@Override
public void create(ProjectConfiguration projectConfiguration, Project project) {
ProjectConfigurationDAO projectConfigurationDAO = new ProjectConfigurationDAO();
projectConfigurationDAO.persistProjectConfiguration(projectConfiguration,project);
projectConfigurationDAO.persistProjectConfiguration(projectConfiguration, project);
}
@Override
......
......@@ -17,8 +17,6 @@ public class Group {
public Group(String projectId) {
this(new ArrayList<>(), projectId);
}
public Group(List<User> members, String projectId) {
......
......@@ -18,7 +18,7 @@ public class Project {
private String author;
private String adminPassword;
private String token;
// using enum ProjectPhase
// TODO: using enum ProjectPhase
private String phase;
public Project() {
......@@ -35,31 +35,19 @@ public class Project {
this.setPhase(ProjectPhase.CourseCreation);
}
public String getPhase() {
return phase;
}
/**
* setting phase only with enum
* @param phase
*/
public void setPhase(ProjectPhase phase) {
this.phase = phase.name();
}
public Project(String id, String password, Boolean active, String author, String adminPassword, String token) {
public Project(String id, String password, Boolean active, String author, String adminPassword, String token, ProjectPhase projectPhase) {
this.id = id;
this.password = password;
this.active = active;
this.author = author;
this.adminPassword = adminPassword;
this.token = token;
this.phase = projectPhase.name();
this.timecreated = Timestamp.valueOf(LocalDateTime.now(ZoneId.of("UTC")));
}
public Project(String id, String password, Boolean active, Timestamp timecreated, String author,
String adminPassword, String token) {
public Project(String id, String password, Boolean active, Timestamp timecreated, String author, String adminPassword, String token, String phase) {
this.id = id;
this.password = password;
this.active = active;
......@@ -67,6 +55,7 @@ public class Project {
this.author = author;
this.adminPassword = adminPassword;
this.token = token;
this.phase = phase;
}
public String getId() {
......@@ -117,10 +106,22 @@ public class Project {
this.token = token;
}
public Timestamp getTimecreated() {
return timecreated;
}
public String getPhase() {
return phase;
}
/**
* setting phase only with enum
*
* @param phase
*/
public void setPhase(ProjectPhase phase) {
this.phase = phase.name();
}
}
\ No newline at end of file
......@@ -20,20 +20,20 @@ public class User {
}
public User(String name, String password, String email, Boolean isStudent) {
this.name = name;
this.password = password;
this.email = email;
this.isStudent = isStudent;
this.rocketChatAuthToken = "";
this.rocketChatId = "";
this(name, password, email, "", "", isStudent);
}
public User(String name, String password, String email, String rocketChatId, String rocketChatAuthToken, Boolean isStudent) {
this(name, password, email, "", rocketChatAuthToken, rocketChatId, isStudent);
}
public User(String name, String password, String email, String token, String rocketChatAuthToken, String rocketChatId, Boolean isStudent) {
this.name = name;
this.password = password;
this.email = email;
this.rocketChatId = rocketChatId;
this.token = token;
this.rocketChatAuthToken = rocketChatAuthToken;
this.rocketChatId = rocketChatId;
this.isStudent = isStudent;
}
......
......@@ -38,10 +38,8 @@ public class GroupCreationService {
management.create(project);
}
groups.forEach(group -> management.create(group, project.getId()));
groups.forEach(group -> management.create(group));
// TODO: read List<Group> of database to get Id for chatRoomName (Should be ProjectName - GroupId)
// TODO: add projectName as DatabaseEntry
// TODO: implement sql service injection for, so connection is only done once in app
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment