Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tmi2 364/add grant advert controller and service #18

Merged
merged 5 commits into from
Oct 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/feature.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ on:
- bug/**
- GAP-**
- feat/**
- TMI2-**
pull_request:
branches:
- feature/**
- AFG-**
- bug/**
- GAP-**
- TMI2-**

jobs:
build:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package gov.cabinetoffice.gap.applybackend.dto.api;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.UUID;

@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public class GetGrandAdvertDto {
private UUID id;
private String externalSubmissionUrl;
private int version;
//need jsonProperty because Jackson removes the 'is' from 'isInternal'
@JsonProperty("isInternal")
private boolean isInternal;
private Integer grantApplicationId;
private Integer grantSchemeId;
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
package gov.cabinetoffice.gap.applybackend.dto.api;

import gov.cabinetoffice.gap.applybackend.model.SubmissionQuestion;
import lombok.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

import java.util.UUID;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
package gov.cabinetoffice.gap.applybackend.dto.api;

import gov.cabinetoffice.gap.applybackend.enums.GrantAttachmentStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.UUID;

@NoArgsConstructor
@AllArgsConstructor
@Builder
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package gov.cabinetoffice.gap.applybackend.enums;

public enum GrantAdvertPageResponseStatus {

NOT_STARTED, IN_PROGRESS, COMPLETED, CHANGED

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package gov.cabinetoffice.gap.applybackend.enums;

public enum GrantAdvertSectionResponseStatus {

NOT_STARTED, IN_PROGRESS, COMPLETED, CHANGED

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package gov.cabinetoffice.gap.applybackend.enums;

public enum GrantAdvertStatus {

DRAFT, SCHEDULED, PUBLISHED, UNPUBLISHED, UNSCHEDULED

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package gov.cabinetoffice.gap.applybackend.model;

import com.fasterxml.jackson.annotation.JsonInclude;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,12 @@
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.time.LocalDateTime;
import java.util.UUID;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,12 @@
import lombok.Setter;
import lombok.ToString;

import javax.persistence.*;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "grant_funding_organisation")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package gov.cabinetoffice.gap.applybackend.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "gap_user")
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class GapUser {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "gap_user_id")
private Integer id;

@Column(name = "user_sub")
private String userSub;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package gov.cabinetoffice.gap.applybackend.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = "grant_admin")
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class GrantAdmin {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "grant_admin_id")
private Integer id;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "funder_id", referencedColumnName = "funder_id")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
private FundingOrganisation funder;

@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "user_id", referencedColumnName = "gap_user_id")
private GapUser gapUser;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
package gov.cabinetoffice.gap.applybackend.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import gov.cabinetoffice.gap.applybackend.enums.GrantAdvertStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.Hibernate;
import org.hibernate.annotations.Type;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import java.time.Instant;
import java.util.Objects;
import java.util.UUID;

@EntityListeners(AuditingEntityListener.class)
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Entity
@Table(name = "grant_advert")
public class GrantAdvert extends BaseEntity {

@Id
@GeneratedValue
@Column(name = "grant_advert_id")
private UUID id;

@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.LAZY)
@JoinColumn(name = "scheme_id", nullable = false)
@ToString.Exclude
@JsonIgnoreProperties({"hibernateLazyInitializer"})
private GrantScheme scheme;

@Column(name = "version", nullable = false)
private Integer version;

@CreatedDate
@Column(name = "created", nullable = false)
private Instant created;

@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.LAZY)
@JoinColumn(name = "created_by", referencedColumnName = "grant_admin_id", nullable = false)
@ToString.Exclude
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
private GrantAdmin createdBy;

@LastModifiedDate
@Column(name = "last_updated")
private Instant lastUpdated;

@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.LAZY)
@JoinColumn(name = "last_updated_by", referencedColumnName = "grant_admin_id")
@ToString.Exclude
@JsonIgnoreProperties({"hibernateLazyInitializer"})
private GrantAdmin lastUpdatedBy;

@Column(name = "opening_date")
private Instant openingDate;

@Column(name = "closing_date")
private Instant closingDate;

@Column(name = "first_published_date")
private Instant firstPublishedDate;

@Column(name = "last_published_date")
private Instant lastPublishedDate;

@Column(name = "unpublished_date")
private Instant unpublishedDate;

@Column(name = "status", nullable = false)
@Enumerated(EnumType.STRING)
private GrantAdvertStatus status;

@Column(name = "contentful_entry_id", unique = true)
private String contentfulEntryId;

@Column(name = "contentful_slug", unique = true)
private String contentfulSlug;

@Column(name = "grant_advert_name")
private String grantAdvertName;

@Type(type = "json")
@Column(name = "response", columnDefinition = "json")
private GrantAdvertResponse response;

@Override
public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o))
return false;
GrantAdvert that = (GrantAdvert) o;
return id != null && Objects.equals(id, that.id);
}

@Override
public int hashCode() {
return getClass().hashCode();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package gov.cabinetoffice.gap.applybackend.model;

import gov.cabinetoffice.gap.applybackend.enums.GrantAdvertPageResponseStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class GrantAdvertPageResponse {

@Builder.Default
private List<GrantAdvertQuestionResponse> questions = new ArrayList<>();

private String id;

private GrantAdvertPageResponseStatus status;

public Optional<GrantAdvertQuestionResponse> getQuestionById(String questionId) {
return questions.stream().filter(page -> Objects.equals(page.getId(), questionId)).findFirst();

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package gov.cabinetoffice.gap.applybackend.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class GrantAdvertQuestionResponse {

private String id;

private Boolean seen;

private String response;

private String[] multiResponse;

}
Loading