Cluster.java
package no.nav.data.team.cluster.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import no.nav.data.common.storage.domain.ChangeStamp;
import no.nav.data.common.storage.domain.DomainObject;
import no.nav.data.common.utils.StreamUtils;
import no.nav.data.team.cluster.dto.ClusterRequest;
import no.nav.data.team.cluster.dto.ClusterResponse;
import no.nav.data.team.shared.domain.HistorizedDomainObject;
import no.nav.data.team.shared.domain.Membered;
import no.nav.data.team.shared.dto.Links;
import no.nav.data.team.shared.domain.DomainObjectStatus;
import java.time.LocalDateTime;
import java.util.Comparator;
import java.util.List;
import java.util.UUID;
import static no.nav.data.common.utils.StreamUtils.copyOf;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Cluster implements DomainObject, Membered, HistorizedDomainObject {
private UUID id;
private String name;
private String description;
private String slackChannel;
private List<String> tags;
private UUID productAreaId;
private List<ClusterMember> members;
private DomainObjectStatus status;
private LocalDateTime lastNudge;
private ChangeStamp changeStamp;
private boolean updateSent;
public List<ClusterMember> getMembers() {
return members == null ? List.of() : members;
}
public Cluster convert(ClusterRequest request) {
name = request.getName();
description = request.getDescription();
slackChannel = request.getSlackChannel();
tags = copyOf(request.getTags());
// If an update does not contain member array don't update
if (!request.isUpdate() || request.getMembers() != null) {
members = StreamUtils.convert(request.getMembers(), ClusterMember::convert);
}
members.sort(Comparator.comparing(ClusterMember::getNavIdent));
status = request.getStatus();
productAreaId = request.productAreaIdAsUUID();
updateSent = false;
return this;
}
public ClusterResponse convertToResponse() {
return ClusterResponse.builder()
.id(id)
.name(name)
.description(description)
.slackChannel(slackChannel)
.tags(copyOf(tags))
.productAreaId(productAreaId)
.members(StreamUtils.convert(members, ClusterMember::convertToResponse))
.status(status)
.changeStamp(convertChangeStampResponse())
.links(Links.getFor(this))
.build();
}
}