Skip to content

Commit

Permalink
OpsMessage added
Browse files Browse the repository at this point in the history
  • Loading branch information
Christian-Haugland committed Apr 26, 2022
1 parent dd32d5f commit 1eae9aa
Show file tree
Hide file tree
Showing 19 changed files with 400 additions and 118 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package nav.portal.core.entities;

import java.util.Objects;
import java.util.UUID;

public class OpsMessageEntity {

private UUID id;
private String internalHeader;
private String internalText;
private String externalHeader;
private String externalText;
private boolean isActive;
private boolean onlyShowForNavEmployees;

public OpsMessageEntity() {
}

public boolean getOnlyShowForNavEmployees() {
return onlyShowForNavEmployees;
}

public OpsMessageEntity setOnlyShowForNavEmployees(boolean onlyShowForNavEmployees) {
this.onlyShowForNavEmployees = onlyShowForNavEmployees;
return this;
}

public boolean getIsActive() {
return isActive;
}

public OpsMessageEntity setIsActive(boolean active) {
isActive = active;
return this;
}

public UUID getId() {
return id;
}

public OpsMessageEntity setId(UUID id) {
this.id = id;
return this;
}

public String getInternalHeader() {
return internalHeader;
}

public OpsMessageEntity setInternalHeader(String internalHeader) {
this.internalHeader = internalHeader;
return this;
}

public String getInternalText() {
return internalText;
}

public OpsMessageEntity setInternalText(String internalText) {
this.internalText = internalText;
return this;
}

public String getExternalHeader() {
return externalHeader;
}

public OpsMessageEntity setExternalHeader(String externalHeader) {
this.externalHeader = externalHeader;
return this;
}

public String getExternalText() {
return externalText;
}

public OpsMessageEntity setExternalText(String externalText) {
this.externalText = externalText;
return this;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
OpsMessageEntity that = (OpsMessageEntity) o;
return isActive == that.isActive && onlyShowForNavEmployees == that.onlyShowForNavEmployees && Objects.equals(id, that.id) && Objects.equals(internalHeader, that.internalHeader) && Objects.equals(internalText, that.internalText) && Objects.equals(externalHeader, that.externalHeader) && Objects.equals(externalText, that.externalText);
}

@Override
public int hashCode() {
return Objects.hash(id, internalHeader, internalText, externalHeader, externalText, isActive, onlyShowForNavEmployees);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package nav.portal.core.repositories;

import nav.portal.core.entities.OpsMessageEntity;
import nav.portal.core.entities.ServiceEntity;
import nav.portal.core.exceptionHandling.ExceptionUtil;
import org.fluentjdbc.*;

import java.sql.SQLException;
import java.util.*;

public class OpsRepository {


private final DbContextTable opsMessageTable;
private final DbContextTable opsMessageServiceTable;
private final DbContextTable serviceTable;


public OpsRepository(DbContext dbContext) {
opsMessageTable = dbContext.table("ops_message");
serviceTable = dbContext.table("service");
opsMessageServiceTable = dbContext.table("ops_message_service");
}

public UUID save(OpsMessageEntity entity, List<UUID> services) {
DatabaseSaveResult<UUID> result = opsMessageTable.newSaveBuilderWithUUID("id", entity.getId())
.setField("intern_header", entity.getInternalHeader())
.setField("intern_text", entity.getInternalText())
.setField("extern_header", entity.getExternalHeader())
.setField("extern_text", entity.getExternalText())
.setField("is_active", entity.getIsActive())
.setField("only_show_for_nav_employees", entity.getOnlyShowForNavEmployees())
.execute();
setServicesOnOpsMessage(result.getId(), services);
return result.getId();
}

public void setServicesOnOpsMessage(UUID opsId, List<UUID> services) {
opsMessageServiceTable.where("ops_message_id", opsId).executeDelete();

for(int i = 0; i < services.size(); i++){
opsMessageServiceTable.insert()
.setField("ops_message_id", opsId)
.setField("service_id", services.get(i))
.execute();
}
}

public Map.Entry<OpsMessageEntity, List<ServiceEntity>> retrieveOne(UUID ops_id) {
DbContextTableAlias ops = opsMessageTable.alias("ops");
DbContextTableAlias o2s = opsMessageServiceTable.alias("o2s");
DbContextTableAlias service = serviceTable.alias("service");

Map<OpsMessageEntity, List<ServiceEntity>> result = new HashMap<>();
ops
.where("id" , ops_id)
.leftJoin(ops.column("id"), o2s.column("ops_message_id"))
.leftJoin(o2s.column("service_id"), service.column("id"))
.list(row -> {
List<ServiceEntity> serviceList = result
.computeIfAbsent(toOps(row.table(ops)), ignored -> new ArrayList<>());

DatabaseRow serivceRow = row.table(service);
Optional.ofNullable(row.getUUID("service_id"))
.ifPresent(serviceId -> serviceList.add(ServiceRepository.toService(serivceRow)));
return null;
});
return result
.entrySet()
.stream().findFirst()
.orElseThrow(() -> new IllegalArgumentException("Not found: OpsMessage with id " + ops_id));
}

static OpsMessageEntity toOps(DatabaseRow row){
try {
return new OpsMessageEntity()
.setId(row.getUUID("id"))
.setInternalHeader(row.getString("intern_header"))
.setInternalText(row.getString("intern_text"))
.setExternalHeader(row.getString("extern_header"))
.setExternalText(row.getString("extern_text"))
.setIsActive(row.getBoolean("is_active"))
.setOnlyShowForNavEmployees(row.getBoolean("only_show_for_nav_employees"));
} catch (SQLException e) {
throw ExceptionUtil.soften(e);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ CREATE TABLE ops_message
id UUID NOT NULL,
intern_header VARCHAR(100) NOT NULL,
intern_text VARCHAR(100) NOT NULL,
extern_header VARCHAR(100) NOT NULL,
extern_text VARCHAR(100) NOT NULL,
isActive boolean NOT NULL,
onlyShowForNavEmployees boolean NOT NULL,
extern_header VARCHAR(100) NULL,
extern_text VARCHAR(100) NULL,
is_active boolean NOT NULL,
only_show_for_nav_employees boolean NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT NOW(),
updated_at timestamp with time zone NULL,
PRIMARY KEY (id)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import nav.portal.core.enums.ServiceType;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import java.util.*;
import java.util.stream.Collectors;
Expand All @@ -29,10 +30,6 @@ public class SampleData {
static final ArrayList<String> icons = new ArrayList<>(Arrays.asList("0001", "0002", "0003", "0004", "0005", "0006", "0007", "0008", "0009", "0010", "0011", "0012"));

static final ArrayList<String> firstNames = new ArrayList<>(Arrays.asList("Arne", "Bodil", "Gudrun", "Kjell Åge", "Hufsa", "Elg", "Rake", "Æskild", "Øygunn"));
static final ArrayList<String> lastNames = new ArrayList<>(Arrays.asList("Tacokrydder", "Plaskelaksen", "Grompesen", "Hamsterhjul"));
static final ArrayList<String> emails = new ArrayList<>(Arrays.asList("[email protected]", "plaskelaksen@laksegård.com", "[email protected]", "[email protected]"));
static final ArrayList<String> phoneNumbers = new ArrayList<>(Arrays.asList("01020304", "13371337", "69691337", "42069117"));


public static String getRandomizedDashboardName() {
return getRandomFromArray(dashboardNames);
Expand All @@ -45,6 +42,13 @@ public static AreaEntity getRandomizedAreaEntity() {
.setIcon(getRandomFromArray(icons));
}

public static OpsMessageEntity getRandomOpsMessageEntity() {
return new OpsMessageEntity()
.setInternalHeader(getRandomFromArray(firstNames))
.setInternalText(getRandomFromArray(areaNames))
.setOnlyShowForNavEmployees(true)
.setIsActive(true);
}

public static AreaEntity getRandomizedAreaEntityWithNameNotInList(List<AreaEntity> areas) {
List<String> usedNames = areas.stream().map(AreaEntity::getName).collect(Collectors.toList());
Expand Down Expand Up @@ -116,15 +120,6 @@ public static List<SubAreaEntity> getNonEmptyListOfSubAreaEntity(int length) {
return subAreas;
}

public static CitizenUserEntity getRandomizedCitizenEntity() {
return new CitizenUserEntity()
.setFirstName(getRandomFromArray(firstNames))
.setLastName(getRandomFromArray(lastNames))
.setEmail(getRandomFromArray(emails))
.setPhoneNumber(getRandomFromArray(phoneNumbers));
}


public static ServiceEntity getRandomizedServiceEntity() {
return new ServiceEntity()
.setName(getRandomFromArray(serviceNames))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ public static void clearAllTableData(DbContext dbContext){

DbContextTable dashboardTable = dbContext.table("dashboard");
dashboardTable.whereExpression("id is NOT null").executeDelete();

}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,36 @@ public static ServiceDto toServiceDtoShallow(ServiceEntity entity){
return dto;
}

public static OPSmessageDto toOpsMessageDtoShallow(OpsMessageEntity entity) {
OPSmessageDto dto = new OPSmessageDto();
dto.setId(entity.getId());
dto.setInternalHeader(entity.getInternalHeader());
dto.setInternalMessage(entity.getInternalText());
dto.setExternalHeader(entity.getExternalHeader());
dto.setExternalMessage(entity.getExternalText());
dto.setIsActive(entity.getIsActive());
dto.setOnlyShowForNavEmployees(entity.getOnlyShowForNavEmployees());
return dto;
}

public static OPSmessageDto toOpsMessageDtoDeep(OpsMessageEntity entity, List<UUID> services) {
OPSmessageDto dto = toOpsMessageDtoShallow(entity);
dto.setAffectedServices(services);
return dto;
}

public static OpsMessageEntity toOpsMessageEntity(OPSmessageDto opsMessageDto) {
OpsMessageEntity opsMessageEntity = new OpsMessageEntity();
opsMessageEntity.setId(opsMessageDto.getId());
opsMessageEntity.setExternalHeader(opsMessageDto.getExternalHeader());
opsMessageEntity.setExternalText(opsMessageDto.getExternalMessage());
opsMessageEntity.setInternalHeader(opsMessageDto.getInternalHeader());
opsMessageEntity.setInternalText(opsMessageDto.getInternalMessage());
opsMessageEntity.setIsActive(opsMessageDto.getIsActive());
opsMessageEntity.setOnlyShowForNavEmployees(opsMessageDto.getOnlyShowForNavEmployees());
return opsMessageEntity;
}

public static ServiceDto toServiceDtoDeep(ServiceEntity service ,List<ServiceEntity> dependencies){
Map<ServiceEntity, List<ServiceEntity>> map = new HashMap<>();
map.put(service,dependencies);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package no.nav.portal.rest.api.Helpers;

import nav.portal.core.entities.AreaEntity;
import nav.portal.core.entities.AreaWithServices;
import nav.portal.core.entities.ServiceEntity;
import nav.portal.core.entities.SubAreaEntity;
import nav.portal.core.repositories.AreaRepository;
import nav.portal.core.repositories.DashboardRepository;
import nav.portal.core.repositories.RecordRepository;
Expand All @@ -20,14 +18,14 @@
import java.util.UUID;
import java.util.stream.Collectors;

public class AreaRepositoryHelper {
public class AreaControllerHelper {
private final AreaRepository areaRepository;
private final DashboardRepository dashboardRepository;
private final ServiceRepository serviceRepository;
private final RecordRepository recordRepository;


public AreaRepositoryHelper(DbContext dbContext) {
public AreaControllerHelper(DbContext dbContext) {
this.areaRepository = new AreaRepository(dbContext);
this.dashboardRepository = new DashboardRepository(dbContext);
this.serviceRepository = new ServiceRepository(dbContext);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@
import java.util.UUID;
import java.util.stream.Collectors;

public class DashboardRepositoryHelper {
public class DashboardControllerHelper {

private final DashboardRepository dashboardRepository;
private final RecordRepository recordRepository;
private final AreaRepository areaRepository;
private final SubAreaRepository subAreaRepository;


public DashboardRepositoryHelper(DbContext dbContext) {
public DashboardControllerHelper(DbContext dbContext) {
this.dashboardRepository = new DashboardRepository(dbContext);
this.recordRepository = new RecordRepository(dbContext);
this.areaRepository = new AreaRepository(dbContext);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package no.nav.portal.rest.api.Helpers;

import nav.portal.core.entities.AreaEntity;
import nav.portal.core.entities.OpsMessageEntity;
import nav.portal.core.entities.ServiceEntity;
import nav.portal.core.entities.SubAreaEntity;
import nav.portal.core.repositories.*;
import no.nav.portal.rest.api.EntityDtoMappers;
import no.portal.web.generated.api.AreaDto;
import no.portal.web.generated.api.OPSmessageDto;
import no.portal.web.generated.api.SubAreaDto;
import org.fluentjdbc.DatabaseRow;
import org.fluentjdbc.DbContext;
import org.fluentjdbc.DbContextTableAlias;

import java.util.*;
import java.util.stream.Collectors;

public class OpsControllerHelper {
private final OpsRepository opsRepository;

public OpsControllerHelper(DbContext dbContext) {
this.opsRepository = new OpsRepository(dbContext);
}




public OPSmessageDto newOps(OPSmessageDto opsMessageDto){
UUID uuid = opsRepository.save(EntityDtoMappers.toOpsMessageEntity(opsMessageDto), opsMessageDto.getAffectedServices());
Map.Entry<OpsMessageEntity, List<ServiceEntity>> ops = opsRepository.retrieveOne(uuid);
return EntityDtoMappers.toOpsMessageDtoDeep(ops.getKey(), ops.getValue().stream().map(ServiceEntity::getId).collect(Collectors.toList()));
}
}
Loading

0 comments on commit 1eae9aa

Please sign in to comment.