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,4 +1,4 @@
package dev.rheinsw.server.common.controller.exception; package dev.rheinsw.common.controller.exception;
/** /**
* @author Thatsaphorn Atchariyaphap * @author Thatsaphorn Atchariyaphap

View File

@@ -1,9 +1,10 @@
package dev.rheinsw.server.common.controller.exception.handler; package dev.rheinsw.common.controller.exception.handler;
import dev.rheinsw.server.common.controller.exception.ApiException; import dev.rheinsw.common.controller.exception.ApiException;
import dev.rheinsw.server.common.usecase.exception.UseCaseException; import dev.rheinsw.common.usecase.exception.UseCaseException;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import java.time.Instant; import java.time.Instant;
import java.util.List; import java.util.List;

View File

@@ -1,4 +1,4 @@
package dev.rheinsw.server.common.usecase.exception; package dev.rheinsw.common.usecase.exception;
/** /**
* @author Thatsaphorn Atchariyaphap * @author Thatsaphorn Atchariyaphap

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.internal.contact.model.ContactRequestDto;
import dev.rheinsw.server.contact.usecase.SubmitContactUseCase; import dev.rheinsw.server.internal.contact.usecase.SubmitContactUseCase;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; 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.Column;
import jakarta.persistence.Entity; 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; 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.Getter;
import lombok.Setter; 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; 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; 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.internal.contact.model.ContactRequest;
import dev.rheinsw.server.contact.model.ContactRequestDto; import dev.rheinsw.server.internal.contact.model.ContactRequestDto;
import dev.rheinsw.server.contact.repository.ContactRequestsRepo; import dev.rheinsw.server.internal.contact.repository.ContactRequestsRepo;
import dev.rheinsw.server.contact.util.HCaptchaValidator; import dev.rheinsw.server.internal.contact.util.HCaptchaValidator;
import dev.rheinsw.server.mail.domain.MailRequest; import dev.rheinsw.server.internal.mail.domain.MailRequest;
import dev.rheinsw.server.mail.usecase.SendMailUseCase; import dev.rheinsw.server.internal.mail.usecase.SendMailUseCase;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; 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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; 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.system.controller.AbstractController;
import dev.rheinsw.server.customer.dtos.CreateCustomerDto; import dev.rheinsw.server.internal.customer.dtos.CreateCustomerDto;
import dev.rheinsw.server.customer.dtos.CustomerValidationRequest; import dev.rheinsw.server.internal.customer.dtos.CustomerValidationRequest;
import dev.rheinsw.server.customer.model.Customer; import dev.rheinsw.server.internal.customer.model.Customer;
import dev.rheinsw.server.customer.repository.CustomerRepository; import dev.rheinsw.server.internal.customer.repository.CustomerRepository;
import dev.rheinsw.server.customer.usecase.LoadCustomerQuery; import dev.rheinsw.server.internal.customer.usecase.LoadCustomerQuery;
import dev.rheinsw.server.customer.usecase.RegisterCustomerUseCase; import dev.rheinsw.server.internal.customer.usecase.RegisterCustomerUseCase;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; 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.internal.customer.model.records.CustomerNote;
import dev.rheinsw.server.customer.model.records.CustomerPhoneNumber; import dev.rheinsw.server.internal.customer.model.records.CustomerPhoneNumber;
import java.util.List; 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 * @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 com.vladmihalcea.hibernate.type.json.JsonType;
import dev.rheinsw.server.common.entity.BaseEntity; import dev.rheinsw.server.system.entity.BaseEntity;
import dev.rheinsw.server.customer.model.records.CustomerNote; import dev.rheinsw.server.internal.customer.model.records.CustomerNote;
import dev.rheinsw.server.customer.model.records.CustomerPhoneNumber; import dev.rheinsw.server.internal.customer.model.records.CustomerPhoneNumber;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.*; import lombok.*;
import org.hibernate.annotations.Type; 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; 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; 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.JpaRepository;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; 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.common.usecase.exception.UseCaseException;
import dev.rheinsw.server.common.usecase.exception.UseCaseException; import dev.rheinsw.server.internal.customer.model.Customer;
import dev.rheinsw.server.customer.model.Customer; import dev.rheinsw.server.internal.customer.model.records.CustomerNote;
import dev.rheinsw.server.customer.model.records.CustomerNote; import dev.rheinsw.server.internal.customer.model.records.CustomerPhoneNumber;
import dev.rheinsw.server.customer.model.records.CustomerPhoneNumber; import dev.rheinsw.server.internal.customer.repository.CustomerRepository;
import dev.rheinsw.server.customer.repository.CustomerRepository; import dev.rheinsw.server.security.user.entity.User;
import dev.rheinsw.server.common.entity.User;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.Instant; 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.List;
import java.util.UUID; 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.internal.customer.model.records.CustomerNote;
import dev.rheinsw.server.customer.model.records.CustomerPhoneNumber; import dev.rheinsw.server.internal.customer.model.records.CustomerPhoneNumber;
import dev.rheinsw.server.common.entity.User; import dev.rheinsw.server.security.user.entity.User;
import java.util.List; import java.util.List;
import java.util.UUID; 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.Entity;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn; 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.Entity;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn; 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.Entity;
import jakarta.persistence.Id; 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.internal.mail.usecase.SendMailUseCase;
import dev.rheinsw.server.mail.domain.MailRequest; import dev.rheinsw.server.internal.mail.domain.MailRequest;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping; 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.AllArgsConstructor;
import lombok.Data; 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; 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.MessagingException;
import jakarta.mail.internet.MimeMessage; import jakarta.mail.internet.MimeMessage;
import org.springframework.http.ResponseEntity; 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.system.controller.AbstractController;
import dev.rheinsw.server.project.model.CreateCustomerProjectDto; import dev.rheinsw.server.internal.project.model.CreateCustomerProjectDto;
import dev.rheinsw.server.project.model.Project; import dev.rheinsw.server.internal.project.model.Project;
import dev.rheinsw.server.project.model.records.ProjectNote; import dev.rheinsw.server.internal.project.model.records.ProjectNote;
import dev.rheinsw.server.project.usecase.ProjectUseCaseImpl; import dev.rheinsw.server.internal.project.usecase.ProjectUseCaseImpl;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; 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.time.LocalDate;
import java.util.List; 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 com.vladmihalcea.hibernate.type.json.JsonType;
import dev.rheinsw.server.common.entity.BaseEntity; import dev.rheinsw.server.system.entity.BaseEntity;
import dev.rheinsw.server.project.model.enums.ProjectStatus; import dev.rheinsw.server.internal.project.model.enums.ProjectStatus;
import dev.rheinsw.server.project.model.records.ProjectNote; import dev.rheinsw.server.internal.project.model.records.ProjectNote;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.EnumType; import jakarta.persistence.EnumType;
@@ -17,7 +17,6 @@ import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import org.hibernate.annotations.Type; import org.hibernate.annotations.Type;
import java.time.Instant;
import java.util.List; import java.util.List;
import java.util.UUID; 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 * @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; 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.internal.project.model.Project;
import dev.rheinsw.server.project.model.Project;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List; 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.security.user.entity.User;
import dev.rheinsw.server.project.model.enums.ProjectStatus; import dev.rheinsw.server.internal.project.model.enums.ProjectStatus;
import dev.rheinsw.server.project.model.records.ProjectNote; import dev.rheinsw.server.internal.project.model.records.ProjectNote;
import java.util.List; import java.util.List;
import java.util.UUID; 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.List;
import java.util.UUID; 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.security.user.entity.User;
import dev.rheinsw.server.project.model.Project; import dev.rheinsw.server.internal.project.model.Project;
import dev.rheinsw.server.project.model.enums.ProjectStatus; import dev.rheinsw.server.internal.project.model.enums.ProjectStatus;
import dev.rheinsw.server.project.model.records.ProjectNote; import dev.rheinsw.server.internal.project.model.records.ProjectNote;
import dev.rheinsw.server.project.repository.ProjectRepository; import dev.rheinsw.server.internal.project.repository.ProjectRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

View File

@@ -1,6 +1,6 @@
package dev.rheinsw.server.security.user; 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.session.model.CurrentSession;
import dev.rheinsw.server.security.user.repository.UserRepository; import dev.rheinsw.server.security.user.repository.UserRepository;
import jakarta.transaction.Transactional; 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.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;

View File

@@ -1,6 +1,6 @@
package dev.rheinsw.server.security.user.repository; 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 org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional; 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.CurrentSessionProvider;
import dev.rheinsw.server.security.session.model.CurrentSession; import dev.rheinsw.server.security.session.model.CurrentSession;
import dev.rheinsw.server.security.user.UserService; 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 lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; 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.Column;
import jakarta.persistence.EntityListeners; 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.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing; import org.springframework.data.jpa.repository.config.EnableJpaAuditing;