Skip to content
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.example.visacasemanagementsystem.audit;

public enum CommentEventType {
ADDED,
UPDATED,
DELETED
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.example.visacasemanagementsystem.audit;

public enum FileEventType {
UPLOADED,
DELETED,
DOWNLOADED

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.example.visacasemanagementsystem.audit.dto;

import org.example.visacasemanagementsystem.audit.CommentEventType;

import java.time.LocalDateTime;

public record CommentLogDTO(
Long id,
LocalDateTime timeStamp,
Long actorUserId,
Long visaCaseId,
Long commentId,
CommentEventType commentEventType,
String description) {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package org.example.visacasemanagementsystem.audit.dto;

import org.example.visacasemanagementsystem.audit.FileEventType;

import java.time.LocalDateTime;

public record FileLogDTO(
Long id,
LocalDateTime timeStamp,
Long actorUserId,
Long visaCaseId,
String fileName,
FileEventType fileEventType,
String description){
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package org.example.visacasemanagementsystem.audit.entity;


import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.example.visacasemanagementsystem.audit.CommentEventType;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.time.LocalDateTime;
import java.util.Objects;

@Entity
@Getter
@Setter
@NoArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public class CommentLog {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "comment_log_id", nullable = false)
private Long id;

@NotNull @CreatedDate
private LocalDateTime timeStamp;

@NotNull private Long actorUserId;

@NotNull private Long visaCaseId;

@NotNull private Long commentId;

@NotNull @Enumerated(EnumType.STRING)
private CommentEventType commentEventType;

private String description;

@Override
public boolean equals(Object o) {
if (!(o instanceof CommentLog that)) return false;
return Objects.equals(id, that.id);
}

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

@Override
public String toString() {
return "CommentLog{" +
"id=" + id +
", timeStamp=" + timeStamp +
", actorUserId=" + actorUserId +
", visaCaseId=" + visaCaseId +
", commentId=" + commentId +
", commentEventType=" + commentEventType +
", description='" + description + '\'' +
'}';
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package org.example.visacasemanagementsystem.audit.entity;

import jakarta.persistence.*;
import jakarta.validation.constraints.NotNull;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.example.visacasemanagementsystem.audit.FileEventType;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import java.time.LocalDateTime;
import java.util.Objects;

@Entity
@Getter
@Setter
@NoArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public class FileLog {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "file_log_id", nullable = false)
private Long id;

@NotNull @CreatedDate
private LocalDateTime timeStamp;

@NotNull private Long actorUserId;

@NotNull private Long visaCaseId;

@NotNull private String fileName;

@NotNull @Enumerated(EnumType.STRING)
private FileEventType fileEventType;

private String description;

@Override
public boolean equals(Object o) {
if (!(o instanceof FileLog fileLog)) return false;
return Objects.equals(id, fileLog.id);
}

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

@Override
public String toString() {
return "FileLog{" +
"id=" + id +
", timeStamp=" + timeStamp +
", actorUserId=" + actorUserId +
", visaCaseId=" + visaCaseId +
", fileName='" + fileName + '\'' +
", fileEventType=" + fileEventType +
", description='" + description + '\'' +
'}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ public class VisaLog {
@NotNull @CreatedDate
private LocalDateTime timeStamp;

@NotNull private Long userId; // Vem gjorde vad?
@NotNull private Long userId;

@NotNull private Long visaCaseId; // Vilket ärende rör det?
@NotNull private Long visaCaseId;

@NotNull @Enumerated(EnumType.STRING)
private VisaEventType visaEventType;

private String description; // Beskrivning av händelse
private String description;

@Override
public boolean equals(Object o) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package org.example.visacasemanagementsystem.audit.mapper;

import org.example.visacasemanagementsystem.audit.CommentEventType;
import org.example.visacasemanagementsystem.audit.dto.CommentLogDTO;
import org.example.visacasemanagementsystem.audit.entity.CommentLog;
import org.springframework.stereotype.Component;

@Component
public class CommentLogMapper {

// For viewing (Entity --> DTO)
public CommentLogDTO toDTO(CommentLog commentLog) {
if (commentLog == null) return null;

return new CommentLogDTO(
commentLog.getId(),
commentLog.getTimeStamp(),
commentLog.getActorUserId(),
commentLog.getVisaCaseId(),
commentLog.getCommentId(),
commentLog.getCommentEventType(),
commentLog.getDescription()
);
}

// The service layer is responsible for creating the log entity
public CommentLog toEntity(Long actorUserId, Long visaCaseId, Long commentId, CommentEventType commentEventType, String description) {
CommentLog commentLog = new CommentLog();
commentLog.setActorUserId(actorUserId);
commentLog.setVisaCaseId(visaCaseId);
commentLog.setCommentId(commentId);
commentLog.setCommentEventType(commentEventType);
commentLog.setDescription(description);
return commentLog;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package org.example.visacasemanagementsystem.audit.mapper;

import org.example.visacasemanagementsystem.audit.FileEventType;
import org.example.visacasemanagementsystem.audit.dto.FileLogDTO;
import org.example.visacasemanagementsystem.audit.entity.FileLog;
import org.springframework.stereotype.Component;


@Component
public class FileLogMapper {

// For viewing (Entity --> DTO)
public FileLogDTO toDTO(FileLog fileLog) {
if (fileLog == null) return null;

return new FileLogDTO(
fileLog.getId(),
fileLog.getTimeStamp(),
fileLog.getActorUserId(),
fileLog.getVisaCaseId(),
fileLog.getFileName(),
fileLog.getFileEventType(),
fileLog.getDescription()
);
}

// The service layer is responsible for creating the log entity
public FileLog toEntity(Long actorUserId, Long visaCaseId, String fileName, FileEventType fileEventType, String description) {
FileLog fileLog = new FileLog();
fileLog.setActorUserId(actorUserId);
fileLog.setVisaCaseId(visaCaseId);
fileLog.setFileName(fileName);
fileLog.setFileEventType(fileEventType);
fileLog.setDescription(description);
return fileLog;

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.example.visacasemanagementsystem.audit.repository;

import org.example.visacasemanagementsystem.audit.entity.CommentLog;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface CommentLogRepository extends JpaRepository<CommentLog, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.example.visacasemanagementsystem.audit.repository;

import org.example.visacasemanagementsystem.audit.entity.FileLog;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface FileLogRepository extends JpaRepository<FileLog, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package org.example.visacasemanagementsystem.audit.service;

import org.example.visacasemanagementsystem.audit.CommentEventType;
import org.example.visacasemanagementsystem.audit.dto.CommentLogDTO;
import org.example.visacasemanagementsystem.audit.entity.CommentLog;
import org.example.visacasemanagementsystem.audit.mapper.CommentLogMapper;
import org.example.visacasemanagementsystem.audit.repository.CommentLogRepository;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class CommentLogService {

private final CommentLogRepository commentLogRepository;
private final CommentLogMapper commentLogMapper;

public CommentLogService(CommentLogRepository commentLogRepository, CommentLogMapper commentLogMapper) {
this.commentLogRepository = commentLogRepository;
this.commentLogMapper = commentLogMapper;

}

public void createCommentLog(Long actorUserId, Long visaCaseId, Long commentId, CommentEventType commentEventType, String description) {
CommentLog commentLog = commentLogMapper.toEntity(actorUserId, visaCaseId, commentId,commentEventType, description);
commentLogRepository.save(commentLog);

}

public List<CommentLogDTO> findAll() {
return commentLogRepository.findAll()
.stream()
.map(commentLogMapper::toDTO)
.toList();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package org.example.visacasemanagementsystem.audit.service;

import org.example.visacasemanagementsystem.audit.FileEventType;
import org.example.visacasemanagementsystem.audit.dto.FileLogDTO;
import org.example.visacasemanagementsystem.audit.entity.FileLog;
import org.example.visacasemanagementsystem.audit.mapper.FileLogMapper;
import org.example.visacasemanagementsystem.audit.repository.FileLogRepository;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class FileLogService {

private final FileLogRepository fileLogRepository;
private final FileLogMapper fileLogMapper;

public FileLogService(FileLogRepository fileLogRepository, FileLogMapper fileLogMapper) {
this.fileLogRepository = fileLogRepository;
this.fileLogMapper = fileLogMapper;
}

public void createFileLog(Long actorUserId, Long visaCaseId, String fileName, FileEventType fileEventType, String description) {
FileLog fileLog = fileLogMapper.toEntity(actorUserId, visaCaseId, fileName, fileEventType, description);
fileLogRepository.save(fileLog);

}

public List<FileLogDTO> findAll() {
return fileLogRepository.findAll()
.stream()
.map(fileLogMapper::toDTO)
.toList();
}
}
Loading