Skip to content

Commit

Permalink
Merge pull request #41 from picksitquick/kanban_setup
Browse files Browse the repository at this point in the history
Adding models related to Project services/KanBan
  • Loading branch information
picksitquick committed Dec 30, 2023
2 parents 980a63f + 50287aa commit c969437
Show file tree
Hide file tree
Showing 16 changed files with 324 additions and 12 deletions.
6 changes: 6 additions & 0 deletions src/main/java/com/gamedoora/model/dao/ActivityType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.gamedoora.model.dao;

public enum ActivityType {
DEV,
NON_DEV;
}
62 changes: 62 additions & 0 deletions src/main/java/com/gamedoora/model/dao/BaseIssue.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.gamedoora.model.dao;

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

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import java.util.Date;
import java.util.List;
import java.util.UUID;


@Getter
@Setter
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "base issue")
public class BaseIssue {

@Id
@GeneratedValue
@Column(name = "issueId", nullable = false)
private UUID issueId;

private IssueType issueType;

private ActivityType activityType;

@Column(name = "title")
private String title;

@Column(name = "description")
private String description;

@Column(name = "storyPoints") // might be used in future
private String storyPoints;

@Column(name = "issuer")
private String issuer;

@Column(name = "assignee")
private String assignee;

private Priority priority;

private List<Comments> comments;

private List<IssueHistory> history;
// add api for get comment and history

@Temporal(TemporalType.TIMESTAMP)
private Date startDate;
}
14 changes: 4 additions & 10 deletions src/main/java/com/gamedoora/model/dao/Comments.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import javax.persistence.Table;
import java.io.Serial;
import java.io.Serializable;
import java.util.UUID;

@Builder
@Entity
Expand All @@ -27,25 +28,18 @@ public class Comments extends Audit implements Serializable {

@Serial
private static final long serialVersionUID = 1L;

// look into comments for KanBan board and make necessary changes, not going to thread comments, for activity stream use a separate comment
@Id
@GeneratedValue
@Column(name = "id", nullable = false)
private long id;

@Column(name = "context" , nullable = false)
private String context;

@Column(name = "commentable_id" , nullable = false)
private long commentableId;
private UUID issueId; // for project boards use UUID instead of long

@Column(name = "commentable_type" , nullable = false)
private String type;
private String comment;

@ManyToOne
@JoinColumn(name = "user_id")
Users users;

@Column(name = "parent_id")
private long parentId;
}
41 changes: 41 additions & 0 deletions src/main/java/com/gamedoora/model/dao/IssueHistory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.gamedoora.model.dao;

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

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import java.util.Date;
import java.util.UUID;

@Builder
@Getter
@Setter
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "issue history")
public class IssueHistory {

@Id
@Column(name = "emailId",nullable = false)
private UUID id;

@ManyToOne
@JoinColumn(name = "users_email_id")
private Users users;

private ActivityType activityType;

@Temporal(TemporalType.TIMESTAMP)
private Date startDate;
}
8 changes: 8 additions & 0 deletions src/main/java/com/gamedoora/model/dao/IssueStatus.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.gamedoora.model.dao;

public enum IssueStatus {
READY,
IN_PROGRESS,
IN_REVIEW,
DONE;
}
7 changes: 7 additions & 0 deletions src/main/java/com/gamedoora/model/dao/IssueType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.gamedoora.model.dao;

public enum IssueType {
STORY,
BUG,
FEATURE;
}
43 changes: 43 additions & 0 deletions src/main/java/com/gamedoora/model/dao/KanBan.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.gamedoora.model.dao;

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

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import java.util.Set;
import java.util.UUID;

@Builder
@Getter
@Setter
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "kanban")
public class KanBan {

@Id
@GeneratedValue
@Column(name = "boardId", nullable = false)
private UUID boardId;

@Column(name = "boardName", nullable = false)
private String boardName;

@ManyToMany(mappedBy = "kanBanSet")
private Set<Users> users;

@ManyToOne
@JoinColumn(name = "story_issue_email_id")
private StoryIssue storyIssue;
}
8 changes: 8 additions & 0 deletions src/main/java/com/gamedoora/model/dao/Priority.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.gamedoora.model.dao;

public enum Priority {
LOW,
NORMAL,
HIGH,
CRITICAL;
}
26 changes: 26 additions & 0 deletions src/main/java/com/gamedoora/model/dao/StoryIssue.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.gamedoora.model.dao;

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

import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

@Builder
@Getter
@Setter
@Entity
@AllArgsConstructor
@NoArgsConstructor
public class StoryIssue extends BaseIssue{
@OneToOne
private IssueStatus status;

@OneToMany(mappedBy = "storyIssue")
private KanBan kanBan;
}
6 changes: 4 additions & 2 deletions src/main/java/com/gamedoora/model/dao/Users.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
Expand All @@ -17,7 +16,6 @@
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.UniqueConstraint;

import java.io.Serializable;
import java.util.Date;
import java.util.Set;
Expand Down Expand Up @@ -96,6 +94,10 @@ public class Users extends Audit implements Serializable {
@JoinTable(name = "user_notification" , joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "notification_id"))
Set<Notifications> notifications;

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "user_board", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "boardId"))
Set<KanBan> kanBanSet;

public String getProviderToken() {
return providerToken;
}
Expand Down
30 changes: 30 additions & 0 deletions src/main/java/com/gamedoora/model/dto/BaseIssueDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.gamedoora.model.dto;

import com.gamedoora.model.dao.ActivityType;
import com.gamedoora.model.dao.Comments;
import com.gamedoora.model.dao.IssueHistory;
import com.gamedoora.model.dao.IssueType;
import com.gamedoora.model.dao.Priority;

import java.util.Date;
import java.util.List;

public class BaseIssueDTO {
private IssueType issueType;

private ActivityType activityType;

private String title;

private String description;

private String storyPoints;

private String issuer;

private String assignee;

private Priority priority;

private Date startDate;
}
15 changes: 15 additions & 0 deletions src/main/java/com/gamedoora/model/dto/IssueHistoryDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.gamedoora.model.dto;

import com.gamedoora.model.dao.ActivityType;
import com.gamedoora.model.dao.Users;

import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import java.util.Date;

public class IssueHistoryDTO {

private ActivityType activityType;

private Date startDate;
}
5 changes: 5 additions & 0 deletions src/main/java/com/gamedoora/model/dto/KanBanDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.gamedoora.model.dto;

public class KanBanDTO {
private String boardName;
}
19 changes: 19 additions & 0 deletions src/main/java/com/gamedoora/model/mapper/IssueHistoryMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.gamedoora.model.mapper;

import com.gamedoora.model.dao.IssueHistory;
import com.gamedoora.model.dto.IssueHistoryDTO;
import org.mapstruct.Builder;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

@Mapper(componentModel = "spring" , builder = @Builder(disableBuilder = true))
public abstract class IssueHistoryMapper extends BaseMapper{

public abstract IssueHistoryDTO issueHistoryToIssueHistoryDTO(IssueHistory issueHistory);

@Mapping(target = "createdBy" , expression = "java(getCreatedBy())")
@Mapping(target = "createdOn" , expression = "java(getNewDate())")
@Mapping(target = "updateBy" , expression = "java(getUpdatedBy())")
@Mapping(target = "updateOn" , expression = "java(getNewDate())")
public abstract IssueHistory issueHistoryDTOToIssueHistory(IssueHistoryDTO issueHistoryDTO);
}
27 changes: 27 additions & 0 deletions src/main/java/com/gamedoora/model/mapper/IssueMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.gamedoora.model.mapper;

import com.gamedoora.model.dao.BaseIssue;
import com.gamedoora.model.dto.BaseIssueDTO;
import org.mapstruct.Builder;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

/**
* In mappers, we are using expression = "java(functionName())" instead of using @Named annotations
* with qualifiedByName parameter because in case of @Named annotation the functions or utilities
* are needed to be defined within the same class/interface, this approach defeats the purpose
* of having a BaseMapper which follows the principle of Data Abstraction. So with the help of expression
* we can define all our common utilities and functions within one class/interface and use it globally.
* **/

@Mapper(componentModel = "spring", builder = @Builder(disableBuilder = true))
public abstract class IssueMapper extends BaseMapper{

public abstract BaseIssueDTO baseIssueToIssueDTO(BaseIssue baseIssue);

@Mapping(target = "createdBy" , expression = "java(getCreatedBy())")
@Mapping(target = "createdOn" , expression = "java(getNewDate())")
@Mapping(target = "updateBy" , expression = "java(getUpdatedBy())")
@Mapping(target = "updateOn" , expression = "java(getNewDate())")
public abstract BaseIssue baseIssueDTOToBaseIssue(BaseIssueDTO baseIssueDTO);
}
19 changes: 19 additions & 0 deletions src/main/java/com/gamedoora/model/mapper/KanBanMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.gamedoora.model.mapper;

import com.gamedoora.model.dao.KanBan;
import com.gamedoora.model.dto.KanBanDTO;
import org.mapstruct.Builder;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

@Mapper(componentModel = "spring" , builder = @Builder(disableBuilder = true))
public abstract class KanBanMapper extends BaseMapper{

public abstract KanBanDTO kanBanToKanBanDTO(KanBan kanBan);

@Mapping(target = "createdBy" , expression = "java(getCreatedBy())")
@Mapping(target = "createdOn" , expression = "java(getNewDate())")
@Mapping(target = "updateBy" , expression = "java(getUpdatedBy())")
@Mapping(target = "updateOn" , expression = "java(getNewDate())")
public abstract KanBan kanBanDTOToKanBan(KanBanDTO kanBanDTO);
}

0 comments on commit c969437

Please sign in to comment.