Skip to content

Commit

Permalink
perf: increase performance of Organizationrepository
Browse files Browse the repository at this point in the history
  • Loading branch information
Fredrik Marjoni committed Mar 3, 2026
1 parent c334f4e commit dcc32bf
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public boolean donate(Customer customer, int orgNumber, BigDecimal amount) {
if (org == null) {
return false;
}
Donation donation = new Donation(customer.getUserId(), org.getOrgNumber(),
Donation donation = new Donation(customer.getUserId(), org.orgNumber(),
amount, Timestamp.from(Instant.now()));
donationRepository.addDonation(donation);
return true;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,58 +1,63 @@
package edu.group5.app.model.organization;

import edu.group5.app.model.Repository;
import tools.jackson.core.type.TypeReference;
import tools.jackson.databind.ObjectMapper;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
* Handles the business logic associated with organizations
*/
public class OrganizationRepository extends Repository<Integer, Organization> {
private final HashMap<Integer, Organization> grandMap;

@SuppressWarnings("unchecked")
public OrganizationRepository(Object[] input) {
grandMap = new HashMap<>();
ObjectMapper mapper = new ObjectMapper();

if (input == null) {
throw new NullPointerException("Input cannot be null");
}
for (Object obj : input) {
Map<String, Object> map = (Map<String, Object>) obj;
HashMap<String, Object> contentMap =
mapper.convertValue(obj, new TypeReference<HashMap<String, Object>>() {});

String orgNumberStr = ((String) contentMap.get("org_number")).replaceAll("\\s", "");
int orgNumber = Integer.parseInt(orgNumberStr);

int orgNumber = Integer.parseInt((String) map.get("org_number"));
String name = (String) map.get("name");
String name = (String) contentMap.get("name");

boolean trusted =
"approved".equalsIgnoreCase((String) map.get("status"));
String url = (String) map.get("url");

boolean isPreApproved = (Boolean) map.get("is_pre_approved");
boolean trusted = "approved".equalsIgnoreCase((String) contentMap.get("status"));

Organization organization = new Organization(
orgNumber, name, trusted, url,
isPreApproved,
"" // description not included in API
);
String websiteURL = (String) contentMap.get("url");

boolean isPreApproved = true;
if (!contentMap.containsKey("is_pre_approved")) {
isPreApproved = false;
} else if ((boolean)contentMap.get("is_pre_approved") == false) {
isPreApproved = false;
}

content.put(orgNumber, organization);
String description = "Information about " + name;

Organization org = new Organization(orgNumber, name, trusted, websiteURL, isPreApproved, description);

grandMap.put(org.orgNumber(), org);
}
}
}

/**
* Gets all trusted organizations in the repository
* @return all organizations with trusted = true
*/
public Map<Integer, Organization> getTrustedOrganizations() {
/**
* Gets all trusted organizations in the repository
* @return all organizations with trusted = true
*/
public Map<Integer, Organization> getTrustedOrganizations() {
Map<Integer, Organization> trustedOrganizations = new HashMap<>();

content.forEach((orgNr, org) -> {
if (org.trusted()) {
trustedOrganizations.put(orgNr, org);
}
grandMap.forEach((orgNr, org) -> {
if (org.trusted()) {
trustedOrganizations.put(orgNr, org);
}
});

return trustedOrganizations;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ void constructor_CreatesAnOrganizationWhenInputIsValid() {
assertAll(
() -> assertEquals(1, org.orgNumber()),
() -> assertEquals("Org", org.name()),
() -> assertTrue(org.trusted()),
() -> assertTrue(org.status()),
() -> assertEquals("org.com", org.websiteURL()),
() -> assertTrue(org.isPreApproved()),
() -> assertEquals("Org description", org.description())
Expand Down

0 comments on commit dcc32bf

Please sign in to comment.