Skip to content

Commit

Permalink
Merge pull request #5 from vlaship/refactoring
Browse files Browse the repository at this point in the history
refactor
  • Loading branch information
vlaship authored Jan 21, 2024
2 parents 0afc860 + f1a1e22 commit 45d3d72
Show file tree
Hide file tree
Showing 80 changed files with 581 additions and 394 deletions.
14 changes: 9 additions & 5 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
plugins {
java
id("org.springframework.boot") version "3.2.1"
id("org.springframework.boot") version "3.2.2"
id("io.spring.dependency-management") version "1.1.4"
// id("io.spring.javaformat") version "0.0.40" add \n between fields
// id("io.spring.javaformat") version "0.0.41" add \n between fields
id("com.gorylenko.gradle-git-properties") version "2.4.1"
// id("org.graalvm.buildtools.native") version "0.9.28"
}

group = "vlaship"
version = "0.0.4-SNAPSHOT"
group = "dev.vlaship.backoffice"
version = "0.0.5-SNAPSHOT"

java {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
targetCompatibility = sourceCompatibility
}

configurations {
Expand All @@ -25,6 +25,8 @@ val jwtVersion = "0.12.3" // "0.11.5" works with graalvm
val openApiVersion = "2.3.0"
val mapstructVersion = "1.5.5.Final"
val preLiquibaseVersion = "1.5.0"
val openTelemetryVersion = "2.0.0"
val micrometerVersion = "1.2.2"

dependencies {
// lombok
Expand Down Expand Up @@ -54,6 +56,8 @@ dependencies {

// actuator
implementation("org.springframework.boot:spring-boot-starter-actuator")
implementation("io.opentelemetry.instrumentation:opentelemetry-instrumentation-annotations:$openTelemetryVersion")
implementation("io.micrometer:micrometer-tracing-bridge-brave")

// test
testImplementation("org.springframework.boot:spring-boot-starter-test")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package vlaship.backoffice;
package dev.vlaship.backoffice;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
Expand Down
76 changes: 76 additions & 0 deletions src/main/java/dev/vlaship/backoffice/api/AuthApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package dev.vlaship.backoffice.api;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.http.ProblemDetail;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import dev.vlaship.backoffice.dto.LoginRequest;
import dev.vlaship.backoffice.dto.LoginResponse;
import dev.vlaship.backoffice.dto.SignupRequest;

@Validated
@Tag(name = "auth")
@RequestMapping("/api/auth")
public interface AuthApi {

@Operation(
operationId = "signup",
summary = "sign up",
tags = { "auth" },
responses = {
@ApiResponse(responseCode = "202", description = "Accepted"),
@ApiResponse(responseCode = "400", description = "Bad Request", content = {
@Content(mediaType = "*/*", schema = @Schema(implementation = ProblemDetail.class))
}),
@ApiResponse(responseCode = "401", description = "Unauthorized", content = {
@Content(mediaType = "*/*", schema = @Schema(implementation = ProblemDetail.class))
}),
@ApiResponse(responseCode = "403", description = "Forbidden", content = {
@Content(mediaType = "*/*", schema = @Schema(implementation = ProblemDetail.class))
}),
@ApiResponse(responseCode = "404", description = "Not Found", content = {
@Content(mediaType = "*/*", schema = @Schema(implementation = ProblemDetail.class))
}),
@ApiResponse(responseCode = "500", description = "Internal Server Error", content = {
@Content(mediaType = "*/*", schema = @Schema(implementation = ProblemDetail.class))
})
}
)
@PostMapping(value = "/signup")
ResponseEntity<Void> signup(@RequestBody @Valid SignupRequest request);

@Operation(
operationId = "login",
summary = "login",
tags = { "auth" },
responses = {
@ApiResponse(responseCode = "200", description = "Ok"),
@ApiResponse(responseCode = "400", description = "Bad Request", content = {
@Content(mediaType = "*/*", schema = @Schema(implementation = ProblemDetail.class))
}),
@ApiResponse(responseCode = "401", description = "Unauthorized", content = {
@Content(mediaType = "*/*", schema = @Schema(implementation = ProblemDetail.class))
}),
@ApiResponse(responseCode = "403", description = "Forbidden", content = {
@Content(mediaType = "*/*", schema = @Schema(implementation = ProblemDetail.class))
}),
@ApiResponse(responseCode = "404", description = "Not Found", content = {
@Content(mediaType = "*/*", schema = @Schema(implementation = ProblemDetail.class))
}),
@ApiResponse(responseCode = "500", description = "Internal Server Error", content = {
@Content(mediaType = "*/*", schema = @Schema(implementation = ProblemDetail.class))
})
}
)
@PostMapping(value = "/login")
ResponseEntity<LoginResponse> login(@RequestBody @Valid LoginRequest request);

}
62 changes: 62 additions & 0 deletions src/main/java/dev/vlaship/backoffice/aspect/LoggingAspect.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package dev.vlaship.backoffice.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;

import java.util.Arrays;

@Aspect
@Component
public class LoggingAspect {

private static final String LOG = "log";

@Before("execution(public * dev.vlaship.backoffice.facade.*.*(..)) || execution(public * dev.vlaship.backoffice.service.*.*(..))")
public void logging(final JoinPoint pjp) throws Throwable {
var log = getLogger(pjp);
if (log != null) {
var method = ((MethodSignature) pjp.getSignature()).getMethod();
log.info("{}{}", method.getName(), pjp.getArgs());
}
}

@Around("execution(public * dev.vlaship.backoffice.controller.*.*(..))")
public Object executionTime(final ProceedingJoinPoint pjp) throws Throwable {
var sw = new StopWatch();

sw.start();
var result = pjp.proceed();
sw.stop();

var log = getLogger(pjp);
if (log != null) {
var method = ((MethodSignature) pjp.getSignature()).getMethod();
log.info("{} execution time {}ms", method.getName(), sw.getTotalTimeMillis());
}

return result;
}

private Logger getLogger(JoinPoint pjp) throws Throwable {
var logField = Arrays.stream(pjp.getTarget().getClass().getDeclaredFields())
.filter(field -> LOG.equalsIgnoreCase(field.getName()))
.findFirst();

if (logField.isEmpty()) {
return null;
}

var canAccess = logField.get().canAccess(null);
logField.get().setAccessible(true);
var log = (Logger) logField.get().get(null);
logField.get().setAccessible(canAccess);
return log;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package vlaship.backoffice.config;
package dev.vlaship.backoffice.config;

import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
import io.swagger.v3.oas.annotations.security.SecurityScheme;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package vlaship.backoffice.controller;
package dev.vlaship.backoffice.controller;

import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import jakarta.validation.Valid;
import org.springframework.http.ResponseEntity;
import vlaship.backoffice.dto.Dto;
import vlaship.backoffice.facade.Facade;
import vlaship.backoffice.model.Model;
import dev.vlaship.backoffice.dto.Dto;
import dev.vlaship.backoffice.facade.Facade;
import dev.vlaship.backoffice.model.Model;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,35 +1,34 @@
package vlaship.backoffice.controller;
package dev.vlaship.backoffice.controller;

import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import vlaship.backoffice.dto.LoginRequest;
import vlaship.backoffice.dto.LoginResponse;
import vlaship.backoffice.dto.SignupRequest;
import vlaship.backoffice.facade.UserFacade;
import dev.vlaship.backoffice.api.AuthApi;
import dev.vlaship.backoffice.dto.LoginRequest;
import dev.vlaship.backoffice.dto.LoginResponse;
import dev.vlaship.backoffice.dto.SignupRequest;
import dev.vlaship.backoffice.facade.UserFacade;

@RequestMapping("/api/auth")
@Slf4j
@RestController
@RequiredArgsConstructor
public class AuthController {
public class AuthController implements AuthApi {

private final UserFacade userFacade;

@PostMapping(value = "/signup")
public ResponseEntity<Object> signup(@RequestBody @Valid SignupRequest request) {
@Override
public ResponseEntity<Void> signup(@RequestBody @Valid SignupRequest request) {
userFacade.signup(request);
return ResponseEntity.status(HttpStatus.CREATED).build();
}

@PostMapping(value = "/login")
@Override
public ResponseEntity<LoginResponse> login(@RequestBody @Valid LoginRequest request) {
var resp = userFacade.login(request);
return ResponseEntity.ok(resp);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package dev.vlaship.backoffice.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class OpenApiController {
@GetMapping("/")
public String index() {
return "redirect:swagger-ui.html";
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package vlaship.backoffice.controller.impl;
package dev.vlaship.backoffice.controller.impl;

import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import vlaship.backoffice.controller.AbstractController;
import vlaship.backoffice.dto.CategoryDto;
import vlaship.backoffice.facade.impl.CategoryFacade;
import vlaship.backoffice.model.Category;
import dev.vlaship.backoffice.controller.AbstractController;
import dev.vlaship.backoffice.dto.CategoryDto;
import dev.vlaship.backoffice.facade.impl.CategoryFacade;
import dev.vlaship.backoffice.model.Category;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
Expand All @@ -14,7 +16,9 @@
import java.net.URI;
import java.util.List;

@Slf4j
@RestController
@Tag(name = "category")
@RequestMapping("/api/category")
public class CategoryController extends AbstractController<Category, CategoryDto> {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package vlaship.backoffice.controller.impl;
package dev.vlaship.backoffice.controller.impl;

import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import vlaship.backoffice.controller.AbstractController;
import vlaship.backoffice.dto.BetweenPrice;
import vlaship.backoffice.dto.PriceDto;
import vlaship.backoffice.dto.ProductDto;
import vlaship.backoffice.facade.impl.PriceFacade;
import vlaship.backoffice.model.Price;
import dev.vlaship.backoffice.controller.AbstractController;
import dev.vlaship.backoffice.dto.BetweenPrice;
import dev.vlaship.backoffice.dto.PriceDto;
import dev.vlaship.backoffice.dto.ProductDto;
import dev.vlaship.backoffice.facade.impl.PriceFacade;
import dev.vlaship.backoffice.model.Price;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;

Expand All @@ -15,7 +17,9 @@
import java.math.BigDecimal;
import java.util.List;

@Slf4j
@RestController
@Tag(name = "price")
@RequestMapping("/api/price")
public class PriceController extends AbstractController<Price, PriceDto> {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package vlaship.backoffice.controller.impl;
package dev.vlaship.backoffice.controller.impl;

import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import vlaship.backoffice.controller.AbstractController;
import vlaship.backoffice.dto.PriceDto;
import vlaship.backoffice.dto.ProductDto;
import vlaship.backoffice.dto.ProductCreationDto;
import vlaship.backoffice.facade.impl.ProductFacade;
import vlaship.backoffice.model.Product;
import dev.vlaship.backoffice.controller.AbstractController;
import dev.vlaship.backoffice.dto.PriceDto;
import dev.vlaship.backoffice.dto.ProductDto;
import dev.vlaship.backoffice.dto.ProductCreationDto;
import dev.vlaship.backoffice.facade.impl.ProductFacade;
import dev.vlaship.backoffice.model.Product;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
Expand All @@ -16,7 +18,9 @@
import java.net.URI;
import java.util.List;

@Slf4j
@RestController
@Tag(name = "product")
@RequestMapping("/api/product")
public class ProductController extends AbstractController<Product, ProductDto> {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package vlaship.backoffice.dto;
package dev.vlaship.backoffice.dto;

import jakarta.validation.constraints.NotNull;
import lombok.Builder;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package vlaship.backoffice.dto;
package dev.vlaship.backoffice.dto;

import lombok.Builder;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package vlaship.backoffice.dto;
package dev.vlaship.backoffice.dto;

import org.springframework.lang.NonNull;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package vlaship.backoffice.dto;
package dev.vlaship.backoffice.dto;

import jakarta.validation.constraints.NotBlank;
import lombok.Builder;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package vlaship.backoffice.dto;
package dev.vlaship.backoffice.dto;

import lombok.Builder;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package vlaship.backoffice.dto;
package dev.vlaship.backoffice.dto;

import lombok.Builder;

Expand Down
Loading

0 comments on commit 45d3d72

Please sign in to comment.