feature/issues_v1 #25

Open
DmitrySheyko wants to merge 12 commits from feature/issues_v1 into develop
6 changed files with 239 additions and 23 deletions
Showing only changes of commit 7396c2a2ef - Show all commits

View File

@ -34,7 +34,7 @@ public class Issue {
@EqualsAndHashCode.Include @EqualsAndHashCode.Include
private Long id; private Long id;
@Column(name = "iid") @Column(name = "two_id")
Review

Лишний перенос строки, и комментарий непонятно что означает, почему это стоит учитывать и почему этот комментарий тут? Пагинация передается и настраивается. Комментарий стоит удалить.

Лишний перенос строки, и комментарий непонятно что означает, почему это стоит учитывать и почему этот комментарий тут? Пагинация передается и настраивается. Комментарий стоит удалить.
Review

Правки внес.
Комментарий думал оставить временно, чтобы не забыть осоенность которую нашел в документации. Привычка везде оставлять напоминания.

Правки внес. Комментарий думал оставить временно, чтобы не забыть осоенность которую нашел в документации. Привычка везде оставлять напоминания.
private Long twoId; private Long twoId;
@Column(name = "project_id") @Column(name = "project_id")
@ -64,7 +64,7 @@ public class Issue {
private Person closedBy; private Person closedBy;
@ElementCollection @ElementCollection
@CollectionTable(name = "issue_label", joinColumns = @JoinColumn(name = "label_id")) @CollectionTable(name = "issue_labels", joinColumns = @JoinColumn(name = "label_id"))
@Column(name = "labels") @Column(name = "labels")
private Set<String> labels = new HashSet<>(); private Set<String> labels = new HashSet<>();
@ -93,29 +93,29 @@ public class Issue {
private IssueType type; // ОБразец приходящего значения "INCIDENT" private IssueType type; // ОБразец приходящего значения "INCIDENT"
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinColumn(name = "assignee") @JoinColumn(name = "assignee_id")
private Person assignee; private Person assignee;
@Column(name = "user_notes_count") //Количество комментов пользователя @Column(name = "user_notes_count")
private Integer userNotesCount; private Integer userNotesCount;
@Column(name = "merge_requests_count") @Column(name = "merge_requests_count")
private Integer mergeRequestsCount; private Integer mergeRequestsCount;
@Column(name = "upvotes") // Количество лайков @Column(name = "up_votes")
private Integer upVotes; private Integer upVotes;
@Column(name = "downvotes") // Количество дизлайков @Column(name = "down_votes")
private Integer downVotes; private Integer downVotes;
@Column(name = "due_date") @Column(name = "due_date")
private LocalDateTime dueDate; private LocalDateTime dueDate;
@Column(name = "confidential") // Конфиденцальное или нет @Column(name = "confidential")
private Boolean confidential; private Boolean confidential;
@Column(name = "discussion_locked") @Column(name = "discussion_locked")
private Integer discussionLocked; //TODO выяснить тип поляя. private Integer discussionLocked;
@Column(name = "issue_type") @Column(name = "issue_type")
private String issueType; //TODO выяснить зачем дублирует поле type Образец приходящего значения "incident" private String issueType; //TODO выяснить зачем дублирует поле type Образец приходящего значения "incident"
@ -123,7 +123,6 @@ public class Issue {
@Column(name = "web_url") @Column(name = "web_url")
private String webUrl; private String webUrl;
@Embedded @Embedded
@AttributeOverrides({ @AttributeOverrides({
@AttributeOverride(name = "timeEstimate", column = @Column(name = "time_estimate")), @AttributeOverride(name = "timeEstimate", column = @Column(name = "time_estimate")),
@ -135,8 +134,8 @@ public class Issue {
@Embedded @Embedded
@AttributeOverrides({ @AttributeOverrides({
@AttributeOverride(name = "count", column = @Column(name = "count")), @AttributeOverride(name = "count", column = @Column(name = "task_count")),
@AttributeOverride(name = "completedCount", column = @Column(name = "completed_count")) @AttributeOverride(name = "completedCount", column = @Column(name = "task_completed_count"))
}) })
private TaskCompletionStatus taskCompletionStatus; private TaskCompletionStatus taskCompletionStatus;
@ -148,11 +147,11 @@ public class Issue {
@Embedded @Embedded
@AttributeOverrides({ @AttributeOverrides({
@AttributeOverride(name = "self", column = @Column(name = "self")), @AttributeOverride(name = "self", column = @Column(name = "link_to_self")),
@AttributeOverride(name = "notes", column = @Column(name = "notes")), @AttributeOverride(name = "notes", column = @Column(name = "link_to_notes")),
@AttributeOverride(name = "awardEmoji", column = @Column(name = "award_emoji")), @AttributeOverride(name = "awardEmoji", column = @Column(name = "link_to_award_emoji")),
@AttributeOverride(name = "project", column = @Column(name = "project")), @AttributeOverride(name = "project", column = @Column(name = "link_to_project")),
@AttributeOverride(name = "closedAsDuplicateOf", column = @Column(name = "closed_as_duplicate_of")) @AttributeOverride(name = "closedAsDuplicateOf", column = @Column(name = "link_to_closed_as_duplicate_of"))
}) })
private Links links; private Links links;
@ -164,8 +163,9 @@ public class Issue {
}) })
private References references; private References references;
/*Возможно надо заменить на енум "UNKNOWN", Critical - S1, High - S2, Medium - S3, Low - S4. /**
Но это поле доступно только для премиум акаунтов Возможно надо заменить на енум: "UNKNOWN", "Critical - S1", "High - S2", "Medium - S3", "Low - S4".
Но выбор любых значений кроме "UNKNOWN" доступен только для премиум акаунтов и я не могу получить точные значения котоые оно принимает.
*/ */
@Column(name = "severity") @Column(name = "severity")
private String severity; private String severity;
@ -174,7 +174,7 @@ public class Issue {
private Long movedToId; private Long movedToId;
@Column(name = "service_desk_reply_to") @Column(name = "service_desk_reply_to")
private String serviceDescReplyTo; //TODO не понятен тип поля private String serviceDescReplyTo;
@Column(name = "epic_issue_id") @Column(name = "epic_issue_id")
private Long epicId; // "epic_issue_id" Поле доснтупное только для премиум акаунтов private Long epicId; // "epic_issue_id" Поле доснтупное только для премиум акаунтов

View File

@ -28,7 +28,7 @@ public class Milestone {
@EqualsAndHashCode.Include @EqualsAndHashCode.Include
private Long id; private Long id;
@Column(name = "iid") @Column(name = "two_id")
private Long twoId; private Long twoId;
@Column(name = "project_id") @Column(name = "project_id")

View File

@ -0,0 +1,206 @@
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.17.xsd">
<changeSet id="2023-01-19-create-table-milestone" author="Dmitry Sheyko">
<createTable tableName="milestone">
<column name="id" type="int">
<constraints nullable="false" primaryKey="true"/>
</column>
<column name="two_id" type="int">
<constraints nullable="false"/>
</column>
<column name="project_id" type="int">
<constraints nullable="false"/>
</column>
<column name="title" type="varchar(255)">
<constraints nullable="false"/>
</column>
<column name="description" type="varchar(2000)">
<constraints nullable="true"/>
</column>
<column name="state" type="varchar(10)">
<constraints nullable="false"/>
</column>
<column name="created_date" type="datetime">
<constraints nullable="false"/>
</column>
<column name="updated_date" type="datetime">
<constraints nullable="true"/>
</column>
<column name="start_date" type="datetime">
<constraints nullable="true"/>
</column>
<column name="due_date" type="datetime">
<constraints nullable="true"/>
</column>
<column name="expired" type="boolean">
<constraints nullable="false"/>
</column>
<column name="web_url" type="varchar(300)">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet id="create-table-issue" author="Dmitry Sheyko">
<createTable tableName="issue">
<column name="id" type="int">
<constraints nullable="false" primaryKey="true"/>
</column>
<column name="two_id" type="int">
<constraints nullable="false"/>
</column>
<column name="project_id" type="int">
<constraints nullable="false"/>
</column>
<column name="title" type="varchar(255)">
<constraints nullable="false"/>
</column>
<column name="description" type="varchar(2000)">
<constraints nullable="true"/>
</column>
<column name="state" type="varchar(10)">
<constraints nullable="false"/>
</column>
<column name="created_date" type="datetime">
<constraints nullable="false"/>
</column>
<column name="updated_date" type="datetime">
<constraints nullable="true"/>
</column>
<column name="closed_at" type="datetime">
<constraints nullable="true"/>
</column>
<column name="closed_by_id" type="int">
<constraints nullable="true" foreignKeyName="fk_issue_closed_by_id_person_id" references="person(id)"/>
</column>
<column name="milestone_id" type="int">
<constraints nullable="false" foreignKeyName="fk_issie_milestone_id_milestone_id" references="milestone(id)"/>
</column>
<column name="author_id" type="int">
<constraints nullable="false" foreignKeyName="fk_issue_author_id_person_id" references="person(id)"/>
</column>
<column name="type" type="varchar(10)">
<constraints nullable="false"/>
</column>
<column name="assignee_id" type="int">
<constraints nullable="true" foreignKeyName="fk_issue_assignee_id_person_id" references="person(id)"/>
</column>
<column name="user_notes_count" type="int">
<constraints nullable="false"/>
</column>
<column name="merge_requests_count" type="int">
<constraints nullable="false"/>
</column>
<column name="up_votes" type="int">
<constraints nullable="false"/>
</column>
<column name="down_votes" type="int">
<constraints nullable="false"/>
</column>
<column name="due_date" type="datetime">
<constraints nullable="true"/>
</column>
<column name="confidential" type="boolean">
<constraints nullable="false"/>
</column>
<column name="discussion_locked" type="int">
<constraints nullable="true"/>
</column>
<column name="issue_type" type="varchar(10)">
<constraints nullable="false"/>
</column>
<column name="web_url" type="varchar(300)">
<constraints nullable="false"/>
</column>
<column name="time_estimate" type="int">
<constraints nullable="false"/>
</column>
<column name="total_time_spent" type="int">
<constraints nullable="false"/>
</column>
<column name="human_time_estimate" type="varchar(20)">
<constraints nullable="true"/>
</column>
<column name="human_total_time_spent" type="varchar(20)">
<constraints nullable="true"/>
</column>
<column name="task_count" type="int">
<constraints nullable="false"/>
</column>
<column name="task_completed_count" type="int">
<constraints nullable="false"/>
</column>
<column name="blocking_issues_count" type="int">
<constraints nullable="false"/>
</column>
<column name="has_tasks" type="boolean">
<constraints nullable="false"/>
</column>
<column name="link_to_self" type="varchar(300)">
<constraints nullable="false"/>
</column>
<column name="link_to_notes" type="varchar(300)">
<constraints nullable="false"/>
</column>
<column name="link_to_award_emoji" type="varchar(300)">
<constraints nullable="false"/>
</column>
<column name="link_to_project" type="varchar(300)">
<constraints nullable="false"/>
</column>
<column name="link_to_closed_as_duplicate_of" type="varchar(300)">
<constraints nullable="true"/>
</column>
<column name="short_reference" type="varchar(100)">
<constraints nullable="false"/>
</column>
<column name="relative_reference" type="varchar(100)">
<constraints nullable="false"/>
</column>
<column name="full_reference" type="varchar(100)">
<constraints nullable="false"/>
</column>
<column name="severity" type="varchar(50)">
<constraints nullable="true"/>
</column>
<column name="moved_to_id" type="int">
<constraints nullable="true"/>
</column>
<column name="service_desk_reply_to" type="varchar(1000)">
<constraints nullable="true"/>
</column>
<column name="epic_issue_id" type="int">
<constraints nullable="true"/>
</column>
</createTable>
</changeSet>
<changeSet id="create-table-issue_labels" author="Dmitry Sheyko">
<createTable tableName="issue_labels">
<column name="issue_id" type="int">
<constraints nullable="false" foreignKeyName="fk_issue_labels_issue_id"
references="issue(id)" deleteCascade="true"/>
</column>
<column name="labels" type="varchar(255)">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet id="create-table-issue_assignees" author="Dmitry Sheyko">
<createTable tableName="issue_assignees">
<column name="issue_id" type="int">
<constraints nullable="false" foreignKeyName="fk_issue_assignees_issue_id" references="issue(id)"/>
</column>
<column name="person_id" type="int">
<constraints nullable="false" foreignKeyName="fk_issue_assignees_person_id" references="person(id)"/>
</column>
</createTable>
<addPrimaryKey tableName="issue_assignees" columnNames="issue_id, person_id"/>
</changeSet>
</databaseChangeLog>

View File

@ -9,5 +9,6 @@
<include file="2022-12-03-create-tables.xml" relativeToChangelogFile="true"/> <include file="2022-12-03-create-tables.xml" relativeToChangelogFile="true"/>
<include file="2022-12-03-insert.xml" relativeToChangelogFile="true"/> <include file="2022-12-03-insert.xml" relativeToChangelogFile="true"/>
<include file="2023-01-19-create-tables-for-issue.xml" relativeToChangelogFile="true"/>
</databaseChangeLog> </databaseChangeLog>

View File

@ -71,7 +71,7 @@ public class IssueJson {
private Boolean confidential; private Boolean confidential;
@JsonProperty("discussion_locked") @JsonProperty("discussion_locked")
private Integer discussionLocked; //TODO выяснить тип поля private Integer discussionLocked;
@JsonProperty("issue_type") @JsonProperty("issue_type")
private String issueType; //TODO выяснить зачем дублирует поле type private String issueType; //TODO выяснить зачем дублирует поле type

TODO можно удалить, скоре всего это просто оставлено для обратной совместимости со старым апи

TODO можно удалить, скоре всего это просто оставлено для обратной совместимости со старым апи

Удалено

Удалено
@ -95,13 +95,13 @@ public class IssueJson {
private LinksJson links; private LinksJson links;
private ReferencesJson references; private ReferencesJson references;
private String severity; //TODO заменить на енум "UNKNOWN", Critical - S1, High - S2, Medium - S3, Low - S4, private String severity;
@JsonProperty("moved_to_id") @JsonProperty("moved_to_id")
private Long movedToId; private Long movedToId;
@JsonProperty("service_desk_reply_to") @JsonProperty("service_desk_reply_to")
private Long serviceDescReplyTo; //TODO не понятен тип поля private Long serviceDescReplyTo;
@JsonProperty("epic_issue_id") @JsonProperty("epic_issue_id")
private Long epicId; // "epic_issue_id" Поле доступное только для премиум акаунтов private Long epicId; // "epic_issue_id" Поле доступное только для премиум акаунтов

View File

@ -1,5 +1,6 @@
package dev.struchkov.bot.gitlab.sdk.domain; package dev.struchkov.bot.gitlab.sdk.domain;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data; import lombok.Data;
/** /**
@ -8,8 +9,16 @@ import lombok.Data;
@Data @Data
public class TimeStatsJson { public class TimeStatsJson {
@JsonProperty("time_estimate")
private Integer timeEstimate; private Integer timeEstimate;
@JsonProperty("total_time_spent")
private Integer totalTimeSpent; // количество секунд затраченых на работы, пример 37800" private Integer totalTimeSpent; // количество секунд затраченых на работы, пример 37800"
@JsonProperty("human_time_estimate")
private String humanTimeEstimate; private String humanTimeEstimate;
@JsonProperty("human_total_time_spent")
private String humanTotalTimeSpent; // Время строкой, пример "10h 30m" private String humanTotalTimeSpent; // Время строкой, пример "10h 30m"
} }