@ -7,7 +7,6 @@ import static de.srsoftware.tools.jdbc.Query.select;
@@ -7,7 +7,6 @@ import static de.srsoftware.tools.jdbc.Query.select;
import static de.srsoftware.umbrella.core.Constants.* ;
import static de.srsoftware.umbrella.core.Constants.TABLE_SETTINGS ;
import static de.srsoftware.umbrella.core.ResponseCode.HTTP_SERVER_ERROR ;
import static de.srsoftware.umbrella.core.Util.LOG ;
import static de.srsoftware.umbrella.core.model.Project.Status.Open ;
import static de.srsoftware.umbrella.project.Constants.* ;
import static java.lang.System.Logger.Level.ERROR ;
@ -36,6 +35,31 @@ public class SqliteDb implements ProjectDb {
@@ -36,6 +35,31 @@ public class SqliteDb implements ProjectDb {
init ( ) ;
}
private HashMap < Long , Project > addMembers ( HashMap < Long , Project > projects , UserService userService ) throws SQLException , UmbrellaException {
Object [ ] ids = projects . keySet ( ) . toArray ( ) ;
var rs = select ( "*" ) . from ( TABLE_PROJECT_USERS ) . where ( PROJECT_ID , in ( ids ) ) . exec ( db ) ;
var userIdMap = new HashMap < Long , HashMap < Long , Permission > > ( ) ;
while ( rs . next ( ) ) {
var userId = rs . getLong ( USER_ID ) ;
var projectId = rs . getLong ( PROJECT_ID ) ;
var permission = Permission . of ( rs . getInt ( PERMISSIONS ) ) ;
HashMap < Long , Permission > userMap = userIdMap . computeIfAbsent ( userId , k - > new HashMap < > ( ) ) ;
userMap . put ( projectId , permission ) ;
}
rs . close ( ) ;
var userMap = userService . list ( userIdMap . keySet ( ) ) ;
for ( var entry : userIdMap . entrySet ( ) ) {
var userId = entry . getKey ( ) ;
var user = userMap . get ( userId ) ;
for ( var inner : entry . getValue ( ) . entrySet ( ) ) {
var projectId = inner . getKey ( ) ;
var perm = inner . getValue ( ) ;
var project = projects . get ( projectId ) ;
project . members ( ) . add ( new Member ( user , perm ) ) ;
}
}
return projects ;
}
private int createTables ( ) {
createProjectTables ( ) ;
@ -123,7 +147,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
@@ -123,7 +147,7 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
}
@Override
public HashMap < Long , Project > list ( long companyId , boolean includeClosed , UserService userService ) throws UmbrellaException {
public HashMap < Long , Project > ofCompany ( long companyId , boolean includeClosed , UserService userService ) throws UmbrellaException {
try {
var projects = new HashMap < Long , Project > ( ) ;
var query = select ( "*" ) . from ( TABLE_PROJECTS ) . where ( COMPANY_ID , equal ( companyId ) ) ;
@ -134,28 +158,27 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
@@ -134,28 +158,27 @@ CREATE TABLE IF NOT EXISTS {0} ( {1} VARCHAR(255) PRIMARY KEY, {2} VARCHAR(255)
projects . put ( project . id ( ) , project ) ;
}
rs . close ( ) ;
rs = select ( "*" ) . from ( TABLE_PROJECT_USERS ) . where ( PROJECT_ID , in ( projects . keySet ( ) ) ) . exec ( db ) ;
var userIdMap = new HashMap < Long , HashMap < Long , Permission > > ( ) ;
return addMembers ( projects , userService ) ;
} catch ( SQLException e ) {
throw new UmbrellaException ( HTTP_SERVER_ERROR , "Failed to load items from database" ) ;
}
}
@Override
public HashMap < Long , Project > ofUser ( long userId , boolean includeClosed , UserService userService ) throws UmbrellaException {
try {
var projects = new HashMap < Long , Project > ( ) ;
var query = select ( "*" ) . from ( TABLE_PROJECTS ) . leftJoin ( ID , TABLE_PROJECT_USERS , PROJECT_ID ) . where ( USER_ID , equal ( userId ) ) ;
if ( ! includeClosed ) query = query . where ( STATUS , lessThan ( Project . Status . Complete . code ( ) ) ) ;
var rs = query . exec ( db ) ;
while ( rs . next ( ) ) {
var userId = rs . getLong ( USER_ID ) ;
var projectId = rs . getLong ( PROJECT_ID ) ;
var permission = Permission . of ( rs . getInt ( PERMISSIONS ) ) ;
HashMap < Long , Permission > userMap = userIdMap . computeIfAbsent ( userId , k - > new HashMap < > ( ) ) ;
userMap . put ( projectId , permission ) ;
var project = Project . of ( rs ) ;
projects . put ( project . id ( ) , project ) ;
}
rs . close ( ) ;
var userMap = userService . list ( userIdMap . keySet ( ) ) ;
for ( var entry : userIdMap . entrySet ( ) ) {
var userId = entry . getKey ( ) ;
var user = userMap . get ( userId ) ;
for ( var inner : entry . getValue ( ) . entrySet ( ) ) {
var projectId = inner . getKey ( ) ;
var perm = inner . getValue ( ) ;
var project = projects . get ( projectId ) ;
project . members ( ) . add ( new Member ( user , perm ) ) ;
}
}
return projects ;
return addMembers ( projects , userService ) ;
} catch ( SQLException e ) {
throw new UmbrellaException ( HTTP_SERVER_ERROR , "Failed to load items from database" ) ;
}