diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 8a04a22..12f4ea0 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -9,27 +9,22 @@ name: Java CI with Maven on: - push: - branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: - runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - name: Set up JDK 25 - uses: actions/setup-java@v4 - with: - java-version: '25' - distribution: 'temurin' - cache: maven - - name: Build with Maven - run: mvn -B package --file pom.xml + - uses: actions/checkout@v4 + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: '25' + distribution: 'temurin' + cache: maven - # Optional: Uploads the full dependency graph to GitHub to improve the quality of Dependabot alerts this repository can receive - - name: Update dependency graph - uses: advanced-security/maven-dependency-submission-action@571e99aab1055c2e71a1e2309b9691de18d6b7d6 + - name: Build + run: mvn -B package \ No newline at end of file diff --git a/src/main/java/org/example/alfs/entities/Attachment.java b/src/main/java/org/example/alfs/entities/Attachment.java index 022797e..53bf491 100644 --- a/src/main/java/org/example/alfs/entities/Attachment.java +++ b/src/main/java/org/example/alfs/entities/Attachment.java @@ -20,8 +20,10 @@ public class Attachment { @GeneratedValue private Long id; + @Column(nullable = false) private String fileName; + @Column(nullable = false) private String s3Key; private LocalDateTime uploadedAt; diff --git a/src/main/java/org/example/alfs/entities/AuditLog.java b/src/main/java/org/example/alfs/entities/AuditLog.java index eabd823..103bc9e 100644 --- a/src/main/java/org/example/alfs/entities/AuditLog.java +++ b/src/main/java/org/example/alfs/entities/AuditLog.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; import lombok.*; +import org.example.alfs.enums.AuditAction; import java.time.LocalDateTime; @@ -22,7 +23,9 @@ public class AuditLog { @GeneratedValue private Long id; - private String action; + @Enumerated(EnumType.STRING) + @Column(nullable = false, length = 50) + private AuditAction action; private String fieldName; diff --git a/src/main/java/org/example/alfs/entities/Ticket.java b/src/main/java/org/example/alfs/entities/Ticket.java index 55f3ff9..4498445 100644 --- a/src/main/java/org/example/alfs/entities/Ticket.java +++ b/src/main/java/org/example/alfs/entities/Ticket.java @@ -2,6 +2,7 @@ import jakarta.persistence.*; import lombok.*; +import org.example.alfs.enums.TicketStatus; import java.time.LocalDateTime; @@ -24,25 +25,45 @@ public class Ticket { @GeneratedValue private Long id; + @Column(nullable = false, length = 255) private String title; + @Lob + @Basic(fetch = FetchType.LAZY) private String description; - private String status; + @Enumerated(EnumType.STRING) + @Column(nullable = false, length = 32) + private TicketStatus status; @Column(nullable = false, unique = true, length = 128, updatable = false) private String reporterToken; private LocalDateTime createdAt; + private LocalDateTime updatedAt; + @PrePersist public void prePersist() { createdAt = LocalDateTime.now(); + if (status == null) { + status = TicketStatus.OPEN; + } + } + + @PreUpdate + public void preUpdate() { + updatedAt = LocalDateTime.now(); } @OneToMany(mappedBy = "ticket", cascade = CascadeType.ALL, orphanRemoval = true) private List attachments; - @ManyToOne - private User assignedHandler; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "reporter_id", nullable = true) // null if anonymous + private User reporter; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "investigator_id", nullable = true) + private User investigator; } diff --git a/src/main/java/org/example/alfs/entities/TicketComment.java b/src/main/java/org/example/alfs/entities/TicketComment.java index 93d0027..7c8063a 100644 --- a/src/main/java/org/example/alfs/entities/TicketComment.java +++ b/src/main/java/org/example/alfs/entities/TicketComment.java @@ -11,7 +11,7 @@ The comments are written by a User. */ @Entity -@Table(name="ticket_comment") +@Table(name = "ticket_comment") @Getter @Setter @AllArgsConstructor @@ -22,6 +22,7 @@ public class TicketComment { @GeneratedValue private Long id; + @Column(nullable = false, length = 2000) private String message; private LocalDateTime createdAt; diff --git a/src/main/java/org/example/alfs/entities/User.java b/src/main/java/org/example/alfs/entities/User.java index 29b59e1..43f85d3 100644 --- a/src/main/java/org/example/alfs/entities/User.java +++ b/src/main/java/org/example/alfs/entities/User.java @@ -2,7 +2,7 @@ import jakarta.persistence.*; import lombok.*; -import org.example.alfs.Role; +import org.example.alfs.enums.Role; /* Represents a system user. @@ -20,9 +20,10 @@ public class User { @Id private Long id; + @Column(nullable = false, unique = true, length = 100) private String username; - @Column(name = "password_hash", nullable = false, length = 255) + @Column(nullable = false, length = 255) private String passwordHash; @Enumerated(EnumType.STRING) diff --git a/src/main/java/org/example/alfs/enums/AuditAction.java b/src/main/java/org/example/alfs/enums/AuditAction.java new file mode 100644 index 0000000..36076c0 --- /dev/null +++ b/src/main/java/org/example/alfs/enums/AuditAction.java @@ -0,0 +1,8 @@ +package org.example.alfs.enums; + +public enum AuditAction { + CREATED, + UPDATED, + ASSIGNED, + COMMENTED +} \ No newline at end of file diff --git a/src/main/java/org/example/alfs/Role.java b/src/main/java/org/example/alfs/enums/Role.java similarity index 66% rename from src/main/java/org/example/alfs/Role.java rename to src/main/java/org/example/alfs/enums/Role.java index 41dd236..3024fa1 100644 --- a/src/main/java/org/example/alfs/Role.java +++ b/src/main/java/org/example/alfs/enums/Role.java @@ -1,4 +1,4 @@ -package org.example.alfs; +package org.example.alfs.enums; public enum Role { REPORTER, diff --git a/src/main/java/org/example/alfs/enums/TicketStatus.java b/src/main/java/org/example/alfs/enums/TicketStatus.java new file mode 100644 index 0000000..6442277 --- /dev/null +++ b/src/main/java/org/example/alfs/enums/TicketStatus.java @@ -0,0 +1,8 @@ +package org.example.alfs.enums; + +public enum TicketStatus { + OPEN, + IN_PROGRESS, + RESOLVED, + CLOSED +}