2
0
mirror of https://github.com/HangarMC/Hangar.git synced 2025-02-11 14:52:01 +08:00

work on userdata & service

This commit is contained in:
Jake Potrebic 2020-07-27 19:50:51 -07:00 committed by MiniDigger
parent b20c0de286
commit 1f457a2313
6 changed files with 101 additions and 8 deletions
src/main/java/me/minidigger/hangar

View File

@ -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<Organization> getUserOrgs(long id);
}

View File

@ -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<ProjectsTable> getProjectsByUserId(long id);
}

View File

@ -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;
}
}

View File

@ -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 {

View File

@ -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> userDao;
private final HangarDao<OrganizationDao> orgDao;
private final HangarDao<ProjectDao> projectDao;
private final HangarConfig config;
@Autowired
public UserService(HangarDao<UserDao> userDao, HangarConfig config) {
public UserService(HangarDao<UserDao> userDao, HangarConfig config, HangarDao<OrganizationDao> orgDao, HangarDao<ProjectDao> 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<Organization> orgas = new ArrayList<>();
int projectCount = projectDao.get().getProjectCountByUserId(user.getId());
List<Organization> organizations = orgDao.get().getUserOrgs(user.getId());
List<Role> 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);
}
}

View File

@ -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<ProjectData> getProjectsData(long id) {
List<ProjectsTable> 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;