From 1f457a2313b3a53295083d4e13dfcef9569b9f6f Mon Sep 17 00:00:00 2001 From: Jake Potrebic Date: Mon, 27 Jul 2020 19:50:51 -0700 Subject: [PATCH] work on userdata & service --- .../hangar/db/dao/OrganizationDao.java | 9 +++ .../minidigger/hangar/db/dao/ProjectDao.java | 8 +++ .../model/viewhelpers/Organization.java | 59 +++++++++++++++++++ .../hangar/model/viewhelpers/UserData.java | 1 - .../hangar/service/UserService.java | 16 +++-- .../service/project/ProjectService.java | 16 ++++- 6 files changed, 101 insertions(+), 8 deletions(-) create mode 100644 src/main/java/me/minidigger/hangar/model/viewhelpers/Organization.java diff --git a/src/main/java/me/minidigger/hangar/db/dao/OrganizationDao.java b/src/main/java/me/minidigger/hangar/db/dao/OrganizationDao.java index d266b7e50..84b3c5281 100644 --- a/src/main/java/me/minidigger/hangar/db/dao/OrganizationDao.java +++ b/src/main/java/me/minidigger/hangar/db/dao/OrganizationDao.java @@ -1,13 +1,17 @@ package me.minidigger.hangar.db.dao; import me.minidigger.hangar.db.model.OrganizationsTable; +import me.minidigger.hangar.model.viewhelpers.Organization; import org.jdbi.v3.sqlobject.config.RegisterBeanMapper; import org.jdbi.v3.sqlobject.customizer.BindBean; import org.jdbi.v3.sqlobject.customizer.Timestamped; import org.jdbi.v3.sqlobject.statement.GetGeneratedKeys; +import org.jdbi.v3.sqlobject.statement.SqlQuery; import org.jdbi.v3.sqlobject.statement.SqlUpdate; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository @RegisterBeanMapper(OrganizationsTable.class) public interface OrganizationDao { @@ -16,4 +20,9 @@ public interface OrganizationDao { @Timestamped @GetGeneratedKeys OrganizationsTable insert(@BindBean OrganizationsTable organization); + + + @SqlQuery("SELECT o.id, o.created_at, o.name, o.owner_id, o.user_id FROM organization_members om JOIN organizations o ON om.organization_id = o.id WHERE om.user_id = :id") + @RegisterBeanMapper(Organization.class) + List getUserOrgs(long id); } diff --git a/src/main/java/me/minidigger/hangar/db/dao/ProjectDao.java b/src/main/java/me/minidigger/hangar/db/dao/ProjectDao.java index 448080d7a..7aed37759 100644 --- a/src/main/java/me/minidigger/hangar/db/dao/ProjectDao.java +++ b/src/main/java/me/minidigger/hangar/db/dao/ProjectDao.java @@ -10,6 +10,8 @@ import org.springframework.stereotype.Repository; import me.minidigger.hangar.db.model.ProjectsTable; +import java.util.List; + @Repository @RegisterBeanMapper(ProjectsTable.class) public interface ProjectDao { @@ -21,4 +23,10 @@ public interface ProjectDao { @SqlQuery("select * from projects where lower(owner_name) = lower(:author) AND lower(slug) = lower(:slug)") ProjectsTable getBySlug(String author, String slug); + + @SqlQuery("SELECT COUNT(*) FROM projects WHERE owner_id = :id") + int getProjectCountByUserId(long id); + + @SqlQuery("SELECT * FROM projects WHERE owner_id = :id") + List getProjectsByUserId(long id); } diff --git a/src/main/java/me/minidigger/hangar/model/viewhelpers/Organization.java b/src/main/java/me/minidigger/hangar/model/viewhelpers/Organization.java new file mode 100644 index 000000000..f001b1070 --- /dev/null +++ b/src/main/java/me/minidigger/hangar/model/viewhelpers/Organization.java @@ -0,0 +1,59 @@ +package me.minidigger.hangar.model.viewhelpers; + +import java.time.OffsetDateTime; + +public class Organization { + private long id; + private OffsetDateTime createdAt; + private String name; + private long ownerId; + private long userId; + + public Organization(long id, OffsetDateTime createdAt, String name, long ownerId, long userId) { + this.id = id; + this.createdAt = createdAt; + this.name = name; + this.ownerId = ownerId; + this.userId = userId; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public OffsetDateTime getCreatedAt() { + return createdAt; + } + + public void setCreatedAt(OffsetDateTime createdAt) { + this.createdAt = createdAt; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public long getOwnerId() { + return ownerId; + } + + public void setOwnerId(long ownerId) { + this.ownerId = ownerId; + } + + public long getUserId() { + return userId; + } + + public void setUserId(long userId) { + this.userId = userId; + } +} diff --git a/src/main/java/me/minidigger/hangar/model/viewhelpers/UserData.java b/src/main/java/me/minidigger/hangar/model/viewhelpers/UserData.java index b40ebcadf..574f4823d 100644 --- a/src/main/java/me/minidigger/hangar/model/viewhelpers/UserData.java +++ b/src/main/java/me/minidigger/hangar/model/viewhelpers/UserData.java @@ -6,7 +6,6 @@ import java.util.List; import me.minidigger.hangar.db.model.UsersTable; import me.minidigger.hangar.model.Permission; import me.minidigger.hangar.model.Role; -import me.minidigger.hangar.model.generated.Organization; public class UserData { diff --git a/src/main/java/me/minidigger/hangar/service/UserService.java b/src/main/java/me/minidigger/hangar/service/UserService.java index 0660fca89..55e57f5c0 100644 --- a/src/main/java/me/minidigger/hangar/service/UserService.java +++ b/src/main/java/me/minidigger/hangar/service/UserService.java @@ -1,5 +1,8 @@ package me.minidigger.hangar.service; +import me.minidigger.hangar.db.dao.OrganizationDao; +import me.minidigger.hangar.db.dao.ProjectDao; +import me.minidigger.hangar.model.viewhelpers.Organization; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -19,7 +22,6 @@ import me.minidigger.hangar.db.model.UsersTable; import me.minidigger.hangar.model.Permission; import me.minidigger.hangar.model.Role; import me.minidigger.hangar.model.UserOrdering; -import me.minidigger.hangar.model.generated.Organization; import me.minidigger.hangar.model.viewhelpers.Author; import me.minidigger.hangar.model.viewhelpers.HeaderData; import me.minidigger.hangar.model.viewhelpers.Staff; @@ -30,12 +32,16 @@ import me.minidigger.hangar.security.HangarAuthentication; public class UserService { private final HangarDao userDao; + private final HangarDao orgDao; + private final HangarDao projectDao; private final HangarConfig config; @Autowired - public UserService(HangarDao userDao, HangarConfig config) { + public UserService(HangarDao userDao, HangarConfig config, HangarDao orgDao, HangarDao projectDao) { this.userDao = userDao; this.config = config; + this.orgDao = orgDao; + this.projectDao = projectDao; } public UsersTable getCurrentUser() { @@ -118,11 +124,11 @@ public class UserService { public UserData getUserData(UsersTable user) { // TODO getUserData boolean isOrga = false; - int projectCount = 1; - List orgas = new ArrayList<>(); + int projectCount = projectDao.get().getProjectCountByUserId(user.getId()); + List organizations = orgDao.get().getUserOrgs(user.getId()); List globalRoles = List.of(Role.HANGAR_ADMIN); Permission userPerm = Permission.All; Permission orgaPerm = Permission.None; - return new UserData(getHeaderData(), user, isOrga, projectCount, orgas, globalRoles, userPerm, orgaPerm); + return new UserData(getHeaderData(), user, isOrga, projectCount, organizations, globalRoles, userPerm, orgaPerm); } } diff --git a/src/main/java/me/minidigger/hangar/service/project/ProjectService.java b/src/main/java/me/minidigger/hangar/service/project/ProjectService.java index f3f7e57ed..e304cef7c 100644 --- a/src/main/java/me/minidigger/hangar/service/project/ProjectService.java +++ b/src/main/java/me/minidigger/hangar/service/project/ProjectService.java @@ -10,6 +10,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import me.minidigger.hangar.db.dao.HangarDao; import me.minidigger.hangar.db.dao.ProjectDao; @@ -36,8 +37,19 @@ public class ProjectService { public ProjectData getProjectData(String author, String slug) { ProjectsTable projectsTable = projectDao.get().getBySlug(author, slug); - UsersTable projectOwner = userDao.get().getByName(author); - if (projectsTable == null || projectOwner == null) { + if (projectsTable == null) throw new ResponseStatusException(HttpStatus.NOT_FOUND); + return getProjectData(projectsTable); + + } + + public List getProjectsData(long id) { + List projectsTables = projectDao.get().getProjectsByUserId(id); + return projectsTables.stream().map(this::getProjectData).collect(Collectors.toList()); + } + + public ProjectData getProjectData(ProjectsTable projectsTable) { + UsersTable projectOwner = userDao.get().getById(projectsTable.getOwnerId()); + if (projectOwner == null) { throw new ResponseStatusException(HttpStatus.NOT_FOUND); } int publicVersions = 0;