mirror of
https://github.com/HangarMC/Hangar.git
synced 2025-03-07 15:31:00 +08:00
notifications for project update & member invite
This commit is contained in:
parent
6608bb8339
commit
be761df36f
@ -11,6 +11,7 @@ import me.minidigger.hangar.db.model.UsersTable;
|
||||
import me.minidigger.hangar.model.Category;
|
||||
import me.minidigger.hangar.model.FlagReason;
|
||||
import me.minidigger.hangar.model.NamedPermission;
|
||||
import me.minidigger.hangar.model.NotificationType;
|
||||
import me.minidigger.hangar.model.Permission;
|
||||
import me.minidigger.hangar.model.Role;
|
||||
import me.minidigger.hangar.model.Visibility;
|
||||
@ -20,6 +21,7 @@ import me.minidigger.hangar.model.viewhelpers.ScopedProjectData;
|
||||
import me.minidigger.hangar.model.viewhelpers.UserData;
|
||||
import me.minidigger.hangar.security.annotations.GlobalPermission;
|
||||
import me.minidigger.hangar.security.annotations.ProjectPermission;
|
||||
import me.minidigger.hangar.service.NotificationService;
|
||||
import me.minidigger.hangar.service.OrgService;
|
||||
import me.minidigger.hangar.service.RoleService;
|
||||
import me.minidigger.hangar.service.UserActionLogService;
|
||||
@ -85,6 +87,7 @@ public class ProjectsController extends HangarController {
|
||||
private final ProjectFactory projectFactory;
|
||||
private final PagesSerivce pagesSerivce;
|
||||
private final RoleService roleService;
|
||||
private final NotificationService notificationService;
|
||||
private final UserActionLogService userActionLogService;
|
||||
private final ProjectFiles projectFiles;
|
||||
private final TemplateHelper templateHelper;
|
||||
@ -94,7 +97,7 @@ public class ProjectsController extends HangarController {
|
||||
private final HttpServletRequest request;
|
||||
|
||||
@Autowired
|
||||
public ProjectsController(HangarConfig hangarConfig, RouteHelper routeHelper, UserService userService, OrgService orgService, FlagService flagService, ProjectService projectService, ProjectFactory projectFactory, PagesSerivce pagesSerivce, RoleService roleService, UserActionLogService userActionLogService, ProjectFiles projectFiles, TemplateHelper templateHelper, HangarDao<UserDao> userDao, HangarDao<ProjectDao> projectDao, HttpServletRequest request) {
|
||||
public ProjectsController(HangarConfig hangarConfig, RouteHelper routeHelper, UserService userService, OrgService orgService, FlagService flagService, ProjectService projectService, ProjectFactory projectFactory, PagesSerivce pagesSerivce, RoleService roleService, NotificationService notificationService, UserActionLogService userActionLogService, ProjectFiles projectFiles, TemplateHelper templateHelper, HangarDao<UserDao> userDao, HangarDao<ProjectDao> projectDao, HttpServletRequest request) {
|
||||
this.hangarConfig = hangarConfig;
|
||||
this.routeHelper = routeHelper;
|
||||
this.userService = userService;
|
||||
@ -104,6 +107,7 @@ public class ProjectsController extends HangarController {
|
||||
this.projectFactory = projectFactory;
|
||||
this.pagesSerivce = pagesSerivce;
|
||||
this.roleService = roleService;
|
||||
this.notificationService = notificationService;
|
||||
this.userActionLogService = userActionLogService;
|
||||
this.projectFiles = projectFiles;
|
||||
this.templateHelper = templateHelper;
|
||||
@ -424,10 +428,11 @@ public class ProjectsController extends HangarController {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO perhaps bulk notification insert?
|
||||
if (users != null && roles != null) {
|
||||
for (int i = 0; i < users.size(); i++) {
|
||||
roleService.addRole(projectsTable, users.get(i), roles.get(i), false);
|
||||
// TODO notifications
|
||||
notificationService.sendNotification(users.get(i), projectsTable.getOwnerId(), NotificationType.PROJECT_INVITE, new String[] { "notification.project.invite", roles.get(i).getTitle(), projectsTable.getName()});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,14 +1,5 @@
|
||||
package me.minidigger.hangar.service;
|
||||
|
||||
import org.postgresql.shaded.com.ongres.scram.common.util.Preconditions;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import me.minidigger.hangar.db.dao.HangarDao;
|
||||
import me.minidigger.hangar.db.dao.NotificationsDao;
|
||||
import me.minidigger.hangar.db.dao.UserOrganizationRolesDao;
|
||||
@ -16,16 +7,22 @@ import me.minidigger.hangar.db.dao.UserProjectRolesDao;
|
||||
import me.minidigger.hangar.db.model.NotificationsTable;
|
||||
import me.minidigger.hangar.db.model.OrganizationsTable;
|
||||
import me.minidigger.hangar.db.model.ProjectsTable;
|
||||
import me.minidigger.hangar.db.model.RoleTable;
|
||||
import me.minidigger.hangar.db.model.UserOrganizationRolesTable;
|
||||
import me.minidigger.hangar.db.model.UserProjectRolesTable;
|
||||
import me.minidigger.hangar.db.model.Visitable;
|
||||
import me.minidigger.hangar.model.InviteFilter;
|
||||
import me.minidigger.hangar.model.NotificationFilter;
|
||||
import me.minidigger.hangar.model.NotificationType;
|
||||
import me.minidigger.hangar.model.viewhelpers.InviteSubject;
|
||||
import me.minidigger.hangar.model.viewhelpers.UserData;
|
||||
import me.minidigger.hangar.model.viewhelpers.UserRole;
|
||||
import org.postgresql.shaded.com.ongres.scram.common.util.Preconditions;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class NotificationService {
|
||||
@ -44,8 +41,12 @@ public class NotificationService {
|
||||
}
|
||||
|
||||
public NotificationsTable sendNotification(long userId, long originId, NotificationType type, String[] messageArgs) {
|
||||
return sendNotification(userId, originId, type, messageArgs, null);
|
||||
}
|
||||
|
||||
public NotificationsTable sendNotification(long userId, long originId, NotificationType type, String[] messageArgs, String action) {
|
||||
Preconditions.checkArgument(messageArgs.length != 0, "messageArgs must be non-empty");
|
||||
NotificationsTable notification = new NotificationsTable(userId, type, null, originId, messageArgs);
|
||||
NotificationsTable notification = new NotificationsTable(userId, type, action, originId, messageArgs);
|
||||
notificationsDao.get().insert(notification);
|
||||
return notification;
|
||||
}
|
||||
|
@ -2,15 +2,16 @@ package me.minidigger.hangar.service.project;
|
||||
|
||||
import me.minidigger.hangar.db.customtypes.LoggedActionType;
|
||||
import me.minidigger.hangar.db.customtypes.LoggedActionType.ProjectContext;
|
||||
import me.minidigger.hangar.db.customtypes.LoggedActionType.VersionContext;
|
||||
import me.minidigger.hangar.db.dao.ProjectPageDao;
|
||||
import me.minidigger.hangar.db.dao.ProjectVersionDao;
|
||||
import me.minidigger.hangar.db.model.ProjectPagesTable;
|
||||
import me.minidigger.hangar.db.model.ProjectVersionsTable;
|
||||
import me.minidigger.hangar.model.NotificationType;
|
||||
import me.minidigger.hangar.model.Platform;
|
||||
import me.minidigger.hangar.model.generated.Dependency;
|
||||
import me.minidigger.hangar.model.viewhelpers.ProjectPage;
|
||||
import me.minidigger.hangar.model.viewhelpers.VersionData;
|
||||
import me.minidigger.hangar.service.NotificationService;
|
||||
import me.minidigger.hangar.service.UserActionLogService;
|
||||
import me.minidigger.hangar.service.VersionService;
|
||||
import me.minidigger.hangar.service.plugindata.PluginFileWithData;
|
||||
@ -43,7 +44,6 @@ import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
@ -55,22 +55,21 @@ public class ProjectFactory {
|
||||
private final HangarDao<ProjectChannelDao> projectChannelDao;
|
||||
private final HangarDao<ProjectDao> projectDao;
|
||||
private final HangarDao<ProjectPageDao> projectPagesDao;
|
||||
private final HangarDao<VisibilityDao> visibilityDao;
|
||||
private final HangarDao<ProjectVersionDao> projectVersionDao;
|
||||
private final RoleService roleService;
|
||||
private final UserService userService;
|
||||
private final ProjectService projectService;
|
||||
private final ChannelService channelService;
|
||||
private final VersionService versionService;
|
||||
private final NotificationService notificationService;
|
||||
private final UserActionLogService userActionLogService;
|
||||
private final ProjectFiles projectFiles;
|
||||
|
||||
@Autowired
|
||||
public ProjectFactory(HangarConfig hangarConfig, HangarDao<ProjectChannelDao> projectChannelDao, HangarDao<ProjectDao> projectDao, HangarDao<ProjectPageDao> projectPagesDao, HangarDao<VisibilityDao> visibilityDao, HangarDao<ProjectVersionDao> projectVersionDao, RoleService roleService, UserService userService, ProjectService projectService, ChannelService channelService, VersionService versionService, UserActionLogService userActionLogService, ProjectFiles projectFiles) {
|
||||
public ProjectFactory(HangarConfig hangarConfig, HangarDao<ProjectChannelDao> projectChannelDao, HangarDao<ProjectDao> projectDao, HangarDao<ProjectPageDao> projectPagesDao, HangarDao<ProjectVersionDao> projectVersionDao, RoleService roleService, UserService userService, ProjectService projectService, ChannelService channelService, VersionService versionService, NotificationService notificationService, UserActionLogService userActionLogService, ProjectFiles projectFiles) {
|
||||
this.hangarConfig = hangarConfig;
|
||||
this.projectChannelDao = projectChannelDao;
|
||||
this.projectDao = projectDao;
|
||||
this.visibilityDao = visibilityDao;
|
||||
this.projectVersionDao = projectVersionDao;
|
||||
this.roleService = roleService;
|
||||
this.userService = userService;
|
||||
@ -78,6 +77,7 @@ public class ProjectFactory {
|
||||
this.projectService = projectService;
|
||||
this.channelService = channelService;
|
||||
this.versionService = versionService;
|
||||
this.notificationService = notificationService;
|
||||
this.userActionLogService = userActionLogService;
|
||||
this.projectFiles = projectFiles;
|
||||
}
|
||||
@ -173,7 +173,15 @@ public class ProjectFactory {
|
||||
pendingVersion.getPlugin().getData().createTags(version.getId(), versionService); // TODO not sure what this is for
|
||||
Platform.createPlatformTags(versionService, version.getId(), Dependency.from(version.getDependencies()));
|
||||
|
||||
// TODO notify watchers
|
||||
List<UsersTable> watchers = projectService.getProjectWatchers(project.getProject().getId(), 0, null);
|
||||
// TODO bulk notif insert
|
||||
watchers.forEach(watcher -> notificationService.sendNotification(
|
||||
watcher.getId(),
|
||||
project.getProject().getOwnerId(),
|
||||
NotificationType.NEW_PROJECT_VERSION,
|
||||
new String[]{"notification.project.newVersion", project.getProject().getName(), version.getVersionString()},
|
||||
project.getNamespace() + "/versions/" + version.getVersionString()
|
||||
));
|
||||
try {
|
||||
uploadPlugin(project, pendingVersion.getPlugin(), version);
|
||||
} catch (IOException e) {
|
||||
|
@ -144,7 +144,7 @@ public class ProjectService {
|
||||
projectDao.get().update(project);
|
||||
}
|
||||
|
||||
public List<UsersTable> getProjectWatchers(long projectId, int offset, int limit) {
|
||||
public List<UsersTable> getProjectWatchers(long projectId, int offset, Integer limit) {
|
||||
return userDao.get().getProjectWatchers(projectId, offset, limit);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user