ResponseFactory.java

package se.jobtechdev.personaldatagateway.api.util;

import se.jobtechdev.personaldatagateway.api.generated.entities.*;
import se.jobtechdev.personaldatagateway.api.generated.model.*;

import java.time.LocalDate;
import java.util.Optional;
import java.util.UUID;

public final class ResponseFactory {
  private ResponseFactory() {
  }

  public static Organization createOrganization(OrganizationEntity organization) {
    final var response =
        new Organization(
            organization.getId(),
            organization.getOrgNr(),
            organization.getName(),
            organization.getCreated(),
            organization.getUpdated());

    response.setDeleted(organization.getDeleted());

    return response;
  }

  public static OrganizationFaq createOrganizationFaq(UUID organizationId, FaqEntity faq) {

    return new OrganizationFaq(
        faq.getId(),
        organizationId,
        faq.getLang(),
        faq.getTitle(),
        faq.getContent(),
        faq.getCreated(),
        faq.getUpdated(),
        faq.getDeleted());
  }

  public static Client createClient(ClientEntity client) {
    final var response =
        new Client(
            client.getId(),
            client.getOrganizationEntity().getId(),
            client.getName(),
            Role.fromValue(client.getRole()),
            client.getCreated(),
            client.getUpdated());

    response.setRevoked(client.getRevoked());

    return response;
  }

  public static ClientRedirect createClientRedirect(RedirectEntity redirect) {
    final var response =
        new ClientRedirect(
            redirect.getId(),
            redirect.getClientEntity().getId(),
            redirect.getRedirectUrl(),
            redirect.getCreated(),
            redirect.getUpdated());

    response.setDeleted(redirect.getDeleted());

    return response;
  }

  public static ClientKeyReset createClientKeyReset(ClientKeyResetEntity clientKeyResetEntity) {
    final var clientKeyReset = new ClientKeyReset(clientKeyResetEntity.getCode(), clientKeyResetEntity.getCreated(), clientKeyResetEntity.getUpdated());
    clientKeyReset.setAccessed(clientKeyResetEntity.getAccessed());
    return clientKeyReset;
  }

  public static ClientKeyOtc createClientKeyOtc(ClientKeyResetEntity clientKeyReset) {
    return new ClientKeyOtc(clientKeyReset.getCode());
  }

  public static Datasource createDatasource(DatasourceEntity datasource) {
    final var response =
        new Datasource(
            datasource.getId(),
            datasource.getOrganizationEntity().getId(),
            datasource.getName(),
            datasource.getCreated(),
            datasource.getUpdated());

    response.setDeleted(datasource.getDeleted());

    return response;
  }

  public static DatasourceConfig createDatasourceConfig(DatasourceEntity datasource) {
    final var response =
        new DatasourceConfig(
            datasource.getId(),
            datasource.getPath(),
            datasource.getMethod());

    response.setHeaders(datasource.getHeaders());

    return response;
  }

  public static DatasourceFaq createDatasourceFaq(UUID datasourceId, FaqEntity faq) {
    final var response =
        new DatasourceFaq(
            faq.getId(),
            datasourceId,
            faq.getLang(),
            faq.getTitle(),
            faq.getContent(),
            faq.getCreated(),
            faq.getUpdated());

    response.setDeleted(faq.getDeleted());

    return response;
  }

  public static Sharing createSharing(SharingEntity sharing) {
    final var response =
        new Sharing(
            sharing.getId(),
            sharing.getDatasourceEntity().getId(),
            sharing.getPersonEntity().getId(),
            null == sharing.getClientEntity(),
            sharing.getCreated(),
            sharing.getUpdated());

    response.clientId(Optional.ofNullable(sharing.getClientEntity()).map(ClientEntity::getId).orElse(null));
    response.setRevoked(sharing.getRevoked());
    response.setExpires(sharing.getExpires());

    return response;
  }

  public static DataAccess createDataAccess(SharingAccessEntity sharingAccess) {
    return new DataAccess(
        sharingAccess.getId(),
        sharingAccess.getSharingEntity().getId(),
        sharingAccess.getCreated(),
        sharingAccess.getUpdated(),
        sharingAccess.getAccessed());
  }

  public static ApiInfo createApiInfo(
      String apiName,
      String apiVersion,
      String buildVersion,
      LocalDate apiReleased,
      java.net.URL apiDocumentation,
      ApiStatus apiStatus) {
    return new ApiInfo(
        apiName, apiVersion, buildVersion, apiReleased, apiDocumentation, apiStatus);
  }

  public static Health createHealth(Status status, HealthChecks checks) {
    return new Health(status, checks);
  }
}