From 96079b7e5bbc90e5f89cdabbcf6e9fb0269bf486 Mon Sep 17 00:00:00 2001 From: yoyuzh Date: Wed, 18 Mar 2026 19:55:43 +0800 Subject: [PATCH] chore: stop tracking ignored local files --- .DS_Store | Bin 14340 -> 0 bytes backend/.DS_Store | Bin 6148 -> 0 bytes backend/dev-backend.err.log | 1 - backend/dev-backend.log | 1772 ------------------ backend/src/.DS_Store | Bin 6148 -> 0 bytes 开发测试账号.md | 18 - 模板/Login.tsx | 261 --- 模板/index.html | 54 - 模板/style.css | 236 --- 草图/pencil-new-前端页面需求文档.md | 668 ------- 草图/pencil-new.pen | 2697 --------------------------- 需求文档.md | 182 -- 12 files changed, 5889 deletions(-) delete mode 100644 .DS_Store delete mode 100644 backend/.DS_Store delete mode 100644 backend/dev-backend.err.log delete mode 100644 backend/dev-backend.log delete mode 100644 backend/src/.DS_Store delete mode 100644 开发测试账号.md delete mode 100644 模板/Login.tsx delete mode 100644 模板/index.html delete mode 100644 模板/style.css delete mode 100644 草图/pencil-new-前端页面需求文档.md delete mode 100644 草图/pencil-new.pen delete mode 100644 需求文档.md diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 9ff8bc80f44f6c47b0d60723afe51fefc116b100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14340 zcmeHNYit!o6rQs!?Os^uwiYPdBDa*c1zM<5Ugq`%mPe@E(idR4_wKe`x_7tU-QMyD z5k(=2#snY855;KwW0WYtXrdzeM~wIbQ%NLB2%6|GW0b^T0(xe4Z@YWjYD`3k%p@~s zcIKR!GvA)GGiP@RAyCt&R1i{52oW(;Doa=#AS6VoC((YIhovlR0n9ToV_hc1BnGkd zu8K(99L7DoLBJ*|pN)A8=_E<7e4>{LWFI|?bm1Q?v6fsCBT*7(bzX1;I0762jsQo1 zBk)fVpnESSahyYW$r0cPa0CVspwEX8W=g{@-RDsD=)i&=;b}iT!n1^Rj00F($faSI z?sF&;MHwcF)DZwI+H{B8;;&?8vncTdrmo>GoSRbn7s$fE~1hJ zM8{Y^PI|~fvV&MO?r+e|xH~g-;Tp^@`J#Rc`IAJ$k!)gRaG&^V?pVLo>yG_itXJ18 zyS)572wB-alb^8f(_n{tmgY)->#>W~fOf zpeZV{Y;DmD#q6&!`wYcmvJt0442XdaxoFRx#Y^ul3oTi)Y;Rd;&$7kkWueNd%DsC7 z;>6NLD>ilX=n2Do0#|?u+{YUk?_3X-hp?85NO>@D-m|zklPL`&a9F8YXWdzm^tvyk z*Bux;P8uIDtlwzg_<(}-xh)ebq&!o@e>Wn)rJ;i6mOrrwt@tPVLp9@XQ0del~{ zb)7O}Tb>n9n!4U-TAHnyMq8_`?zGbb`MO%$Ei-A?vcWoJxzAEJsW_IFQtNO;9IAlM zwy~EEV>PQu3u$SXSq~wB;}a%NpE-BI;-xFY^$i>DAIOvQ3#3A6QcFs+w3x1L?$;E% zyDe(PRYTE?u6DcwhOKpKYBG=yWq~FmnotLdrc5me76n83XGL8-|?aO5a5(jgWulBA{{ zG!fYfI4w&mrQl{g8dG&y35blTYMB&lNja;Q*SU?W3Z-BxdQt+HV!3VAHNoHmbkg-v z%ih?l8mQ74(HUel_O)Bx(WJVuA5GM4U5l;kwqiRKs#i4Iq@4_nl3=4Kw$TBr6@{*0 z%G9Dw5h@{TMoL4M!295MhWw={ilu3bEDg_hs->rupIMD9GEkUia4Fr`r;*vD3ODj5 ze932$hsl%V7&%EkB&Wz1V0kr$e@Lh&2 zZ}8hPTp4c5-lM?f6@y2C42w^gL&t&9xqL?gd=LzuEfq-`x@mM_5B0Y|2Z@|ZtUL78 zQ?nz#;UOVGlo7Uk?`HvFM@iR1ejb>CBMsy6Z<|G@kcY{7*ZX4q;CkJ@p;cz~`Para zEMb2`^L4*2>_Fqwh4T1xfrdt^3vKu6vaNAQ7pHGXm&`t&F0dVkBe_S2UZWoDj*o;Q z97YbWR#bu~jsQo1Bft^34G{uotAdbfJ7j-yBRUL8m0^6ALqe|nEtobNkk@c5tN!V^b;Bft^h z2;6W4#yB&S)BpeKNB{r-hU>v6;0SO8ZXN=VT^FgV!THl)x-(UwuK+`sw_~O}r!mun zbtZxZWuX`BcRakHzvETWwsgY2Fs&oq=TNL+`p3o7oYt$@R>wtzSy?GyL`pWp@bz$^F$Tp8Pe z&59LAR3TeR#iR0*|KWS@Y1*n<*6k9Oa{E?Z9zVaH=HB%$-pzHsYCxFgyQS42AHSUUo;=^l z_TeeZhq$Kg^L;$-=evP-kgt&6)x{Zb2AlzBz!?}YfSN5*9vFJ>3^)VMz&8VOJ_Izu zn6NX{qXV5j0e}U}D$w=L2@GNY#)O?AED*L(poMaJVz7n79@4y+ursu9V$Fe|ABP diff --git a/backend/dev-backend.err.log b/backend/dev-backend.err.log deleted file mode 100644 index 3438401..0000000 --- a/backend/dev-backend.err.log +++ /dev/null @@ -1 +0,0 @@ -^C \ No newline at end of file diff --git a/backend/dev-backend.log b/backend/dev-backend.log deleted file mode 100644 index afbf1be..0000000 --- a/backend/dev-backend.log +++ /dev/null @@ -1,1772 +0,0 @@ -[INFO] Scanning for projects... -[INFO] -[INFO] ------------------< com.yoyuzh:yoyuzh-portal-backend >------------------ -[INFO] Building yoyuzh-portal-backend 0.0.1-SNAPSHOT -[INFO] from pom.xml -[INFO] --------------------------------[ jar ]--------------------------------- -[INFO] -[INFO] >>> spring-boot:3.3.8:run (default-cli) > test-compile @ yoyuzh-portal-backend >>> -[INFO] -[INFO] --- resources:3.3.1:resources (default-resources) @ yoyuzh-portal-backend --- -[INFO] Copying 2 resources from src\main\resources to target\classes -[INFO] Copying 1 resource from src\main\resources to target\classes -[INFO] -[INFO] --- compiler:3.13.0:compile (default-compile) @ yoyuzh-portal-backend --- -[INFO] Nothing to compile - all classes are up to date. -[INFO] -[INFO] --- resources:3.3.1:testResources (default-testResources) @ yoyuzh-portal-backend --- -[INFO] skip non existing resourceDirectory C:\Users\yoyuz\Documents\code\my_site\backend\src\test\resources -[INFO] -[INFO] --- compiler:3.13.0:testCompile (default-testCompile) @ yoyuzh-portal-backend --- -[INFO] Nothing to compile - all classes are up to date. -[INFO] -[INFO] <<< spring-boot:3.3.8:run (default-cli) < test-compile @ yoyuzh-portal-backend <<< -[INFO] -[INFO] -[INFO] --- spring-boot:3.3.8:run (default-cli) @ yoyuzh-portal-backend --- -[INFO] Attaching agents: [] - - . ____ _ __ _ _ - /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ -( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ - \\/ ___)| |_)| | | | | || (_| | ) ) ) ) - ' |____| .__|_| |_|_| |_\__, | / / / / - =========|_|==============|___/=/_/_/_/ - -2026-03-09 19:29:00.171 [background-preinit] INFO o.h.validator.internal.util.Version - HV000001: Hibernate Validator 8.0.2.Final - :: Spring Boot :: (v3.3.8) - -2026-03-09 19:29:00.314 [main] INFO com.yoyuzh.PortalBackendApplication - Starting PortalBackendApplication using Java 22.0.2 with PID 28656 (C:\Users\yoyuz\Documents\code\my_site\backend\target\classes started by yoyuz in C:\Users\yoyuz\Documents\code\my_site\backend) -2026-03-09 19:29:00.317 [main] INFO com.yoyuzh.PortalBackendApplication - The following 1 profile is active: "dev" -2026-03-09 19:29:00.317 [main] DEBUG o.s.boot.SpringApplication - Loading source class com.yoyuzh.PortalBackendApplication -2026-03-09 19:29:00.415 [main] DEBUG o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@56a4479a -2026-03-09 19:29:01.451 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode. -2026-03-09 19:29:01.467 [main] DEBUG o.s.b.a.AutoConfigurationPackages - @EnableAutoConfiguration was declared on a class in the package 'com.yoyuzh'. Automatic @Repository and @Entity scanning is enabled. -2026-03-09 19:29:01.526 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 67 ms. Found 4 JPA repository interfaces. -2026-03-09 19:29:02.356 [main] DEBUG o.s.b.w.e.t.TomcatServletWebServerFactory - Code archive: C:\Users\yoyuz\.m2\repository\org\springframework\boot\spring-boot\3.3.8\spring-boot-3.3.8.jar -2026-03-09 19:29:02.358 [main] DEBUG o.s.b.w.e.t.TomcatServletWebServerFactory - Code archive: C:\Users\yoyuz\.m2\repository\org\springframework\boot\spring-boot\3.3.8\spring-boot-3.3.8.jar -2026-03-09 19:29:02.360 [main] DEBUG o.s.b.w.e.t.TomcatServletWebServerFactory - None of the document roots [src/main/webapp, public, static] point to a directory and will be ignored. -2026-03-09 19:29:02.378 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8080 (http) -2026-03-09 19:29:02.387 [main] INFO o.a.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8080"] -2026-03-09 19:29:02.388 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat] -2026-03-09 19:29:02.389 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.34] -2026-03-09 19:29:02.506 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext -2026-03-09 19:29:02.508 [main] DEBUG o.s.b.w.s.c.ServletWebServerApplicationContext - Published root WebApplicationContext as ServletContext attribute with name [org.springframework.web.context.WebApplicationContext.ROOT] -2026-03-09 19:29:02.508 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 2093 ms -2026-03-09 19:29:02.664 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default] -2026-03-09 19:29:02.723 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final -2026-03-09 19:29:02.753 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled -2026-03-09 19:29:03.069 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer -2026-03-09 19:29:03.103 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... -2026-03-09 19:29:07.487 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection conn1: url=jdbc:h2:file:./data/yoyuzh_portal_dev user=SA -2026-03-09 19:29:07.489 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. -2026-03-09 19:29:08.584 [main] INFO o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration) -2026-03-09 19:29:08.633 [main] DEBUG org.hibernate.SQL - - alter table if exists portal_file - drop constraint if exists uk_file_user_path_name -2026-03-09 19:29:08.635 [main] DEBUG org.hibernate.SQL - - alter table if exists portal_file - add constraint uk_file_user_path_name unique (user_id, path, filename) -2026-03-09 19:29:08.640 [main] DEBUG org.hibernate.SQL - - alter table if exists portal_user - drop constraint if exists uk_user_username -2026-03-09 19:29:08.641 [main] DEBUG org.hibernate.SQL - - alter table if exists portal_user - add constraint uk_user_username unique (username) -2026-03-09 19:29:08.642 [main] DEBUG org.hibernate.SQL - - alter table if exists portal_user - drop constraint if exists uk_user_email -2026-03-09 19:29:08.643 [main] DEBUG org.hibernate.SQL - - alter table if exists portal_user - add constraint uk_user_email unique (email) -2026-03-09 19:29:08.652 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default' -2026-03-09 19:29:08.946 [main] DEBUG o.s.b.w.s.ServletContextInitializerBeans - Mapping filters: springSecurityFilterChain urls=[/*] order=-100, characterEncodingFilter urls=[/*] order=-2147483648, formContentFilter urls=[/*] order=-9900, requestContextFilter urls=[/*] order=-105, jwtAuthenticationFilter urls=[/*] order=2147483647 -2026-03-09 19:29:08.950 [main] DEBUG o.s.b.w.s.ServletContextInitializerBeans - Mapping servlets: dispatcherServlet urls=[/], h2Console urls=[/h2-console/*] -2026-03-09 19:29:08.970 [main] DEBUG o.s.b.w.s.f.OrderedRequestContextFilter - Filter 'requestContextFilter' configured for use -2026-03-09 19:29:08.970 [main] DEBUG o.s.b.w.s.f.OrderedCharacterEncodingFilter - Filter 'characterEncodingFilter' configured for use -2026-03-09 19:29:08.981 [main] DEBUG o.s.b.w.s.DelegatingFilterProxyRegistrationBean$1 - Filter 'springSecurityFilterChain' configured for use -2026-03-09 19:29:08.981 [main] DEBUG o.s.b.w.s.f.OrderedFormContentFilter - Filter 'formContentFilter' configured for use -2026-03-09 19:29:09.101 [main] INFO o.s.s.c.a.a.c.InitializeAuthenticationProviderBeanManagerConfigurer$InitializeAuthenticationProviderManagerConfigurer - Global AuthenticationManager configured with AuthenticationProvider bean with name authenticationProvider -2026-03-09 19:29:09.101 [main] WARN o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with an AuthenticationProvider bean. UserDetailsService beans will not be used for username/password login. Consider removing the AuthenticationProvider bean. Alternatively, consider using the UserDetailsService in a manually instantiated DaoAuthenticationProvider. -2026-03-09 19:29:09.277 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used. -2026-03-09 19:29:10.030 [main] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - 18 mappings in 'requestMappingHandlerMapping' -2026-03-09 19:29:10.064 [main] DEBUG o.s.w.s.h.SimpleUrlHandlerMapping - Patterns [/webjars/**, /**, /swagger-ui*/*swagger-initializer.js, /swagger-ui*/**] in 'resourceHandlerMapping' -2026-03-09 19:29:10.224 [main] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerAdapter - ControllerAdvice beans: 0 @ModelAttribute, 0 @InitBinder, 1 RequestBodyAdvice, 1 ResponseBodyAdvice -2026-03-09 19:29:10.274 [main] DEBUG o.s.w.s.m.m.a.ExceptionHandlerExceptionResolver - ControllerAdvice beans: 2 @ExceptionHandler, 1 ResponseBodyAdvice -2026-03-09 19:29:10.399 [main] INFO o.s.b.a.h.H2ConsoleAutoConfiguration - H2 console available at '/h2-console'. Database available at 'jdbc:h2:file:./data/yoyuzh_portal_dev' -2026-03-09 19:29:10.456 [main] INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8080"] -2026-03-09 19:29:10.477 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8080 (http) with context path '/' -2026-03-09 19:29:10.489 [main] DEBUG o.s.b.a.l.ConditionEvaluationReportLogger - - - -============================ -CONDITIONS EVALUATION REPORT -============================ - - -Positive matches: ------------------ - - AopAutoConfiguration matched: - - @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition) - - AopAutoConfiguration.AspectJAutoProxyingConfiguration matched: - - @ConditionalOnClass found required class 'org.aspectj.weaver.Advice' (OnClassCondition) - - AopAutoConfiguration.AspectJAutoProxyingConfiguration.CglibAutoProxyConfiguration matched: - - @ConditionalOnProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition) - - ApplicationAvailabilityAutoConfiguration#applicationAvailability matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.availability.ApplicationAvailability; SearchStrategy: all) did not find any beans (OnBeanCondition) - - DataSourceAutoConfiguration matched: - - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType' (OnClassCondition) - - @ConditionalOnMissingBean (types: io.r2dbc.spi.ConnectionFactory; SearchStrategy: all) did not find any beans (OnBeanCondition) - - DataSourceAutoConfiguration.PooledDataSourceConfiguration matched: - - AnyNestedCondition 1 matched 1 did not; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.PooledDataSourceAvailable PooledDataSource found supported DataSource; NestedCondition on DataSourceAutoConfiguration.PooledDataSourceCondition.ExplicitType @ConditionalOnProperty (spring.datasource.type) did not find property 'type' (DataSourceAutoConfiguration.PooledDataSourceCondition) - - @ConditionalOnMissingBean (types: javax.sql.DataSource,javax.sql.XADataSource; SearchStrategy: all) did not find any beans (OnBeanCondition) - - DataSourceAutoConfiguration.PooledDataSourceConfiguration#jdbcConnectionDetails matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.jdbc.JdbcConnectionDetails; SearchStrategy: all) did not find any beans (OnBeanCondition) - - DataSourceConfiguration.Hikari matched: - - @ConditionalOnClass found required class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition) - - @ConditionalOnProperty (spring.datasource.type=com.zaxxer.hikari.HikariDataSource) matched (OnPropertyCondition) - - @ConditionalOnMissingBean (types: javax.sql.DataSource; SearchStrategy: all) did not find any beans (OnBeanCondition) - - DataSourceInitializationConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.jdbc.datasource.init.DatabasePopulator' (OnClassCondition) - - @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a single bean 'dataSource'; @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.sql.init.SqlDataSourceScriptDatabaseInitializer,org.springframework.boot.autoconfigure.sql.init.SqlR2dbcScriptDatabaseInitializer; SearchStrategy: all) did not find any beans (OnBeanCondition) - - DataSourceJmxConfiguration matched: - - @ConditionalOnProperty (spring.jmx.enabled=true) matched (OnPropertyCondition) - - DataSourceJmxConfiguration.Hikari matched: - - @ConditionalOnClass found required class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition) - - @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a single bean 'dataSource' (OnBeanCondition) - - DataSourcePoolMetadataProvidersConfiguration.HikariPoolDataSourceMetadataProviderConfiguration matched: - - @ConditionalOnClass found required class 'com.zaxxer.hikari.HikariDataSource' (OnClassCondition) - - DataSourceTransactionManagerAutoConfiguration matched: - - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.core.JdbcTemplate', 'org.springframework.transaction.TransactionManager' (OnClassCondition) - - DataSourceTransactionManagerAutoConfiguration.JdbcTransactionManagerConfiguration matched: - - @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a single bean 'dataSource' (OnBeanCondition) - - DispatcherServletAutoConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition) - - found 'session' scope (OnWebApplicationCondition) - - DispatcherServletAutoConfiguration.DispatcherServletConfiguration matched: - - @ConditionalOnClass found required class 'jakarta.servlet.ServletRegistration' (OnClassCondition) - - Default DispatcherServlet did not find dispatcher servlet beans (DispatcherServletAutoConfiguration.DefaultDispatcherServletCondition) - - DispatcherServletAutoConfiguration.DispatcherServletRegistrationConfiguration matched: - - @ConditionalOnClass found required class 'jakarta.servlet.ServletRegistration' (OnClassCondition) - - DispatcherServlet Registration did not find servlet registration bean (DispatcherServletAutoConfiguration.DispatcherServletRegistrationCondition) - - DispatcherServletAutoConfiguration.DispatcherServletRegistrationConfiguration#dispatcherServletRegistration matched: - - @ConditionalOnBean (names: dispatcherServlet types: org.springframework.web.servlet.DispatcherServlet; SearchStrategy: all) found bean 'dispatcherServlet' (OnBeanCondition) - - EmbeddedWebServerFactoryCustomizerAutoConfiguration matched: - - @ConditionalOnWebApplication (required) found 'session' scope (OnWebApplicationCondition) - - @ConditionalOnWarDeployment the application is not deployed as a WAR file. (OnWarDeploymentCondition) - - EmbeddedWebServerFactoryCustomizerAutoConfiguration.TomcatWebServerFactoryCustomizerConfiguration matched: - - @ConditionalOnClass found required classes 'org.apache.catalina.startup.Tomcat', 'org.apache.coyote.UpgradeProtocol' (OnClassCondition) - - ErrorMvcAutoConfiguration matched: - - @ConditionalOnClass found required classes 'jakarta.servlet.Servlet', 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition) - - found 'session' scope (OnWebApplicationCondition) - - ErrorMvcAutoConfiguration#basicErrorController matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.web.servlet.error.ErrorController; SearchStrategy: current) did not find any beans (OnBeanCondition) - - ErrorMvcAutoConfiguration#errorAttributes matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.web.servlet.error.ErrorAttributes; SearchStrategy: current) did not find any beans (OnBeanCondition) - - ErrorMvcAutoConfiguration.DefaultErrorViewResolverConfiguration#conventionErrorViewResolver matched: - - @ConditionalOnBean (types: org.springframework.web.servlet.DispatcherServlet; SearchStrategy: all) found bean 'dispatcherServlet'; @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.servlet.error.ErrorViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition) - - ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration matched: - - @ConditionalOnProperty (server.error.whitelabel.enabled) matched (OnPropertyCondition) - - ErrorTemplate Missing did not find error template view (ErrorMvcAutoConfiguration.ErrorTemplateMissingCondition) - - ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration#beanNameViewResolver matched: - - @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.BeanNameViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition) - - ErrorMvcAutoConfiguration.WhitelabelErrorViewConfiguration#defaultErrorView matched: - - @ConditionalOnMissingBean (names: error; SearchStrategy: all) did not find any beans (OnBeanCondition) - - GenericCacheConfiguration matched: - - Cache org.springframework.boot.autoconfigure.cache.GenericCacheConfiguration automatic cache type (CacheCondition) - - H2ConsoleAutoConfiguration matched: - - @ConditionalOnClass found required class 'org.h2.server.web.JakartaWebServlet' (OnClassCondition) - - found 'session' scope (OnWebApplicationCondition) - - @ConditionalOnProperty (spring.h2.console.enabled=true) matched (OnPropertyCondition) - - HibernateJpaAutoConfiguration matched: - - @ConditionalOnClass found required classes 'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean', 'jakarta.persistence.EntityManager', 'org.hibernate.engine.spi.SessionImplementor' (OnClassCondition) - - HibernateJpaConfiguration matched: - - @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a single bean 'dataSource' (OnBeanCondition) - - HttpEncodingAutoConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.web.filter.CharacterEncodingFilter' (OnClassCondition) - - found 'session' scope (OnWebApplicationCondition) - - @ConditionalOnProperty (server.servlet.encoding.enabled) matched (OnPropertyCondition) - - HttpEncodingAutoConfiguration#characterEncodingFilter matched: - - @ConditionalOnMissingBean (types: org.springframework.web.filter.CharacterEncodingFilter; SearchStrategy: all) did not find any beans (OnBeanCondition) - - HttpMessageConvertersAutoConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.http.converter.HttpMessageConverter' (OnClassCondition) - - NoneNestedConditions 0 matched 1 did not; NestedCondition on HttpMessageConvertersAutoConfiguration.NotReactiveWebApplicationCondition.ReactiveWebApplication did not find reactive web application classes (HttpMessageConvertersAutoConfiguration.NotReactiveWebApplicationCondition) - - HttpMessageConvertersAutoConfiguration#messageConverters matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.http.HttpMessageConverters; SearchStrategy: all) did not find any beans (OnBeanCondition) - - HttpMessageConvertersAutoConfiguration.StringHttpMessageConverterConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.http.converter.StringHttpMessageConverter' (OnClassCondition) - - HttpMessageConvertersAutoConfiguration.StringHttpMessageConverterConfiguration#stringHttpMessageConverter matched: - - @ConditionalOnMissingBean (types: org.springframework.http.converter.StringHttpMessageConverter; SearchStrategy: all) did not find any beans (OnBeanCondition) - - JacksonAutoConfiguration matched: - - @ConditionalOnClass found required class 'com.fasterxml.jackson.databind.ObjectMapper' (OnClassCondition) - - JacksonAutoConfiguration.Jackson2ObjectMapperBuilderCustomizerConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.http.converter.json.Jackson2ObjectMapperBuilder' (OnClassCondition) - - JacksonAutoConfiguration.JacksonObjectMapperBuilderConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.http.converter.json.Jackson2ObjectMapperBuilder' (OnClassCondition) - - JacksonAutoConfiguration.JacksonObjectMapperBuilderConfiguration#jacksonObjectMapperBuilder matched: - - @ConditionalOnMissingBean (types: org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition) - - JacksonAutoConfiguration.JacksonObjectMapperConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.http.converter.json.Jackson2ObjectMapperBuilder' (OnClassCondition) - - JacksonAutoConfiguration.JacksonObjectMapperConfiguration#jacksonObjectMapper matched: - - @ConditionalOnMissingBean (types: com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) did not find any beans (OnBeanCondition) - - JacksonAutoConfiguration.ParameterNamesModuleConfiguration matched: - - @ConditionalOnClass found required class 'com.fasterxml.jackson.module.paramnames.ParameterNamesModule' (OnClassCondition) - - JacksonAutoConfiguration.ParameterNamesModuleConfiguration#parameterNamesModule matched: - - @ConditionalOnMissingBean (types: com.fasterxml.jackson.module.paramnames.ParameterNamesModule; SearchStrategy: all) did not find any beans (OnBeanCondition) - - JacksonHttpMessageConvertersConfiguration.MappingJackson2HttpMessageConverterConfiguration matched: - - @ConditionalOnClass found required class 'com.fasterxml.jackson.databind.ObjectMapper' (OnClassCondition) - - @ConditionalOnProperty (spring.mvc.converters.preferred-json-mapper=jackson) matched (OnPropertyCondition) - - @ConditionalOnBean (types: com.fasterxml.jackson.databind.ObjectMapper; SearchStrategy: all) found bean 'jacksonObjectMapper' (OnBeanCondition) - - JacksonHttpMessageConvertersConfiguration.MappingJackson2HttpMessageConverterConfiguration#mappingJackson2HttpMessageConverter matched: - - @ConditionalOnMissingBean (types: org.springframework.http.converter.json.MappingJackson2HttpMessageConverter ignored: org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter,org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter; SearchStrategy: all) did not find any beans (OnBeanCondition) - - JdbcClientAutoConfiguration matched: - - @ConditionalOnSingleCandidate (types: org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; SearchStrategy: all) found a single bean 'namedParameterJdbcTemplate'; @ConditionalOnMissingBean (types: org.springframework.jdbc.core.simple.JdbcClient; SearchStrategy: all) did not find any beans (OnBeanCondition) - - JdbcTemplateAutoConfiguration matched: - - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.core.JdbcTemplate' (OnClassCondition) - - @ConditionalOnSingleCandidate (types: javax.sql.DataSource; SearchStrategy: all) found a single bean 'dataSource' (OnBeanCondition) - - JdbcTemplateConfiguration matched: - - @ConditionalOnMissingBean (types: org.springframework.jdbc.core.JdbcOperations; SearchStrategy: all) did not find any beans (OnBeanCondition) - - JpaBaseConfiguration#entityManagerFactory matched: - - @ConditionalOnMissingBean (types: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,jakarta.persistence.EntityManagerFactory; SearchStrategy: all) did not find any beans (OnBeanCondition) - - JpaBaseConfiguration#entityManagerFactoryBuilder matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition) - - JpaBaseConfiguration#jpaVendorAdapter matched: - - @ConditionalOnMissingBean (types: org.springframework.orm.jpa.JpaVendorAdapter; SearchStrategy: all) did not find any beans (OnBeanCondition) - - JpaBaseConfiguration#transactionManager matched: - - @ConditionalOnMissingBean (types: org.springframework.transaction.TransactionManager; SearchStrategy: all) did not find any beans (OnBeanCondition) - - JpaBaseConfiguration.PersistenceManagedTypesConfiguration matched: - - @ConditionalOnMissingBean (types: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean,jakarta.persistence.EntityManagerFactory; SearchStrategy: all) did not find any beans (OnBeanCondition) - - JpaBaseConfiguration.PersistenceManagedTypesConfiguration#persistenceManagedTypes matched: - - @ConditionalOnMissingBean (types: org.springframework.orm.jpa.persistenceunit.PersistenceManagedTypes; SearchStrategy: all) did not find any beans (OnBeanCondition) - - JpaRepositoriesAutoConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.data.jpa.repository.JpaRepository' (OnClassCondition) - - @ConditionalOnProperty (spring.data.jpa.repositories.enabled=true) matched (OnPropertyCondition) - - @ConditionalOnBean (types: javax.sql.DataSource; SearchStrategy: all) found bean 'dataSource'; @ConditionalOnMissingBean (types: org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean,org.springframework.data.jpa.repository.config.JpaRepositoryConfigExtension; SearchStrategy: all) did not find any beans (OnBeanCondition) - - JtaAutoConfiguration matched: - - @ConditionalOnClass found required class 'jakarta.transaction.Transaction' (OnClassCondition) - - @ConditionalOnProperty (spring.jta.enabled) matched (OnPropertyCondition) - - LifecycleAutoConfiguration#defaultLifecycleProcessor matched: - - @ConditionalOnMissingBean (names: lifecycleProcessor; SearchStrategy: current) did not find any beans (OnBeanCondition) - - MultipartAutoConfiguration matched: - - @ConditionalOnClass found required classes 'jakarta.servlet.Servlet', 'org.springframework.web.multipart.support.StandardServletMultipartResolver', 'jakarta.servlet.MultipartConfigElement' (OnClassCondition) - - found 'session' scope (OnWebApplicationCondition) - - @ConditionalOnProperty (spring.servlet.multipart.enabled) matched (OnPropertyCondition) - - MultipartAutoConfiguration#multipartConfigElement matched: - - @ConditionalOnMissingBean (types: jakarta.servlet.MultipartConfigElement; SearchStrategy: all) did not find any beans (OnBeanCondition) - - MultipartAutoConfiguration#multipartResolver matched: - - @ConditionalOnMissingBean (types: org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) did not find any beans (OnBeanCondition) - - NamedParameterJdbcTemplateConfiguration matched: - - @ConditionalOnSingleCandidate (types: org.springframework.jdbc.core.JdbcTemplate; SearchStrategy: all) found a single bean 'jdbcTemplate'; @ConditionalOnMissingBean (types: org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations; SearchStrategy: all) did not find any beans (OnBeanCondition) - - NoOpCacheConfiguration matched: - - Cache org.springframework.boot.autoconfigure.cache.NoOpCacheConfiguration automatic cache type (CacheCondition) - - PersistenceExceptionTranslationAutoConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor' (OnClassCondition) - - PersistenceExceptionTranslationAutoConfiguration#persistenceExceptionTranslationPostProcessor matched: - - @ConditionalOnProperty (spring.dao.exceptiontranslation.enabled) matched (OnPropertyCondition) - - @ConditionalOnMissingBean (types: org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; SearchStrategy: all) did not find any beans (OnBeanCondition) - - PropertyPlaceholderAutoConfiguration#propertySourcesPlaceholderConfigurer matched: - - @ConditionalOnMissingBean (types: org.springframework.context.support.PropertySourcesPlaceholderConfigurer; SearchStrategy: current) did not find any beans (OnBeanCondition) - - RestClientAutoConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.web.client.RestClient' (OnClassCondition) - - NoneNestedConditions 0 matched 1 did not; NestedCondition on NotReactiveWebApplicationCondition.ReactiveWebApplication did not find reactive web application classes (NotReactiveWebApplicationCondition) - - RestClientAutoConfiguration#httpMessageConvertersRestClientCustomizer matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.client.HttpMessageConvertersRestClientCustomizer; SearchStrategy: all) did not find any beans (OnBeanCondition) - - RestClientAutoConfiguration#restClientBuilder matched: - - @ConditionalOnMissingBean (types: org.springframework.web.client.RestClient$Builder; SearchStrategy: all) did not find any beans (OnBeanCondition) - - RestClientAutoConfiguration#restClientBuilderConfigurer matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.client.RestClientBuilderConfigurer; SearchStrategy: all) did not find any beans (OnBeanCondition) - - RestClientAutoConfiguration#restClientSsl matched: - - @ConditionalOnBean (types: org.springframework.boot.ssl.SslBundles; SearchStrategy: all) found bean 'sslBundleRegistry'; @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.web.client.RestClientSsl; SearchStrategy: all) did not find any beans (OnBeanCondition) - - RestTemplateAutoConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.web.client.RestTemplate' (OnClassCondition) - - NoneNestedConditions 0 matched 1 did not; NestedCondition on NotReactiveWebApplicationCondition.ReactiveWebApplication did not find reactive web application classes (NotReactiveWebApplicationCondition) - - RestTemplateAutoConfiguration#restTemplateBuilder matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.web.client.RestTemplateBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SecurityAutoConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.security.authentication.DefaultAuthenticationEventPublisher' (OnClassCondition) - - SecurityAutoConfiguration#authenticationEventPublisher matched: - - @ConditionalOnMissingBean (types: org.springframework.security.authentication.AuthenticationEventPublisher; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SecurityFilterAutoConfiguration matched: - - @ConditionalOnClass found required classes 'org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer', 'org.springframework.security.config.http.SessionCreationPolicy' (OnClassCondition) - - found 'session' scope (OnWebApplicationCondition) - - SecurityFilterAutoConfiguration#securityFilterChainRegistration matched: - - @ConditionalOnBean (names: springSecurityFilterChain; SearchStrategy: all) found bean 'springSecurityFilterChain' (OnBeanCondition) - - ServletWebServerFactoryAutoConfiguration matched: - - @ConditionalOnClass found required class 'jakarta.servlet.ServletRequest' (OnClassCondition) - - found 'session' scope (OnWebApplicationCondition) - - ServletWebServerFactoryAutoConfiguration#tomcatServletWebServerFactoryCustomizer matched: - - @ConditionalOnClass found required class 'org.apache.catalina.startup.Tomcat' (OnClassCondition) - - ServletWebServerFactoryConfiguration.EmbeddedTomcat matched: - - @ConditionalOnClass found required classes 'jakarta.servlet.Servlet', 'org.apache.catalina.startup.Tomcat', 'org.apache.coyote.UpgradeProtocol' (OnClassCondition) - - @ConditionalOnMissingBean (types: org.springframework.boot.web.servlet.server.ServletWebServerFactory; SearchStrategy: current) did not find any beans (OnBeanCondition) - - SimpleCacheConfiguration matched: - - Cache org.springframework.boot.autoconfigure.cache.SimpleCacheConfiguration automatic cache type (CacheCondition) - - SpringBootWebSecurityConfiguration matched: - - found 'session' scope (OnWebApplicationCondition) - - SpringDataWebAutoConfiguration matched: - - @ConditionalOnClass found required classes 'org.springframework.data.web.PageableHandlerMethodArgumentResolver', 'org.springframework.web.servlet.config.annotation.WebMvcConfigurer' (OnClassCondition) - - found 'session' scope (OnWebApplicationCondition) - - @ConditionalOnMissingBean (types: org.springframework.data.web.PageableHandlerMethodArgumentResolver; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDataWebAutoConfiguration#pageableCustomizer matched: - - @ConditionalOnMissingBean (types: org.springframework.data.web.config.PageableHandlerMethodArgumentResolverCustomizer; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDataWebAutoConfiguration#sortCustomizer matched: - - @ConditionalOnMissingBean (types: org.springframework.data.web.config.SortHandlerMethodArgumentResolverCustomizer; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfigProperties matched: - - @ConditionalOnProperty (springdoc.api-docs.enabled) matched (OnPropertyCondition) - - @ConditionalOnBean (types: org.springdoc.core.configuration.SpringDocConfiguration; SearchStrategy: all) found bean 'org.springdoc.core.configuration.SpringDocConfiguration' (OnBeanCondition) - - SpringDocConfiguration matched: - - @ConditionalOnWebApplication (required) found 'session' scope (OnWebApplicationCondition) - - @ConditionalOnProperty (springdoc.api-docs.enabled) matched (OnPropertyCondition) - - SpringDocConfiguration#fileSupportConverter matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.converters.FileSupportConverter; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfiguration#openAPIBuilder matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.service.OpenAPIService; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfiguration#operationBuilder matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.service.OperationService; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfiguration#parameterBuilder matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.service.GenericParameterService; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfiguration#polymorphicModelConverter matched: - - @ConditionalOnProperty (springdoc.model-converters.polymorphic-converter.enabled) matched (OnPropertyCondition) - - @ConditionalOnMissingBean (types: org.springdoc.core.converters.PolymorphicModelConverter; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfiguration#requestBodyBuilder matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.service.RequestBodyService; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfiguration#responseSupportConverter matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.converters.ResponseSupportConverter; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfiguration#schemaPropertyDeprecatingConverter matched: - - @ConditionalOnProperty (springdoc.model-converters.deprecating-converter.enabled) matched (OnPropertyCondition) - - @ConditionalOnMissingBean (types: org.springdoc.core.converters.SchemaPropertyDeprecatingConverter; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfiguration#securityParser matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.service.SecurityService; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfiguration#springDocCustomizers matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.customizers.SpringDocCustomizers; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfiguration#springDocProviders matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.providers.SpringDocProviders; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfiguration#springdocObjectMapperProvider matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.providers.ObjectMapperProvider; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfiguration.QuerydslProvider matched: - - @ConditionalOnClass found required class 'org.springframework.data.querydsl.binding.QuerydslBindingsFactory' (OnClassCondition) - - SpringDocConfiguration.QuerydslProvider#queryDslQuerydslPredicateOperationCustomizer matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.customizers.QuerydslPredicateOperationCustomizer; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfiguration.SpringDocSpringDataWebPropertiesProvider matched: - - @ConditionalOnClass found required class 'org.springframework.boot.autoconfigure.data.web.SpringDataWebProperties' (OnClassCondition) - - SpringDocConfiguration.SpringDocSpringDataWebPropertiesProvider#springDataWebPropertiesProvider matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.providers.SpringDataWebPropertiesProvider; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocConfiguration.WebConversionServiceConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.boot.autoconfigure.web.format.WebConversionService' (OnClassCondition) - - SpringDocPageableConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.data.domain.Pageable' (OnClassCondition) - - @ConditionalOnWebApplication (required) found 'session' scope (OnWebApplicationCondition) - - @ConditionalOnProperty (springdoc.api-docs.enabled) matched (OnPropertyCondition) - - @ConditionalOnBean (types: org.springdoc.core.configuration.SpringDocConfiguration; SearchStrategy: all) found bean 'org.springdoc.core.configuration.SpringDocConfiguration' (OnBeanCondition) - - SpringDocPageableConfiguration#delegatingMethodParameterCustomizer matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.customizers.DelegatingMethodParameterCustomizer; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocPageableConfiguration#pageOpenAPIConverter matched: - - @ConditionalOnClass found required classes 'org.springframework.data.web.PagedModel', 'org.springframework.data.web.config.SpringDataWebSettings' (OnClassCondition) - - @ConditionalOnMissingBean (types: org.springdoc.core.converters.PageOpenAPIConverter; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocPageableConfiguration#pageableOpenAPIConverter matched: - - @ConditionalOnProperty (springdoc.model-converters.pageable-converter.enabled) matched (OnPropertyCondition) - - @ConditionalOnMissingBean (types: org.springdoc.core.converters.PageableOpenAPIConverter; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocSecurityConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.security.web.SecurityFilterChain' (OnClassCondition) - - @ConditionalOnWebApplication (required) found 'session' scope (OnWebApplicationCondition) - - @ConditionalOnExpression (#{${springdoc.api-docs.enabled:true} and ${springdoc.enable-spring-security:true}}) resulted in true (OnExpressionCondition) - - @ConditionalOnBean (types: org.springdoc.core.configuration.SpringDocConfiguration; SearchStrategy: all) found bean 'org.springdoc.core.configuration.SpringDocConfiguration' (OnBeanCondition) - - SpringDocSecurityConfiguration.SpringSecurityLoginEndpointConfiguration matched: - - @ConditionalOnClass found required class 'jakarta.servlet.Filter' (OnClassCondition) - - SpringDocSortConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.data.domain.Sort' (OnClassCondition) - - @ConditionalOnWebApplication (required) found 'session' scope (OnWebApplicationCondition) - - @ConditionalOnProperty (springdoc.api-docs.enabled) matched (OnPropertyCondition) - - @ConditionalOnBean (types: org.springdoc.core.configuration.SpringDocConfiguration; SearchStrategy: all) found bean 'org.springdoc.core.configuration.SpringDocConfiguration' (OnBeanCondition) - - SpringDocSortConfiguration#sortOpenAPIConverter matched: - - @ConditionalOnProperty (springdoc.sort-converter.enabled) matched (OnPropertyCondition) - - @ConditionalOnMissingBean (types: org.springdoc.core.converters.SortOpenAPIConverter; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocUIConfiguration matched: - - @ConditionalOnWebApplication (required) found 'session' scope (OnWebApplicationCondition) - - @ConditionalOnBean (types: org.springdoc.core.configuration.SpringDocConfiguration; SearchStrategy: all) found bean 'org.springdoc.core.configuration.SpringDocConfiguration' (OnBeanCondition) - - SpringDocWebMvcConfiguration matched: - - found 'session' scope (OnWebApplicationCondition) - - @ConditionalOnProperty (springdoc.api-docs.enabled) matched (OnPropertyCondition) - - @ConditionalOnBean (types: org.springdoc.core.configuration.SpringDocConfiguration; SearchStrategy: all) found bean 'org.springdoc.core.configuration.SpringDocConfiguration' (OnBeanCondition) - - SpringDocWebMvcConfiguration#openApiResource matched: - - @ConditionalOnExpression (#{(${springdoc.use-management-port:false} == false ) and ${springdoc.enable-default-api-docs:true}}) resulted in true (OnExpressionCondition) - - @ConditionalOnMissingBean (types: org.springdoc.webmvc.api.OpenApiWebMvcResource; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocWebMvcConfiguration#requestBuilder matched: - - @ConditionalOnMissingBean (types: org.springdoc.webmvc.core.service.RequestService; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocWebMvcConfiguration#responseBuilder matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.service.GenericResponseService; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocWebMvcConfiguration#springWebProvider matched: - - @ConditionalOnMissingBean (types: org.springdoc.core.providers.SpringWebProvider; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SpringDocWebMvcConfiguration.SpringDocWebMvcRouterConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.web.servlet.function.RouterFunction' (OnClassCondition) - - SpringDocWebMvcConfiguration.SpringDocWebMvcRouterConfiguration#routerFunctionProvider matched: - - @ConditionalOnMissingBean (types: org.springdoc.webmvc.core.providers.RouterFunctionWebMvcProvider; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SqlInitializationAutoConfiguration matched: - - @ConditionalOnProperty (spring.sql.init.enabled) matched (OnPropertyCondition) - - NoneNestedConditions 0 matched 1 did not; NestedCondition on SqlInitializationAutoConfiguration.SqlInitializationModeCondition.ModeIsNever @ConditionalOnProperty (spring.sql.init.mode=never) did not find property 'mode' (SqlInitializationAutoConfiguration.SqlInitializationModeCondition) - - SslAutoConfiguration#sslBundleRegistry matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.ssl.SslBundleRegistry,org.springframework.boot.ssl.SslBundles; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SwaggerConfig matched: - - found 'session' scope (OnWebApplicationCondition) - - @ConditionalOnProperty (springdoc.swagger-ui.enabled) matched (OnPropertyCondition) - - @ConditionalOnBean (types: org.springdoc.core.configuration.SpringDocConfiguration; SearchStrategy: all) found bean 'org.springdoc.core.configuration.SpringDocConfiguration' (OnBeanCondition) - - SwaggerConfig#indexPageTransformer matched: - - @ConditionalOnMissingBean (types: org.springdoc.webmvc.ui.SwaggerIndexTransformer; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SwaggerConfig#swaggerConfigResource matched: - - @ConditionalOnProperty (springdoc.use-management-port=false) matched (OnPropertyCondition) - - @ConditionalOnMissingBean (types: org.springdoc.webmvc.ui.SwaggerConfigResource; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SwaggerConfig#swaggerResourceResolver matched: - - @ConditionalOnMissingBean (types: org.springdoc.webmvc.ui.SwaggerResourceResolver; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SwaggerConfig#swaggerWebMvcConfigurer matched: - - @ConditionalOnMissingBean (types: org.springdoc.webmvc.ui.SwaggerWebMvcConfigurer; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SwaggerConfig#swaggerWelcome matched: - - @ConditionalOnProperty (springdoc.use-management-port=false) matched (OnPropertyCondition) - - @ConditionalOnMissingBean (types: org.springdoc.webmvc.ui.SwaggerWelcomeWebMvc; SearchStrategy: all) did not find any beans (OnBeanCondition) - - SwaggerUiConfigParameters matched: - - @ConditionalOnProperty (springdoc.swagger-ui.enabled) matched (OnPropertyCondition) - - @ConditionalOnBean (types: org.springdoc.core.configuration.SpringDocConfiguration; SearchStrategy: all) found bean 'org.springdoc.core.configuration.SpringDocConfiguration' (OnBeanCondition) - - SwaggerUiConfigProperties matched: - - @ConditionalOnProperty (springdoc.swagger-ui.enabled) matched (OnPropertyCondition) - - @ConditionalOnBean (types: org.springdoc.core.configuration.SpringDocConfiguration; SearchStrategy: all) found bean 'org.springdoc.core.configuration.SpringDocConfiguration' (OnBeanCondition) - - SwaggerUiOAuthProperties matched: - - @ConditionalOnProperty (springdoc.swagger-ui.enabled) matched (OnPropertyCondition) - - @ConditionalOnBean (types: org.springdoc.core.configuration.SpringDocConfiguration; SearchStrategy: all) found bean 'org.springdoc.core.configuration.SpringDocConfiguration' (OnBeanCondition) - - TaskExecutionAutoConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor' (OnClassCondition) - - TaskExecutorConfigurations.SimpleAsyncTaskExecutorBuilderConfiguration#simpleAsyncTaskExecutorBuilder matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.task.SimpleAsyncTaskExecutorBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition) - - @ConditionalOnThreading found PLATFORM (OnThreadingCondition) - - TaskExecutorConfigurations.TaskExecutorBuilderConfiguration#taskExecutorBuilder matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.task.TaskExecutorBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition) - - TaskExecutorConfigurations.TaskExecutorConfiguration matched: - - @ConditionalOnMissingBean (types: java.util.concurrent.Executor; SearchStrategy: all) did not find any beans (OnBeanCondition) - - TaskExecutorConfigurations.TaskExecutorConfiguration#applicationTaskExecutor matched: - - @ConditionalOnThreading found PLATFORM (OnThreadingCondition) - - TaskExecutorConfigurations.ThreadPoolTaskExecutorBuilderConfiguration#threadPoolTaskExecutorBuilder matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.task.TaskExecutorBuilder,org.springframework.boot.task.ThreadPoolTaskExecutorBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition) - - TaskSchedulingAutoConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler' (OnClassCondition) - - TaskSchedulingConfigurations.SimpleAsyncTaskSchedulerBuilderConfiguration#simpleAsyncTaskSchedulerBuilder matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.task.SimpleAsyncTaskSchedulerBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition) - - @ConditionalOnThreading found PLATFORM (OnThreadingCondition) - - TaskSchedulingConfigurations.TaskSchedulerBuilderConfiguration#taskSchedulerBuilder matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.task.TaskSchedulerBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition) - - TaskSchedulingConfigurations.ThreadPoolTaskSchedulerBuilderConfiguration#threadPoolTaskSchedulerBuilder matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.task.TaskSchedulerBuilder,org.springframework.boot.task.ThreadPoolTaskSchedulerBuilder; SearchStrategy: all) did not find any beans (OnBeanCondition) - - TransactionAutoConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.transaction.PlatformTransactionManager' (OnClassCondition) - - TransactionAutoConfiguration.EnableTransactionManagementConfiguration matched: - - @ConditionalOnBean (types: org.springframework.transaction.TransactionManager; SearchStrategy: all) found bean 'transactionManager'; @ConditionalOnMissingBean (types: org.springframework.transaction.annotation.AbstractTransactionManagementConfiguration; SearchStrategy: all) did not find any beans (OnBeanCondition) - - TransactionAutoConfiguration.EnableTransactionManagementConfiguration.CglibAutoProxyConfiguration matched: - - @ConditionalOnProperty (spring.aop.proxy-target-class=true) matched (OnPropertyCondition) - - TransactionAutoConfiguration.TransactionTemplateConfiguration matched: - - @ConditionalOnSingleCandidate (types: org.springframework.transaction.PlatformTransactionManager; SearchStrategy: all) found a single bean 'transactionManager' (OnBeanCondition) - - TransactionAutoConfiguration.TransactionTemplateConfiguration#transactionTemplate matched: - - @ConditionalOnMissingBean (types: org.springframework.transaction.support.TransactionOperations; SearchStrategy: all) did not find any beans (OnBeanCondition) - - TransactionManagerCustomizationAutoConfiguration matched: - - @ConditionalOnClass found required class 'org.springframework.transaction.PlatformTransactionManager' (OnClassCondition) - - TransactionManagerCustomizationAutoConfiguration#platformTransactionManagerCustomizers matched: - - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.transaction.TransactionManagerCustomizers; SearchStrategy: all) did not find any beans (OnBeanCondition) - - ValidationAutoConfiguration matched: - - @ConditionalOnClass found required class 'jakarta.validation.executable.ExecutableValidator' (OnClassCondition) - - @ConditionalOnResource found location classpath:META-INF/services/jakarta.validation.spi.ValidationProvider (OnResourceCondition) - - ValidationAutoConfiguration#defaultValidator matched: - - @ConditionalOnMissingBean (types: jakarta.validation.Validator; SearchStrategy: all) did not find any beans (OnBeanCondition) - - ValidationAutoConfiguration#methodValidationPostProcessor matched: - - @ConditionalOnMissingBean (types: org.springframework.validation.beanvalidation.MethodValidationPostProcessor; SearchStrategy: current) did not find any beans (OnBeanCondition) - - WebMvcAutoConfiguration matched: - - @ConditionalOnClass found required classes 'jakarta.servlet.Servlet', 'org.springframework.web.servlet.DispatcherServlet', 'org.springframework.web.servlet.config.annotation.WebMvcConfigurer' (OnClassCondition) - - found 'session' scope (OnWebApplicationCondition) - - @ConditionalOnMissingBean (types: org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; SearchStrategy: all) did not find any beans (OnBeanCondition) - - WebMvcAutoConfiguration#formContentFilter matched: - - @ConditionalOnProperty (spring.mvc.formcontent.filter.enabled) matched (OnPropertyCondition) - - @ConditionalOnMissingBean (types: org.springframework.web.filter.FormContentFilter; SearchStrategy: all) did not find any beans (OnBeanCondition) - - WebMvcAutoConfiguration.EnableWebMvcConfiguration#flashMapManager matched: - - @ConditionalOnMissingBean (names: flashMapManager; SearchStrategy: all) did not find any beans (OnBeanCondition) - - WebMvcAutoConfiguration.EnableWebMvcConfiguration#localeResolver matched: - - @ConditionalOnMissingBean (names: localeResolver; SearchStrategy: all) did not find any beans (OnBeanCondition) - - WebMvcAutoConfiguration.EnableWebMvcConfiguration#themeResolver matched: - - @ConditionalOnMissingBean (names: themeResolver; SearchStrategy: all) did not find any beans (OnBeanCondition) - - WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#defaultViewResolver matched: - - @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.InternalResourceViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition) - - WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#requestContextFilter matched: - - @ConditionalOnMissingBean (types: org.springframework.web.context.request.RequestContextListener,org.springframework.web.filter.RequestContextFilter; SearchStrategy: all) did not find any beans (OnBeanCondition) - - WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#viewResolver matched: - - @ConditionalOnBean (types: org.springframework.web.servlet.ViewResolver; SearchStrategy: all) found beans 'defaultViewResolver', 'beanNameViewResolver', 'mvcViewResolver'; @ConditionalOnMissingBean (names: viewResolver types: org.springframework.web.servlet.view.ContentNegotiatingViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition) - - WebSocketServletAutoConfiguration matched: - - @ConditionalOnClass found required classes 'jakarta.servlet.Servlet', 'jakarta.websocket.server.ServerContainer' (OnClassCondition) - - found 'session' scope (OnWebApplicationCondition) - - WebSocketServletAutoConfiguration.TomcatWebSocketConfiguration matched: - - @ConditionalOnClass found required classes 'org.apache.catalina.startup.Tomcat', 'org.apache.tomcat.websocket.server.WsSci' (OnClassCondition) - - WebSocketServletAutoConfiguration.TomcatWebSocketConfiguration#websocketServletWebServerCustomizer matched: - - @ConditionalOnMissingBean (names: websocketServletWebServerCustomizer; SearchStrategy: all) did not find any beans (OnBeanCondition) - - -Negative matches: ------------------ - - ActiveMQAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'jakarta.jms.ConnectionFactory' (OnClassCondition) - - AopAutoConfiguration.AspectJAutoProxyingConfiguration.JdkDynamicAutoProxyConfiguration: - Did not match: - - @ConditionalOnProperty (spring.aop.proxy-target-class=false) did not find property 'proxy-target-class' (OnPropertyCondition) - - AopAutoConfiguration.ClassProxyingConfiguration: - Did not match: - - @ConditionalOnMissingClass found unwanted class 'org.aspectj.weaver.Advice' (OnClassCondition) - - ArtemisAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'jakarta.jms.ConnectionFactory' (OnClassCondition) - - BatchAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.batch.core.launch.JobLauncher' (OnClassCondition) - - Cache2kCacheConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.cache2k.Cache2kBuilder' (OnClassCondition) - - CacheAutoConfiguration: - Did not match: - - @ConditionalOnBean (types: org.springframework.cache.interceptor.CacheAspectSupport; SearchStrategy: all) did not find any beans of type org.springframework.cache.interceptor.CacheAspectSupport (OnBeanCondition) - Matched: - - @ConditionalOnClass found required class 'org.springframework.cache.CacheManager' (OnClassCondition) - - CacheAutoConfiguration.CacheManagerEntityManagerFactoryDependsOnPostProcessor: - Did not match: - - Ancestor org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration did not match (ConditionEvaluationReport.AncestorsMatchedCondition) - Matched: - - @ConditionalOnClass found required class 'org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean' (OnClassCondition) - - CaffeineCacheConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.github.benmanes.caffeine.cache.Caffeine' (OnClassCondition) - - CassandraAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition) - - CassandraDataAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition) - - CassandraReactiveDataAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition) - - CassandraReactiveRepositoriesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.data.cassandra.ReactiveSession' (OnClassCondition) - - CassandraRepositoriesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.datastax.oss.driver.api.core.CqlSession' (OnClassCondition) - - ClientHttpConnectorAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.function.client.WebClient' (OnClassCondition) - - CodecsAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.function.client.WebClient' (OnClassCondition) - - CouchbaseAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition) - - CouchbaseCacheConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition) - - CouchbaseDataAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Bucket' (OnClassCondition) - - CouchbaseReactiveDataAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition) - - CouchbaseReactiveRepositoriesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Cluster' (OnClassCondition) - - CouchbaseRepositoriesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.couchbase.client.java.Bucket' (OnClassCondition) - - DataSourceAutoConfiguration.EmbeddedDatabaseConfiguration: - Did not match: - - EmbeddedDataSource spring.datasource.url is set (DataSourceAutoConfiguration.EmbeddedDatabaseCondition) - - DataSourceCheckpointRestoreConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.crac.Resource' (OnClassCondition) - - DataSourceConfiguration.Dbcp2: - Did not match: - - @ConditionalOnClass did not find required class 'org.apache.commons.dbcp2.BasicDataSource' (OnClassCondition) - - DataSourceConfiguration.Generic: - Did not match: - - @ConditionalOnProperty (spring.datasource.type) did not find property 'spring.datasource.type' (OnPropertyCondition) - - DataSourceConfiguration.OracleUcp: - Did not match: - - @ConditionalOnClass did not find required classes 'oracle.ucp.jdbc.PoolDataSourceImpl', 'oracle.jdbc.OracleConnection' (OnClassCondition) - - DataSourceConfiguration.Tomcat: - Did not match: - - @ConditionalOnClass did not find required class 'org.apache.tomcat.jdbc.pool.DataSource' (OnClassCondition) - - DataSourceJmxConfiguration.TomcatDataSourceJmxConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.apache.tomcat.jdbc.pool.DataSourceProxy' (OnClassCondition) - - DataSourcePoolMetadataProvidersConfiguration.CommonsDbcp2PoolDataSourceMetadataProviderConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.apache.commons.dbcp2.BasicDataSource' (OnClassCondition) - - DataSourcePoolMetadataProvidersConfiguration.OracleUcpPoolDataSourceMetadataProviderConfiguration: - Did not match: - - @ConditionalOnClass did not find required classes 'oracle.ucp.jdbc.PoolDataSource', 'oracle.jdbc.OracleConnection' (OnClassCondition) - - DataSourcePoolMetadataProvidersConfiguration.TomcatDataSourcePoolMetadataProviderConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.apache.tomcat.jdbc.pool.DataSource' (OnClassCondition) - - DataSourceTransactionManagerAutoConfiguration.JdbcTransactionManagerConfiguration#transactionManager: - Did not match: - - @ConditionalOnMissingBean (types: org.springframework.transaction.TransactionManager; SearchStrategy: all) found beans of type 'org.springframework.transaction.TransactionManager' transactionManager (OnBeanCondition) - - DispatcherServletAutoConfiguration.DispatcherServletConfiguration#multipartResolver: - Did not match: - - @ConditionalOnBean (types: org.springframework.web.multipart.MultipartResolver; SearchStrategy: all) did not find any beans of type org.springframework.web.multipart.MultipartResolver (OnBeanCondition) - - ElasticsearchClientAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'co.elastic.clients.elasticsearch.ElasticsearchClient' (OnClassCondition) - - ElasticsearchDataAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate' (OnClassCondition) - - ElasticsearchRepositoriesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.data.elasticsearch.repository.ElasticsearchRepository' (OnClassCondition) - - ElasticsearchRestClientAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.elasticsearch.client.RestClientBuilder' (OnClassCondition) - - EmbeddedLdapAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.unboundid.ldap.listener.InMemoryDirectoryServer' (OnClassCondition) - - EmbeddedWebServerFactoryCustomizerAutoConfiguration.JettyWebServerFactoryCustomizerConfiguration: - Did not match: - - @ConditionalOnClass did not find required classes 'org.eclipse.jetty.server.Server', 'org.eclipse.jetty.util.Loader', 'org.eclipse.jetty.ee10.webapp.WebAppContext' (OnClassCondition) - - EmbeddedWebServerFactoryCustomizerAutoConfiguration.NettyWebServerFactoryCustomizerConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'reactor.netty.http.server.HttpServer' (OnClassCondition) - - EmbeddedWebServerFactoryCustomizerAutoConfiguration.TomcatWebServerFactoryCustomizerConfiguration#tomcatVirtualThreadsProtocolHandlerCustomizer: - Did not match: - - @ConditionalOnThreading did not find VIRTUAL (OnThreadingCondition) - - EmbeddedWebServerFactoryCustomizerAutoConfiguration.UndertowWebServerFactoryCustomizerConfiguration: - Did not match: - - @ConditionalOnClass did not find required classes 'io.undertow.Undertow', 'org.xnio.SslClientAuthMode' (OnClassCondition) - - ErrorWebFluxAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.config.WebFluxConfigurer' (OnClassCondition) - - FlywayAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.flywaydb.core.Flyway' (OnClassCondition) - - FreeMarkerAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'freemarker.template.Configuration' (OnClassCondition) - - GraphQlAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition) - - GraphQlQueryByExampleAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition) - - GraphQlQuerydslAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.querydsl.core.Query' (OnClassCondition) - - GraphQlRSocketAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition) - - GraphQlReactiveQueryByExampleAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition) - - GraphQlReactiveQuerydslAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.querydsl.core.Query' (OnClassCondition) - - GraphQlWebFluxAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition) - - GraphQlWebFluxSecurityAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition) - - GraphQlWebMvcAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition) - - GraphQlWebMvcSecurityAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition) - - GroovyTemplateAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'groovy.text.markup.MarkupTemplateEngine' (OnClassCondition) - - GsonAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.google.gson.Gson' (OnClassCondition) - - GsonHttpMessageConvertersConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.google.gson.Gson' (OnClassCondition) - - HazelcastAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.hazelcast.core.HazelcastInstance' (OnClassCondition) - - HazelcastCacheConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.hazelcast.core.HazelcastInstance' (OnClassCondition) - - HazelcastJpaDependencyAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.hazelcast.core.HazelcastInstance' (OnClassCondition) - - HttpHandlerAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.DispatcherHandler' (OnClassCondition) - - HypermediaAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.hateoas.EntityModel' (OnClassCondition) - - InfinispanCacheConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.infinispan.spring.embedded.provider.SpringEmbeddedCacheManager' (OnClassCondition) - - InfluxDbAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.influxdb.InfluxDB' (OnClassCondition) - - IntegrationAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.integration.config.EnableIntegration' (OnClassCondition) - - JCacheCacheConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'javax.cache.Caching' (OnClassCondition) - - JacksonHttpMessageConvertersConfiguration.MappingJackson2XmlHttpMessageConverterConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.fasterxml.jackson.dataformat.xml.XmlMapper' (OnClassCondition) - - JdbcRepositoriesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration' (OnClassCondition) - - JerseyAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.glassfish.jersey.server.spring.SpringComponentProvider' (OnClassCondition) - - JmsAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'jakarta.jms.Message' (OnClassCondition) - - JmxAutoConfiguration: - Did not match: - - @ConditionalOnProperty (spring.jmx.enabled=true) did not find property 'enabled' (OnPropertyCondition) - Matched: - - @ConditionalOnClass found required class 'org.springframework.jmx.export.MBeanExporter' (OnClassCondition) - - JndiConnectionFactoryAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.jms.core.JmsTemplate' (OnClassCondition) - - JndiDataSourceAutoConfiguration: - Did not match: - - @ConditionalOnProperty (spring.datasource.jndi-name) did not find property 'jndi-name' (OnPropertyCondition) - Matched: - - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType' (OnClassCondition) - - JndiJtaConfiguration: - Did not match: - - @ConditionalOnJndi JNDI environment is not available (OnJndiCondition) - Matched: - - @ConditionalOnClass found required class 'org.springframework.transaction.jta.JtaTransactionManager' (OnClassCondition) - - JooqAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.jooq.DSLContext' (OnClassCondition) - - JpaBaseConfiguration.JpaWebConfiguration: - Did not match: - - @ConditionalOnProperty (spring.jpa.open-in-view=true) found different value in property 'open-in-view' (OnPropertyCondition) - Matched: - - @ConditionalOnClass found required class 'org.springframework.web.servlet.config.annotation.WebMvcConfigurer' (OnClassCondition) - - found 'session' scope (OnWebApplicationCondition) - - JpaRepositoriesAutoConfiguration#entityManagerFactoryBootstrapExecutorCustomizer: - Did not match: - - AnyNestedCondition 0 matched 2 did not; NestedCondition on JpaRepositoriesAutoConfiguration.BootstrapExecutorCondition.LazyBootstrapMode @ConditionalOnProperty (spring.data.jpa.repositories.bootstrap-mode=lazy) did not find property 'bootstrap-mode'; NestedCondition on JpaRepositoriesAutoConfiguration.BootstrapExecutorCondition.DeferredBootstrapMode @ConditionalOnProperty (spring.data.jpa.repositories.bootstrap-mode=deferred) did not find property 'bootstrap-mode' (JpaRepositoriesAutoConfiguration.BootstrapExecutorCondition) - - JsonbAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'jakarta.json.bind.Jsonb' (OnClassCondition) - - JsonbHttpMessageConvertersConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'jakarta.json.bind.Jsonb' (OnClassCondition) - - KafkaAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.kafka.core.KafkaTemplate' (OnClassCondition) - - LdapAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.ldap.core.ContextSource' (OnClassCondition) - - LdapRepositoriesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.data.ldap.repository.LdapRepository' (OnClassCondition) - - LiquibaseAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'liquibase.change.DatabaseChange' (OnClassCondition) - - MailSenderAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'jakarta.mail.internet.MimeMessage' (OnClassCondition) - - MailSenderValidatorAutoConfiguration: - Did not match: - - @ConditionalOnSingleCandidate did not find required type 'org.springframework.mail.javamail.JavaMailSenderImpl' (OnBeanCondition) - - MessageSourceAutoConfiguration: - Did not match: - - ResourceBundle did not find bundle with basename messages (MessageSourceAutoConfiguration.ResourceBundleCondition) - - MongoAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.mongodb.client.MongoClient' (OnClassCondition) - - MongoDataAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.mongodb.client.MongoClient' (OnClassCondition) - - MongoReactiveAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.mongodb.reactivestreams.client.MongoClient' (OnClassCondition) - - MongoReactiveDataAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.mongodb.reactivestreams.client.MongoClient' (OnClassCondition) - - MongoReactiveRepositoriesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.mongodb.reactivestreams.client.MongoClient' (OnClassCondition) - - MongoRepositoriesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.mongodb.client.MongoClient' (OnClassCondition) - - MultipleOpenApiSupportConfiguration: - Did not match: - - AnyNestedCondition 0 matched 2 did not; NestedCondition on MultipleOpenApiSupportCondition.OnActuatorDifferentPort @ConditionalOnProperty (springdoc.show-actuator) did not find property 'springdoc.show-actuator'; NestedCondition on MultipleOpenApiSupportCondition.OnMultipleOpenApiSupportCondition AnyNestedCondition 0 matched 3 did not; NestedCondition on MultipleOpenApiGroupsCondition.OnListGroupedOpenApiBean @ConditionalOnBean (types: org.springdoc.core.models.GroupedOpenApi; SearchStrategy: all) did not find any beans of type org.springdoc.core.models.GroupedOpenApi; NestedCondition on MultipleOpenApiGroupsCondition.OnGroupConfigProperty @ConditionalOnProperty (springdoc.group-configs[0].group) did not find property 'springdoc.group-configs[0].group'; NestedCondition on MultipleOpenApiGroupsCondition.OnGroupedOpenApiBean @ConditionalOnBean (types: org.springdoc.core.models.GroupedOpenApi; SearchStrategy: all) did not find any beans of type org.springdoc.core.models.GroupedOpenApi (MultipleOpenApiSupportCondition) - Matched: - - found 'session' scope (OnWebApplicationCondition) - - @ConditionalOnProperty (springdoc.api-docs.enabled) matched (OnPropertyCondition) - - MultipleOpenApiSupportConfiguration.SpringDocWebMvcActuatorDifferentConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping' (OnClassCondition) - - Ancestor org.springdoc.webmvc.core.configuration.MultipleOpenApiSupportConfiguration did not match (ConditionEvaluationReport.AncestorsMatchedCondition) - - MustacheAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.samskivert.mustache.Mustache' (OnClassCondition) - - Neo4jAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition) - - Neo4jDataAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition) - - Neo4jReactiveDataAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition) - - Neo4jReactiveRepositoriesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition) - - Neo4jRepositoriesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.neo4j.driver.Driver' (OnClassCondition) - - NettyAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'io.netty.util.NettyRuntime' (OnClassCondition) - - OAuth2AuthorizationServerAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.security.oauth2.server.authorization.OAuth2Authorization' (OnClassCondition) - - OAuth2AuthorizationServerJwtAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.security.oauth2.server.authorization.OAuth2Authorization' (OnClassCondition) - - OAuth2ClientAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.security.oauth2.client.registration.ClientRegistration' (OnClassCondition) - - OAuth2ResourceServerAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthenticationToken' (OnClassCondition) - - ProjectInfoAutoConfiguration#buildProperties: - Did not match: - - @ConditionalOnResource did not find resource '${spring.info.build.location:classpath:META-INF/build-info.properties}' (OnResourceCondition) - - ProjectInfoAutoConfiguration#gitProperties: - Did not match: - - GitResource did not find git info at classpath:git.properties (ProjectInfoAutoConfiguration.GitResourceAvailableCondition) - - PulsarAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.apache.pulsar.client.api.PulsarClient' (OnClassCondition) - - PulsarReactiveAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.apache.pulsar.client.api.PulsarClient' (OnClassCondition) - - QuartzAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.quartz.Scheduler' (OnClassCondition) - - R2dbcAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'io.r2dbc.spi.ConnectionFactory' (OnClassCondition) - - R2dbcDataAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.data.r2dbc.core.R2dbcEntityTemplate' (OnClassCondition) - - R2dbcInitializationConfiguration: - Did not match: - - @ConditionalOnClass did not find required classes 'io.r2dbc.spi.ConnectionFactory', 'org.springframework.r2dbc.connection.init.DatabasePopulator' (OnClassCondition) - - R2dbcRepositoriesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'io.r2dbc.spi.ConnectionFactory' (OnClassCondition) - - R2dbcTransactionManagerAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.r2dbc.connection.R2dbcTransactionManager' (OnClassCondition) - - RSocketGraphQlClientAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'graphql.GraphQL' (OnClassCondition) - - RSocketMessagingAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'io.rsocket.RSocket' (OnClassCondition) - - RSocketRequesterAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'io.rsocket.RSocket' (OnClassCondition) - - RSocketSecurityAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.security.rsocket.core.SecuritySocketAcceptorInterceptor' (OnClassCondition) - - RSocketServerAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'io.rsocket.core.RSocketServer' (OnClassCondition) - - RSocketStrategiesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'io.netty.buffer.PooledByteBufAllocator' (OnClassCondition) - - RabbitAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.rabbitmq.client.Channel' (OnClassCondition) - - ReactiveElasticsearchClientAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'co.elastic.clients.transport.ElasticsearchTransport' (OnClassCondition) - - ReactiveElasticsearchRepositoriesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'reactor.core.publisher.Mono' (OnClassCondition) - - ReactiveMultipartAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.config.WebFluxConfigurer' (OnClassCondition) - - ReactiveOAuth2ClientAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition) - - ReactiveOAuth2ResourceServerAutoConfiguration: - Did not match: - - @ConditionalOnWebApplication did not find reactive web application classes (OnWebApplicationCondition) - - ReactiveSecurityAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition) - - ReactiveUserDetailsServiceAutoConfiguration: - Did not match: - - AnyNestedCondition 0 matched 2 did not; NestedCondition on ReactiveUserDetailsServiceAutoConfiguration.RSocketEnabledOrReactiveWebApplication.ReactiveWebApplicationCondition did not find reactive web application classes; NestedCondition on ReactiveUserDetailsServiceAutoConfiguration.RSocketEnabledOrReactiveWebApplication.RSocketSecurityEnabledCondition @ConditionalOnBean (types: org.springframework.messaging.rsocket.annotation.support.RSocketMessageHandler; SearchStrategy: all) did not find any beans of type org.springframework.messaging.rsocket.annotation.support.RSocketMessageHandler (ReactiveUserDetailsServiceAutoConfiguration.RSocketEnabledOrReactiveWebApplication) - Matched: - - @ConditionalOnClass found required class 'org.springframework.security.authentication.ReactiveAuthenticationManager' (OnClassCondition) - - AnyNestedCondition 1 matched 2 did not; NestedCondition on ReactiveUserDetailsServiceAutoConfiguration.MissingAlternativeOrUserPropertiesConfigured.PasswordConfigured @ConditionalOnProperty (spring.security.user.password) did not find property 'password'; NestedCondition on ReactiveUserDetailsServiceAutoConfiguration.MissingAlternativeOrUserPropertiesConfigured.NameConfigured @ConditionalOnProperty (spring.security.user.name) did not find property 'name'; NestedCondition on ReactiveUserDetailsServiceAutoConfiguration.MissingAlternativeOrUserPropertiesConfigured.MissingAlternative @ConditionalOnMissingClass did not find unwanted classes 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository', 'org.springframework.security.oauth2.server.resource.introspection.ReactiveOpaqueTokenIntrospector' (ReactiveUserDetailsServiceAutoConfiguration.MissingAlternativeOrUserPropertiesConfigured) - - ReactiveWebServerFactoryAutoConfiguration: - Did not match: - - @ConditionalOnWebApplication did not find reactive web application classes (OnWebApplicationCondition) - - ReactorAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'reactor.core.publisher.Hooks' (OnClassCondition) - - RedisAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.data.redis.core.RedisOperations' (OnClassCondition) - - RedisCacheConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.data.redis.connection.RedisConnectionFactory' (OnClassCondition) - - RedisReactiveAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition) - - RedisRepositoriesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.data.redis.repository.configuration.EnableRedisRepositories' (OnClassCondition) - - RepositoryRestMvcAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.data.rest.webmvc.config.RepositoryRestMvcConfiguration' (OnClassCondition) - - Saml2RelyingPartyAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository' (OnClassCondition) - - SecurityDataConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.security.data.repository.query.SecurityEvaluationContextExtension' (OnClassCondition) - - SendGridAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.sendgrid.SendGrid' (OnClassCondition) - - ServletWebServerFactoryAutoConfiguration.ForwardedHeaderFilterConfiguration: - Did not match: - - @ConditionalOnProperty (server.forward-headers-strategy=framework) did not find property 'server.forward-headers-strategy' (OnPropertyCondition) - - ServletWebServerFactoryConfiguration.EmbeddedJetty: - Did not match: - - @ConditionalOnClass did not find required classes 'org.eclipse.jetty.server.Server', 'org.eclipse.jetty.util.Loader', 'org.eclipse.jetty.ee10.webapp.WebAppContext' (OnClassCondition) - - ServletWebServerFactoryConfiguration.EmbeddedUndertow: - Did not match: - - @ConditionalOnClass did not find required classes 'io.undertow.Undertow', 'org.xnio.SslClientAuthMode' (OnClassCondition) - - SessionAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.session.Session' (OnClassCondition) - - SpringApplicationAdminJmxAutoConfiguration: - Did not match: - - @ConditionalOnProperty (spring.application.admin.enabled=true) did not find property 'enabled' (OnPropertyCondition) - - SpringBootWebSecurityConfiguration.SecurityFilterChainConfiguration: - Did not match: - - AllNestedConditions 1 matched 1 did not; NestedCondition on DefaultWebSecurityCondition.Beans @ConditionalOnMissingBean (types: org.springframework.security.web.SecurityFilterChain; SearchStrategy: all) found beans of type 'org.springframework.security.web.SecurityFilterChain' securityFilterChain; NestedCondition on DefaultWebSecurityCondition.Classes @ConditionalOnClass found required classes 'org.springframework.security.web.SecurityFilterChain', 'org.springframework.security.config.annotation.web.builders.HttpSecurity' (DefaultWebSecurityCondition) - - SpringBootWebSecurityConfiguration.WebSecurityEnablerConfiguration: - Did not match: - - @ConditionalOnMissingBean (names: springSecurityFilterChain; SearchStrategy: all) found beans named springSecurityFilterChain (OnBeanCondition) - Matched: - - @ConditionalOnClass found required class 'org.springframework.security.config.annotation.web.configuration.EnableWebSecurity' (OnClassCondition) - - SpringDocConfiguration#propertiesResolverForSchema: - Did not match: - - @ConditionalOnProperty (springdoc.api-docs.resolve-schema-properties) did not find property 'springdoc.api-docs.resolve-schema-properties' (OnPropertyCondition) - - SpringDocConfiguration#propertyCustomizingConverter: - Did not match: - - @ConditionalOnBean (types: org.springdoc.core.customizers.PropertyCustomizer; SearchStrategy: all) did not find any beans of type org.springdoc.core.customizers.PropertyCustomizer (OnBeanCondition) - - SpringDocConfiguration#springdocBeanFactoryPostProcessor: - Did not match: - - AnyNestedCondition 0 matched 2 did not; NestedCondition on CacheOrGroupedOpenApiCondition.OnCacheDisabled found non-matching nested conditions @ConditionalOnProperty (springdoc.cache.disabled) did not find property 'springdoc.cache.disabled'; NestedCondition on CacheOrGroupedOpenApiCondition.OnMultipleOpenApiSupportCondition AnyNestedCondition 0 matched 2 did not; NestedCondition on MultipleOpenApiSupportCondition.OnActuatorDifferentPort @ConditionalOnProperty (springdoc.show-actuator) did not find property 'springdoc.show-actuator'; NestedCondition on MultipleOpenApiSupportCondition.OnMultipleOpenApiSupportCondition AnyNestedCondition 0 matched 3 did not; NestedCondition on MultipleOpenApiGroupsCondition.OnListGroupedOpenApiBean @ConditionalOnBean (types: org.springdoc.core.models.GroupedOpenApi; SearchStrategy: all) did not find any beans of type org.springdoc.core.models.GroupedOpenApi; NestedCondition on MultipleOpenApiGroupsCondition.OnGroupConfigProperty @ConditionalOnProperty (springdoc.group-configs[0].group) did not find property 'springdoc.group-configs[0].group'; NestedCondition on MultipleOpenApiGroupsCondition.OnGroupedOpenApiBean @ConditionalOnBean (types: org.springdoc.core.models.GroupedOpenApi; SearchStrategy: all) did not find any beans of type org.springdoc.core.models.GroupedOpenApi (CacheOrGroupedOpenApiCondition) - Matched: - - @ConditionalOnClass found required class 'org.springframework.boot.context.properties.bind.BindResult' (OnClassCondition) - - SpringDocConfiguration#springdocBeanFactoryPostProcessor2: - Did not match: - - @ConditionalOnMissingClass found unwanted class 'org.springframework.boot.context.properties.bind.BindResult' (OnClassCondition) - - SpringDocConfiguration.SpringDocActuatorConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties' (OnClassCondition) - - SpringDocConfiguration.SpringDocRepositoryRestConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.data.rest.core.config.RepositoryRestConfiguration' (OnClassCondition) - - SpringDocConfiguration.SpringDocWebFluxSupportConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'reactor.core.publisher.Flux' (OnClassCondition) - - SpringDocDataRestConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.data.rest.core.config.RepositoryRestConfiguration' (OnClassCondition) - - SpringDocFunctionCatalogConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.cloud.function.web.function.FunctionEndpointInitializer' (OnClassCondition) - - SpringDocGroovyConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'groovy.lang.MetaClass' (OnClassCondition) - - SpringDocHateoasConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.hateoas.server.LinkRelationProvider' (OnClassCondition) - - SpringDocJacksonKotlinModuleConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.fasterxml.jackson.module.kotlin.KotlinModule' (OnClassCondition) - - SpringDocJavadocConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'com.github.therapi.runtimejavadoc.CommentFormatter' (OnClassCondition) - - SpringDocKotlinConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'kotlin.coroutines.Continuation' (OnClassCondition) - - SpringDocKotlinxConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'kotlinx.coroutines.flow.Flow' (OnClassCondition) - - SpringDocSecurityConfiguration.SpringDocSecurityOAuth2ClientConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.security.oauth2.client.annotation.RegisteredOAuth2AuthorizedClient' (OnClassCondition) - - SpringDocSecurityConfiguration.SpringDocSecurityOAuth2Configuration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService' (OnClassCondition) - - SpringDocSecurityConfiguration.SpringSecurityLoginEndpointConfiguration#springSecurityLoginEndpointCustomiser: - Did not match: - - @ConditionalOnProperty (springdoc.show-login-endpoint) did not find property 'springdoc.show-login-endpoint' (OnPropertyCondition) - - SpringDocSortConfiguration#delegatingMethodParameterCustomizer: - Did not match: - - @ConditionalOnMissingBean (types: org.springdoc.core.customizers.DelegatingMethodParameterCustomizer; SearchStrategy: all) found beans of type 'org.springdoc.core.customizers.DelegatingMethodParameterCustomizer' delegatingMethodParameterCustomizer (OnBeanCondition) - - SpringDocWebMvcConfiguration.SpringDocWebMvcActuatorConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping' (OnClassCondition) - - SwaggerConfig#springWebProvider: - Did not match: - - @ConditionalOnMissingBean (types: org.springdoc.core.providers.SpringWebProvider; SearchStrategy: all) found beans of type 'org.springdoc.core.providers.SpringWebProvider' springWebProvider (OnBeanCondition) - - SwaggerConfig#swaggerUiConfigParameters: - Did not match: - - @ConditionalOnMissingBean (types: org.springdoc.core.properties.SwaggerUiConfigParameters; SearchStrategy: all) found beans of type 'org.springdoc.core.properties.SwaggerUiConfigParameters' org.springdoc.core.properties.SwaggerUiConfigParameters (OnBeanCondition) - - SwaggerConfig#swaggerUiHome: - Did not match: - - @ConditionalOnProperty (springdoc.swagger-ui.use-root-path=true) did not find property 'springdoc.swagger-ui.use-root-path' (OnPropertyCondition) - - SwaggerConfig.SwaggerActuatorWelcomeConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping' (OnClassCondition) - - TaskExecutorConfigurations.SimpleAsyncTaskExecutorBuilderConfiguration#simpleAsyncTaskExecutorBuilderVirtualThreads: - Did not match: - - @ConditionalOnMissingBean (types: org.springframework.boot.task.SimpleAsyncTaskExecutorBuilder; SearchStrategy: all) found beans of type 'org.springframework.boot.task.SimpleAsyncTaskExecutorBuilder' simpleAsyncTaskExecutorBuilder (OnBeanCondition) - - TaskExecutorConfigurations.TaskExecutorConfiguration#applicationTaskExecutorVirtualThreads: - Did not match: - - @ConditionalOnThreading did not find VIRTUAL (OnThreadingCondition) - - TaskSchedulingAutoConfiguration#scheduledBeanLazyInitializationExcludeFilter: - Did not match: - - @ConditionalOnBean (names: org.springframework.context.annotation.internalScheduledAnnotationProcessor; SearchStrategy: all) did not find any beans named org.springframework.context.annotation.internalScheduledAnnotationProcessor (OnBeanCondition) - - TaskSchedulingConfigurations.SimpleAsyncTaskSchedulerBuilderConfiguration#simpleAsyncTaskSchedulerBuilderVirtualThreads: - Did not match: - - @ConditionalOnMissingBean (types: org.springframework.boot.task.SimpleAsyncTaskSchedulerBuilder; SearchStrategy: all) found beans of type 'org.springframework.boot.task.SimpleAsyncTaskSchedulerBuilder' simpleAsyncTaskSchedulerBuilder (OnBeanCondition) - - TaskSchedulingConfigurations.TaskSchedulerConfiguration: - Did not match: - - @ConditionalOnBean (names: org.springframework.context.annotation.internalScheduledAnnotationProcessor; SearchStrategy: all) did not find any beans named org.springframework.context.annotation.internalScheduledAnnotationProcessor (OnBeanCondition) - - ThymeleafAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.thymeleaf.spring6.SpringTemplateEngine' (OnClassCondition) - - TransactionAutoConfiguration#transactionalOperator: - Did not match: - - @ConditionalOnSingleCandidate (types: org.springframework.transaction.ReactiveTransactionManager; SearchStrategy: all) did not find any beans (OnBeanCondition) - - TransactionAutoConfiguration.AspectJTransactionManagementConfiguration: - Did not match: - - @ConditionalOnBean (types: org.springframework.transaction.aspectj.AbstractTransactionAspect; SearchStrategy: all) did not find any beans of type org.springframework.transaction.aspectj.AbstractTransactionAspect (OnBeanCondition) - - TransactionAutoConfiguration.EnableTransactionManagementConfiguration.JdkDynamicAutoProxyConfiguration: - Did not match: - - @ConditionalOnProperty (spring.aop.proxy-target-class=false) did not find property 'proxy-target-class' (OnPropertyCondition) - - UserDetailsServiceAutoConfiguration: - Did not match: - - @ConditionalOnMissingBean (types: org.springframework.security.authentication.AuthenticationManager,org.springframework.security.authentication.AuthenticationProvider,org.springframework.security.core.userdetails.UserDetailsService,org.springframework.security.authentication.AuthenticationManagerResolver,org.springframework.security.oauth2.jwt.JwtDecoder; SearchStrategy: all) found beans of type 'org.springframework.security.authentication.AuthenticationManager' authenticationManager and found beans of type 'org.springframework.security.core.userdetails.UserDetailsService' customUserDetailsService and found beans of type 'org.springframework.security.authentication.AuthenticationProvider' authenticationProvider (OnBeanCondition) - Matched: - - @ConditionalOnClass found required class 'org.springframework.security.authentication.AuthenticationManager' (OnClassCondition) - - AnyNestedCondition 1 matched 2 did not; NestedCondition on UserDetailsServiceAutoConfiguration.MissingAlternativeOrUserPropertiesConfigured.PasswordConfigured @ConditionalOnProperty (spring.security.user.password) did not find property 'password'; NestedCondition on UserDetailsServiceAutoConfiguration.MissingAlternativeOrUserPropertiesConfigured.NameConfigured @ConditionalOnProperty (spring.security.user.name) did not find property 'name'; NestedCondition on UserDetailsServiceAutoConfiguration.MissingAlternativeOrUserPropertiesConfigured.MissingAlternative @ConditionalOnMissingClass did not find unwanted classes 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository', 'org.springframework.security.oauth2.server.resource.introspection.OpaqueTokenIntrospector', 'org.springframework.security.saml2.provider.service.registration.RelyingPartyRegistrationRepository' (UserDetailsServiceAutoConfiguration.MissingAlternativeOrUserPropertiesConfigured) - - WebClientAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.function.client.WebClient' (OnClassCondition) - - WebFluxAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.web.reactive.config.WebFluxConfigurer' (OnClassCondition) - - WebMvcAutoConfiguration#hiddenHttpMethodFilter: - Did not match: - - @ConditionalOnProperty (spring.mvc.hiddenmethod.filter.enabled) did not find property 'enabled' (OnPropertyCondition) - - WebMvcAutoConfiguration.ProblemDetailsErrorHandlingConfiguration: - Did not match: - - @ConditionalOnProperty (spring.mvc.problemdetails.enabled=true) did not find property 'enabled' (OnPropertyCondition) - - WebMvcAutoConfiguration.ResourceChainCustomizerConfiguration: - Did not match: - - @ConditionalOnEnabledResourceChain did not find class org.webjars.WebJarAssetLocator (OnEnabledResourceChainCondition) - - WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter#beanNameViewResolver: - Did not match: - - @ConditionalOnMissingBean (types: org.springframework.web.servlet.view.BeanNameViewResolver; SearchStrategy: all) found beans of type 'org.springframework.web.servlet.view.BeanNameViewResolver' beanNameViewResolver (OnBeanCondition) - - WebServiceTemplateAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.oxm.Marshaller' (OnClassCondition) - - WebServicesAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.ws.transport.http.MessageDispatcherServlet' (OnClassCondition) - - WebSessionIdResolverAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'reactor.core.publisher.Mono' (OnClassCondition) - - WebSocketMessagingAutoConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer' (OnClassCondition) - - WebSocketReactiveAutoConfiguration: - Did not match: - - @ConditionalOnWebApplication did not find reactive web application classes (OnWebApplicationCondition) - - WebSocketServletAutoConfiguration.JettyWebSocketConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'org.eclipse.jetty.ee10.websocket.jakarta.server.config.JakartaWebSocketServletContainerInitializer' (OnClassCondition) - - WebSocketServletAutoConfiguration.UndertowWebSocketConfiguration: - Did not match: - - @ConditionalOnClass did not find required class 'io.undertow.websockets.jsr.Bootstrap' (OnClassCondition) - - XADataSourceAutoConfiguration: - Did not match: - - @ConditionalOnBean (types: org.springframework.boot.jdbc.XADataSourceWrapper; SearchStrategy: all) did not find any beans of type org.springframework.boot.jdbc.XADataSourceWrapper (OnBeanCondition) - Matched: - - @ConditionalOnClass found required classes 'javax.sql.DataSource', 'jakarta.transaction.TransactionManager', 'org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType' (OnClassCondition) - - -Exclusions: ------------ - - None - - -Unconditional classes: ----------------------- - - org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration - - org.springframework.boot.autoconfigure.ssl.SslAutoConfiguration - - org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration - - org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration - - org.springdoc.core.configuration.SpringDocSpecPropertiesConfiguration - - org.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration - - org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration - - - -2026-03-09 19:29:10.492 [main] INFO com.yoyuzh.PortalBackendApplication - Started PortalBackendApplication in 10.854 seconds (process running for 11.553) -2026-03-09 19:29:10.493 [main] DEBUG o.s.b.a.ApplicationAvailabilityBean - Application availability state LivenessState changed to CORRECT -2026-03-09 19:29:10.494 [main] DEBUG o.s.b.a.ApplicationAvailabilityBean - Application availability state ReadinessState changed to ACCEPTING_TRAFFIC -2026-03-09 19:29:26.569 [http-nio-8080-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet' -2026-03-09 19:29:26.571 [http-nio-8080-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet' -2026-03-09 19:29:26.572 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet - Detected StandardServletMultipartResolver -2026-03-09 19:29:26.572 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet - Detected AcceptHeaderLocaleResolver -2026-03-09 19:29:26.572 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet - Detected FixedThemeResolver -2026-03-09 19:29:26.572 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet - Detected org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator@16e3a461 -2026-03-09 19:29:26.573 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet - Detected org.springframework.web.servlet.support.SessionFlashMapManager@6dbf203c -2026-03-09 19:29:26.573 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet - enableLoggingRequestDetails='false': request parameters and headers will be masked to prevent unsafe logging of potentially sensitive data -2026-03-09 19:29:26.573 [http-nio-8080-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms -2026-03-09 19:29:26.587 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet - POST "/api/auth/dev-login?username=recentqa", parameters={masked} -2026-03-09 19:29:26.587 [http-nio-8080-exec-1] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to com.yoyuzh.auth.DevAuthController#devLogin(String) -2026-03-09 19:29:26.684 [http-nio-8080-exec-1] DEBUG org.hibernate.SQL - - select - u1_0.id, - u1_0.created_at, - u1_0.email, - u1_0.password_hash, - u1_0.username - from - portal_user u1_0 - where - u1_0.username=? -2026-03-09 19:29:26.795 [http-nio-8080-exec-1] DEBUG org.hibernate.SQL - - insert - into - portal_user - (created_at, email, password_hash, username, id) - values - (?, ?, ?, ?, default) -2026-03-09 19:29:26.959 [http-nio-8080-exec-1] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Using 'application/json', given [*/*] and supported [application/json, application/*+json] -2026-03-09 19:29:26.973 [http-nio-8080-exec-1] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Writing [ApiResponse[code=0, msg=success, data=AuthResponse[token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJyZWNlbnRxYS (truncated)...] -2026-03-09 19:29:26.987 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet - Completed 200 OK -2026-03-09 19:29:27.065 [http-nio-8080-exec-2] DEBUG org.hibernate.SQL - - select - u1_0.id, - u1_0.created_at, - u1_0.email, - u1_0.password_hash, - u1_0.username - from - portal_user u1_0 - where - u1_0.username=? -2026-03-09 19:29:27.073 [http-nio-8080-exec-2] DEBUG o.s.web.servlet.DispatcherServlet - GET "/api/files/recent", parameters={} -2026-03-09 19:29:27.073 [http-nio-8080-exec-2] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to com.yoyuzh.files.FileController#recent(UserDetails) -2026-03-09 19:29:27.075 [http-nio-8080-exec-2] DEBUG org.hibernate.SQL - - select - u1_0.id, - u1_0.created_at, - u1_0.email, - u1_0.password_hash, - u1_0.username - from - portal_user u1_0 - where - u1_0.username=? -2026-03-09 19:29:27.080 [http-nio-8080-exec-2] DEBUG org.hibernate.SQL - - select - sf1_0.id, - sf1_0.content_type, - sf1_0.created_at, - sf1_0.is_directory, - sf1_0.filename, - sf1_0.path, - sf1_0.size, - sf1_0.storage_name, - sf1_0.user_id - from - portal_file sf1_0 - where - sf1_0.user_id=? - and not(sf1_0.is_directory) - order by - sf1_0.created_at desc - fetch - first ? rows only -2026-03-09 19:29:27.085 [http-nio-8080-exec-2] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Using 'application/json', given [*/*] and supported [application/json, application/*+json] -2026-03-09 19:29:27.085 [http-nio-8080-exec-2] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Writing [ApiResponse[code=0, msg=success, data=[]]] -2026-03-09 19:29:27.086 [http-nio-8080-exec-2] DEBUG o.s.web.servlet.DispatcherServlet - Completed 200 OK -2026-03-09 19:29:28.586 [http-nio-8080-exec-4] DEBUG o.s.web.servlet.DispatcherServlet - GET "/swagger-ui.html", parameters={} -2026-03-09 19:29:28.588 [http-nio-8080-exec-4] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to org.springdoc.webmvc.ui.SwaggerWelcomeWebMvc#redirectToUi(HttpServletRequest) -2026-03-09 19:29:28.606 [http-nio-8080-exec-4] DEBUG o.s.w.s.m.m.a.HttpEntityMethodProcessor - Using 'application/json', given [*/*] and supported [application/json, application/*+json] -2026-03-09 19:29:28.607 [http-nio-8080-exec-4] DEBUG o.s.w.s.m.m.a.HttpEntityMethodProcessor - Nothing to write: null body -2026-03-09 19:29:28.608 [http-nio-8080-exec-4] DEBUG o.s.web.servlet.DispatcherServlet - Completed 302 FOUND -2026-03-09 19:29:28.614 [http-nio-8080-exec-7] DEBUG o.s.web.servlet.DispatcherServlet - GET "/swagger-ui/index.html", parameters={} -2026-03-09 19:29:28.615 [http-nio-8080-exec-7] DEBUG o.s.w.s.h.SimpleUrlHandlerMapping - Mapped to ResourceHttpRequestHandler [classpath [META-INF/resources/webjars/]] -2026-03-09 19:29:28.620 [http-nio-8080-exec-7] DEBUG o.s.web.servlet.DispatcherServlet - Completed 200 OK -2026-03-09 19:29:46.174 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet - POST "/api/auth/dev-login?username=recentqa", parameters={masked} -2026-03-09 19:29:46.174 [http-nio-8080-exec-3] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to com.yoyuzh.auth.DevAuthController#devLogin(String) -2026-03-09 19:29:46.175 [http-nio-8080-exec-3] DEBUG org.hibernate.SQL - - select - u1_0.id, - u1_0.created_at, - u1_0.email, - u1_0.password_hash, - u1_0.username - from - portal_user u1_0 - where - u1_0.username=? -2026-03-09 19:29:46.176 [http-nio-8080-exec-3] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Using 'application/json', given [*/*] and supported [application/json, application/*+json] -2026-03-09 19:29:46.177 [http-nio-8080-exec-3] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Writing [ApiResponse[code=0, msg=success, data=AuthResponse[token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJyZWNlbnRxYS (truncated)...] -2026-03-09 19:29:46.177 [http-nio-8080-exec-3] DEBUG o.s.web.servlet.DispatcherServlet - Completed 200 OK -2026-03-09 19:29:46.288 [http-nio-8080-exec-8] DEBUG org.hibernate.SQL - - select - u1_0.id, - u1_0.created_at, - u1_0.email, - u1_0.password_hash, - u1_0.username - from - portal_user u1_0 - where - u1_0.username=? -2026-03-09 19:29:46.290 [http-nio-8080-exec-8] DEBUG o.s.web.servlet.DispatcherServlet - GET "/api/files/recent", parameters={} -2026-03-09 19:29:46.290 [http-nio-8080-exec-8] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to com.yoyuzh.files.FileController#recent(UserDetails) -2026-03-09 19:29:46.291 [http-nio-8080-exec-8] DEBUG org.hibernate.SQL - - select - u1_0.id, - u1_0.created_at, - u1_0.email, - u1_0.password_hash, - u1_0.username - from - portal_user u1_0 - where - u1_0.username=? -2026-03-09 19:29:46.293 [http-nio-8080-exec-8] DEBUG org.hibernate.SQL - - select - sf1_0.id, - sf1_0.content_type, - sf1_0.created_at, - sf1_0.is_directory, - sf1_0.filename, - sf1_0.path, - sf1_0.size, - sf1_0.storage_name, - sf1_0.user_id - from - portal_file sf1_0 - where - sf1_0.user_id=? - and not(sf1_0.is_directory) - order by - sf1_0.created_at desc - fetch - first ? rows only -2026-03-09 19:29:46.293 [http-nio-8080-exec-8] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Using 'application/json', given [*/*] and supported [application/json, application/*+json] -2026-03-09 19:29:46.294 [http-nio-8080-exec-8] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Writing [ApiResponse[code=0, msg=success, data=[]]] -2026-03-09 19:29:46.294 [http-nio-8080-exec-8] DEBUG o.s.web.servlet.DispatcherServlet - Completed 200 OK -2026-03-09 19:30:02.083 [http-nio-8080-exec-10] DEBUG o.s.web.servlet.DispatcherServlet - POST "/api/auth/dev-login?username=recentqa", parameters={masked} -2026-03-09 19:30:02.084 [http-nio-8080-exec-10] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to com.yoyuzh.auth.DevAuthController#devLogin(String) -2026-03-09 19:30:02.085 [http-nio-8080-exec-10] DEBUG org.hibernate.SQL - - select - u1_0.id, - u1_0.created_at, - u1_0.email, - u1_0.password_hash, - u1_0.username - from - portal_user u1_0 - where - u1_0.username=? -2026-03-09 19:30:02.085 [http-nio-8080-exec-10] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Using 'application/json', given [*/*] and supported [application/json, application/*+json] -2026-03-09 19:30:02.085 [http-nio-8080-exec-10] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Writing [ApiResponse[code=0, msg=success, data=AuthResponse[token=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJyZWNlbnRxYS (truncated)...] -2026-03-09 19:30:02.085 [http-nio-8080-exec-10] DEBUG o.s.web.servlet.DispatcherServlet - Completed 200 OK -2026-03-09 19:30:02.247 [http-nio-8080-exec-1] DEBUG org.hibernate.SQL - - select - u1_0.id, - u1_0.created_at, - u1_0.email, - u1_0.password_hash, - u1_0.username - from - portal_user u1_0 - where - u1_0.username=? -2026-03-09 19:30:02.248 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet - POST "/api/files/upload", parameters={multipart} -2026-03-09 19:30:02.268 [http-nio-8080-exec-1] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to com.yoyuzh.files.FileController#upload(UserDetails, String, MultipartFile) -2026-03-09 19:30:02.272 [http-nio-8080-exec-1] DEBUG org.hibernate.SQL - - select - u1_0.id, - u1_0.created_at, - u1_0.email, - u1_0.password_hash, - u1_0.username - from - portal_user u1_0 - where - u1_0.username=? -2026-03-09 19:30:02.287 [http-nio-8080-exec-1] DEBUG org.hibernate.SQL - - select - case - when count(sf1_0.id)>0 - then true - else false - end -from - portal_file sf1_0 -where - sf1_0.user_id=? - and sf1_0.path=? - and sf1_0.filename=? -2026-03-09 19:30:02.322 [http-nio-8080-exec-1] DEBUG org.hibernate.SQL - - insert - into - portal_file - (content_type, created_at, is_directory, filename, path, size, storage_name, user_id, id) - values - (?, ?, ?, ?, ?, ?, ?, ?, default) -2026-03-09 19:30:02.327 [http-nio-8080-exec-1] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Using 'application/json', given [*/*] and supported [application/json, application/*+json] -2026-03-09 19:30:02.332 [http-nio-8080-exec-1] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Writing [ApiResponse[code=0, msg=success, data=FileMetadataResponse[id=16, filename=recent-smoke.txt, path=/, (truncated)...] -2026-03-09 19:30:02.332 [http-nio-8080-exec-1] DEBUG o.s.web.servlet.DispatcherServlet - Completed 200 OK -2026-03-09 19:30:02.346 [http-nio-8080-exec-2] DEBUG org.hibernate.SQL - - select - u1_0.id, - u1_0.created_at, - u1_0.email, - u1_0.password_hash, - u1_0.username - from - portal_user u1_0 - where - u1_0.username=? -2026-03-09 19:30:02.346 [http-nio-8080-exec-2] DEBUG o.s.web.servlet.DispatcherServlet - GET "/api/files/recent", parameters={} -2026-03-09 19:30:02.346 [http-nio-8080-exec-2] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped to com.yoyuzh.files.FileController#recent(UserDetails) -2026-03-09 19:30:02.352 [http-nio-8080-exec-2] DEBUG org.hibernate.SQL - - select - u1_0.id, - u1_0.created_at, - u1_0.email, - u1_0.password_hash, - u1_0.username - from - portal_user u1_0 - where - u1_0.username=? -2026-03-09 19:30:02.352 [http-nio-8080-exec-2] DEBUG org.hibernate.SQL - - select - sf1_0.id, - sf1_0.content_type, - sf1_0.created_at, - sf1_0.is_directory, - sf1_0.filename, - sf1_0.path, - sf1_0.size, - sf1_0.storage_name, - sf1_0.user_id - from - portal_file sf1_0 - where - sf1_0.user_id=? - and not(sf1_0.is_directory) - order by - sf1_0.created_at desc - fetch - first ? rows only -2026-03-09 19:30:02.352 [http-nio-8080-exec-2] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Using 'application/json', given [*/*] and supported [application/json, application/*+json] -2026-03-09 19:30:02.352 [http-nio-8080-exec-2] DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Writing [ApiResponse[code=0, msg=success, data=[FileMetadataResponse[id=16, filename=recent-smoke.txt, path=/ (truncated)...] -2026-03-09 19:30:02.362 [http-nio-8080-exec-2] DEBUG o.s.web.servlet.DispatcherServlet - Completed 200 OK diff --git a/backend/src/.DS_Store b/backend/src/.DS_Store deleted file mode 100644 index 55e74ca5f335a95916b0b22f0ba14682bc51cbad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKOHRWu5S^h}1hMIor4c9S4NMhIkPDR3@{t-+iL%d*E#fTPftzp)#2e25v9MSo z1T&KT#`EzcPl}x(BA(x^W<*mWsxbsvl!A!4=-RVjakA{Oxtz7@;v>=ku% zM%Q$cJwG??*w^(k*}?$$4_CwFbYSYU`q+#m`B mdiE25g`6XY$*KMzI^v??peVbDJ*5NvM<5a6lQZxG47>sNqC^S+ diff --git a/开发测试账号.md b/开发测试账号.md deleted file mode 100644 index a0c463a..0000000 --- a/开发测试账号.md +++ /dev/null @@ -1,18 +0,0 @@ -# 开发测试账号 - -以下账号会在后端以 `dev` profile 启动时自动初始化。 - -## 门户账号 - -| 门户用户名 | 门户密码 | 教务学号 | 教务密码 | 查询学期 | 网盘示例文件 | -| --- | --- | --- | --- | --- | --- | -| `portal-demo` | `portal123456` | `2023123456` | `portal123456` | `2025-spring` | `迎新资料.txt`、`课程规划.md`、`campus-shot.png` | -| `portal-study` | `study123456` | `2022456789` | `study123456` | `2024-fall` | `实验数据.csv`、`论文草稿.md`、`data-chart.png` | -| `portal-design` | `design123456` | `2021789012` | `design123456` | `2024-spring` | `素材清单.txt`、`作品说明.md`、`ui-mockup.png` | - -## 使用说明 - -- 先用上表中的“门户用户名 / 门户密码”登录站点。 -- 登录后进入网盘页,每个用户都会看到自己的 `下载 / 文档 / 图片` 目录,以及各自不同的样例文件。 -- 进入教务页后,填入对应的“教务学号 / 教务密码 / 查询学期”即可看到该用户对应的 mock 教务数据。 -- 当前开发环境的教务密码字段仅用于前端占位,后端主要依据登录态、学号和学期返回该用户的 mock 数据。为避免混淆,直接填表中的教务密码即可。 diff --git a/模板/Login.tsx b/模板/Login.tsx deleted file mode 100644 index f21cd78..0000000 --- a/模板/Login.tsx +++ /dev/null @@ -1,261 +0,0 @@ -import React, { useState } from 'react'; -import { useNavigate } from 'react-router-dom'; -import { motion, AnimatePresence } from 'motion/react'; -import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/src/components/ui/card'; -import { Button } from '@/src/components/ui/button'; -import { Input } from '@/src/components/ui/input'; -import { LogIn, User, Lock, UserPlus, Mail, ArrowLeft } from 'lucide-react'; -import { cn } from '@/src/lib/utils'; - -export default function Login() { - const navigate = useNavigate(); - const [isLogin, setIsLogin] = useState(true); - const [loading, setLoading] = useState(false); - const [error, setError] = useState(''); - - const handleSubmit = (e: React.FormEvent) => { - e.preventDefault(); - setLoading(true); - setError(''); - - // Simulate auth - setTimeout(() => { - setLoading(false); - if (isLogin) { - navigate('/overview'); - } else { - setIsLogin(true); // Switch back to login after "registering" - } - }, 1000); - }; - - return ( -
- {/* Background Glow */} -
-
- -
- {/* Left Side: Brand Info (Only visible in Login mode) */} - - {isLogin && ( - -
- - Access Portal -
- -
-

YOYUZH.XYZ

-

- 个人网站
统一入口 -

-
- -

- 欢迎来到 YOYUZH 的个人门户。在这里,你可以集中管理个人网盘文件、查询教务成绩课表,以及体验轻量级小游戏。 -

-
- )} -
- - {/* Form Container */} - - - - {isLogin ? ( - - - - - 登录 - - - 请输入您的账号和密码以继续 - - - -
-
-
- -
- - -
-
-
- -
- - -
-
-
- - {error && ( -
- {error} -
- )} - -
- -
- -
-
-
-
-
- ) : ( - - -
- - - 注册账号 - - -
- - 创建一个新账号以开启您的门户体验 - -
- -
-
-
- -
- - -
-
-
- -
- - -
-
-
- -
- - -
-
-
- -
- -
- -
-
-
-
-
- )} -
-
-
-
-
- ); -} diff --git a/模板/index.html b/模板/index.html deleted file mode 100644 index 9e63274..0000000 --- a/模板/index.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - html+css实现漂亮的透明动态漂浮登录页面 - - - -
- -
-
-
-
- -
-
-
-
-
- -
-
-

登录

-
-
- - -
-
- - -
-
- - -
-

忘记密码? - 点击这里 -

-

没有账户? - 注册 -

-
-
-
-
-
- - - \ No newline at end of file diff --git a/模板/style.css b/模板/style.css deleted file mode 100644 index 656dfba..0000000 --- a/模板/style.css +++ /dev/null @@ -1,236 +0,0 @@ -/* 清除浏览器默认边距, -使边框和内边距的值包含在元素的width和height内 */ - -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -/* 使用flex布局,让内容垂直和水平居中 */ - -section { - /* 相对定位 */ - position: relative; - overflow: hidden; - display: flex; - justify-content: center; - align-items: center; - min-height: 100vh; - /* linear-gradient() 函数用于创建一个表示两种或多种颜色线性渐变的图片 */ - background: linear-gradient(to bottom, #f1f4f9, #dff1ff); -} - -/* 背景颜色 */ - -section .color { - /* 绝对定位 */ - position: absolute; - /* 使用filter(滤镜) 属性,给图像设置高斯模糊*/ - filter: blur(200px); -} - -/* :nth-child(n) 选择器匹配父元素中的第 n 个子元素 */ - -section .color:nth-child(1) { - top: -350px; - width: 600px; - height: 600px; - background: #ff359b; -} - -section .color:nth-child(2) { - bottom: -150px; - left: 100px; - width: 500px; - height: 500px; - background: #fffd87; -} - -section .color:nth-child(3) { - bottom: 50px; - right: 100px; - width: 500px; - height: 500px; - background: #00d2ff; -} - -.box { - position: relative; -} - -/* 背景圆样式 */ - -.box .circle { - position: absolute; - background: rgba(255, 255, 255, 0.1); - /* backdrop-filter属性为一个元素后面区域添加模糊效果 */ - backdrop-filter: blur(5px); - box-shadow: 0 25px 45px rgba(0, 0, 0, 0.1); - border: 1px solid rgba(255, 255, 255, 0.5); - border-right: 1px solid rgba(255, 255, 255, 0.2); - border-bottom: 1px solid rgba(255, 255, 255, 0.2); - border-radius: 50%; - /* 使用filter(滤镜) 属性,改变颜色。 - hue-rotate(deg) 给图像应用色相旋转 - calc() 函数用于动态计算长度值 - var() 函数调用自定义的CSS属性值x*/ - filter: hue-rotate(calc(var(--x) * 70deg)); - /* 调用动画animate,需要10s完成动画, - linear表示动画从头到尾的速度是相同的, - infinite指定动画应该循环播放无限次*/ - animation: animate 10s linear infinite; - /* 动态计算动画延迟几秒播放 */ - animation-delay: calc(var(--x) * -1s); -} - -/* 背景圆动画 */ - -@keyframes animate { - 0%, 100%, { - transform: translateY(-50px); - } - 50% { - transform: translateY(50px); - } -} - -.box .circle:nth-child(1) { - top: -50px; - right: -60px; - width: 100px; - height: 100px; -} - -.box .circle:nth-child(2) { - top: 150px; - left: -100px; - width: 120px; - height: 120px; - z-index: 2; -} - -.box .circle:nth-child(3) { - bottom: 50px; - right: -60px; - width: 80px; - height: 80px; - z-index: 2; -} - -.box .circle:nth-child(4) { - bottom: -80px; - left: 100px; - width: 60px; - height: 60px; -} - -.box .circle:nth-child(5) { - top: -80px; - left: 140px; - width: 60px; - height: 60px; -} - -/* 登录框样式 */ - -.container { - position: relative; - width: 400px; - min-height: 400px; - background: rgba(255, 255, 255, 0.1); - display: flex; - justify-content: center; - align-items: center; - backdrop-filter: blur(5px); - box-shadow: 0 25px 45px rgba(0, 0, 0, 0.1); - border: 1px solid rgba(255, 255, 255, 0.5); - border-right: 1px solid rgba(255, 255, 255, 0.2); - border-bottom: 1px solid rgba(255, 255, 255, 0.2); -} - -.form { - position: relative; - width: 100%; - height: 100%; - padding: 50px; -} - -/* 登录标题样式 */ - -.form h2 { - position: relative; - color: #fff; - font-size: 24px; - font-weight: 600; - letter-spacing: 5px; - margin-bottom: 30px; - cursor: pointer; -} - -/* 登录标题的下划线样式 */ - -.form h2::before { - content: ""; - position: absolute; - left: 0; - bottom: -10px; - width: 0px; - height: 3px; - background: #fff; - transition: 0.5s; -} - -.form h2:hover:before { - width: 53px; -} - -.form .inputBox { - width: 100%; - margin-top: 20px; -} - -/* 输入框样式 */ - -.form .inputBox input { - width: 100%; - padding: 10px 20px; - background: rgba(255, 255, 255, 0.2); - outline: none; - border: none; - border-radius: 30px; - border: 1px solid rgba(255, 255, 255, 0.5); - border-right: 1px solid rgba(255, 255, 255, 0.2); - border-bottom: 1px solid rgba(255, 255, 255, 0.2); - font-size: 16px; - letter-spacing: 1px; - color: #fff; - box-shadow: 0 5px 15px rgba(0, 0, 0, 0.05); -} - -.form .inputBox input::placeholder { - color: #fff; -} - -/* 登录按钮样式 */ - -.form .inputBox input[type="submit"] { - background: #fff; - color: #666; - max-width: 100px; - margin-bottom: 20px; - font-weight: 600; - cursor: pointer; -} - -.forget { - margin-top: 6px; - color: #fff; - letter-spacing: 1px; -} - -.forget a { - color: #fff; - font-weight: 600; - text-decoration: none; -} \ No newline at end of file diff --git a/草图/pencil-new-前端页面需求文档.md b/草图/pencil-new-前端页面需求文档.md deleted file mode 100644 index 7f3b231..0000000 --- a/草图/pencil-new-前端页面需求文档.md +++ /dev/null @@ -1,668 +0,0 @@ -# Personal Portal 前端页面需求文档 - -## 1. 文档说明 - -- 设计来源:`草图/pencil-new.pen` -- 目标:将设计稿整理为可执行的前端页面需求,供 UI 开发、接口联调、测试验收使用 -- 适用范围:PC Web 端个人门户站点 -- 设计基准尺寸:`1440 x 1024` -- 说明:文档中未在设计稿中直接标注但对实现必需的内容,已按常规门户产品逻辑做合理补充,并明确写为“建议”或“推断” - -## 2. 产品定位 - -这是一个统一个人门户站点,用于集中承载以下能力: - -- 账号登录 -- 首页总览 -- 网盘文件管理 -- 教务数据查询 -- 游戏入口聚合 - -站点风格偏深色、毛玻璃、卡片式信息展示,强调“统一入口”和“个人数据聚合”。 - -## 3. 站点信息架构 - -建议前端按以下一级路由组织: - -| 页面 | 建议路由 | 页面目标 | -| --- | --- | --- | -| 登录页 | `/login` | 完成身份认证并进入门户 | -| 总览页 | `/overview` | 汇总展示用户、文件、课程、成绩等核心信息 | -| 网盘页 | `/files` | 浏览、筛选、查看和上传个人文件 | -| 教务页 | `/school` | 查询课表、成绩并展示学期数据 | -| 游戏页 | `/games` | 提供小游戏入口和分类切换 | - -## 4. 全局设计与交互要求 - -### 4.1 全局视觉规范 - -- 页面主背景为深蓝黑色系,建议主背景色接近 `#07101D` -- 卡片、导航、输入框采用半透明深色背景叠加模糊效果,形成毛玻璃风格 -- 主强调色为亮蓝色,建议主色接近 `#336EFF` -- 文字颜色分三级: - - 一级文字:高亮白色,用于标题、主按钮文字、关键数据 - - 二级文字:浅蓝灰色,用于说明文案、次要导航 - - 三级文字:更浅的透明文字,用于分隔说明和弱提示 -- 整站圆角统一偏大,按钮、卡片、胶囊标签均使用较高圆角 - -### 4.2 全局布局要求 - -- 所有页面采用顶部导航 + 主内容区结构 -- 顶部导航固定在页面顶部,默认包含站点品牌和一级导航入口 -- 主内容区使用卡片化分区布局,不同页面根据业务类型使用多列或多卡片排布 -- 所有卡片之间需要保留清晰的间距层级,避免信息拥挤 - -### 4.3 全局导航要求 - -- 顶部左侧固定展示站点品牌: - - 主标题:`YOYUZH.XYZ` - - 副标题:`Personal Portal` -- 顶部右侧固定展示一级导航: - - 总览 - - 网盘 - - 教务 - - 游戏 -- 当前所在页面的导航项为激活态: - - 高亮蓝色背景 - - 白色文字 - - 带轻微发光或阴影 -- 非当前页面为普通态: - - 半透明深色背景 - - 浅色文字 -- 点击一级导航后执行页面切换,建议保留当前登录态 - -### 4.4 全局交互要求 - -- 所有按钮、胶囊标签、切换项、列表行都应具备 hover、focus、active 状态 -- 键盘 Tab 顺序必须与视觉顺序一致 -- 图标型按钮若后续补充图标,必须提供 `aria-label` -- 卡片内部若有按钮组,主操作需突出显示,次操作保持弱化视觉 -- 页面切换过程中应有最基本的加载保护,避免空白闪烁 - -### 4.5 全局状态要求 - -每个业务页面至少支持以下状态: - -- 加载中:显示骨架屏或占位态 -- 加载成功:展示设计稿对应内容 -- 空状态:当列表、课表、成绩无数据时显示空态说明 -- 错误状态:接口失败时显示错误提示与重试入口 -- 未登录状态:除登录页外,若无有效登录态应跳回登录页 - -### 4.6 响应式要求 - -设计稿是桌面端稿件,前端实现时建议补齐以下断点: - -- `>= 1280px`:按设计稿布局展示 -- `768px - 1279px`:多列卡片可改为 2 列,右侧预览或抽屉可下移 -- `< 768px`:顶部导航压缩为可滚动标签或抽屉菜单;卡片全部改为单列堆叠 - -移动端适配要求: - -- 不允许出现横向滚动条 -- 卡片内文字不可溢出遮挡 -- 按钮点击热区不小于 `44 x 44px` -- 文件表格在小屏下可切换为列表卡片模式 - -### 4.7 可访问性要求 - -- 文本与背景对比度满足基本可读性 -- 表单字段必须带标签 -- 所有可点击控件需支持键盘操作 -- 当前导航项、当前分段切换项需要有明确的选中态 -- 动画需兼容 `prefers-reduced-motion` - -## 5. 登录页需求 - -### 5.1 页面目标 - -为用户提供统一入口,完成账号认证并进入门户首页。 - -### 5.2 页面结构 - -页面分为左右两区: - -- 左侧品牌介绍区 -- 右侧登录表单区 - -### 5.3 左侧品牌介绍区 - -应包含以下元素: - -- 品牌标题:`YOYUZH.XYZ` -- 品牌副标题:`Personal Portal` -- 胶囊标签:`Access Portal` -- 主标题:`个人网站统一入口` -- 一段站点简介文案 - -实现要求: - -- 左侧内容垂直排列,整体偏页面左上区域 -- 背景需要有大面积柔和发光装饰,营造氛围感 -- 简介文案允许后续替换为真实站点介绍 - -### 5.4 右侧登录表单区 - -表单卡片应包含以下字段和元素: - -- 表单标题:`登录` -- 用户名输入框 -- 密码输入框 -- 主按钮:`进入系统` - -字段要求: - -| 字段 | 类型 | 必填 | 说明 | -| --- | --- | --- | --- | -| 用户名 | 文本输入 | 是 | 支持账号、用户名或学号 | -| 密码 | 密码输入 | 是 | 采用掩码显示 | - -交互要求: - -- 用户名、密码均为空时点击按钮,给出必填校验 -- 支持按 Enter 提交表单 -- 登录请求发起后按钮进入 loading 状态并禁用重复点击 -- 登录成功后跳转至 `/overview` -- 登录失败时在表单区域显示错误提示 - -建议补充能力: - -- 记住登录状态 -- 登录态过期自动跳转登录页 -- 允许后续增加验证码或二次验证 - -### 5.5 登录页验收标准 - -- 页面首屏能清晰表达“统一入口”的产品定位 -- 输入框、按钮在视觉上与整体毛玻璃风格统一 -- 表单校验、提交、错误反馈完整 -- 登录成功跳转逻辑正常 - -## 6. 总览页需求 - -### 6.1 页面目标 - -集中展示用户最常用的跨模块摘要信息,让用户在一个页面看到文件、课程、成绩、账号等核心状态。 - -### 6.2 页面结构 - -总览页包含以下模块: - -- 顶部导航栏 -- 欢迎 Hero 区 -- 4 张数据指标卡片 -- 最近文件卡片 -- 今日 / 本周课程卡片 -- 快捷操作卡片 -- 存储空间卡片 -- 账号信息卡片 - -### 6.3 Hero 欢迎区 - -需展示以下内容: - -- 欢迎语:如 `欢迎回来,tester5595` -- 当前时间与问候语:如 `现在时间 20:17 · 晚上好` -- 简短页面说明 - -实现要求: - -- 欢迎语作为页面最强视觉标题 -- 当前时间应来自前端运行时或服务端返回,不应硬编码 -- 问候语应根据时间段变化,建议分为凌晨、早上、下午、晚上 - -### 6.4 指标卡片区 - -共 4 个指标模块: - -| 模块 | 示例值 | 说明 | -| --- | --- | --- | -| 网盘文件总数 | `128` | 展示文件总量及分类说明 | -| 最近 7 天上传 | `6` | 展示近 7 日上传数量和最近更新时间 | -| 本周课程 | `18` | 展示本周课程总量及今日课节数 | -| 已录入成绩 | `42` | 展示成绩总数及最近学期 | - -实现要求: - -- 数字需突出显示 -- 标题、数字、补充描述分层明显 -- 支持接口数据为空时展示 `0` 和空说明 - -### 6.5 最近文件模块 - -需展示: - -- 模块标题:`最近文件` -- 最近文件列表,建议至少显示 3 条 -- 每条信息至少包含: - - 文件名 - - 文件大小 - - 最近更新时间 - -交互要求: - -- 点击文件项可跳转 `/files`,并定位到该文件 -- 文件名超长时需截断并保留 tooltip 或完整展示方案 - -### 6.6 课程模块 - -模块标题:`今日 / 本周课程` - -模块内包含: - -- 分段切换:`今日` / `本周` -- 课程列表,建议显示: - - 时间段 - - 课程名称 - - 教室或地点 - -交互要求: - -- 默认选中 `今日` -- 点击 `本周` 后刷新为本周课表摘要 -- 切换过程不可造成卡片高度明显抖动 - -### 6.7 快捷操作模块 - -需提供 4 个快捷入口: - -- 上传文件 -- 新建文件夹 -- 进入网盘 -- 查询成绩 - -交互要求: - -- 上传文件:打开上传弹窗或跳转文件页并打开上传面板 -- 新建文件夹:打开新建文件夹表单 -- 进入网盘:跳转 `/files` -- 查询成绩:跳转 `/school` 并聚焦成绩查询区域 - -### 6.8 存储空间模块 - -需展示: - -- 模块标题:`存储空间` -- 已使用容量 / 总容量,如 `12.6 GB / 50 GB` -- 使用进度条 -- 百分比数值,如 `25%` - -实现要求: - -- 进度条宽度与百分比联动 -- 数值格式统一保留 1 位小数或按产品约定显示 - -### 6.9 账号信息模块 - -需展示: - -- 模块标题:`账号信息` -- 用户名 -- 邮箱 - -建议补充: - -- 后续预留头像、绑定状态、退出登录入口 - -### 6.10 总览页验收标准 - -- 各卡片数据层级清晰,首屏即可理解 -- 快捷操作能通往对应模块 -- 时间、课表、文件、容量信息均支持动态数据渲染 -- 页面在 1280px 以上布局稳定,在平板和移动端能正常堆叠 - -## 7. 网盘页需求 - -### 7.1 页面目标 - -提供个人网盘文件浏览、路径导航、详情预览和基础操作入口。 - -### 7.2 页面结构 - -网盘页采用三栏布局: - -- 左侧目录导航栏 -- 中间文件内容区 -- 右侧详细信息预览栏 - -### 7.3 左侧目录导航栏 - -建议包括两组内容: - -- 快速访问 - - 桌面 - - 下载 - - 文档 - - 图片 -- 网盘目录 - - 我的文件 - - 课程资料 - - 项目归档 - - 收藏夹 - -交互要求: - -- 点击目录项刷新中间内容区 -- 当前目录项应有激活态 -- 若目录层级增加,建议支持树形展开 - -### 7.4 中间文件内容区 - -应包含以下元素: - -- 路径面包屑栏 -- 视图切换控件:`列表` / `分栏` / `预览` -- 文件列表表头 -- 文件列表内容 -- 底部操作按钮:`新建`、`上传` - -面包屑要求: - -- 当前示例路径为:`网盘 > 我的文件 > 课程资料 > 软件工程` -- 每一级路径应可点击返回 - -文件列表字段要求: - -| 列名 | 说明 | -| --- | --- | -| 名称 | 文件或文件夹名称 | -| 修改日期 | 最近更新时间 | -| 类型 | 文件类型或目录类型 | -| 大小 | 文件大小;文件夹可显示 `—` | - -列表交互要求: - -- 支持单行选中 -- 支持文件夹进入下一级目录 -- 支持当前选中项同步到右侧详情栏 -- 当前选中行需有明显高亮 -- 文件名过长时截断处理 - -建议补充能力: - -- 双击打开文件 -- 右键菜单 -- 多选 -- 排序 -- 搜索 - -### 7.5 右侧详细信息预览栏 - -需展示当前选中文件的详细信息: - -- 当前选择的文件名 -- 文件路径 -- 文件大小 -- 上传时间 - -建议扩展字段: - -- 文件类型图标 -- 最近编辑人 -- 下载次数 -- 预览缩略图 - -### 7.6 网盘页操作要求 - -主操作: - -- 上传 -- 新建 - -交互说明: - -- 上传:支持本地文件选择,建议支持拖拽上传 -- 新建:默认创建文件夹,也可为后续扩展新建文档保留能力 -- 操作成功后,文件列表与统计信息应刷新 - -### 7.7 网盘页状态要求 - -- 空目录:显示空状态文案和“上传文件”入口 -- 加载中:文件表格骨架屏 -- 上传中:显示上传进度 -- 上传失败:显示失败原因并支持重试 - -### 7.8 网盘页验收标准 - -- 三栏布局信息职责明确 -- 面包屑、目录树、列表选中、右侧详情联动正常 -- 上传与新建入口位置明显,交互闭环完整 -- 小屏情况下可退化为“目录 / 列表 / 详情”分步展示 - -## 8. 教务页需求 - -### 8.1 页面目标 - -提供统一教务查询入口,用于查看课表、成绩及历史学期数据摘要。 - -### 8.2 页面结构 - -页面包含以下主要区域: - -- 教务查询卡片 -- 数据摘要卡片 -- 课表抽屉卡片 -- 成绩热力图区域 - -### 8.3 教务查询卡片 - -应包含以下字段: - -| 字段 | 示例 | 说明 | -| --- | --- | --- | -| 学号 | `2023123456` | 查询账号 | -| 密码 | `••••••••` | 教务系统密码 | -| 学期 | `2025 秋` | 当前选择学期 | - -按钮包括: - -- 查询课表 -- 查询成绩 - -交互要求: - -- 学号、密码、学期为必填项 -- 点击 `查询课表` 后刷新课表抽屉和摘要区对应信息 -- 点击 `查询成绩` 后刷新成绩区域和摘要区对应信息 -- 建议保留上次成功查询的账号与学期缓存 - -### 8.4 数据摘要卡片 - -需展示缓存或最近一次查询结果摘要: - -- 当前缓存账号 -- 已保存课表学期 -- 已保存成绩学期列表 - -实现要求: - -- 未查询时显示空态说明 -- 查询成功后即时更新 - -### 8.5 课表抽屉卡片 - -模块标题:`课表抽屉` - -展示形式: - -- 按星期分组展示课程 -- 每条课程至少包含: - - 上课时间 - - 课程名称 - - 教室 - -交互要求: - -- 右侧有明显的抽屉把手视觉提示 -- 建议支持展开 / 收起或横向滑出效果 -- 抽屉在平板和移动端可切为底部弹层 - -### 8.6 成绩视图切换 - -查询卡片内存在分段切换: - -- 课表 -- 成绩 - -要求: - -- 默认激活 `课表` -- 切换到 `成绩` 时,页面焦点应转向成绩区域 -- 当前激活项需具备明显视觉反馈 - -### 8.7 成绩热力图区域 - -模块标题:`成绩热力图` - -需展示多个学期的成绩分布示意,设计稿中包含: - -- `2024 秋` -- `2025 春` -- `2025 秋` - -实现要求: - -- 每个学期形成独立列 -- 每列包含多个课程成绩条 -- 颜色深浅或透明度表示成绩高低 -- 条形右侧或内部显示分数 - -建议补充能力: - -- 悬浮提示课程名、学分、绩点 -- 学期筛选 -- 按成绩排序 - -### 8.8 教务页状态要求 - -- 未查询:显示引导说明 -- 查询中:按钮 loading,结果区骨架屏 -- 查询成功:更新课表、摘要、成绩 -- 查询失败:展示错误原因和重试入口 - -### 8.9 教务页验收标准 - -- 查询表单、结果摘要、课表和成绩之间联动清晰 -- 抽屉与热力图区域在不同状态下布局稳定 -- 历史学期成绩能正确映射为视觉强弱差异 - -## 9. 游戏页需求 - -### 9.1 页面目标 - -作为轻量娱乐入口页,承载站内小游戏展示和启动入口。 - -### 9.2 页面结构 - -页面包含: - -- 顶部导航 -- 页面说明 Hero 区 -- 分类切换 -- 游戏卡片列表 - -### 9.3 Hero 区 - -需展示: - -- 模块标题:`游戏入口` -- 一段说明文案,表达“保留轻量试玩与静态资源检查入口,维持与整站一致的毛玻璃语言” - -### 9.4 分类切换 - -设计稿中包含: - -- 精选 -- 全部 - -交互要求: - -- 默认选中 `精选` -- 点击后刷新卡片列表 -- 若当前仅有少量游戏,`全部` 可与 `精选` 数据一致 - -### 9.5 游戏卡片 - -设计稿中至少包含两个游戏入口: - -| 名称 | 描述 | 按钮文案 | -| --- | --- | --- | -| CAT | 简单的小猫升级游戏 | Launch | -| RACE | 赛车休闲小游戏 | Launch | - -交互要求: - -- 点击 `Launch` 后进入游戏详情页、游戏运行页或新窗口 -- 游戏卡片需支持封面图扩展位 -- 后续支持增加更多游戏时,卡片布局可扩展 - -### 9.6 游戏页验收标准 - -- 卡片入口清晰,用户能快速理解每个游戏内容 -- 分类切换有效 -- 启动按钮行为明确,不产生死链 - -## 10. 数据与接口需求建议 - -### 10.1 登录相关 - -- 登录接口:提交用户名和密码,返回用户信息与 token -- 获取当前登录用户接口:用于页面初始化恢复登录态 - -### 10.2 总览相关 - -- 获取总览统计接口 -- 获取最近文件接口 -- 获取今日 / 本周课表摘要接口 -- 获取账号信息接口 -- 获取存储容量接口 - -### 10.3 网盘相关 - -- 获取目录树接口 -- 获取当前路径文件列表接口 -- 获取文件详情接口 -- 上传文件接口 -- 新建文件夹接口 - -### 10.4 教务相关 - -- 查询课表接口 -- 查询成绩接口 -- 获取历史查询缓存接口 - -### 10.5 游戏相关 - -- 获取游戏列表接口 -- 获取游戏分类接口 - -## 11. 前端实现建议 - -- 建议将顶部导航抽为全局公共组件 -- 建议将卡片、按钮、分段切换、信息列表抽为复用组件 -- 建议为每个页面单独维护数据请求与状态管理 -- 建议所有动态时间、容量、数量、成绩统一做格式化封装 -- 建议页面首屏背景光斑与毛玻璃效果使用纯 CSS 或轻量方案实现,避免过重图像资源 - -## 12. 测试验收清单 - -- 登录页表单校验、错误提示、提交跳转正常 -- 顶部导航在 5 个页面间切换正常,当前态正确 -- 总览页卡片数据渲染与快捷跳转正常 -- 网盘页目录、路径、列表、详情联动正常 -- 教务页查询、切换、热力图展示正常 -- 游戏页分类切换和启动行为正常 -- 页面在桌面、平板、移动端无明显布局错乱 -- 页面无横向滚动,文本无明显遮挡 -- 键盘可访问性与 focus 状态正常 - -## 13. 交付物建议 - -前端开发阶段建议同步产出以下内容: - -- 页面路由结构 -- 公共布局组件 -- 各页面接口类型定义 -- 空状态、错误状态、加载状态组件 -- 基础 UI 规范说明文档 - diff --git a/草图/pencil-new.pen b/草图/pencil-new.pen deleted file mode 100644 index ec7e753..0000000 --- a/草图/pencil-new.pen +++ /dev/null @@ -1,2697 +0,0 @@ -{ - "version": "2.8", - "children": [ - { - "type": "frame", - "id": "1UYkW", - "x": 0, - "y": 0, - "name": "Login Page", - "clip": true, - "width": 1440, - "height": 1024, - "fill": "#07101D", - "cornerRadius": 28, - "layout": "none", - "children": [ - { - "type": "ellipse", - "id": "f0Izf", - "x": -120, - "y": -120, - "name": "loginGlow", - "fill": "#78A9FF26", - "width": 520, - "height": 520 - }, - { - "type": "ellipse", - "id": "m4wNk", - "x": 980, - "y": 620, - "name": "loginGlow2", - "fill": "#AFCCFF1F", - "width": 340, - "height": 340 - }, - { - "type": "text", - "id": "9yzBc", - "x": 92, - "y": 86, - "name": "loginTag", - "fill": "#F4F8FF", - "content": "YOYUZH.XYZ", - "fontFamily": "Inter", - "fontSize": 20, - "fontWeight": "700" - }, - { - "type": "text", - "id": "B8vtx", - "x": 262, - "y": 90, - "name": "loginSubTag", - "fill": "#9FB8E6", - "content": "Personal Portal", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "normal", - "fontStyle": "italic" - }, - { - "type": "frame", - "id": "GrftW", - "x": 96, - "y": 178, - "name": "loginBadge", - "width": 140, - "height": 34, - "fill": "#FFFFFF12", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "zrm04", - "x": 128, - "y": 186, - "name": "loginBadgeText", - "fill": "#DCE9FF", - "content": "Access Portal", - "fontFamily": "Inter", - "fontSize": 13, - "fontWeight": "600" - }, - { - "type": "text", - "id": "cHWTH", - "x": 92, - "y": 232, - "name": "loginTitle", - "fill": "#F7FBFF", - "content": "个人网站统一入口", - "fontFamily": "Inter", - "fontSize": 58, - "fontWeight": "700" - }, - { - "type": "text", - "id": "yfeUF", - "x": 96, - "y": 380, - "name": "loginLead", - "fill": "#D6E4FB", - "content": "网站简介", - "lineHeight": 1.6, - "fontFamily": "Inter", - "fontSize": 17, - "fontWeight": "normal" - }, - { - "type": "frame", - "id": "zJQXE", - "x": 856, - "y": 142, - "name": "loginPanel", - "width": 474, - "height": 640, - "fill": "#FFFFFF16", - "cornerRadius": 36 - }, - { - "type": "text", - "id": "DoXFH", - "x": 924, - "y": 208, - "name": "loginPanelTitle", - "fill": "#F7FBFF", - "content": "登录", - "fontFamily": "Inter", - "fontSize": 34, - "fontWeight": "700" - }, - { - "type": "text", - "id": "dh0sS", - "x": 924, - "y": 338, - "name": "userLabel", - "fill": "#DBE7FF", - "content": "用户名", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "600" - }, - { - "type": "frame", - "id": "TMduX", - "x": 924, - "y": 366, - "name": "userField", - "width": 338, - "height": 60, - "fill": "#FFFFFF14", - "cornerRadius": 22 - }, - { - "type": "text", - "id": "nLVXb", - "x": 952, - "y": 386, - "name": "userValue", - "fill": "#EDF4FF", - "content": "1", - "fontFamily": "Inter", - "fontSize": 17, - "fontWeight": "500" - }, - { - "type": "text", - "id": "eeisB", - "x": 924, - "y": 452, - "name": "passLabel", - "fill": "#DBE7FF", - "content": "密码", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "600" - }, - { - "type": "frame", - "id": "B8AGJ", - "x": 924, - "y": 480, - "name": "passField", - "width": 338, - "height": 60, - "fill": "#FFFFFF14", - "cornerRadius": 22 - }, - { - "type": "text", - "id": "qlD2k", - "x": 952, - "y": 500, - "name": "passValue", - "fill": "#EDF4FF", - "content": "••••••••", - "fontFamily": "Inter", - "fontSize": 17, - "fontWeight": "500" - }, - { - "type": "frame", - "id": "dHlmW", - "x": 924, - "y": 584, - "name": "loginButton", - "width": 338, - "height": 64, - "fill": "#7CADFF", - "cornerRadius": 28 - }, - { - "type": "text", - "id": "8sVCG", - "x": 1066, - "y": 604, - "name": "loginButtonText", - "fill": "#FFFFFF", - "content": "进入系统", - "fontFamily": "Inter", - "fontSize": 18, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "4BrVi", - "x": 872, - "y": 156, - "name": "loginSheen", - "width": 446, - "height": 24, - "fill": "#FFFFFF10", - "cornerRadius": 999 - } - ] - }, - { - "type": "frame", - "id": "OqL1g", - "x": 1560, - "y": 0, - "name": "Overview Page", - "clip": true, - "width": 1440, - "height": 1024, - "fill": "#07101D", - "cornerRadius": 28, - "layout": "none", - "children": [ - { - "type": "frame", - "id": "Kbvkr", - "x": 1060, - "y": 46, - "name": "pillOverview", - "width": 92, - "height": 42, - "fill": "#336EFF", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "oduI9", - "x": 904, - "y": 518, - "name": "overviewSegment", - "width": 140, - "height": 40, - "fill": "#FFFFFF10", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "9kXgN", - "x": 608, - "y": 878, - "name": "storageText", - "fill": "#F5F9FF", - "textGrowth": "fixed-width-height", - "width": 156, - "height": 28, - "content": "已使用 12.6 GB / 50 GB", - "lineHeight": 1.8, - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "700" - }, - { - "type": "ellipse", - "id": "GaaiG", - "x": 0, - "y": 0, - "name": "overviewGlow", - "fill": "#86B3FF24", - "width": 460, - "height": 460 - }, - { - "type": "frame", - "id": "8zw0G", - "x": 24, - "y": 24, - "name": "overviewTopbar", - "width": 1392, - "height": 82, - "fill": "#FFFFFF14", - "cornerRadius": 30 - }, - { - "type": "text", - "id": "8BcsK", - "x": 52, - "y": 52, - "name": "overviewBrand", - "fill": "#F4F8FF", - "content": "YOYUZH.XYZ", - "fontFamily": "Inter", - "fontSize": 28, - "fontWeight": "700" - }, - { - "type": "text", - "id": "NBcCC", - "x": 256, - "y": 58, - "name": "overviewSub", - "fill": "#D6E5FF", - "content": "Personal Portal", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "500", - "fontStyle": "italic" - }, - { - "type": "text", - "id": "K2OTA", - "x": 1090, - "y": 58, - "name": "pillOverviewText", - "fill": "#FFFFFF", - "content": "总览", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "L8B8n", - "x": 1160, - "y": 46, - "name": "pillFiles", - "width": 92, - "height": 42, - "fill": "#F3F7FF14", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "DDtD7", - "x": 1190, - "y": 58, - "name": "pillFilesText", - "fill": "#E4EEFF", - "content": "网盘", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "2ymvN", - "x": 1260, - "y": 46, - "name": "pillSchool", - "width": 92, - "height": 42, - "fill": "#F3F7FF14", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "Ewdp6", - "x": 1290, - "y": 58, - "name": "pillSchoolText", - "fill": "#E4EEFF", - "content": "教务", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "5IGLB", - "x": 1360, - "y": 46, - "name": "pillGames", - "width": 92, - "height": 42, - "fill": "#F3F7FF14", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "Ufstb", - "x": 1390, - "y": 58, - "name": "pillGamesText", - "fill": "#E4EEFF", - "content": "游戏", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "7i7Qf", - "x": 24, - "y": 122, - "name": "overviewHero", - "width": 1392, - "height": 188, - "fill": "#FFFFFF12", - "cornerRadius": 34 - }, - { - "type": "text", - "id": "opZ0R", - "x": 52, - "y": 164, - "name": "overviewHeroTitle", - "fill": "#F5F9FF", - "content": "欢迎回来,tester5595", - "fontFamily": "Inter", - "fontSize": 54, - "fontWeight": "700" - }, - { - "type": "text", - "id": "8ix1g", - "x": 54, - "y": 238, - "name": "overviewHeroMeta", - "fill": "#DCE8FF", - "content": "现在时间 20:17 · 晚上好", - "fontFamily": "Inter", - "fontSize": 18, - "fontWeight": "500" - }, - { - "type": "text", - "id": "3uRL2", - "x": 54, - "y": 274, - "name": "overviewHeroDesc", - "fill": "#C8D7F0", - "content": "这里汇总你的文件、课程与账户信息。", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "normal" - }, - { - "type": "frame", - "id": "f52Ej", - "x": 24, - "y": 338, - "name": "metricFiles", - "width": 336, - "height": 130, - "fill": "#FFFFFF12", - "cornerRadius": 30 - }, - { - "type": "frame", - "id": "oMK0s", - "x": 376, - "y": 338, - "name": "metricUpload", - "width": 318, - "height": 130, - "fill": "#FFFFFF12", - "cornerRadius": 30 - }, - { - "type": "frame", - "id": "Tk9LF", - "x": 710, - "y": 338, - "name": "metricCourse", - "width": 318, - "height": 130, - "fill": "#FFFFFF12", - "cornerRadius": 30 - }, - { - "type": "frame", - "id": "mFp0a", - "x": 1044, - "y": 338, - "name": "metricGrade", - "width": 366, - "height": 130, - "fill": "#FFFFFF12", - "cornerRadius": 30 - }, - { - "type": "text", - "id": "6FSuS", - "x": 66, - "y": 352, - "name": "metricFilesText", - "fill": "#F5F9FF", - "textGrowth": "fixed-width-height", - "width": 140, - "height": 116, - "content": "网盘文件总数\n\n\n文档 / 图片 / 压缩包", - "lineHeight": 1.5, - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "text", - "id": "mnu7E", - "x": 400, - "y": 352, - "name": "metricUploadText", - "fill": "#F5F9FF", - "content": "最近 7 天上传\n\n\n最近更新时间:今天 14:23", - "lineHeight": 1.5, - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "text", - "id": "Ledpg", - "x": 734, - "y": 352, - "name": "metricCourseText", - "fill": "#F5F9FF", - "content": "本周课程\n\n\n今天 3 节", - "lineHeight": 1.5, - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "text", - "id": "NMWU3", - "x": 1068, - "y": 352, - "name": "metricGradeText", - "fill": "#F5F9FF", - "content": "已录入成绩\n\n\n最近学期:2025 秋", - "lineHeight": 1.5, - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "sZTOA", - "x": 24, - "y": 492, - "name": "recentFilesCard", - "width": 536, - "height": 434, - "fill": "#FFFFFF12", - "cornerRadius": 32 - }, - { - "type": "text", - "id": "UyWwL", - "x": 68, - "y": 564, - "name": "recentFilesText", - "fill": "#F5F9FF", - "content": "最近文件\n\n裁判文书终审版.docx 12.4 MB 今天\nJavaWeb 实验报告.pdf 3.2 MB 昨天\n志愿图.png 1.1 MB 昨天\n", - "lineHeight": 1.85, - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "600" - }, - { - "type": "frame", - "id": "9qBI1", - "x": 584, - "y": 492, - "name": "scheduleCard", - "width": 560, - "height": 260, - "fill": "#FFFFFF12", - "cornerRadius": 32, - "children": [ - { - "type": "rectangle", - "id": "Cz73a", - "fill": "#CCCCCC", - "width": 105, - "height": 2 - } - ] - }, - { - "type": "text", - "id": "wMmBA", - "x": 612, - "y": 564, - "name": "scheduleText", - "fill": "#F5F9FF", - "textGrowth": "fixed-width-height", - "width": 352, - "height": 236, - "content": "今日 / 本周课程\n\n08:30-10:05 数据结构 D1211\n10:20-11:55 计算机网络 D2222\n14:30-16:05 软件工程导论 A340\n", - "lineHeight": 1.8, - "fontFamily": "Inter", - "fontSize": 18, - "fontWeight": "600" - }, - { - "type": "frame", - "id": "E3EUE", - "x": 1166, - "y": 492, - "name": "actionsCard", - "width": 250, - "height": 260, - "fill": "#FFFFFF12", - "cornerRadius": 32 - }, - { - "type": "frame", - "id": "dRhSu", - "x": 584, - "y": 776, - "name": "storageCard", - "width": 320, - "height": 150, - "fill": "#FFFFFF12", - "cornerRadius": 32 - }, - { - "type": "frame", - "id": "WoQLH", - "x": 604, - "y": 845, - "name": "storageBarBg", - "width": 236, - "height": 18, - "fill": "#CFE0FF22", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "aXrfM", - "x": 604, - "y": 845, - "name": "storageBarFill", - "width": 92, - "height": 18, - "fill": "#83AEFF", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "2KAro", - "x": 852, - "y": 845, - "name": "storageRate", - "opacity": 0.8, - "fill": "#BFD5FF", - "textGrowth": "fixed-width-height", - "width": 56, - "height": 18, - "content": "25%", - "fontFamily": "Inter", - "fontSize": 20, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "ZiAyU", - "x": 924, - "y": 776, - "name": "accountCard", - "width": 492, - "height": 150, - "fill": "#FFFFFF12", - "cornerRadius": 32 - }, - { - "type": "text", - "id": "eynXm", - "x": 952, - "y": 800, - "name": "accountTitle", - "fill": "#F5F9FF", - "content": "账号信息", - "fontFamily": "Inter", - "fontSize": 18, - "fontWeight": "700" - }, - { - "type": "text", - "id": "NsdMV", - "x": 952, - "y": 837, - "name": "accountUser", - "fill": "#F5F9FF", - "textGrowth": "fixed-width-height", - "width": 87, - "height": 85, - "content": "用户名\n\ntester5595", - "lineHeight": 1.6, - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "text", - "id": "KlYzo", - "x": 1162, - "y": 837, - "name": "accountMail", - "fill": "#F5F9FF", - "textGrowth": "fixed-width-height", - "width": 208, - "height": 85, - "content": "邮箱\n\ntester5595@example.com", - "lineHeight": 1.6, - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "ellipse", - "id": "ZOj8l", - "x": 1320, - "y": 742, - "name": "overviewAccent1", - "fill": "#8CB6FF1A", - "width": 180, - "height": 180 - }, - { - "type": "ellipse", - "id": "6oRFx", - "x": 320, - "y": 782, - "name": "overviewAccent2", - "fill": "#B9D4FF14", - "width": 220, - "height": 220 - }, - { - "type": "frame", - "id": "dmTiJ", - "x": 44, - "y": 136, - "name": "overviewSheen", - "width": 1348, - "height": 18, - "fill": "#FFFFFF0C", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "G4wHO", - "x": 36, - "y": 34, - "name": "navSpecOverview", - "width": 1368, - "height": 10, - "fill": "#FFFFFF08", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "fYwCm", - "x": 908, - "y": 522, - "name": "overviewSegmentActive", - "width": 68, - "height": 32, - "fill": "#FFFFFF18", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "aQAZT", - "x": 928, - "y": 531, - "name": "overviewSegmentToday", - "fill": "#FFFFFF", - "content": "今日", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "700" - }, - { - "type": "text", - "id": "5NdR7", - "x": 991, - "y": 531, - "name": "overviewSegmentWeek", - "fill": "#DDE9FF", - "content": "本周", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "700" - }, - { - "type": "text", - "id": "duPqk", - "x": 162, - "y": 380, - "name": "metricFilesNumber2", - "fill": "#EAF2FF", - "textGrowth": "fixed-width-height", - "width": 84, - "height": 55, - "content": "128", - "fontFamily": "Inter", - "fontSize": 44, - "fontWeight": "700" - }, - { - "type": "text", - "id": "J2Slz", - "x": 509, - "y": 380, - "name": "metricUploadNumber2", - "fill": "#EAF2FF", - "textGrowth": "fixed-width-height", - "width": 51, - "height": 65, - "content": "6", - "fontFamily": "Inter", - "fontSize": 44, - "fontWeight": "700" - }, - { - "type": "text", - "id": "andKu", - "x": 827, - "y": 380, - "name": "metricCourseNumber2", - "fill": "#EAF2FF", - "textGrowth": "fixed-width-height", - "width": 61, - "height": 55, - "content": "18", - "fontFamily": "Inter", - "fontSize": 44, - "fontWeight": "700" - }, - { - "type": "text", - "id": "GojxK", - "x": 1182, - "y": 371, - "name": "metricGradeNumber2", - "fill": "#EAF2FF", - "textGrowth": "fixed-width-height", - "width": 69, - "height": 64, - "content": "42", - "fontFamily": "Inter", - "fontSize": 44, - "fontWeight": "700" - }, - { - "type": "text", - "id": "x5LV8", - "x": 68, - "y": 518, - "name": "recentFilesTitle2", - "fill": "#F8FBFF", - "content": "最近文件", - "fontFamily": "Inter", - "fontSize": 22, - "fontWeight": "700" - }, - { - "type": "text", - "id": "1Lgbn", - "x": 612, - "y": 518, - "name": "scheduleTitle2", - "fill": "#F8FBFF", - "content": "今日 / 本周课程", - "fontFamily": "Inter", - "fontSize": 22, - "fontWeight": "700" - }, - { - "type": "text", - "id": "wt1w5", - "x": 1192, - "y": 518, - "name": "actionsTitle2", - "fill": "#F8FBFF", - "content": "快捷操作", - "fontFamily": "Inter", - "fontSize": 22, - "fontWeight": "700" - }, - { - "type": "text", - "id": "02HWh", - "x": 612, - "y": 788, - "name": "storageTitle2", - "fill": "#F8FBFF", - "textGrowth": "fixed-width-height", - "width": 89, - "height": 44, - "content": "存储空间", - "fontFamily": "Inter", - "fontSize": 22, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "WH5pE", - "x": 68, - "y": 548, - "name": "recentDivider", - "width": 448, - "height": 2, - "fill": "#FFFFFF12", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "QnCSU", - "x": 612, - "y": 548, - "name": "scheduleDivider", - "width": 488, - "height": 2, - "fill": "#FFFFFF12", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "ZldlY", - "x": 1192, - "y": 548, - "name": "actionsDivider", - "width": 182, - "height": 2, - "fill": "#FFFFFF12", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "qVv1f", - "x": 612, - "y": 830, - "name": "storageDivider", - "width": 236, - "height": 2, - "fill": "#FFFFFF12", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "hbwvp", - "x": 952, - "y": 830, - "name": "accountDivider", - "width": 404, - "height": 2, - "fill": "#FFFFFF12", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "mKtaL", - "x": 1188, - "y": 564, - "name": "overviewActionBtn1", - "width": 188, - "height": 36, - "fill": "#8BB6FF26", - "cornerRadius": 16 - }, - { - "type": "frame", - "id": "SJQmK", - "x": 1188, - "y": 610, - "name": "overviewActionBtn2", - "width": 188, - "height": 36, - "fill": "#FFFFFF10", - "cornerRadius": 16 - }, - { - "type": "frame", - "id": "qNgVY", - "x": 1188, - "y": 656, - "name": "overviewActionBtn3", - "width": 188, - "height": 36, - "fill": "#FFFFFF10", - "cornerRadius": 16 - }, - { - "type": "frame", - "id": "iHVcI", - "x": 1188, - "y": 702, - "name": "overviewActionBtn4", - "width": 188, - "height": 36, - "fill": "#FFFFFF10", - "cornerRadius": 16 - }, - { - "type": "text", - "id": "fnwuz", - "x": 1212, - "y": 574, - "name": "overviewActionBtn1Text", - "fill": "#FFFFFF", - "content": "上传文件", - "fontFamily": "Inter", - "fontSize": 15, - "fontWeight": "700" - }, - { - "type": "text", - "id": "3XqqE", - "x": 1212, - "y": 620, - "name": "overviewActionBtn2Text", - "fill": "#EAF2FF", - "content": "新建文件夹", - "fontFamily": "Inter", - "fontSize": 15, - "fontWeight": "700" - }, - { - "type": "text", - "id": "VajVq", - "x": 1212, - "y": 666, - "name": "overviewActionBtn3Text", - "fill": "#EAF2FF", - "content": "进入网盘", - "fontFamily": "Inter", - "fontSize": 15, - "fontWeight": "700" - }, - { - "type": "text", - "id": "qku4s", - "x": 1212, - "y": 712, - "name": "overviewActionBtn4Text", - "fill": "#EAF2FF", - "content": "查询成绩", - "fontFamily": "Inter", - "fontSize": 15, - "fontWeight": "700" - } - ] - }, - { - "type": "frame", - "id": "IEH4H", - "x": 3120, - "y": 0, - "name": "Files Page", - "clip": true, - "width": 1440, - "height": 1024, - "fill": "#07101D", - "cornerRadius": 28, - "layout": "none", - "children": [ - { - "type": "ellipse", - "id": "BDCuw", - "x": 0, - "y": 0, - "name": "filesGlow", - "fill": "#367DFF24", - "width": 400, - "height": 400 - }, - { - "type": "frame", - "id": "hK1XS", - "x": 24, - "y": 24, - "name": "filesTopbar", - "width": 1392, - "height": 82, - "fill": "#FFFFFF14", - "cornerRadius": 26 - }, - { - "type": "text", - "id": "f9QLU", - "x": 52, - "y": 52, - "name": "filesBrand", - "fill": "#F4F8FF", - "content": "YOYUZH.XYZ", - "fontFamily": "Inter", - "fontSize": 28, - "fontWeight": "700" - }, - { - "type": "text", - "id": "bFoOi", - "x": 256, - "y": 58, - "name": "filesSub", - "fill": "#D6E5FF", - "content": "Personal Portal", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "500", - "fontStyle": "italic" - }, - { - "type": "frame", - "id": "yhWpA", - "x": 1060, - "y": 46, - "name": "filesPillOverview", - "width": 92, - "height": 42, - "fill": "#F3F7FF14", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "nymOQ", - "x": 1090, - "y": 58, - "name": "filesPillOverviewText", - "fill": "#E4EEFF", - "content": "总览", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "4TmO7", - "x": 1160, - "y": 46, - "name": "filesPillFiles", - "width": 92, - "height": 42, - "fill": "#336EFF", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "oqsI3", - "x": 1190, - "y": 58, - "name": "filesPillFilesText", - "fill": "#FFFFFF", - "content": "网盘", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "hmZRe", - "x": 1260, - "y": 46, - "name": "filesPillSchool", - "width": 92, - "height": 42, - "fill": "#F3F7FF14", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "qlurp", - "x": 1290, - "y": 58, - "name": "filesPillSchoolText", - "fill": "#E4EEFF", - "content": "教务", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "bEC3X", - "x": 1360, - "y": 46, - "name": "filesPillGames", - "width": 92, - "height": 42, - "fill": "#F3F7FF14", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "p0ozC", - "x": 1390, - "y": 58, - "name": "filesPillGamesText", - "fill": "#E4EEFF", - "content": "游戏", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "qQyQE", - "x": 24, - "y": 128, - "name": "filesWindow", - "width": 1392, - "height": 872, - "fill": "#FFFFFF12", - "cornerRadius": 34 - }, - { - "type": "frame", - "id": "z187X", - "x": 46, - "y": 170, - "name": "filesSidebar", - "width": 236, - "height": 786, - "fill": "#FFFFFF10", - "cornerRadius": 30 - }, - { - "type": "text", - "id": "I9NJI", - "x": 72, - "y": 200, - "name": "filesSidebarText", - "fill": "#F5F9FF", - "content": "位置\n\n快速访问\n桌面\n下载\n文档\n图片\n\n网盘\n我的文件\n课程资料\n项目归档\n收藏夹", - "lineHeight": 1.9, - "fontFamily": "Inter", - "fontSize": 18, - "fontWeight": "600" - }, - { - "type": "frame", - "id": "4I7ut", - "x": 304, - "y": 170, - "name": "filesContent", - "width": 806, - "height": 786, - "fill": "#FFFFFF10", - "cornerRadius": 30 - }, - { - "type": "frame", - "id": "6cfcw", - "x": 332, - "y": 198, - "name": "filesPathBar", - "width": 750, - "height": 52, - "fill": "#FFFFFF14", - "cornerRadius": 22 - }, - { - "type": "text", - "id": "s5v0e", - "x": 356, - "y": 214, - "name": "filesPathText", - "fill": "#EAF2FF", - "content": "网盘 › 我的文件 › 课程资料 › 软件工程", - "fontFamily": "Inter", - "fontSize": 18, - "fontWeight": "600" - }, - { - "type": "text", - "id": "jV8qA", - "x": 356, - "y": 282, - "name": "filesHeaderText", - "fill": "#BFD1EF", - "content": "名称 修改日期 类型 大小\n────────────────────────────────────────────────────────────────────────────────────", - "lineHeight": 1.5, - "fontFamily": "Inter", - "fontSize": 15, - "fontWeight": "700" - }, - { - "type": "text", - "id": "b33zH", - "x": 356, - "y": 332, - "name": "filesRowsText", - "fill": "#F5F9FF", - "content": "▸ 算法分析期末复习.docx 今天 14:23 Word 文档 12.4 MB\n▸ JavaWeb 实验报告.pdf 昨天 19:12 PDF 文件 3.2 MB\n▸ 课程截图.png 昨天 13:08 PNG 图片 1.1 MB\n▸ 软件工程导论 文件夹 项目目录 —", - "lineHeight": 2, - "fontFamily": "Inter", - "fontSize": 17, - "fontWeight": "600" - }, - { - "type": "frame", - "id": "5WweH", - "x": 1132, - "y": 170, - "name": "filesPreview", - "width": 262, - "height": 786, - "fill": "#FFFFFF10", - "cornerRadius": 30 - }, - { - "type": "text", - "id": "jj9rZ", - "x": 1158, - "y": 244, - "name": "filesPreviewText", - "fill": "#F5F9FF", - "content": "当前选择\n算法分析期末复习.docx\n\n路径\n/我的文件/课程资料/软件工程\n\n大小\n12.4 MB\n\n上传\n今天 14:23", - "lineHeight": 1.9, - "fontFamily": "Inter", - "fontSize": 15, - "fontWeight": "500" - }, - { - "type": "frame", - "id": "fiooD", - "x": 1004, - "y": 890, - "name": "filesActionUpload", - "width": 94, - "height": 42, - "fill": "#7CADFF", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "DlyoW", - "x": 1030, - "y": 903, - "name": "filesActionUploadText", - "fill": "#FFFFFF", - "content": "上传", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "xKQgJ", - "x": 902, - "y": 890, - "name": "filesActionFolder", - "width": 94, - "height": 42, - "fill": "#F3F7FF14", - "cornerRadius": 26 - }, - { - "type": "text", - "id": "Jmivu", - "x": 928, - "y": 903, - "name": "filesActionFolderText", - "fill": "#E4EEFF", - "content": "新建", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "MFGqX", - "x": 42, - "y": 142, - "name": "filesSheen", - "width": 1348, - "height": 18, - "fill": "#FFFFFF0C", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "ojosv", - "x": 36, - "y": 34, - "name": "navSpecFiles", - "width": 1368, - "height": 10, - "fill": "#FFFFFF08", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "2U4lO", - "x": 930, - "y": 198, - "name": "filesSegment", - "width": 152, - "height": 40, - "fill": "#FFFFFF10", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "l2bdC", - "x": 934, - "y": 202, - "name": "filesSegmentActive", - "width": 46, - "height": 32, - "fill": "#FFFFFF18", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "kB5NI", - "x": 946, - "y": 211, - "name": "filesSegmentList", - "fill": "#FFFFFF", - "content": "列表", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "700" - }, - { - "type": "text", - "id": "pKn0f", - "x": 993, - "y": 211, - "name": "filesSegmentGrid", - "fill": "#DDE9FF", - "content": "分栏", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "700" - }, - { - "type": "text", - "id": "H9oAv", - "x": 1043, - "y": 211, - "name": "filesSegmentPreview", - "fill": "#DDE9FF", - "content": "预览", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "700" - }, - { - "type": "text", - "id": "1e9Qr", - "x": 1158, - "y": 198, - "name": "filesPreviewTitle", - "fill": "#F8FBFF", - "content": "详细信息", - "fontFamily": "Inter", - "fontSize": 22, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "sVmCF", - "x": 72, - "y": 330, - "name": "filesSidebarDivider", - "width": 164, - "height": 2, - "fill": "#FFFFFF12", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "5W0GV", - "x": 356, - "y": 274, - "name": "filesPathDivider", - "width": 694, - "height": 2, - "fill": "#FFFFFF12", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "7ryAk", - "x": 1158, - "y": 232, - "name": "filesPreviewDivider", - "width": 190, - "height": 2, - "fill": "#FFFFFF12", - "cornerRadius": 999 - } - ] - }, - { - "type": "frame", - "id": "VoPrH", - "x": 4680, - "y": 0, - "name": "School Page", - "clip": true, - "width": 1440, - "height": 1024, - "fill": "#07101D", - "cornerRadius": 28, - "layout": "none", - "children": [ - { - "type": "ellipse", - "id": "9HTne", - "x": 0, - "y": 0, - "name": "schoolGlow", - "fill": "#4A8CFF22", - "width": 360, - "height": 360 - }, - { - "type": "frame", - "id": "4HvxB", - "x": 24, - "y": 24, - "name": "schoolTopbar", - "width": 1392, - "height": 82, - "fill": "#FFFFFF14", - "cornerRadius": 30 - }, - { - "type": "text", - "id": "zyaSV", - "x": 52, - "y": 52, - "name": "schoolBrand", - "fill": "#F4F8FF", - "content": "YOYUZH.XYZ", - "fontFamily": "Inter", - "fontSize": 28, - "fontWeight": "700" - }, - { - "type": "text", - "id": "wERBX", - "x": 256, - "y": 58, - "name": "schoolSub", - "fill": "#D6E5FF", - "content": "Personal Portal", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "500", - "fontStyle": "italic" - }, - { - "type": "frame", - "id": "nLPEz", - "x": 1060, - "y": 46, - "name": "schoolPillOverview", - "width": 92, - "height": 42, - "fill": "#F3F7FF14", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "53GB9", - "x": 1090, - "y": 58, - "name": "schoolPillOverviewText", - "fill": "#E4EEFF", - "content": "总览", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "kFYcr", - "x": 1160, - "y": 46, - "name": "schoolPillFiles", - "width": 92, - "height": 42, - "fill": "#F3F7FF14", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "Sfvtx", - "x": 1190, - "y": 58, - "name": "schoolPillFilesText", - "fill": "#E4EEFF", - "content": "网盘", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "y4afL", - "x": 1260, - "y": 46, - "name": "schoolPillSchool", - "width": 92, - "height": 42, - "fill": "#336EFF", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "DQ8Yb", - "x": 1290, - "y": 58, - "name": "schoolPillSchoolText", - "fill": "#FFFFFF", - "content": "教务", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "xtaf8", - "x": 1360, - "y": 46, - "name": "schoolPillGames", - "width": 92, - "height": 42, - "fill": "#F3F7FF14", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "tbWIX", - "x": 1390, - "y": 58, - "name": "schoolPillGamesText", - "fill": "#E4EEFF", - "content": "游戏", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "U0kCf", - "x": 36, - "y": 132, - "name": "schoolQueryCard", - "width": 367, - "height": 508, - "fill": "#FFFFFF12", - "cornerRadius": 32 - }, - { - "type": "text", - "id": "HmFAb", - "x": 64, - "y": 210, - "name": "schoolQueryText", - "fill": "#F5F9FF", - "content": "学号\n2023123456\n\n密码\n••••••••\n\n学期\n2025 秋\n\n操作", - "lineHeight": 1.9, - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "500" - }, - { - "type": "frame", - "id": "Z1b9B", - "x": 420, - "y": 132, - "name": "schoolSummaryCard", - "width": 522, - "height": 508, - "fill": "#FFFFFF12", - "cornerRadius": 32 - }, - { - "type": "text", - "id": "RYK5J", - "x": 452, - "y": 208, - "name": "schoolSummaryText", - "fill": "#F5F9FF", - "textGrowth": "fixed-width", - "width": 317, - "content": "当前缓存账号:2023123456\n已保存课表:2025 秋\n已保存成绩学期:2024 秋 / 2025 春 / 2025 秋\n\n", - "lineHeight": 1.95, - "fontFamily": "Inter", - "fontSize": 15, - "fontWeight": "500" - }, - { - "type": "frame", - "id": "Eirqb", - "x": 1380, - "y": 214, - "name": "scheduleDrawerHandle", - "width": 36, - "height": 164, - "fill": "#8BB6FFCC", - "cornerRadius": 18 - }, - { - "type": "frame", - "id": "2oFpQ", - "x": 966, - "y": 132, - "name": "scheduleDrawer", - "width": 434, - "height": 508, - "fill": "#FFFFFF14", - "cornerRadius": 36 - }, - { - "type": "text", - "id": "rEgtx", - "x": 998, - "y": 208, - "name": "scheduleDrawerText", - "fill": "#F5F9FF", - "content": "周一\n08:30 数据结构 D1344\n10:30 计算机网络 D1135\n16:25 Java EE D1147\n\n周二\n08:30 体育自选 D梅蓝3\n14:25 思政概论 D1248\n\n周五\n08:30 计算机网络 D1412\n10:30 操作系统 D1214", - "lineHeight": 1.9, - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "500" - }, - { - "type": "frame", - "id": "OSlSJ", - "x": 36, - "y": 674, - "name": "gradesHeatmap", - "width": 1364, - "height": 310, - "fill": "#FFFFFF12", - "cornerRadius": 32 - }, - { - "type": "text", - "id": "sln5s", - "x": 64, - "y": 706, - "name": "heatTitle", - "fill": "#F5F9FF", - "content": "成绩热力图", - "fontFamily": "Inter", - "fontSize": 24, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "jbFma", - "x": 54, - "y": 146, - "name": "schoolSheen", - "width": 880, - "height": 18, - "fill": "#FFFFFF0C", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "kJjGI", - "x": 36, - "y": 34, - "name": "navSpecSchool", - "width": 1368, - "height": 10, - "fill": "#FFFFFF08", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "hGM3u", - "x": 68, - "y": 408, - "name": "schoolSegment", - "width": 216, - "height": 38, - "fill": "#FFFFFF10", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "2ho0O", - "x": 68, - "y": 408, - "name": "schoolSegmentActive", - "width": 92, - "height": 34, - "fill": "#FFFFFF18", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "UzKVn", - "x": 91, - "y": 418, - "name": "schoolSegmentSchedule", - "fill": "#FFFFFF", - "content": "课表", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "700" - }, - { - "type": "text", - "id": "DaF8T", - "x": 184, - "y": 418, - "name": "schoolSegmentGrade", - "fill": "#DDE9FF", - "content": "成绩", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "700" - }, - { - "type": "text", - "id": "XM408", - "x": 116, - "y": 736, - "name": "heatSemesterOneLabel", - "fill": "#EAF2FF", - "content": "2024 秋", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "text", - "id": "ZFSW0", - "x": 556, - "y": 736, - "name": "heatSemesterTwoLabel", - "fill": "#EAF2FF", - "content": "2025 春", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "text", - "id": "ACrHI", - "x": 996, - "y": 736, - "name": "heatSemesterThreeLabel", - "fill": "#EAF2FF", - "content": "2025 秋", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "fevox", - "x": 108, - "y": 788, - "name": "s1g1", - "width": 320, - "height": 18, - "fill": "#C3D8FF22", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "7mGRa", - "x": 108, - "y": 811, - "name": "s1g2", - "width": 320, - "height": 18, - "fill": "#C3D8FF28", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "0nRbX", - "x": 108, - "y": 834, - "name": "s1g3", - "width": 320, - "height": 18, - "fill": "#C3D8FF2E", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "9GwcC", - "x": 108, - "y": 857, - "name": "s1g4", - "width": 320, - "height": 18, - "fill": "#C3D8FF34", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "7EW6j", - "x": 108, - "y": 880, - "name": "s1g5", - "width": 320, - "height": 18, - "fill": "#C3D8FF3A", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "ghgjl", - "x": 108, - "y": 903, - "name": "s1g6", - "width": 320, - "height": 18, - "fill": "#C3D8FF42", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "jNYif", - "x": 108, - "y": 926, - "name": "s1g7", - "width": 320, - "height": 18, - "fill": "#C3D8FF4C", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "EP7zI", - "x": 108, - "y": 949, - "name": "s1g8", - "width": 320, - "height": 18, - "fill": "#C3D8FF58", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "E4mq3", - "x": 548, - "y": 765, - "name": "s2g1", - "width": 320, - "height": 18, - "fill": "#A9CAFF26", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "OSSMS", - "x": 548, - "y": 788, - "name": "s2g2", - "width": 320, - "height": 18, - "fill": "#A9CAFF2C", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "Wi6fK", - "x": 548, - "y": 811, - "name": "s2g3", - "width": 320, - "height": 18, - "fill": "#A9CAFF32", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "3FUqd", - "x": 548, - "y": 834, - "name": "s2g4", - "width": 320, - "height": 18, - "fill": "#A9CAFF38", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "jUWEj", - "x": 548, - "y": 857, - "name": "s2g5", - "width": 320, - "height": 18, - "fill": "#A9CAFF3E", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "mWzMV", - "x": 548, - "y": 880, - "name": "s2g6", - "width": 320, - "height": 18, - "fill": "#A9CAFF44", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "hxJ2y", - "x": 548, - "y": 903, - "name": "s2g7", - "width": 320, - "height": 18, - "fill": "#A9CAFF4A", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "k1eE7", - "x": 548, - "y": 926, - "name": "s2g8", - "width": 320, - "height": 18, - "fill": "#A9CAFF52", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "RfD3G", - "x": 548, - "y": 949, - "name": "s2g9", - "width": 320, - "height": 18, - "fill": "#A9CAFF5C", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "rTDyV", - "x": 988, - "y": 765, - "name": "s3g1", - "width": 320, - "height": 18, - "fill": "#7EACFF2A", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "ycMHw", - "x": 988, - "y": 788, - "name": "s3g2", - "width": 320, - "height": 18, - "fill": "#7EACFF30", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "dZvwz", - "x": 988, - "y": 811, - "name": "s3g3", - "width": 320, - "height": 18, - "fill": "#7EACFF36", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "gHMUr", - "x": 988, - "y": 834, - "name": "s3g4", - "width": 320, - "height": 18, - "fill": "#7EACFF3C", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "RxGU1", - "x": 988, - "y": 857, - "name": "s3g5", - "width": 320, - "height": 18, - "fill": "#7EACFF42", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "VfOpU", - "x": 988, - "y": 880, - "name": "s3g6", - "width": 320, - "height": 18, - "fill": "#7EACFF48", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "eGEX5", - "x": 988, - "y": 903, - "name": "s3g7", - "width": 320, - "height": 18, - "fill": "#7EACFF50", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "CzXt5", - "x": 988, - "y": 926, - "name": "s3g8", - "width": 320, - "height": 18, - "fill": "#7EACFF58", - "cornerRadius": 8 - }, - { - "type": "frame", - "id": "LShQc", - "x": 988, - "y": 949, - "name": "s3g9", - "width": 320, - "height": 18, - "fill": "#7EACFF62", - "cornerRadius": 8 - }, - { - "type": "text", - "id": "iDUi3", - "x": 260, - "y": 790, - "name": "heatSemesterOneScores", - "fill": "#F7FBFF", - "content": "75\n78\n80\n83\n85\n88\n89\n96", - "lineHeight": 1.92, - "fontFamily": "Inter", - "fontSize": 12, - "fontWeight": "700" - }, - { - "type": "text", - "id": "NXMI4", - "x": 700, - "y": 767, - "name": "heatSemesterTwoScores", - "fill": "#F7FBFF", - "content": "70\n78\n82\n84\n85\n85\n86\n88\n93", - "lineHeight": 1.92, - "fontFamily": "Inter", - "fontSize": 12, - "fontWeight": "700" - }, - { - "type": "text", - "id": "OBvkP", - "x": 1140, - "y": 767, - "name": "heatSemesterThreeScores", - "fill": "#F7FBFF", - "content": "68\n70\n76\n80\n85\n86\n90\n94\n97", - "lineHeight": 1.92, - "fontFamily": "Inter", - "fontSize": 12, - "fontWeight": "700" - }, - { - "type": "text", - "id": "gjCqt", - "x": 64, - "y": 160, - "name": "schoolQueryTitle", - "fill": "#F8FBFF", - "content": "教务查询", - "fontFamily": "Inter", - "fontSize": 24, - "fontWeight": "700" - }, - { - "type": "text", - "id": "7FFvV", - "x": 452, - "y": 160, - "name": "schoolSummaryTitle", - "fill": "#F8FBFF", - "content": "数据概览", - "fontFamily": "Inter", - "fontSize": 24, - "fontWeight": "700" - }, - { - "type": "text", - "id": "VWyMp", - "x": 998, - "y": 160, - "name": "scheduleDrawerTitle", - "fill": "#F8FBFF", - "content": "课表抽屉", - "fontFamily": "Inter", - "fontSize": 24, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "UA8PT", - "x": 64, - "y": 500, - "name": "queryScheduleBtn", - "width": 122, - "height": 38, - "fill": "#8BB6FF26", - "cornerRadius": 18 - }, - { - "type": "frame", - "id": "CFz1P", - "x": 196, - "y": 500, - "name": "queryGradeBtn", - "width": 122, - "height": 38, - "fill": "#FFFFFF10", - "cornerRadius": 18 - }, - { - "type": "text", - "id": "JQlbq", - "x": 88, - "y": 511, - "name": "queryScheduleBtnText", - "fill": "#FFFFFF", - "content": "查询课表", - "fontFamily": "Inter", - "fontSize": 15, - "fontWeight": "700" - }, - { - "type": "text", - "id": "hm87Z", - "x": 220, - "y": 511, - "name": "queryGradeBtnText", - "fill": "#EAF2FF", - "content": "查询成绩", - "fontFamily": "Inter", - "fontSize": 15, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "nPTud", - "x": 64, - "y": 198, - "name": "schoolQueryDivider", - "width": 290, - "height": 2, - "fill": "#FFFFFF12", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "D9unm", - "x": 452, - "y": 198, - "name": "schoolSummaryDivider", - "width": 438, - "height": 2, - "fill": "#FFFFFF12", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "eOdAB", - "x": 998, - "y": 198, - "name": "schoolDrawerDivider", - "width": 336, - "height": 2, - "fill": "#FFFFFF12", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "AXY3E", - "x": 64, - "y": 738, - "name": "schoolHeatDivider", - "width": 1240, - "height": 2, - "fill": "#FFFFFF12", - "cornerRadius": 999 - } - ] - }, - { - "type": "frame", - "id": "8RufV", - "x": 6240, - "y": 0, - "name": "Games Page", - "clip": true, - "width": 1440, - "height": 1024, - "fill": "#07101D", - "cornerRadius": 28, - "layout": "none", - "children": [ - { - "type": "ellipse", - "id": "1KASD", - "x": 0, - "y": 0, - "name": "gamesGlow", - "fill": "#2761FF22", - "width": 360, - "height": 360 - }, - { - "type": "frame", - "id": "q1nRo", - "x": 24, - "y": 24, - "name": "gamesTopbar", - "width": 1392, - "height": 82, - "fill": "#FFFFFF14", - "cornerRadius": 30 - }, - { - "type": "text", - "id": "aeqVo", - "x": 52, - "y": 52, - "name": "gamesBrand", - "fill": "#F4F8FF", - "content": "YOYUZH.XYZ", - "fontFamily": "Inter", - "fontSize": 28, - "fontWeight": "700" - }, - { - "type": "text", - "id": "iymBV", - "x": 256, - "y": 58, - "name": "gamesSub", - "fill": "#D6E5FF", - "content": "Personal Portal", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "500", - "fontStyle": "italic" - }, - { - "type": "frame", - "id": "hiPke", - "x": 1060, - "y": 46, - "name": "gamesPillOverview", - "width": 92, - "height": 42, - "fill": "#F3F7FF14", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "EQj5C", - "x": 1090, - "y": 58, - "name": "gamesPillOverviewText", - "fill": "#E4EEFF", - "content": "总览", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "MyWwy", - "x": 1160, - "y": 46, - "name": "gamesPillFiles", - "width": 92, - "height": 42, - "fill": "#F3F7FF14", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "UOf3V", - "x": 1190, - "y": 58, - "name": "gamesPillFilesText", - "fill": "#E4EEFF", - "content": "网盘", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "TLp7O", - "x": 1260, - "y": 46, - "name": "gamesPillSchool", - "width": 92, - "height": 42, - "fill": "#F3F7FF14", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "k7phL", - "x": 1290, - "y": 58, - "name": "gamesPillSchoolText", - "fill": "#E4EEFF", - "content": "教务", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "l6uzx", - "x": 1360, - "y": 46, - "name": "gamesPillGames", - "width": 92, - "height": 42, - "fill": "#336EFF", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "A4NIM", - "x": 1390, - "y": 58, - "name": "gamesPillGamesText", - "fill": "#FFFFFF", - "content": "游戏", - "fontFamily": "Inter", - "fontSize": 16, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "lm9ms", - "x": 24, - "y": 126, - "name": "gamesHero", - "width": 1392, - "height": 184, - "fill": "#FFFFFF12", - "cornerRadius": 34 - }, - { - "type": "text", - "id": "e3LGf", - "x": 56, - "y": 168, - "name": "gamesHeroText", - "fill": "#F5F9FF", - "content": "游戏入口\n\n保留轻量试玩与静态资源检查入口,维持与整站一致的毛玻璃语言。", - "lineHeight": 1.75, - "fontFamily": "Inter", - "fontSize": 22, - "fontWeight": "500" - }, - { - "type": "frame", - "id": "JLFbk", - "x": 24, - "y": 360, - "name": "gameRaceCard", - "width": 686, - "height": 540, - "fill": "#FFFFFF12", - "cornerRadius": 36 - }, - { - "type": "text", - "id": "263yu", - "x": 96, - "y": 410, - "name": "gameRaceText", - "fill": "#F5F9FF", - "content": "CAT\n\n\n简单的小猫升级游戏", - "lineHeight": 1.8, - "fontFamily": "Inter", - "fontSize": 22, - "fontWeight": "500" - }, - { - "type": "frame", - "id": "BVPzs", - "x": 96, - "y": 780, - "name": "gameRaceBtn", - "width": 138, - "height": 50, - "fill": "#7CADFF", - "cornerRadius": 26 - }, - { - "type": "text", - "id": "pz1Bw", - "x": 140, - "y": 796, - "name": "gameRaceBtnText", - "fill": "#FFFFFF", - "content": "Launch", - "fontFamily": "Inter", - "fontSize": 18, - "fontWeight": "700" - }, - { - "type": "frame", - "id": "U842S", - "x": 730, - "y": 360, - "name": "gameHtmlRaceCard", - "width": 686, - "height": 540, - "fill": "#FFFFFF12", - "cornerRadius": 36 - }, - { - "type": "text", - "id": "z1EkJ", - "x": 768, - "y": 410, - "name": "gameHtmlRaceText", - "fill": "#F5F9FF", - "textGrowth": "fixed-width-height", - "width": 170, - "height": 183, - "content": "RACE\n\n\n赛车休闲小游戏", - "lineHeight": 1.8, - "fontFamily": "Inter", - "fontSize": 22, - "fontWeight": "500" - }, - { - "type": "frame", - "id": "YHkJk", - "x": 768, - "y": 780, - "name": "gameHtmlRaceBtn", - "width": 138, - "height": 50, - "fill": "#7CADFF", - "cornerRadius": 26 - }, - { - "type": "text", - "id": "d0aBa", - "x": 812, - "y": 796, - "name": "gameHtmlRaceBtnText", - "fill": "#FFFFFF", - "content": "Launch", - "fontFamily": "Inter", - "fontSize": 18, - "fontWeight": "700" - }, - { - "type": "ellipse", - "id": "56h2r", - "x": -80, - "y": 480, - "name": "gamesAccent1", - "fill": "#8CB6FF18", - "width": 260, - "height": 260 - }, - { - "type": "ellipse", - "id": "yddyO", - "x": 1220, - "y": 180, - "name": "gamesAccent2", - "fill": "#B9D4FF14", - "width": 200, - "height": 200 - }, - { - "type": "frame", - "id": "2GTw9", - "x": 40, - "y": 140, - "name": "gamesSheen", - "width": 1348, - "height": 18, - "fill": "#FFFFFF0C", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "kTCMI", - "x": 36, - "y": 34, - "name": "navSpecGames", - "width": 1368, - "height": 10, - "fill": "#FFFFFF08", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "e038r", - "x": 1180, - "y": 168, - "name": "gamesSegment", - "width": 142, - "height": 40, - "fill": "#FFFFFF10", - "cornerRadius": 999 - }, - { - "type": "frame", - "id": "3He2c", - "x": 1184, - "y": 172, - "name": "gamesSegmentActive", - "width": 62, - "height": 32, - "fill": "#FFFFFF18", - "cornerRadius": 999 - }, - { - "type": "text", - "id": "Vnx7C", - "x": 1200, - "y": 181, - "name": "gamesSegmentFeatured", - "fill": "#FFFFFF", - "content": "精选", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "700" - }, - { - "type": "text", - "id": "yBrbG", - "x": 1260, - "y": 181, - "name": "gamesSegmentAll", - "fill": "#DDE9FF", - "content": "全部", - "fontFamily": "Inter", - "fontSize": 14, - "fontWeight": "700" - } - ] - } - ] -} \ No newline at end of file diff --git a/需求文档.md b/需求文档.md deleted file mode 100644 index 2d10b7b..0000000 --- a/需求文档.md +++ /dev/null @@ -1,182 +0,0 @@ ---- -# 文件 1:Yoyuzh_Portal_需求文档.md - -# Yoyuzh Personal Portal 后端需求文档 - -## 项目概述 -该项目为 **yoyuzh.xyz** 的后端系统,提供用户身份认证、个人网盘功能以及重庆大学校园信息接口整合,供前端 Vue3 页面调用。 - -主要功能: -1. 用户身份认证与管理(注册、登录、JWT、密码加密) -2. 个人网盘(文件上传/下载/删除/目录管理/分页列表) -3. 重庆大学校园信息接口(课表、成绩) -4. RESTful API 风格,安全、可扩展 - ---- - -## 技术选型 -| 模块 | 技术/框架 | 说明 | -|------------|---------------------------|--------------------------------| -| 后端框架 | Spring Boot 3.x | Java RESTful 后端快速开发 | -| 数据库 | MySQL / openGauss | 用户、文件、课程信息存储 | -| 安全 | Spring Security + JWT | 身份认证、接口权限控制 | -| 文件存储 | 本地文件系统 / 阿里云 OSS | 网盘文件存储 | -| 构建工具 | Maven | 依赖管理 | -| API 文档 | Swagger / Springdoc | 自动生成接口文档 | -| 日志 | SLF4J + Logback | 日志管理 | - ---- - -## 功能模块 - -### 1. 用户身份认证 -- 注册:`POST /api/auth/register`,加密密码存储,防止重复用户名/邮箱 -- 登录:`POST /api/auth/login`,验证密码并生成 JWT -- JWT 验证:拦截需要权限接口,验证 Token,有效则注入用户信息 -- 获取用户信息:`GET /api/user/profile` - -### 2. 个人网盘 -- 文件上传:`POST /api/files/upload`,文件流 + 路径 -- 文件下载:`GET /api/files/download/{fileId}` -- 文件删除:`DELETE /api/files/{fileId}` -- 文件列表:`GET /api/files/list?path=&page=&size=` -- 目录管理:`POST /api/files/mkdir` - -### 3. 重庆大学校园信息接口 -- 课表查询:`GET /api/cqu/schedule`,学期/学号参数 -- 成绩查询:`GET /api/cqu/grades`,学期/学号参数 -- 实现:调用现有 API,转换统一 JSON 格式 - -### 4. 安全与权限 -- 网盘接口需登录授权 -- 学校信息接口可设置登录访问 -- 文件操作需校验用户身份 - -### 5. 日志与异常 -- SLF4J + Logback 日志 -- 全局异常处理,统一 JSON 错误返回 -- 错误码示例: - - 1000:未知错误 - - 1001:用户未登录 - - 1002:权限不足 - - 1003:文件不存在 - ---- - -## 数据库设计 -### 用户表 (user) -``` -id PK -username VARCHAR -email VARCHAR -password_hash VARCHAR -created_at DATETIME -``` - -### 文件表 (file) -``` -id PK -user_id FK -> user.id -filename VARCHAR -path VARCHAR -size BIGINT -created_at DATETIME -``` - -### 课程表 (course) -``` -id PK -user_id FK -> user.id -course_name VARCHAR -teacher VARCHAR -classroom VARCHAR -day_of_week INT -start_time INT -end_time INT -``` - -### 成绩表 (grade) -``` -id PK -user_id FK -> user.id -course_name VARCHAR -grade FLOAT -semester VARCHAR -``` - ---- - -## 项目结构 -``` -yoyuzh-portal-backend -│ -├─ src/main/java/com/yoyuzh -│ ├─ auth # 用户注册/登录/JWT -│ ├─ files # 网盘管理 -│ ├─ cqu # 校园信息 API -│ ├─ common # 全局异常处理/工具类 -│ └─ config # Spring Security / JWT / Swagger 配置 -│ -├─ src/main/resources -│ ├─ application.yml # 数据库/OSS/JWT配置 -│ └─ logback.xml # 日志配置 -``` - ---- - -# 文件 2:Yoyuzh_Portal_实现细则.md - -# Yoyuzh Personal Portal 后端实现细则 - -## 1. 用户认证细则 -- 密码使用 BCrypt 加密存储 -- JWT 有效期 1 天,可刷新 -- 注册接口验证邮箱和用户名唯一性 -- 登录接口返回 Token + 用户基础信息 -- 所有需要权限接口通过 JWT Filter 校验 -- 异常统一抛出,JSON 返回 - -## 2. 网盘实现细则 -- 上传文件保存路径:`/storage/{userId}/{目录路径}/文件名` -- 文件大小限制:默认 50MB,可在配置文件调整 -- 文件列表分页:前端请求 `page` 和 `size` -- 删除文件时先校验用户身份,确保只能删除自己上传的文件 -- 支持创建多级目录,目录路径在数据库中记录 - -## 3. 重庆大学接口细则 -- 调用现有 API 获取课表和成绩 -- 统一 JSON 输出: -```json -{ - "code": 0, - "msg": "success", - "data": [...] -} -``` -- 若用户未登录或 Token 无效,可返回 1001 错误码 -- 前端可通过学期参数过滤数据 - -## 4. 安全与权限细则 -- Spring Security 配置: - - `/api/auth/**` 和 Swagger 接口无需认证 - - `/api/files/**` 需要认证 - - `/api/cqu/**` 可选认证 -- JWT Token 通过 Authorization Header 传递:`Bearer {token}` - -## 5. 日志与异常处理 -- 所有接口调用记录 info 日志 -- 异常统一在 `@ControllerAdvice` 中处理 -- 返回 JSON 格式: -```json -{ - "code": 1000, - "msg": "error message" -} -``` - -## 6. 数据库细则 -- 用户表:唯一索引 username、email -- 文件表:user_id + path + filename 组合唯一 -- 课程表、成绩表与用户表关联,保证查询方便 -- 建议为文件表、课程表添加创建时间索引,加快分页查询 -