feat(admin): 添加用户管理相关文件

添加用户管理视图、API和状态管理文件
This commit is contained in:
张翔
2026-03-28 14:37:29 +08:00
commit 08ea5fbe98
1643 changed files with 255646 additions and 0 deletions
@@ -0,0 +1,11 @@
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY target/everything-is-suitable-admin-app-1.0.0.jar app.jar
EXPOSE 8082
ENV JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.destiny</groupId>
<artifactId>everything-is-suitable-api</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>everything-is-suitable-admin-app</artifactId>
<packaging>jar</packaging>
<name>Everything Is Suitable Admin App</name>
<description>Admin application for Everything Is Suitable API</description>
<dependencies>
<dependency>
<groupId>io.destiny</groupId>
<artifactId>everything-is-suitable-admin-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.destiny</groupId>
<artifactId>everything-is-suitable-biz</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.destiny</groupId>
<artifactId>everything-is-suitable-sys</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.destiny</groupId>
<artifactId>everything-is-suitable-statistics</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.destiny</groupId>
<artifactId>everything-is-suitable-db</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.destiny</groupId>
<artifactId>everything-is-suitable-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>r2dbc-postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>io.destiny.admin.AdminApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,16 @@
package io.destiny.admin;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ConfigurationPropertiesScan(basePackages = "io.destiny")
@ComponentScan(basePackages = "io.destiny")
public class AdminApplication {
public static void main(String[] args) {
SpringApplication.run(AdminApplication.class, args);
}
}
@@ -0,0 +1,9 @@
package io.destiny.admin.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AdminSecurityConfig {
}
@@ -0,0 +1,15 @@
spring:
r2dbc:
url: r2dbc:postgresql://localhost:5432/everything_suitable_dev
flyway:
enabled: true
locations: classpath:db/migration/dev
url: jdbc:postgresql://localhost:5432/everything_suitable_dev
username: postgres
password: postgres
logging:
level:
io.destiny: DEBUG
org.springframework.r2dbc: DEBUG
org.springframework.web: DEBUG
@@ -0,0 +1,46 @@
server:
port: 8082
spring:
application:
name: admin-app
r2dbc:
url: r2dbc:postgresql://127.0.0.1:5432/everything_is_suitable
username: postgres
password: postgres123
pool:
initial-size: 10
max-size: 50
flyway:
enabled: true
locations: classpath:db/migration
url: jdbc:postgresql://127.0.0.1:5432/everything_is_suitable
username: postgres
password: postgres123
cloud:
compatibility-verifier:
enabled: false
cache:
type: caffeine
caffeine:
spec: maximumSize=1000,expireAfterWrite=5m
management:
endpoints:
web:
exposure:
include: health,info,metrics,env,loggers
base-path: /actuator
endpoint:
health:
show-details: always
metrics:
tags:
application: ${spring.application.name}
environment: ${spring.profiles.active}
logging:
level:
io.destiny: DEBUG
io.destiny.common.security: DEBUG
org.springframework.r2dbc: DEBUG
@@ -0,0 +1,13 @@
spring:
r2dbc:
url: ${DB_URL:r2dbc:postgresql://prod-db:5432/everything_suitable}
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
flyway:
enabled: true
logging:
level:
io.destiny: INFO
org.springframework.r2dbc: INFO
org.springframework.web: INFO
@@ -0,0 +1,39 @@
server:
port: 8082
spring:
application:
name: admin-app
r2dbc:
url: r2dbc:postgresql://localhost:5432/everything_suitable
username: ${DB_USERNAME:postgres}
password: ${DB_PASSWORD:postgres}
pool:
initial-size: 10
max-size: 50
flyway:
enabled: true
locations: classpath:db/migration
cache:
type: caffeine
caffeine:
spec: maximumSize=1000,expireAfterWrite=5m
management:
endpoints:
web:
exposure:
include: health,info,metrics,env,loggers
base-path: /actuator
endpoint:
health:
show-details: always
metrics:
tags:
application: ${spring.application.name}
environment: ${spring.profiles.active}
logging:
level:
io.destiny: DEBUG
org.springframework.r2dbc: DEBUG
@@ -0,0 +1,33 @@
package io.destiny.admin;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.reactive.server.WebTestClient;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class AdminApplicationIntegrationTest {
@Autowired
private WebTestClient webTestClient;
@Test
void contextLoads() {
}
@Test
void healthCheck() {
webTestClient.get()
.uri("/actuator/health")
.exchange()
.expectStatus().isOk();
}
@Test
void metricsEndpointAccessible() {
webTestClient.get()
.uri("/actuator/metrics")
.exchange()
.expectStatus().isOk();
}
}