Skip to content

Commit

Permalink
#749 | Use fixed uuids for default dashboard and child entities
Browse files Browse the repository at this point in the history
Using random uuids creates duplicate entities during bundle upload
  • Loading branch information
1t5j0y committed Aug 23, 2024
1 parent 0760102 commit 4330194
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Set;

@Repository
@RepositoryRestResource(collectionResourceRel = "standardReportCardType", path = "standardReportCardType")
Expand All @@ -27,5 +28,5 @@ Page<StandardReportCardType> findByLastModifiedDateTimeIsBetweenOrderByLastModif

boolean existsByLastModifiedDateTimeGreaterThan(DateTime lastModifiedDateTime);

List<StandardReportCardType> findAllByNameIn(List<String> defaultDashboardStandardCardTypeNames);
List<StandardReportCardType> findAllByNameIn(Set<String> defaultDashboardStandardCardTypeNames);
}
Original file line number Diff line number Diff line change
Expand Up @@ -188,12 +188,12 @@ public void saveCards(ReportCardBundleRequest[] cardContracts) {
}

public Map<String, ReportCard> createDefaultDashboardCards(Organisation organisation) {
List<String> defaultDashboardStandardCardTypeNames = Arrays.asList("Scheduled visits", "Overdue visits", "Total", "Recent registrations", "Recent enrolments", "Recent visits", "Due checklist");
List<StandardReportCardType> standardReportCardTypes = standardReportCardTypeRepository.findAllByNameIn(defaultDashboardStandardCardTypeNames);
Map<String, String> defaultDashboardCards = getDefaultDashboardCardNamesAndUuids();
List<StandardReportCardType> standardReportCardTypes = standardReportCardTypeRepository.findAllByNameIn(defaultDashboardCards.keySet());
Map<String, ReportCard> savedCards = new HashMap<>();
standardReportCardTypes.forEach(standardReportCardType -> {
ReportCard reportCard = new ReportCard();
reportCard.setUuid(UUID.randomUUID().toString());
reportCard.setUuid(defaultDashboardCards.get(standardReportCardType.getName()));
reportCard.setStandardReportCardType(standardReportCardType);
reportCard.setOrganisationId(organisation.getId());
reportCard.setName(standardReportCardType.getName());
Expand All @@ -214,4 +214,16 @@ public Map<String, ReportCard> createDefaultDashboardCards(Organisation organisa
});
return savedCards;
}

private static Map<String, String> getDefaultDashboardCardNamesAndUuids() {
Map<String, String> defaultDashboardStandardCardTypeNamesAndUuids = new HashMap<>();
defaultDashboardStandardCardTypeNamesAndUuids.put("Scheduled visits", "6085c2f4-52e7-4b08-85b6-d6b2612b4cf5");
defaultDashboardStandardCardTypeNamesAndUuids.put("Overdue visits", "85ce7239-e8b5-4e57-b07d-66c18cee47b2");
defaultDashboardStandardCardTypeNamesAndUuids.put("Total", "a1673f8a-c394-4bcf-8b6f-63d83a5443e2");
defaultDashboardStandardCardTypeNamesAndUuids.put("Recent registrations", "f366f35a-5c4f-4ff7-b510-2dc9f5f88847");
defaultDashboardStandardCardTypeNamesAndUuids.put("Recent enrolments", "e1036b69-df46-4351-9916-10cd4cfcb6bd");
defaultDashboardStandardCardTypeNamesAndUuids.put("Recent visits", "dd961ee1-9d4e-4ec9-99f0-99b36672be7c");
defaultDashboardStandardCardTypeNamesAndUuids.put("Due checklist", "9b7632dd-4e98-429a-8e42-67a947bf9ece");
return defaultDashboardStandardCardTypeNamesAndUuids;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,17 @@
import org.avni.server.util.ReactAdminUtil;
import org.avni.server.web.contract.reports.*;
import org.avni.server.web.request.DashboardFilterRequest;
import org.avni.server.web.request.DashboardFilterResponse;
import org.avni.server.web.request.DashboardWebRequest;
import org.avni.server.web.request.reports.DashboardSectionCardMappingRequest;
import org.avni.server.web.request.reports.DashboardSectionWebRequest;
import org.avni.server.web.response.reports.DashboardFilterConfigResponse;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Service
public class DashboardService implements NonScopeAwareService {
Expand Down Expand Up @@ -214,74 +215,75 @@ public void saveDashboards(DashboardBundleContract[] dashboardContracts) {

public Dashboard createDefaultDashboard(Organisation organisation) {
Map<String, ReportCard> defaultDashboardCards = cardService.createDefaultDashboardCards(organisation);
Dashboard defaultDashboard = createDashboard(organisation, "Default Dashboard");
Dashboard defaultDashboard = createDashboard(organisation, "Default Dashboard", "c4d3bc0a-027e-4a6a-87dd-85e5b7285523");

DashboardSection visitDetailsSection = createDashboardSection(organisation, "Visit Details", 1.0);
DashboardSectionCardMapping scheduledVisitsToVisitDetailsMapping = createDashboardSectionCardMapping(organisation, defaultDashboardCards.get("Scheduled visits"), visitDetailsSection, 1.0);
DashboardSection visitDetailsSection = createDashboardSection(organisation, "Visit Details", "741711ef-df17-4884-8928-20dee701479e", 1.0);
DashboardSectionCardMapping scheduledVisitsToVisitDetailsMapping = createDashboardSectionCardMapping(organisation, "4d139c45-1854-46ec-ad80-40725f7b9b8a", defaultDashboardCards.get("Scheduled visits"), visitDetailsSection, 1.0);
visitDetailsSection.addDashboardSectionCardMapping(scheduledVisitsToVisitDetailsMapping);
DashboardSectionCardMapping overdueVisitsToVisitDetailsMapping = createDashboardSectionCardMapping(organisation, defaultDashboardCards.get("Overdue visits"), visitDetailsSection, 2.0);
DashboardSectionCardMapping overdueVisitsToVisitDetailsMapping = createDashboardSectionCardMapping(organisation, "4dff9285-88b3-43de-a90b-9823ab32e433", defaultDashboardCards.get("Overdue visits"), visitDetailsSection, 2.0);
visitDetailsSection.addDashboardSectionCardMapping(overdueVisitsToVisitDetailsMapping);
defaultDashboard.addSection(visitDetailsSection);

DashboardSection recentStatisticsSection = createDashboardSection(organisation, "Recent Statistics", 2.0);
DashboardSectionCardMapping recentRegistrationsToStatisticsMapping = createDashboardSectionCardMapping(organisation, defaultDashboardCards.get("Recent registrations"), recentStatisticsSection, 1.0);
DashboardSection recentStatisticsSection = createDashboardSection(organisation, "Recent Statistics", "fb302038-25a1-4cd6-9f56-80ef67b21103", 2.0);
DashboardSectionCardMapping recentRegistrationsToStatisticsMapping = createDashboardSectionCardMapping(organisation, "8afecd6c-741c-4871-86f1-bce171f8bfd8", defaultDashboardCards.get("Recent registrations"), recentStatisticsSection, 1.0);
recentStatisticsSection.addDashboardSectionCardMapping(recentRegistrationsToStatisticsMapping);
DashboardSectionCardMapping recentEnrolmentsToStatisticsMapping = createDashboardSectionCardMapping(organisation, defaultDashboardCards.get("Recent enrolments"), recentStatisticsSection, 2.0);
DashboardSectionCardMapping recentEnrolmentsToStatisticsMapping = createDashboardSectionCardMapping(organisation, "383b8df8-93d8-43d9-bc96-545e1176fe63", defaultDashboardCards.get("Recent enrolments"), recentStatisticsSection, 2.0);
recentStatisticsSection.addDashboardSectionCardMapping(recentEnrolmentsToStatisticsMapping);
DashboardSectionCardMapping recentVisitsToStatisticsMapping = createDashboardSectionCardMapping(organisation, defaultDashboardCards.get("Recent visits"), recentStatisticsSection, 3.0);
DashboardSectionCardMapping recentVisitsToStatisticsMapping = createDashboardSectionCardMapping(organisation, "9fb198b6-ae10-4c3f-a8e6-652b7d1b7e9c", defaultDashboardCards.get("Recent visits"), recentStatisticsSection, 3.0);
recentStatisticsSection.addDashboardSectionCardMapping(recentVisitsToStatisticsMapping);
defaultDashboard.addSection(recentStatisticsSection);

DashboardSection registrationOverviewSection = createDashboardSection(organisation, "Registration Overview", 3.0);
DashboardSectionCardMapping totalToRegistrationOverviewMapping = createDashboardSectionCardMapping(organisation, defaultDashboardCards.get("Total"), registrationOverviewSection, 1.0);
DashboardSection registrationOverviewSection = createDashboardSection(organisation, "Registration Overview", "2ce712c2-3fa3-4ca4-9703-95766ef512c2",3.0);
DashboardSectionCardMapping totalToRegistrationOverviewMapping = createDashboardSectionCardMapping(organisation, "e02a68ed-c02b-4cba-a5b5-6a5c71ab5eb8", defaultDashboardCards.get("Total"), registrationOverviewSection, 1.0);
registrationOverviewSection.addDashboardSectionCardMapping(totalToRegistrationOverviewMapping);
defaultDashboard.addSection(registrationOverviewSection);

DashboardFilter subjectTypeFilter = createDashboardFilter(organisation, "Subject Type", new JsonObject()
DashboardFilter subjectTypeFilter = createDashboardFilter(organisation, "Subject Type", "20367018-a168-43ff-a28f-64cd46ad3e2c", new JsonObject()
.with(DashboardFilter.DashboardFilterConfig.TypeFieldName, String.valueOf(DashboardFilter.FilterType.SubjectType)));
defaultDashboard.addUpdateFilter(subjectTypeFilter);

DashboardFilter asOnDateFilter = createDashboardFilter(organisation, "As On Date", new JsonObject()
DashboardFilter asOnDateFilter = createDashboardFilter(organisation, "As On Date", "efea5b8d-d621-47d0-a02c-c9b1a667b680", new JsonObject()
.with(DashboardFilter.DashboardFilterConfig.TypeFieldName, String.valueOf(DashboardFilter.FilterType.AsOnDate)));
defaultDashboard.addUpdateFilter(asOnDateFilter);

return dashboardRepository.save(defaultDashboard);
}

private OrganisationAwareEntity setDefaults(OrganisationAwareEntity entity, Organisation organisation) {
entity.assignUUID();
private OrganisationAwareEntity setDefaults(OrganisationAwareEntity entity, Organisation organisation, String uuid) {
entity.setUuid(uuid);
entity.setOrganisationId(organisation.getId());
return entity;
}

private Dashboard createDashboard(Organisation organisation, String name) {
private Dashboard createDashboard(Organisation organisation, String name, String uuid) {
Dashboard dashboard = new Dashboard();
setDefaults(dashboard, organisation);
setDefaults(dashboard, organisation, uuid);
dashboard.setName(name);
return dashboard;
}

private DashboardSection createDashboardSection(Organisation organisation, String name, Double displayOrder) {
private DashboardSection createDashboardSection(Organisation organisation, String name, String uuid, Double displayOrder) {
DashboardSection dashboardSection = new DashboardSection();
setDefaults(dashboardSection, organisation);
setDefaults(dashboardSection, organisation, uuid);
dashboardSection.setName(name);
dashboardSection.setViewType(DashboardSection.ViewType.Default);
dashboardSection.setDescription("");
dashboardSection.setViewType(DashboardSection.ViewType.Tile);
dashboardSection.setDisplayOrder(displayOrder);
return dashboardSection;
}

private DashboardSectionCardMapping createDashboardSectionCardMapping(Organisation organisation, ReportCard reportCard, DashboardSection dashboardSection, Double displayOrder) {
private DashboardSectionCardMapping createDashboardSectionCardMapping(Organisation organisation, String uuid, ReportCard reportCard, DashboardSection dashboardSection, Double displayOrder) {
DashboardSectionCardMapping dashboardSectionCardMapping = new DashboardSectionCardMapping();
setDefaults(dashboardSectionCardMapping, organisation);
setDefaults(dashboardSectionCardMapping, organisation, uuid);
dashboardSectionCardMapping.setCard(reportCard);
dashboardSectionCardMapping.setDashboardSection(dashboardSection);
dashboardSectionCardMapping.setDisplayOrder(displayOrder);
return dashboardSectionCardMapping;
}

private DashboardFilter createDashboardFilter(Organisation organisation, String name, JsonObject filterConfig) {
private DashboardFilter createDashboardFilter(Organisation organisation, String name, String uuid, JsonObject filterConfig) {
DashboardFilter dashboardFilter = new DashboardFilter();
setDefaults(dashboardFilter, organisation);
setDefaults(dashboardFilter, organisation, uuid);
dashboardFilter.setName(name);
dashboardFilter.setFilterConfig(filterConfig);
return dashboardFilter;
Expand Down

1 comment on commit 4330194

@himeshr
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would recommend all UUIDs to be declared as constants in a separate file and then those constants be used in CardService and DashboardService and where-ever else needed.

Please sign in to comment.