Update dependencies and remove gateway

* Remove Gateway module, configuration, and references
* Update backend services to directly handle requests under `/api` prefix
* Adjust frontend contact route to connect directly to the server
* Centralize authentication logic and integrate token refresh mechanism
This commit is contained in:
2025-07-22 23:32:57 +02:00
parent c0b3669c30
commit 7d901c4273
43 changed files with 107 additions and 110 deletions

View File

@@ -1,15 +0,0 @@
package dev.rheinsw.server.common.controller.exception;
/**
* @author Thatsaphorn Atchariyaphap
* @since 06.07.25
*/
public class ApiException extends RuntimeException {
public ApiException(String message) {
super(message);
}
public ApiException(Throwable cause) {
super(cause);
}
}

View File

@@ -1,47 +0,0 @@
package dev.rheinsw.server.common.controller.exception.handler;
import dev.rheinsw.server.common.controller.exception.ApiException;
import dev.rheinsw.server.common.usecase.exception.UseCaseException;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.time.Instant;
import java.util.List;
/**
* @author Thatsaphorn Atchariyaphap
* @since 06.07.25
*/
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ApiException.class)
public ResponseEntity<ApiErrorResponse> handleBusinessException(ApiException ex) {
return ResponseEntity.badRequest().body(
new ApiErrorResponse(Instant.now(), ex.getMessage(), List.of(ex.getMessage()))
);
}
@ExceptionHandler(UseCaseException.class)
public ResponseEntity<ApiErrorResponse> handleUseCaseException(UseCaseException ex) {
return ResponseEntity.badRequest().body(
new ApiErrorResponse(Instant.now(), ex.getMessage(), List.of(ex.getMessage()))
);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<ApiErrorResponse> handleGeneric(Exception ex) {
ex.printStackTrace(); // log the stack trace
return ResponseEntity.internalServerError().body(
new ApiErrorResponse(Instant.now(), "Ein unerwarteter Fehler ist aufgetreten", List.of(ex.getMessage()))
);
}
public record ApiErrorResponse(
Instant timestamp,
String message,
List<String> errors
) {
}
}

View File

@@ -1,15 +0,0 @@
package dev.rheinsw.server.common.usecase.exception;
/**
* @author Thatsaphorn Atchariyaphap
* @since 06.07.25
*/
public class UseCaseException extends RuntimeException {
public UseCaseException(String message) {
super(message);
}
public UseCaseException(String message, Throwable cause) {
super(message, cause);
}
}

View File

@@ -1,7 +1,7 @@
package dev.rheinsw.server.contact.controller;
package dev.rheinsw.server.internal.contact.controller;
import dev.rheinsw.server.contact.model.ContactRequestDto;
import dev.rheinsw.server.contact.usecase.SubmitContactUseCase;
import dev.rheinsw.server.internal.contact.model.ContactRequestDto;
import dev.rheinsw.server.internal.contact.usecase.SubmitContactUseCase;
import lombok.AllArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

View File

@@ -1,4 +1,4 @@
package dev.rheinsw.server.contact.model;
package dev.rheinsw.server.internal.contact.model;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;

View File

@@ -1,4 +1,4 @@
package dev.rheinsw.server.contact.model;
package dev.rheinsw.server.internal.contact.model;
import dev.rheinsw.shared.transport.Dto;

View File

@@ -1,4 +1,4 @@
package dev.rheinsw.server.contact.model;
package dev.rheinsw.server.internal.contact.model;
import lombok.Getter;
import lombok.Setter;

View File

@@ -1,6 +1,6 @@
package dev.rheinsw.server.contact.repository;
package dev.rheinsw.server.internal.contact.repository;
import dev.rheinsw.server.contact.model.ContactRequest;
import dev.rheinsw.server.internal.contact.model.ContactRequest;
import org.springframework.data.jpa.repository.JpaRepository;
/**

View File

@@ -1,6 +1,6 @@
package dev.rheinsw.server.contact.usecase;
package dev.rheinsw.server.internal.contact.usecase;
import dev.rheinsw.server.contact.model.ContactRequestDto;
import dev.rheinsw.server.internal.contact.model.ContactRequestDto;
import org.springframework.http.ResponseEntity;
/**

View File

@@ -1,11 +1,11 @@
package dev.rheinsw.server.contact.usecase;
package dev.rheinsw.server.internal.contact.usecase;
import dev.rheinsw.server.contact.model.ContactRequest;
import dev.rheinsw.server.contact.model.ContactRequestDto;
import dev.rheinsw.server.contact.repository.ContactRequestsRepo;
import dev.rheinsw.server.contact.util.HCaptchaValidator;
import dev.rheinsw.server.mail.domain.MailRequest;
import dev.rheinsw.server.mail.usecase.SendMailUseCase;
import dev.rheinsw.server.internal.contact.model.ContactRequest;
import dev.rheinsw.server.internal.contact.model.ContactRequestDto;
import dev.rheinsw.server.internal.contact.repository.ContactRequestsRepo;
import dev.rheinsw.server.internal.contact.util.HCaptchaValidator;
import dev.rheinsw.server.internal.mail.domain.MailRequest;
import dev.rheinsw.server.internal.mail.usecase.SendMailUseCase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,6 +1,6 @@
package dev.rheinsw.server.contact.util;
package dev.rheinsw.server.internal.contact.util;
import dev.rheinsw.server.contact.model.HCaptchaConfig;
import dev.rheinsw.server.internal.contact.model.HCaptchaConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

View File

@@ -1,12 +1,12 @@
package dev.rheinsw.server.customer.controller;
package dev.rheinsw.server.internal.customer.controller;
import dev.rheinsw.server.common.controller.AbstractController;
import dev.rheinsw.server.customer.dtos.CreateCustomerDto;
import dev.rheinsw.server.customer.dtos.CustomerValidationRequest;
import dev.rheinsw.server.customer.model.Customer;
import dev.rheinsw.server.customer.repository.CustomerRepository;
import dev.rheinsw.server.customer.usecase.LoadCustomerQuery;
import dev.rheinsw.server.customer.usecase.RegisterCustomerUseCase;
import dev.rheinsw.server.system.controller.AbstractController;
import dev.rheinsw.server.internal.customer.dtos.CreateCustomerDto;
import dev.rheinsw.server.internal.customer.dtos.CustomerValidationRequest;
import dev.rheinsw.server.internal.customer.model.Customer;
import dev.rheinsw.server.internal.customer.repository.CustomerRepository;
import dev.rheinsw.server.internal.customer.usecase.LoadCustomerQuery;
import dev.rheinsw.server.internal.customer.usecase.RegisterCustomerUseCase;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;

View File

@@ -1,7 +1,7 @@
package dev.rheinsw.server.customer.dtos;
package dev.rheinsw.server.internal.customer.dtos;
import dev.rheinsw.server.customer.model.records.CustomerNote;
import dev.rheinsw.server.customer.model.records.CustomerPhoneNumber;
import dev.rheinsw.server.internal.customer.model.records.CustomerNote;
import dev.rheinsw.server.internal.customer.model.records.CustomerPhoneNumber;
import java.util.List;

View File

@@ -1,4 +1,4 @@
package dev.rheinsw.server.customer.dtos;
package dev.rheinsw.server.internal.customer.dtos;
/**
* @author Thatsaphorn Atchariyaphap

View File

@@ -1,9 +1,9 @@
package dev.rheinsw.server.customer.model;
package dev.rheinsw.server.internal.customer.model;
import com.vladmihalcea.hibernate.type.json.JsonType;
import dev.rheinsw.server.common.entity.BaseEntity;
import dev.rheinsw.server.customer.model.records.CustomerNote;
import dev.rheinsw.server.customer.model.records.CustomerPhoneNumber;
import dev.rheinsw.server.system.entity.BaseEntity;
import dev.rheinsw.server.internal.customer.model.records.CustomerNote;
import dev.rheinsw.server.internal.customer.model.records.CustomerPhoneNumber;
import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.Type;

View File

@@ -1,4 +1,4 @@
package dev.rheinsw.server.customer.model.records;
package dev.rheinsw.server.internal.customer.model.records;
import java.time.Instant;

View File

@@ -1,4 +1,4 @@
package dev.rheinsw.server.customer.model.records;
package dev.rheinsw.server.internal.customer.model.records;
import java.time.Instant;

View File

@@ -1,6 +1,6 @@
package dev.rheinsw.server.customer.repository;
package dev.rheinsw.server.internal.customer.repository;
import dev.rheinsw.server.customer.model.Customer;
import dev.rheinsw.server.internal.customer.model.Customer;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

View File

@@ -1,14 +1,12 @@
package dev.rheinsw.server.customer.usecase;
package dev.rheinsw.server.internal.customer.usecase;
import dev.rheinsw.server.common.controller.exception.ApiException;
import dev.rheinsw.server.common.usecase.exception.UseCaseException;
import dev.rheinsw.server.customer.model.Customer;
import dev.rheinsw.server.customer.model.records.CustomerNote;
import dev.rheinsw.server.customer.model.records.CustomerPhoneNumber;
import dev.rheinsw.server.customer.repository.CustomerRepository;
import dev.rheinsw.server.common.entity.User;
import dev.rheinsw.common.usecase.exception.UseCaseException;
import dev.rheinsw.server.internal.customer.model.Customer;
import dev.rheinsw.server.internal.customer.model.records.CustomerNote;
import dev.rheinsw.server.internal.customer.model.records.CustomerPhoneNumber;
import dev.rheinsw.server.internal.customer.repository.CustomerRepository;
import dev.rheinsw.server.security.user.entity.User;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import java.time.Instant;

View File

@@ -1,6 +1,6 @@
package dev.rheinsw.server.customer.usecase;
package dev.rheinsw.server.internal.customer.usecase;
import dev.rheinsw.server.customer.model.Customer;
import dev.rheinsw.server.internal.customer.model.Customer;
import java.util.List;
import java.util.UUID;

View File

@@ -1,8 +1,8 @@
package dev.rheinsw.server.customer.usecase;
package dev.rheinsw.server.internal.customer.usecase;
import dev.rheinsw.server.customer.model.records.CustomerNote;
import dev.rheinsw.server.customer.model.records.CustomerPhoneNumber;
import dev.rheinsw.server.common.entity.User;
import dev.rheinsw.server.internal.customer.model.records.CustomerNote;
import dev.rheinsw.server.internal.customer.model.records.CustomerPhoneNumber;
import dev.rheinsw.server.security.user.entity.User;
import java.util.List;
import java.util.UUID;

View File

@@ -1,6 +1,6 @@
package dev.rheinsw.server.demo.model;
package dev.rheinsw.server.internal.demo.model;
import dev.rheinsw.server.customer.model.Customer;
import dev.rheinsw.server.internal.customer.model.Customer;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;

View File

@@ -1,6 +1,6 @@
package dev.rheinsw.server.demo.model;
package dev.rheinsw.server.internal.demo.model;
import dev.rheinsw.server.customer.model.Customer;
import dev.rheinsw.server.internal.customer.model.Customer;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;

View File

@@ -1,4 +1,4 @@
package dev.rheinsw.server.demo.model;
package dev.rheinsw.server.internal.demo.model;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

View File

@@ -1,7 +1,7 @@
package dev.rheinsw.server.mail.controller;
package dev.rheinsw.server.internal.mail.controller;
import dev.rheinsw.server.mail.usecase.SendMailUseCase;
import dev.rheinsw.server.mail.domain.MailRequest;
import dev.rheinsw.server.internal.mail.usecase.SendMailUseCase;
import dev.rheinsw.server.internal.mail.domain.MailRequest;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;

View File

@@ -1,4 +1,4 @@
package dev.rheinsw.server.mail.domain;
package dev.rheinsw.server.internal.mail.domain;
import lombok.AllArgsConstructor;
import lombok.Data;

View File

@@ -1,6 +1,6 @@
package dev.rheinsw.server.mail.usecase;
package dev.rheinsw.server.internal.mail.usecase;
import dev.rheinsw.server.mail.domain.MailRequest;
import dev.rheinsw.server.internal.mail.domain.MailRequest;
import org.springframework.http.ResponseEntity;
/**

View File

@@ -1,7 +1,7 @@
package dev.rheinsw.server.mail.usecase;
package dev.rheinsw.server.internal.mail.usecase;
import dev.rheinsw.server.mail.domain.MailRequest;
import dev.rheinsw.server.internal.mail.domain.MailRequest;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import org.springframework.http.ResponseEntity;

View File

@@ -1,10 +1,10 @@
package dev.rheinsw.server.project.controller;
package dev.rheinsw.server.internal.project.controller;
import dev.rheinsw.server.common.controller.AbstractController;
import dev.rheinsw.server.project.model.CreateCustomerProjectDto;
import dev.rheinsw.server.project.model.Project;
import dev.rheinsw.server.project.model.records.ProjectNote;
import dev.rheinsw.server.project.usecase.ProjectUseCaseImpl;
import dev.rheinsw.server.system.controller.AbstractController;
import dev.rheinsw.server.internal.project.model.CreateCustomerProjectDto;
import dev.rheinsw.server.internal.project.model.Project;
import dev.rheinsw.server.internal.project.model.records.ProjectNote;
import dev.rheinsw.server.internal.project.usecase.ProjectUseCaseImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;

View File

@@ -1,6 +1,6 @@
package dev.rheinsw.server.project.model;
package dev.rheinsw.server.internal.project.model;
import dev.rheinsw.server.project.model.enums.ProjectStatus;
import dev.rheinsw.server.internal.project.model.enums.ProjectStatus;
import java.time.LocalDate;
import java.util.List;

View File

@@ -1,9 +1,9 @@
package dev.rheinsw.server.project.model;
package dev.rheinsw.server.internal.project.model;
import com.vladmihalcea.hibernate.type.json.JsonType;
import dev.rheinsw.server.common.entity.BaseEntity;
import dev.rheinsw.server.project.model.enums.ProjectStatus;
import dev.rheinsw.server.project.model.records.ProjectNote;
import dev.rheinsw.server.system.entity.BaseEntity;
import dev.rheinsw.server.internal.project.model.enums.ProjectStatus;
import dev.rheinsw.server.internal.project.model.records.ProjectNote;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
@@ -17,7 +17,6 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.annotations.Type;
import java.time.Instant;
import java.util.List;
import java.util.UUID;

View File

@@ -1,4 +1,4 @@
package dev.rheinsw.server.project.model.enums;
package dev.rheinsw.server.internal.project.model.enums;
/**
* @author Thatsaphorn Atchariyaphap

View File

@@ -1,4 +1,4 @@
package dev.rheinsw.server.project.model.records;
package dev.rheinsw.server.internal.project.model.records;
import java.time.Instant;

View File

@@ -1,7 +1,6 @@
package dev.rheinsw.server.project.repository;
package dev.rheinsw.server.internal.project.repository;
import dev.rheinsw.server.customer.model.Customer;
import dev.rheinsw.server.project.model.Project;
import dev.rheinsw.server.internal.project.model.Project;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;

View File

@@ -1,8 +1,8 @@
package dev.rheinsw.server.project.usecase;
package dev.rheinsw.server.internal.project.usecase;
import dev.rheinsw.server.common.entity.User;
import dev.rheinsw.server.project.model.enums.ProjectStatus;
import dev.rheinsw.server.project.model.records.ProjectNote;
import dev.rheinsw.server.security.user.entity.User;
import dev.rheinsw.server.internal.project.model.enums.ProjectStatus;
import dev.rheinsw.server.internal.project.model.records.ProjectNote;
import java.util.List;
import java.util.UUID;

View File

@@ -1,6 +1,6 @@
package dev.rheinsw.server.project.usecase;
package dev.rheinsw.server.internal.project.usecase;
import dev.rheinsw.server.project.model.Project;
import dev.rheinsw.server.internal.project.model.Project;
import java.util.List;
import java.util.UUID;

View File

@@ -1,10 +1,10 @@
package dev.rheinsw.server.project.usecase;
package dev.rheinsw.server.internal.project.usecase;
import dev.rheinsw.server.common.entity.User;
import dev.rheinsw.server.project.model.Project;
import dev.rheinsw.server.project.model.enums.ProjectStatus;
import dev.rheinsw.server.project.model.records.ProjectNote;
import dev.rheinsw.server.project.repository.ProjectRepository;
import dev.rheinsw.server.security.user.entity.User;
import dev.rheinsw.server.internal.project.model.Project;
import dev.rheinsw.server.internal.project.model.enums.ProjectStatus;
import dev.rheinsw.server.internal.project.model.records.ProjectNote;
import dev.rheinsw.server.internal.project.repository.ProjectRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

View File

@@ -1,6 +1,6 @@
package dev.rheinsw.server.security.user;
import dev.rheinsw.server.common.entity.User;
import dev.rheinsw.server.security.user.entity.User;
import dev.rheinsw.server.security.session.model.CurrentSession;
import dev.rheinsw.server.security.user.repository.UserRepository;
import jakarta.transaction.Transactional;

View File

@@ -1,4 +1,4 @@
package dev.rheinsw.server.common.entity;
package dev.rheinsw.server.security.user.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;

View File

@@ -1,6 +1,6 @@
package dev.rheinsw.server.security.user.repository;
import dev.rheinsw.server.common.entity.User;
import dev.rheinsw.server.security.user.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;

View File

@@ -1,9 +1,9 @@
package dev.rheinsw.server.common.controller;
package dev.rheinsw.server.system.controller;
import dev.rheinsw.server.security.session.CurrentSessionProvider;
import dev.rheinsw.server.security.session.model.CurrentSession;
import dev.rheinsw.server.security.user.UserService;
import dev.rheinsw.server.common.entity.User;
import dev.rheinsw.server.security.user.entity.User;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;

View File

@@ -1,4 +1,4 @@
package dev.rheinsw.server.common.entity;
package dev.rheinsw.server.system.entity;
import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;

View File

@@ -1,4 +1,4 @@
package dev.rheinsw.server.common.entity.config;
package dev.rheinsw.server.system.entity.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;