Browse Source

Merge remote-tracking branch 'klimov/feature/notification-system' into feature/notification-system

pull/7911/head
Vladyslav_Prykhodko 3 years ago
parent
commit
8a971dd577
  1. 15
      application/src/main/java/org/thingsboard/server/controller/TenantProfileController.java
  2. 5
      common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileService.java
  3. 18
      dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationService.java
  4. 2
      dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationSettingsService.java
  5. 2
      dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationTargetService.java
  6. 8
      dao/src/main/java/org/thingsboard/server/dao/sql/tenant/JpaTenantProfileDao.java
  7. 3
      dao/src/main/java/org/thingsboard/server/dao/sql/tenant/TenantProfileRepository.java
  8. 3
      dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileDao.java
  9. 6
      dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java
  10. 4
      dao/src/main/java/org/thingsboard/server/dao/usagerecord/DefaultApiLimitService.java
  11. 2
      dao/src/test/resources/application-test.properties

15
application/src/main/java/org/thingsboard/server/controller/TenantProfileController.java

@ -21,6 +21,8 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@ -32,14 +34,19 @@ import org.springframework.web.bind.annotation.RestController;
import org.thingsboard.server.common.data.EntityInfo;
import org.thingsboard.server.common.data.TenantProfile;
import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.id.TenantProfileId;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.queue.util.TbCoreComponent;
import org.thingsboard.server.service.entitiy.tenant.profile.TbTenantProfileService;
import org.thingsboard.server.service.security.model.SecurityUser;
import org.thingsboard.server.service.security.permission.Operation;
import org.thingsboard.server.service.security.permission.Resource;
import java.util.List;
import java.util.UUID;
import static org.thingsboard.server.controller.ControllerConstants.MARKDOWN_CODE_BLOCK_END;
import static org.thingsboard.server.controller.ControllerConstants.MARKDOWN_CODE_BLOCK_START;
import static org.thingsboard.server.controller.ControllerConstants.PAGE_DATA_PARAMETERS;
@ -268,4 +275,12 @@ public class TenantProfileController extends BaseController {
throw handleException(e);
}
}
@GetMapping(value = "/tenantProfiles", params = {"ids"})
@PreAuthorize("hasAuthority('SYS_ADMIN')")
public List<TenantProfile> getTenantProfilesByIds(@RequestParam("ids") UUID[] ids) {
return tenantProfileService.findTenantProfilesByIds(TenantId.SYS_TENANT_ID, ids);
}
}

5
common/dao-api/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileService.java

@ -23,6 +23,9 @@ import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.dao.entity.EntityDaoService;
import java.util.List;
import java.util.UUID;
public interface TenantProfileService extends EntityDaoService {
TenantProfile findTenantProfileById(TenantId tenantId, TenantProfileId tenantProfileId);
@ -47,4 +50,6 @@ public interface TenantProfileService extends EntityDaoService {
void deleteTenantProfiles(TenantId tenantId);
List<TenantProfile> findTenantProfilesByIds(TenantId tenantId, UUID[] ids);
}

18
dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationService.java

@ -18,6 +18,9 @@ package org.thingsboard.server.dao.notification;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.HasId;
import org.thingsboard.server.common.data.id.NotificationId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.id.UserId;
@ -26,12 +29,15 @@ import org.thingsboard.server.common.data.notification.NotificationStatus;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.page.SortOrder;
import org.thingsboard.server.dao.entity.EntityDaoService;
import org.thingsboard.server.dao.sql.query.EntityKeyMapping;
import java.util.Optional;
@Service
@Slf4j
@RequiredArgsConstructor
public class DefaultNotificationService implements NotificationService {
public class DefaultNotificationService implements NotificationService, EntityDaoService {
private final NotificationDao notificationDao;
@ -81,4 +87,14 @@ public class DefaultNotificationService implements NotificationService {
return notificationDao.deleteByIdAndRecipientId(tenantId, recipientId, notificationId);
}
@Override
public Optional<HasId<?>> findEntity(TenantId tenantId, EntityId entityId) {
return Optional.ofNullable(findNotificationById(tenantId, new NotificationId(entityId.getId())));
}
@Override
public EntityType getEntityType() {
return EntityType.NOTIFICATION;
}
}

2
dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationSettingsService.java

@ -101,8 +101,6 @@ public class DefaultNotificationSettingsService implements NotificationSettingsS
});
}
// TODO: validate that wasn't already created (catch exception unique name)
// FIXME: user that does not have access to some entity, gets notifications about this entity - check permissions?
@Transactional(propagation = Propagation.NOT_SUPPORTED) // so that parent transaction is not aborted on method failure
@Override
public void createDefaultNotificationConfigs(TenantId tenantId) {

2
dao/src/main/java/org/thingsboard/server/dao/notification/DefaultNotificationTargetService.java

@ -147,7 +147,7 @@ public class DefaultNotificationTargetService extends AbstractEntityService impl
if (customerId != null && !customerId.isNullUid()) {
return userService.findCustomerUsers(tenantId, customerId, pageLink);
} else {
return userService.findTenantAdmins(tenantId, pageLink); // TODO: or should we send to all users within tenant?
return userService.findTenantAdmins(tenantId, pageLink);
}
}
}

8
dao/src/main/java/org/thingsboard/server/dao/sql/tenant/JpaTenantProfileDao.java

@ -29,6 +29,8 @@ import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
import org.thingsboard.server.dao.tenant.TenantProfileDao;
import org.thingsboard.server.dao.util.SqlDao;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
@ -79,4 +81,10 @@ public class JpaTenantProfileDao extends JpaAbstractSearchTextDao<TenantProfileE
public EntityInfo findDefaultTenantProfileInfo(TenantId tenantId) {
return tenantProfileRepository.findDefaultTenantProfileInfo();
}
@Override
public List<TenantProfile> findTenantProfilesByIds(TenantId tenantId, UUID[] ids) {
return DaoUtil.convertDataList(tenantProfileRepository.findByIdIn(Arrays.asList(ids)));
}
}

3
dao/src/main/java/org/thingsboard/server/dao/sql/tenant/TenantProfileRepository.java

@ -23,6 +23,7 @@ import org.springframework.data.repository.query.Param;
import org.thingsboard.server.common.data.EntityInfo;
import org.thingsboard.server.dao.model.sql.TenantProfileEntity;
import java.util.List;
import java.util.UUID;
public interface TenantProfileRepository extends JpaRepository<TenantProfileEntity, UUID> {
@ -52,4 +53,6 @@ public interface TenantProfileRepository extends JpaRepository<TenantProfileEnti
"WHERE t.isDefault = true")
EntityInfo findDefaultTenantProfileInfo();
List<TenantProfileEntity> findByIdIn(List<UUID> ids);
}

3
dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileDao.java

@ -22,6 +22,7 @@ import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.dao.Dao;
import java.util.List;
import java.util.UUID;
public interface TenantProfileDao extends Dao<TenantProfile> {
@ -38,4 +39,6 @@ public interface TenantProfileDao extends Dao<TenantProfile> {
EntityInfo findDefaultTenantProfileInfo(TenantId tenantId);
List<TenantProfile> findTenantProfilesByIds(TenantId tenantId, UUID[] ids);
}

6
dao/src/main/java/org/thingsboard/server/dao/tenant/TenantProfileServiceImpl.java

@ -40,6 +40,7 @@ import org.thingsboard.server.dao.service.Validator;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import static org.thingsboard.server.dao.service.Validator.validateId;
@ -202,6 +203,11 @@ public class TenantProfileServiceImpl extends AbstractCachedEntityService<Tenant
return false;
}
@Override
public List<TenantProfile> findTenantProfilesByIds(TenantId tenantId, UUID[] ids) {
return tenantProfileDao.findTenantProfilesByIds(tenantId, ids);
}
@Override
public void deleteTenantProfiles(TenantId tenantId) {
log.trace("Executing deleteTenantProfiles");

4
dao/src/main/java/org/thingsboard/server/dao/usagerecord/DefaultApiLimitService.java

@ -19,6 +19,8 @@ import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.query.EntityCountQuery;
import org.thingsboard.server.common.data.query.EntityTypeFilter;
@ -44,7 +46,7 @@ public class DefaultApiLimitService implements ApiLimitService {
if (limit > 0) {
EntityTypeFilter filter = new EntityTypeFilter();
filter.setEntityType(entityType);
long currentCount = entityService.countEntitiesByQuery(tenantId, null, new EntityCountQuery(filter));
long currentCount = entityService.countEntitiesByQuery(tenantId, new CustomerId(EntityId.NULL_UUID), new EntityCountQuery(filter));
if (notificationRuleProcessingService != null) {
notificationRuleProcessingService.process(tenantId, entityType, limit, currentCount);
}

2
dao/src/test/resources/application-test.properties

@ -65,6 +65,8 @@ cache.specs.otaPackagesData.maxSize=100000
cache.specs.edges.timeToLiveInMinutes=1440
cache.specs.edges.maxSize=100000
cache.specs.notificationRules.timeToLiveInMinutes=1440
cache.specs.notificationRules.maxSize=10000
redis.connection.host=localhost
redis.connection.port=6379

Loading…
Cancel
Save