mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 11:26:25 +00:00
Merge branch 'main' of https://github.com/hwanny1128/HGZero
This commit is contained in:
commit
ce2dfab9f9
482
ai/logs/ai.log
482
ai/logs/ai.log
@ -296,3 +296,485 @@ This generated password is for development use only. Your security configuration
|
|||||||
2025-10-23 16:27:13 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
|
2025-10-23 16:27:13 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
|
||||||
2025-10-23 16:27:13 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
|
2025-10-23 16:27:13 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
|
||||||
2025-10-23 16:27:13 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.
|
2025-10-23 16:27:13 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.
|
||||||
|
2025-10-23 17:10:12 [main] INFO com.unicorn.hgzero.ai.AiApplication - Starting AiApplication using Java 23.0.2 with PID 43825 (/Users/jominseo/HGZero/ai/build/classes/java/main started by jominseo in /Users/jominseo/HGZero/ai)
|
||||||
|
2025-10-23 17:10:12 [main] DEBUG com.unicorn.hgzero.ai.AiApplication - Running with Spring Boot v3.3.0, Spring v6.1.8
|
||||||
|
2025-10-23 17:10:12 [main] INFO com.unicorn.hgzero.ai.AiApplication - The following 1 profile is active: "dev"
|
||||||
|
2025-10-23 17:10:12 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
|
||||||
|
2025-10-23 17:10:12 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
|
||||||
|
2025-10-23 17:10:12 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 3 ms. Found 0 JPA repository interfaces.
|
||||||
|
2025-10-23 17:10:12 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
|
||||||
|
2025-10-23 17:10:12 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
|
||||||
|
2025-10-23 17:10:12 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 0 ms. Found 0 Redis repository interfaces.
|
||||||
|
2025-10-23 17:10:13 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8083 (http)
|
||||||
|
2025-10-23 17:10:13 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
|
||||||
|
2025-10-23 17:10:13 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.24]
|
||||||
|
2025-10-23 17:10:13 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
|
||||||
|
2025-10-23 17:10:13 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 668 ms
|
||||||
|
2025-10-23 17:10:13 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
|
||||||
|
2025-10-23 17:10:13 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.2.Final
|
||||||
|
2025-10-23 17:10:13 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@66716959
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@66716959
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@66716959
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@34e07e65
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@34e07e65
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@7ca0166c
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@7ca0166c
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@1dcad16f
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@1dcad16f
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@701c482e
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@701c482e
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@701c482e
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@4738131e
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@4738131e
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@4738131e
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@3b576ee3
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@3b576ee3
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@705d914f
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@6212ea52
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@6212ea52
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@65b5b5ed
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@6595ffce
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@795eddda
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@795eddda
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@795eddda
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@c6bf8d9
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@c6bf8d9
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@c6bf8d9
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@44392e64
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@44392e64
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@44392e64
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@e18d2a2
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@e18d2a2
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@e18d2a2
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@1a77eb6
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@1a77eb6
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@1a77eb6
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@52d9f36b
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@52d9f36b
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@5f9ebd5a
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@5f9ebd5a
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@175bf9c9
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@175bf9c9
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@175bf9c9
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@2db3675a
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@306c9b2c
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@306c9b2c
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@1ab28416
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@52efb338
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@52efb338
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@52efb338
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@64508788
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@30b1c5d5
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@3e2d65e1
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@1174676f
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@1174676f
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@71f8ce0e
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@71f8ce0e
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@4fd92289
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@1a8e44fe
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@287317df
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@1fcc3461
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@1987807b
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@71469e01
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@41bbb219
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@41bbb219
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@3f2ae973
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@3f2ae973
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@1a8b22b5
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@1a8b22b5
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@5f781173
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@5f781173
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@43cf5bff
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@43cf5bff
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@2b464384
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@681b42d3
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@77f7352a
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@77f7352a
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@4ede8888
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@571db8b4
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@65a2755e
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@2b3242a5
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@2b3242a5
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@11120583
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@2bf0c70d
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@5d8e4fa8
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@5d8e4fa8
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@649009d6
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@649009d6
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@652f26da
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@652f26da
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@652f26da
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@484a5ddd
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@484a5ddd
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@484a5ddd
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@6796a873
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@3acc3ee
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@1f293cb7
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@1f293cb7
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@5972e3a
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@5972e3a
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@5972e3a
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@5790cbcb
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@32c6d164
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@645c9f0f
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@645c9f0f
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@58068b40
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@58068b40
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@58068b40
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@999cd18
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@999cd18
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@dd060be
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@dd060be
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@df432ec
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@df432ec
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@6144e499
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@6144e499
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@26f204a4
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@26f204a4
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@28295554
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@4e671ef
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@2aac6fa7
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@2aac6fa7
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@2358443e
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@25e796fe
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@29ba63f0
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@4822ab4d
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@516b84d1
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@1ad1f167
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@608eb42e
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@3d2b13b1
|
||||||
|
2025-10-23 17:10:13 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@30eb55c9
|
||||||
|
2025-10-23 17:10:13 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
|
||||||
|
2025-10-23 17:10:13 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
|
||||||
|
2025-10-23 17:10:14 [main] WARN o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata
|
||||||
|
java.lang.NullPointerException: Cannot invoke "org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(java.sql.SQLException, String)" because the return value of "org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.sqlExceptionHelper()" is null
|
||||||
|
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:116)
|
||||||
|
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:290)
|
||||||
|
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:123)
|
||||||
|
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:77)
|
||||||
|
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130)
|
||||||
|
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
|
||||||
|
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238)
|
||||||
|
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215)
|
||||||
|
at org.hibernate.boot.model.relational.Database.<init>(Database.java:45)
|
||||||
|
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:221)
|
||||||
|
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:189)
|
||||||
|
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:171)
|
||||||
|
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1431)
|
||||||
|
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1502)
|
||||||
|
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75)
|
||||||
|
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390)
|
||||||
|
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
|
||||||
|
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
|
||||||
|
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1835)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
|
||||||
|
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)
|
||||||
|
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
|
||||||
|
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335)
|
||||||
|
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205)
|
||||||
|
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:952)
|
||||||
|
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
|
||||||
|
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
|
||||||
|
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
|
||||||
|
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
|
||||||
|
at org.springframework.boot.SpringApplication.run(SpringApplication.java:335)
|
||||||
|
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363)
|
||||||
|
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352)
|
||||||
|
at com.unicorn.hgzero.ai.AiApplication.main(AiApplication.java:20)
|
||||||
|
2025-10-23 17:10:14 [main] ERROR o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)
|
||||||
|
2025-10-23 17:10:14 [main] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)
|
||||||
|
2025-10-23 17:10:14 [main] INFO o.a.catalina.core.StandardService - Stopping service [Tomcat]
|
||||||
|
2025-10-23 17:10:14 [main] INFO o.s.b.a.l.ConditionEvaluationReportLogger -
|
||||||
|
|
||||||
|
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
|
||||||
|
2025-10-23 17:10:14 [main] ERROR o.s.boot.SpringApplication - Application run failed
|
||||||
|
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
|
||||||
|
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)
|
||||||
|
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
|
||||||
|
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335)
|
||||||
|
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205)
|
||||||
|
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:952)
|
||||||
|
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
|
||||||
|
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
|
||||||
|
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
|
||||||
|
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
|
||||||
|
at org.springframework.boot.SpringApplication.run(SpringApplication.java:335)
|
||||||
|
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363)
|
||||||
|
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352)
|
||||||
|
at com.unicorn.hgzero.ai.AiApplication.main(AiApplication.java:20)
|
||||||
|
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)
|
||||||
|
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:276)
|
||||||
|
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238)
|
||||||
|
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215)
|
||||||
|
at org.hibernate.boot.model.relational.Database.<init>(Database.java:45)
|
||||||
|
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:221)
|
||||||
|
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:189)
|
||||||
|
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:171)
|
||||||
|
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1431)
|
||||||
|
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1502)
|
||||||
|
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75)
|
||||||
|
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390)
|
||||||
|
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
|
||||||
|
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
|
||||||
|
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1835)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784)
|
||||||
|
... 15 common frames omitted
|
||||||
|
Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)
|
||||||
|
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:191)
|
||||||
|
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:87)
|
||||||
|
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentWithDefaults(JdbcEnvironmentInitiator.java:152)
|
||||||
|
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:362)
|
||||||
|
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:123)
|
||||||
|
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:77)
|
||||||
|
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130)
|
||||||
|
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
|
||||||
|
... 30 common frames omitted
|
||||||
|
2025-10-23 17:38:09 [main] INFO com.unicorn.hgzero.ai.AiApplication - Starting AiApplication using Java 23.0.2 with PID 49971 (/Users/jominseo/HGZero/ai/build/classes/java/main started by jominseo in /Users/jominseo/HGZero/ai)
|
||||||
|
2025-10-23 17:38:09 [main] DEBUG com.unicorn.hgzero.ai.AiApplication - Running with Spring Boot v3.3.0, Spring v6.1.8
|
||||||
|
2025-10-23 17:38:09 [main] INFO com.unicorn.hgzero.ai.AiApplication - The following 1 profile is active: "dev"
|
||||||
|
2025-10-23 17:38:09 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
|
||||||
|
2025-10-23 17:38:09 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
|
||||||
|
2025-10-23 17:38:09 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 4 ms. Found 0 JPA repository interfaces.
|
||||||
|
2025-10-23 17:38:09 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
|
||||||
|
2025-10-23 17:38:09 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
|
||||||
|
2025-10-23 17:38:09 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 0 ms. Found 0 Redis repository interfaces.
|
||||||
|
2025-10-23 17:38:09 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8083 (http)
|
||||||
|
2025-10-23 17:38:09 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
|
||||||
|
2025-10-23 17:38:09 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.24]
|
||||||
|
2025-10-23 17:38:09 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
|
||||||
|
2025-10-23 17:38:09 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 679 ms
|
||||||
|
2025-10-23 17:38:10 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
|
||||||
|
2025-10-23 17:38:10 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.2.Final
|
||||||
|
2025-10-23 17:38:10 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@306c9b2c
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@306c9b2c
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@306c9b2c
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@1ab28416
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@1ab28416
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@52efb338
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@52efb338
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@64508788
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@64508788
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@30b1c5d5
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@30b1c5d5
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@30b1c5d5
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@3e2d65e1
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@3e2d65e1
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@3e2d65e1
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@1174676f
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@1174676f
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@71f8ce0e
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@4fd92289
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@4fd92289
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@1a8e44fe
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@287317df
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@1fcc3461
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@1fcc3461
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@1fcc3461
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@1987807b
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@1987807b
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@1987807b
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@71469e01
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@71469e01
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@71469e01
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@41bbb219
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@41bbb219
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@41bbb219
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@3f2ae973
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@3f2ae973
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@3f2ae973
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@1a8b22b5
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@1a8b22b5
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@5f781173
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@5f781173
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@43cf5bff
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@43cf5bff
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@43cf5bff
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@2b464384
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@681b42d3
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@681b42d3
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@77f7352a
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@4ede8888
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@4ede8888
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@4ede8888
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@571db8b4
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@65a2755e
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@2b3242a5
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@11120583
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@11120583
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@2bf0c70d
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@2bf0c70d
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@5d8e4fa8
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@649009d6
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@652f26da
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@484a5ddd
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@6796a873
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@3acc3ee
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@1f293cb7
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@1f293cb7
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@5972e3a
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@5972e3a
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@5790cbcb
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@5790cbcb
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@32c6d164
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@32c6d164
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@645c9f0f
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@645c9f0f
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@58068b40
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@999cd18
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@dd060be
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@dd060be
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@df432ec
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@6144e499
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@26f204a4
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@28295554
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@28295554
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@4e671ef
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@42403dc6
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@74a1d60e
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@74a1d60e
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@16c0be3b
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@16c0be3b
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@219edc05
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@219edc05
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@219edc05
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@62f37bfd
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@62f37bfd
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@62f37bfd
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@1818d00b
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@b3a8455
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@5c930fc3
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@5c930fc3
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@25c6ab3f
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@25c6ab3f
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@25c6ab3f
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@7b80af04
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@2447940d
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@60ee7a51
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@60ee7a51
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@70e1aa20
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@70e1aa20
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@70e1aa20
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@e67d3b7
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@e67d3b7
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@1618c98a
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@1618c98a
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@5b715ea
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@5b715ea
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@787a0fd6
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@787a0fd6
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@48b09105
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@48b09105
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@18b45500
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@25110bb9
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@30eb55c9
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@30eb55c9
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@5badeda0
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@56a9a7b5
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@338270ea
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@7f64bd7
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@1c79d093
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@746fd19b
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@54caeadc
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@61d7bb61
|
||||||
|
2025-10-23 17:38:10 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@33f81280
|
||||||
|
2025-10-23 17:38:10 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
|
||||||
|
2025-10-23 17:38:10 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
|
||||||
|
2025-10-23 17:38:11 [main] WARN o.h.e.j.e.i.JdbcEnvironmentInitiator - HHH000342: Could not obtain connection to query metadata
|
||||||
|
java.lang.NullPointerException: Cannot invoke "org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(java.sql.SQLException, String)" because the return value of "org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.sqlExceptionHelper()" is null
|
||||||
|
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcIsolationDelegate.delegateWork(JdbcIsolationDelegate.java:116)
|
||||||
|
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:290)
|
||||||
|
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:123)
|
||||||
|
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:77)
|
||||||
|
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130)
|
||||||
|
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
|
||||||
|
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238)
|
||||||
|
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215)
|
||||||
|
at org.hibernate.boot.model.relational.Database.<init>(Database.java:45)
|
||||||
|
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:221)
|
||||||
|
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:189)
|
||||||
|
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:171)
|
||||||
|
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1431)
|
||||||
|
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1502)
|
||||||
|
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75)
|
||||||
|
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390)
|
||||||
|
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
|
||||||
|
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
|
||||||
|
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1835)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
|
||||||
|
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)
|
||||||
|
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
|
||||||
|
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335)
|
||||||
|
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205)
|
||||||
|
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:952)
|
||||||
|
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
|
||||||
|
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
|
||||||
|
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
|
||||||
|
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
|
||||||
|
at org.springframework.boot.SpringApplication.run(SpringApplication.java:335)
|
||||||
|
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363)
|
||||||
|
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352)
|
||||||
|
at com.unicorn.hgzero.ai.AiApplication.main(AiApplication.java:20)
|
||||||
|
2025-10-23 17:38:11 [main] ERROR o.s.o.j.LocalContainerEntityManagerFactoryBean - Failed to initialize JPA EntityManagerFactory: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)
|
||||||
|
2025-10-23 17:38:11 [main] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)
|
||||||
|
2025-10-23 17:38:11 [main] INFO o.a.catalina.core.StandardService - Stopping service [Tomcat]
|
||||||
|
2025-10-23 17:38:11 [main] INFO o.s.b.a.l.ConditionEvaluationReportLogger -
|
||||||
|
|
||||||
|
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
|
||||||
|
2025-10-23 17:38:11 [main] ERROR o.s.boot.SpringApplication - Application run failed
|
||||||
|
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
|
||||||
|
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)
|
||||||
|
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
|
||||||
|
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335)
|
||||||
|
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205)
|
||||||
|
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:952)
|
||||||
|
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:624)
|
||||||
|
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
|
||||||
|
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
|
||||||
|
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
|
||||||
|
at org.springframework.boot.SpringApplication.run(SpringApplication.java:335)
|
||||||
|
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363)
|
||||||
|
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352)
|
||||||
|
at com.unicorn.hgzero.ai.AiApplication.main(AiApplication.java:20)
|
||||||
|
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)
|
||||||
|
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:276)
|
||||||
|
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:238)
|
||||||
|
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:215)
|
||||||
|
at org.hibernate.boot.model.relational.Database.<init>(Database.java:45)
|
||||||
|
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:221)
|
||||||
|
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:189)
|
||||||
|
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:171)
|
||||||
|
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1431)
|
||||||
|
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1502)
|
||||||
|
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75)
|
||||||
|
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390)
|
||||||
|
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
|
||||||
|
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
|
||||||
|
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1835)
|
||||||
|
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1784)
|
||||||
|
... 15 common frames omitted
|
||||||
|
Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)
|
||||||
|
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:191)
|
||||||
|
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:87)
|
||||||
|
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentWithDefaults(JdbcEnvironmentInitiator.java:152)
|
||||||
|
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:362)
|
||||||
|
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:123)
|
||||||
|
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:77)
|
||||||
|
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:130)
|
||||||
|
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
|
||||||
|
... 30 common frames omitted
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -7,14 +7,12 @@ info:
|
|||||||
**핵심 기능:**
|
**핵심 기능:**
|
||||||
- 음성 녹음 시작/중지 관리
|
- 음성 녹음 시작/중지 관리
|
||||||
- 실시간 음성-텍스트 변환 (스트리밍)
|
- 실시간 음성-텍스트 변환 (스트리밍)
|
||||||
- 배치 음성-텍스트 변환
|
|
||||||
- 화자 식별 및 관리
|
|
||||||
- Azure Speech Service 통합
|
- Azure Speech Service 통합
|
||||||
|
|
||||||
**차별화 포인트:**
|
**차별화 포인트:**
|
||||||
- 기본 기능 (Hygiene Factor) - 경쟁사 대부분 제공
|
- 기본 기능 (Hygiene Factor) - 경쟁사 대부분 제공
|
||||||
- 실시간 스트리밍 처리로 즉각적인 자막 제공
|
- 실시간 스트리밍 처리로 즉각적인 자막 제공
|
||||||
- 화자 자동 식별 (90% 이상 정확도)
|
- **단순화**: 배치 처리 및 화자 식별 제거, 실시간 전용 기능
|
||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
contact:
|
contact:
|
||||||
name: STT Service Team
|
name: STT Service Team
|
||||||
@ -25,7 +23,7 @@ servers:
|
|||||||
description: Production Server
|
description: Production Server
|
||||||
- url: https://dev-api.example.com/stt/v1
|
- url: https://dev-api.example.com/stt/v1
|
||||||
description: Development Server
|
description: Development Server
|
||||||
- url: http://localhost:8083/api/v1
|
- url: http://localhost:8084/api/v1
|
||||||
description: Local Development Server
|
description: Local Development Server
|
||||||
|
|
||||||
tags:
|
tags:
|
||||||
@ -33,8 +31,6 @@ tags:
|
|||||||
description: 음성 녹음 관리 API
|
description: 음성 녹음 관리 API
|
||||||
- name: Transcription
|
- name: Transcription
|
||||||
description: 음성-텍스트 변환 API
|
description: 음성-텍스트 변환 API
|
||||||
- name: Speaker
|
|
||||||
description: 화자 식별 및 관리 API
|
|
||||||
|
|
||||||
paths:
|
paths:
|
||||||
/recordings/prepare:
|
/recordings/prepare:
|
||||||
@ -50,7 +46,7 @@ paths:
|
|||||||
2. DB에 녹음 정보 생성
|
2. DB에 녹음 정보 생성
|
||||||
3. Azure Speech 인식기 초기화
|
3. Azure Speech 인식기 초기화
|
||||||
4. Blob Storage 저장 경로 생성
|
4. Blob Storage 저장 경로 생성
|
||||||
5. RecordingStarted 이벤트 발행
|
5. RecordingStarted 이벤트 발행 (Kafka)
|
||||||
operationId: prepareRecording
|
operationId: prepareRecording
|
||||||
x-user-story: UFR-STT-010
|
x-user-story: UFR-STT-010
|
||||||
x-controller: RecordingController
|
x-controller: RecordingController
|
||||||
@ -243,15 +239,14 @@ paths:
|
|||||||
**처리 흐름:**
|
**처리 흐름:**
|
||||||
1. 음성 데이터 스트림 수신
|
1. 음성 데이터 스트림 수신
|
||||||
2. Azure Speech Service 실시간 인식
|
2. Azure Speech Service 실시간 인식
|
||||||
3. 화자 식별
|
3. 신뢰도 검증 (70% threshold)
|
||||||
4. 신뢰도 검증 (70% threshold)
|
4. DB에 세그먼트 저장
|
||||||
5. DB에 세그먼트 저장
|
5. TranscriptSegmentReady 이벤트 발행 (Kafka)
|
||||||
6. TranscriptSegmentReady 이벤트 발행
|
6. WebSocket으로 실시간 자막 전송
|
||||||
7. WebSocket으로 실시간 자막 전송
|
|
||||||
|
|
||||||
**성능:**
|
**성능:**
|
||||||
- 실시간 인식 지연: < 1초
|
- 실시간 인식 지연: < 1초
|
||||||
- 처리 시간: 1-4초
|
- 처리 시간: 1-3초
|
||||||
operationId: streamTranscription
|
operationId: streamTranscription
|
||||||
x-user-story: UFR-STT-020
|
x-user-story: UFR-STT-020
|
||||||
x-controller: TranscriptController
|
x-controller: TranscriptController
|
||||||
@ -277,8 +272,6 @@ paths:
|
|||||||
transcriptId: "TRS-SEG-001"
|
transcriptId: "TRS-SEG-001"
|
||||||
recordingId: "REC-20250123-001"
|
recordingId: "REC-20250123-001"
|
||||||
text: "안녕하세요, 오늘 회의를 시작하겠습니다."
|
text: "안녕하세요, 오늘 회의를 시작하겠습니다."
|
||||||
speakerId: "SPK-001"
|
|
||||||
speakerName: "김철수"
|
|
||||||
timestamp: 1234567890
|
timestamp: 1234567890
|
||||||
duration: 3.5
|
duration: 3.5
|
||||||
confidence: 0.92
|
confidence: 0.92
|
||||||
@ -290,94 +283,6 @@ paths:
|
|||||||
security:
|
security:
|
||||||
- BearerAuth: []
|
- BearerAuth: []
|
||||||
|
|
||||||
/transcripts/batch:
|
|
||||||
post:
|
|
||||||
tags:
|
|
||||||
- Transcription
|
|
||||||
summary: 배치 음성-텍스트 변환
|
|
||||||
description: |
|
|
||||||
전체 오디오 파일을 배치로 변환 (비동기 처리)
|
|
||||||
|
|
||||||
**처리 흐름:**
|
|
||||||
1. 전체 오디오 파일 업로드
|
|
||||||
2. Azure Batch Transcription Job 생성
|
|
||||||
3. 비동기 처리 시작
|
|
||||||
4. Job ID 반환 (202 Accepted)
|
|
||||||
5. 처리 완료 시 Callback으로 결과 수신
|
|
||||||
|
|
||||||
**처리 시간:**
|
|
||||||
- 파일 업로드: 1-2초
|
|
||||||
- Azure 배치 처리: 5-30초 (파일 크기 따라)
|
|
||||||
- 총 처리 시간: 7-33초
|
|
||||||
operationId: batchTranscription
|
|
||||||
x-user-story: UFR-STT-020
|
|
||||||
x-controller: TranscriptController
|
|
||||||
requestBody:
|
|
||||||
required: true
|
|
||||||
content:
|
|
||||||
multipart/form-data:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/BatchTranscriptionRequest'
|
|
||||||
responses:
|
|
||||||
'202':
|
|
||||||
description: 배치 작업 접수됨
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/BatchTranscriptionResponse'
|
|
||||||
example:
|
|
||||||
jobId: "JOB-20250123-001"
|
|
||||||
recordingId: "REC-20250123-001"
|
|
||||||
status: "PROCESSING"
|
|
||||||
estimatedCompletionTime: "2025-01-23T10:31:00Z"
|
|
||||||
callbackUrl: "https://api.example.com/stt/v1/transcripts/callback"
|
|
||||||
'400':
|
|
||||||
$ref: '#/components/responses/BadRequest'
|
|
||||||
'500':
|
|
||||||
$ref: '#/components/responses/InternalServerError'
|
|
||||||
security:
|
|
||||||
- BearerAuth: []
|
|
||||||
|
|
||||||
/transcripts/callback:
|
|
||||||
post:
|
|
||||||
tags:
|
|
||||||
- Transcription
|
|
||||||
summary: 배치 변환 완료 콜백
|
|
||||||
description: |
|
|
||||||
Azure Speech Service로부터 배치 변환 완료 콜백 수신
|
|
||||||
|
|
||||||
**처리 흐름:**
|
|
||||||
1. 배치 결과 수신
|
|
||||||
2. 세그먼트별 DB 저장
|
|
||||||
3. 전체 텍스트 병합
|
|
||||||
4. TranscriptionCompleted 이벤트 발행
|
|
||||||
operationId: batchTranscriptionCallback
|
|
||||||
x-user-story: UFR-STT-020
|
|
||||||
x-controller: TranscriptController
|
|
||||||
requestBody:
|
|
||||||
required: true
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/BatchCallbackRequest'
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: 콜백 처리 성공
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/TranscriptionCompleteResponse'
|
|
||||||
example:
|
|
||||||
jobId: "JOB-20250123-001"
|
|
||||||
recordingId: "REC-20250123-001"
|
|
||||||
status: "COMPLETED"
|
|
||||||
segmentCount: 120
|
|
||||||
totalDuration: 1800
|
|
||||||
averageConfidence: 0.88
|
|
||||||
'400':
|
|
||||||
$ref: '#/components/responses/BadRequest'
|
|
||||||
'500':
|
|
||||||
$ref: '#/components/responses/InternalServerError'
|
|
||||||
|
|
||||||
/transcripts/{recordingId}:
|
/transcripts/{recordingId}:
|
||||||
get:
|
get:
|
||||||
@ -389,7 +294,7 @@ paths:
|
|||||||
|
|
||||||
**응답 데이터:**
|
**응답 데이터:**
|
||||||
- 전체 텍스트
|
- 전체 텍스트
|
||||||
- 화자별 세그먼트 목록
|
- 세그먼트 목록
|
||||||
- 타임스탬프 정보
|
- 타임스탬프 정보
|
||||||
- 신뢰도 점수
|
- 신뢰도 점수
|
||||||
operationId: getTranscription
|
operationId: getTranscription
|
||||||
@ -404,13 +309,6 @@ paths:
|
|||||||
schema:
|
schema:
|
||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
default: false
|
||||||
- name: speakerId
|
|
||||||
in: query
|
|
||||||
description: 특정 화자의 발언만 필터링
|
|
||||||
required: false
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
example: "SPK-001"
|
|
||||||
responses:
|
responses:
|
||||||
'200':
|
'200':
|
||||||
description: 변환 텍스트 조회 성공
|
description: 변환 텍스트 조회 성공
|
||||||
@ -420,16 +318,13 @@ paths:
|
|||||||
$ref: '#/components/schemas/TranscriptionResponse'
|
$ref: '#/components/schemas/TranscriptionResponse'
|
||||||
example:
|
example:
|
||||||
recordingId: "REC-20250123-001"
|
recordingId: "REC-20250123-001"
|
||||||
fullText: "김철수: 안녕하세요...\n이영희: 네, 안녕하세요..."
|
fullText: "안녕하세요, 오늘 회의를 시작하겠습니다..."
|
||||||
segmentCount: 120
|
segmentCount: 120
|
||||||
totalDuration: 1800
|
totalDuration: 1800
|
||||||
averageConfidence: 0.88
|
averageConfidence: 0.88
|
||||||
speakerCount: 3
|
|
||||||
segments:
|
segments:
|
||||||
- transcriptId: "TRS-SEG-001"
|
- transcriptId: "TRS-SEG-001"
|
||||||
text: "안녕하세요, 오늘 회의를 시작하겠습니다."
|
text: "안녕하세요, 오늘 회의를 시작하겠습니다."
|
||||||
speakerId: "SPK-001"
|
|
||||||
speakerName: "김철수"
|
|
||||||
timestamp: 0
|
timestamp: 0
|
||||||
duration: 3.5
|
duration: 3.5
|
||||||
confidence: 0.92
|
confidence: 0.92
|
||||||
@ -440,179 +335,6 @@ paths:
|
|||||||
security:
|
security:
|
||||||
- BearerAuth: []
|
- BearerAuth: []
|
||||||
|
|
||||||
/speakers/identify:
|
|
||||||
post:
|
|
||||||
tags:
|
|
||||||
- Speaker
|
|
||||||
summary: 화자 식별
|
|
||||||
description: |
|
|
||||||
음성 데이터로부터 화자 식별
|
|
||||||
|
|
||||||
**처리 흐름:**
|
|
||||||
1. Voice signature 생성
|
|
||||||
2. 기존 프로필과 매칭
|
|
||||||
3. 신규 화자 자동 등록
|
|
||||||
4. 화자 정보 반환
|
|
||||||
|
|
||||||
**정확도:**
|
|
||||||
- 화자 식별 정확도: > 90%
|
|
||||||
- 처리 시간: ~300ms
|
|
||||||
operationId: identifySpeaker
|
|
||||||
x-user-story: UFR-STT-010
|
|
||||||
x-controller: SpeakerController
|
|
||||||
requestBody:
|
|
||||||
required: true
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/IdentifySpeakerRequest'
|
|
||||||
example:
|
|
||||||
recordingId: "REC-20250123-001"
|
|
||||||
audioFrame: "base64_encoded_audio_frame"
|
|
||||||
timestamp: 1234567890
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: 화자 식별 성공
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/SpeakerIdentificationResponse'
|
|
||||||
example:
|
|
||||||
speakerId: "SPK-001"
|
|
||||||
speakerName: "김철수"
|
|
||||||
confidence: 0.95
|
|
||||||
isNewSpeaker: false
|
|
||||||
profileId: "PROFILE-12345"
|
|
||||||
'400':
|
|
||||||
$ref: '#/components/responses/BadRequest'
|
|
||||||
'500':
|
|
||||||
$ref: '#/components/responses/InternalServerError'
|
|
||||||
security:
|
|
||||||
- BearerAuth: []
|
|
||||||
|
|
||||||
/speakers/{speakerId}:
|
|
||||||
get:
|
|
||||||
tags:
|
|
||||||
- Speaker
|
|
||||||
summary: 화자 정보 조회
|
|
||||||
description: 특정 화자의 상세 정보 조회
|
|
||||||
operationId: getSpeaker
|
|
||||||
x-user-story: UFR-STT-010
|
|
||||||
x-controller: SpeakerController
|
|
||||||
parameters:
|
|
||||||
- name: speakerId
|
|
||||||
in: path
|
|
||||||
description: 화자 ID
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
example: "SPK-001"
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: 화자 정보 조회 성공
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/SpeakerDetailResponse'
|
|
||||||
example:
|
|
||||||
speakerId: "SPK-001"
|
|
||||||
speakerName: "김철수"
|
|
||||||
profileId: "PROFILE-12345"
|
|
||||||
totalSegments: 45
|
|
||||||
totalDuration: 450
|
|
||||||
averageConfidence: 0.92
|
|
||||||
firstAppeared: "2025-01-23T10:30:15Z"
|
|
||||||
lastAppeared: "2025-01-23T11:00:00Z"
|
|
||||||
'404':
|
|
||||||
$ref: '#/components/responses/NotFound'
|
|
||||||
'500':
|
|
||||||
$ref: '#/components/responses/InternalServerError'
|
|
||||||
security:
|
|
||||||
- BearerAuth: []
|
|
||||||
|
|
||||||
put:
|
|
||||||
tags:
|
|
||||||
- Speaker
|
|
||||||
summary: 화자 정보 업데이트
|
|
||||||
description: 화자 이름 등 정보 수정
|
|
||||||
operationId: updateSpeaker
|
|
||||||
x-user-story: UFR-STT-010
|
|
||||||
x-controller: SpeakerController
|
|
||||||
parameters:
|
|
||||||
- name: speakerId
|
|
||||||
in: path
|
|
||||||
description: 화자 ID
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
example: "SPK-001"
|
|
||||||
requestBody:
|
|
||||||
required: true
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/UpdateSpeakerRequest'
|
|
||||||
example:
|
|
||||||
speakerName: "김철수 팀장"
|
|
||||||
userId: "USER-123"
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: 화자 정보 업데이트 성공
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/SpeakerDetailResponse'
|
|
||||||
'404':
|
|
||||||
$ref: '#/components/responses/NotFound'
|
|
||||||
'500':
|
|
||||||
$ref: '#/components/responses/InternalServerError'
|
|
||||||
security:
|
|
||||||
- BearerAuth: []
|
|
||||||
|
|
||||||
/recordings/{recordingId}/speakers:
|
|
||||||
get:
|
|
||||||
tags:
|
|
||||||
- Speaker
|
|
||||||
summary: 녹음의 화자 목록 조회
|
|
||||||
description: 특정 녹음에 참여한 모든 화자 목록 조회
|
|
||||||
operationId: getRecordingSpeakers
|
|
||||||
x-user-story: UFR-STT-010
|
|
||||||
x-controller: SpeakerController
|
|
||||||
parameters:
|
|
||||||
- $ref: '#/components/parameters/RecordingIdParam'
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: 화자 목록 조회 성공
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/SpeakerListResponse'
|
|
||||||
example:
|
|
||||||
recordingId: "REC-20250123-001"
|
|
||||||
speakerCount: 3
|
|
||||||
speakers:
|
|
||||||
- speakerId: "SPK-001"
|
|
||||||
speakerName: "김철수"
|
|
||||||
segmentCount: 45
|
|
||||||
totalDuration: 450
|
|
||||||
speakingRatio: 0.45
|
|
||||||
- speakerId: "SPK-002"
|
|
||||||
speakerName: "이영희"
|
|
||||||
segmentCount: 38
|
|
||||||
totalDuration: 380
|
|
||||||
speakingRatio: 0.38
|
|
||||||
- speakerId: "SPK-003"
|
|
||||||
speakerName: "박민수"
|
|
||||||
segmentCount: 17
|
|
||||||
totalDuration: 170
|
|
||||||
speakingRatio: 0.17
|
|
||||||
'404':
|
|
||||||
$ref: '#/components/responses/NotFound'
|
|
||||||
'500':
|
|
||||||
$ref: '#/components/responses/InternalServerError'
|
|
||||||
security:
|
|
||||||
- BearerAuth: []
|
|
||||||
|
|
||||||
components:
|
components:
|
||||||
securitySchemes:
|
securitySchemes:
|
||||||
BearerAuth:
|
BearerAuth:
|
||||||
@ -657,7 +379,7 @@ components:
|
|||||||
example: "ko-KR"
|
example: "ko-KR"
|
||||||
attendeeCount:
|
attendeeCount:
|
||||||
type: integer
|
type: integer
|
||||||
description: 참석자 수 (화자 식별 최적화용)
|
description: 참석자 수
|
||||||
minimum: 1
|
minimum: 1
|
||||||
maximum: 50
|
maximum: 50
|
||||||
example: 5
|
example: 5
|
||||||
@ -809,10 +531,6 @@ components:
|
|||||||
type: integer
|
type: integer
|
||||||
description: 녹음 시간 (초)
|
description: 녹음 시간 (초)
|
||||||
example: 300
|
example: 300
|
||||||
speakerCount:
|
|
||||||
type: integer
|
|
||||||
description: 화자 수
|
|
||||||
example: 3
|
|
||||||
segmentCount:
|
segmentCount:
|
||||||
type: integer
|
type: integer
|
||||||
description: 세그먼트 수
|
description: 세그먼트 수
|
||||||
@ -866,14 +584,6 @@ components:
|
|||||||
type: string
|
type: string
|
||||||
description: 변환된 텍스트
|
description: 변환된 텍스트
|
||||||
example: "안녕하세요, 오늘 회의를 시작하겠습니다."
|
example: "안녕하세요, 오늘 회의를 시작하겠습니다."
|
||||||
speakerId:
|
|
||||||
type: string
|
|
||||||
description: 화자 ID
|
|
||||||
example: "SPK-001"
|
|
||||||
speakerName:
|
|
||||||
type: string
|
|
||||||
description: 화자 이름
|
|
||||||
example: "김철수"
|
|
||||||
timestamp:
|
timestamp:
|
||||||
type: integer
|
type: integer
|
||||||
description: 타임스탬프 (ms)
|
description: 타임스탬프 (ms)
|
||||||
@ -895,89 +605,6 @@ components:
|
|||||||
description: 낮은 신뢰도 경고 플래그 (< 60%)
|
description: 낮은 신뢰도 경고 플래그 (< 60%)
|
||||||
example: false
|
example: false
|
||||||
|
|
||||||
BatchTranscriptionRequest:
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- recordingId
|
|
||||||
- audioFile
|
|
||||||
properties:
|
|
||||||
recordingId:
|
|
||||||
type: string
|
|
||||||
description: 녹음 ID
|
|
||||||
example: "REC-20250123-001"
|
|
||||||
audioFile:
|
|
||||||
type: string
|
|
||||||
format: binary
|
|
||||||
description: 오디오 파일 (WAV, MP3 등)
|
|
||||||
language:
|
|
||||||
type: string
|
|
||||||
description: 음성 인식 언어
|
|
||||||
default: "ko-KR"
|
|
||||||
example: "ko-KR"
|
|
||||||
callbackUrl:
|
|
||||||
type: string
|
|
||||||
format: uri
|
|
||||||
description: 처리 완료 콜백 URL
|
|
||||||
example: "https://api.example.com/stt/v1/transcripts/callback"
|
|
||||||
|
|
||||||
BatchTranscriptionResponse:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
jobId:
|
|
||||||
type: string
|
|
||||||
description: 배치 작업 ID
|
|
||||||
example: "JOB-20250123-001"
|
|
||||||
recordingId:
|
|
||||||
type: string
|
|
||||||
description: 녹음 ID
|
|
||||||
example: "REC-20250123-001"
|
|
||||||
status:
|
|
||||||
type: string
|
|
||||||
description: 작업 상태
|
|
||||||
enum:
|
|
||||||
- QUEUED
|
|
||||||
- PROCESSING
|
|
||||||
- COMPLETED
|
|
||||||
- FAILED
|
|
||||||
example: "PROCESSING"
|
|
||||||
estimatedCompletionTime:
|
|
||||||
type: string
|
|
||||||
format: date-time
|
|
||||||
description: 예상 완료 시간
|
|
||||||
example: "2025-01-23T10:31:00Z"
|
|
||||||
callbackUrl:
|
|
||||||
type: string
|
|
||||||
format: uri
|
|
||||||
description: 콜백 URL
|
|
||||||
example: "https://api.example.com/stt/v1/transcripts/callback"
|
|
||||||
|
|
||||||
BatchCallbackRequest:
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- jobId
|
|
||||||
- status
|
|
||||||
- segments
|
|
||||||
properties:
|
|
||||||
jobId:
|
|
||||||
type: string
|
|
||||||
description: 배치 작업 ID
|
|
||||||
example: "JOB-20250123-001"
|
|
||||||
status:
|
|
||||||
type: string
|
|
||||||
description: 작업 상태
|
|
||||||
enum:
|
|
||||||
- COMPLETED
|
|
||||||
- FAILED
|
|
||||||
example: "COMPLETED"
|
|
||||||
segments:
|
|
||||||
type: array
|
|
||||||
description: 변환 세그먼트 목록
|
|
||||||
items:
|
|
||||||
$ref: '#/components/schemas/TranscriptionSegment'
|
|
||||||
error:
|
|
||||||
type: string
|
|
||||||
description: 오류 메시지 (실패 시)
|
|
||||||
example: "Audio file format not supported"
|
|
||||||
|
|
||||||
TranscriptionSegment:
|
TranscriptionSegment:
|
||||||
type: object
|
type: object
|
||||||
@ -986,10 +613,6 @@ components:
|
|||||||
type: string
|
type: string
|
||||||
description: 변환된 텍스트
|
description: 변환된 텍스트
|
||||||
example: "안녕하세요, 오늘 회의를 시작하겠습니다."
|
example: "안녕하세요, 오늘 회의를 시작하겠습니다."
|
||||||
speakerId:
|
|
||||||
type: string
|
|
||||||
description: 화자 ID
|
|
||||||
example: "SPK-001"
|
|
||||||
timestamp:
|
timestamp:
|
||||||
type: integer
|
type: integer
|
||||||
description: 시작 타임스탬프 (ms)
|
description: 시작 타임스탬프 (ms)
|
||||||
@ -1061,10 +684,6 @@ components:
|
|||||||
format: float
|
format: float
|
||||||
description: 평균 신뢰도 점수
|
description: 평균 신뢰도 점수
|
||||||
example: 0.88
|
example: 0.88
|
||||||
speakerCount:
|
|
||||||
type: integer
|
|
||||||
description: 화자 수
|
|
||||||
example: 3
|
|
||||||
segments:
|
segments:
|
||||||
type: array
|
type: array
|
||||||
description: 세그먼트 목록
|
description: 세그먼트 목록
|
||||||
@ -1082,14 +701,6 @@ components:
|
|||||||
type: string
|
type: string
|
||||||
description: 변환된 텍스트
|
description: 변환된 텍스트
|
||||||
example: "안녕하세요, 오늘 회의를 시작하겠습니다."
|
example: "안녕하세요, 오늘 회의를 시작하겠습니다."
|
||||||
speakerId:
|
|
||||||
type: string
|
|
||||||
description: 화자 ID
|
|
||||||
example: "SPK-001"
|
|
||||||
speakerName:
|
|
||||||
type: string
|
|
||||||
description: 화자 이름
|
|
||||||
example: "김철수"
|
|
||||||
timestamp:
|
timestamp:
|
||||||
type: integer
|
type: integer
|
||||||
description: 타임스탬프 (ms)
|
description: 타임스탬프 (ms)
|
||||||
@ -1105,151 +716,6 @@ components:
|
|||||||
description: 신뢰도 점수
|
description: 신뢰도 점수
|
||||||
example: 0.92
|
example: 0.92
|
||||||
|
|
||||||
IdentifySpeakerRequest:
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- recordingId
|
|
||||||
- audioFrame
|
|
||||||
- timestamp
|
|
||||||
properties:
|
|
||||||
recordingId:
|
|
||||||
type: string
|
|
||||||
description: 녹음 ID
|
|
||||||
example: "REC-20250123-001"
|
|
||||||
audioFrame:
|
|
||||||
type: string
|
|
||||||
format: byte
|
|
||||||
description: Base64 인코딩된 오디오 프레임
|
|
||||||
example: "UklGRiQAAABXQVZFZm10IBAAAAABA..."
|
|
||||||
timestamp:
|
|
||||||
type: integer
|
|
||||||
description: 타임스탬프 (ms)
|
|
||||||
example: 1234567890
|
|
||||||
|
|
||||||
SpeakerIdentificationResponse:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
speakerId:
|
|
||||||
type: string
|
|
||||||
description: 화자 ID
|
|
||||||
example: "SPK-001"
|
|
||||||
speakerName:
|
|
||||||
type: string
|
|
||||||
description: 화자 이름
|
|
||||||
example: "김철수"
|
|
||||||
confidence:
|
|
||||||
type: number
|
|
||||||
format: float
|
|
||||||
description: 식별 신뢰도 (0-1)
|
|
||||||
minimum: 0
|
|
||||||
maximum: 1
|
|
||||||
example: 0.95
|
|
||||||
isNewSpeaker:
|
|
||||||
type: boolean
|
|
||||||
description: 신규 화자 여부
|
|
||||||
example: false
|
|
||||||
profileId:
|
|
||||||
type: string
|
|
||||||
description: Azure Speaker Profile ID
|
|
||||||
example: "PROFILE-12345"
|
|
||||||
|
|
||||||
SpeakerDetailResponse:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
speakerId:
|
|
||||||
type: string
|
|
||||||
description: 화자 ID
|
|
||||||
example: "SPK-001"
|
|
||||||
speakerName:
|
|
||||||
type: string
|
|
||||||
description: 화자 이름
|
|
||||||
example: "김철수"
|
|
||||||
profileId:
|
|
||||||
type: string
|
|
||||||
description: Azure Speaker Profile ID
|
|
||||||
example: "PROFILE-12345"
|
|
||||||
userId:
|
|
||||||
type: string
|
|
||||||
description: 연결된 사용자 ID
|
|
||||||
example: "USER-123"
|
|
||||||
totalSegments:
|
|
||||||
type: integer
|
|
||||||
description: 총 발언 세그먼트 수
|
|
||||||
example: 45
|
|
||||||
totalDuration:
|
|
||||||
type: integer
|
|
||||||
description: 총 발언 시간 (초)
|
|
||||||
example: 450
|
|
||||||
averageConfidence:
|
|
||||||
type: number
|
|
||||||
format: float
|
|
||||||
description: 평균 식별 신뢰도
|
|
||||||
example: 0.92
|
|
||||||
firstAppeared:
|
|
||||||
type: string
|
|
||||||
format: date-time
|
|
||||||
description: 최초 등장 시간
|
|
||||||
example: "2025-01-23T10:30:15Z"
|
|
||||||
lastAppeared:
|
|
||||||
type: string
|
|
||||||
format: date-time
|
|
||||||
description: 최근 등장 시간
|
|
||||||
example: "2025-01-23T11:00:00Z"
|
|
||||||
|
|
||||||
UpdateSpeakerRequest:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
speakerName:
|
|
||||||
type: string
|
|
||||||
description: 화자 이름
|
|
||||||
example: "김철수 팀장"
|
|
||||||
userId:
|
|
||||||
type: string
|
|
||||||
description: 연결할 사용자 ID
|
|
||||||
example: "USER-123"
|
|
||||||
|
|
||||||
SpeakerListResponse:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
recordingId:
|
|
||||||
type: string
|
|
||||||
description: 녹음 ID
|
|
||||||
example: "REC-20250123-001"
|
|
||||||
speakerCount:
|
|
||||||
type: integer
|
|
||||||
description: 화자 수
|
|
||||||
example: 3
|
|
||||||
speakers:
|
|
||||||
type: array
|
|
||||||
description: 화자 목록
|
|
||||||
items:
|
|
||||||
$ref: '#/components/schemas/SpeakerSummary'
|
|
||||||
|
|
||||||
SpeakerSummary:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
speakerId:
|
|
||||||
type: string
|
|
||||||
description: 화자 ID
|
|
||||||
example: "SPK-001"
|
|
||||||
speakerName:
|
|
||||||
type: string
|
|
||||||
description: 화자 이름
|
|
||||||
example: "김철수"
|
|
||||||
segmentCount:
|
|
||||||
type: integer
|
|
||||||
description: 발언 세그먼트 수
|
|
||||||
example: 45
|
|
||||||
totalDuration:
|
|
||||||
type: integer
|
|
||||||
description: 총 발언 시간 (초)
|
|
||||||
example: 450
|
|
||||||
speakingRatio:
|
|
||||||
type: number
|
|
||||||
format: float
|
|
||||||
description: 발언 비율 (0-1)
|
|
||||||
example: 0.45
|
|
||||||
|
|
||||||
ErrorResponse:
|
ErrorResponse:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
|||||||
@ -1,14 +1,13 @@
|
|||||||
@startuml
|
@startuml
|
||||||
!theme mono
|
!theme mono
|
||||||
|
|
||||||
title STT Service - 음성 녹음 시작 및 화자 인식 (통합)
|
title STT Service - 음성 녹음 시작 및 실시간 인식
|
||||||
|
|
||||||
participant "Frontend<<E>>" as Frontend
|
participant "Frontend<<E>>" as Frontend
|
||||||
participant "API Gateway<<E>>" as Gateway
|
participant "API Gateway<<E>>" as Gateway
|
||||||
participant "RecordingController" as Controller
|
participant "RecordingController" as Controller
|
||||||
participant "RecordingService" as Service
|
participant "RecordingService" as Service
|
||||||
participant "AudioStreamManager" as StreamManager
|
participant "AudioStreamManager" as StreamManager
|
||||||
participant "SpeakerIdentifier" as Speaker
|
|
||||||
participant "RecordingRepository" as Repository
|
participant "RecordingRepository" as Repository
|
||||||
participant "AzureSpeechClient" as AzureClient
|
participant "AzureSpeechClient" as AzureClient
|
||||||
database "STT DB" as DB
|
database "STT DB" as DB
|
||||||
@ -51,7 +50,6 @@ note right
|
|||||||
- 언어: ko-KR
|
- 언어: ko-KR
|
||||||
- Format: PCM 16kHz
|
- Format: PCM 16kHz
|
||||||
- 샘플레이트: 16kHz
|
- 샘플레이트: 16kHz
|
||||||
- 화자 식별 활성화
|
|
||||||
- 실시간 스트리밍 모드
|
- 실시간 스트리밍 모드
|
||||||
- Continuous recognition
|
- Continuous recognition
|
||||||
end note
|
end note
|
||||||
@ -108,32 +106,12 @@ deactivate AzureClient
|
|||||||
StreamManager --> Service: recognized text
|
StreamManager --> Service: recognized text
|
||||||
deactivate StreamManager
|
deactivate StreamManager
|
||||||
|
|
||||||
== 화자 식별 ==
|
== 세그먼트 저장 ==
|
||||||
|
|
||||||
Service -> Speaker: identifySpeaker(audioFrame)
|
|
||||||
activate Speaker
|
|
||||||
|
|
||||||
Speaker -> AzureClient: analyzeSpeakerProfile()\n(Speaker Recognition API)
|
|
||||||
activate AzureClient
|
|
||||||
note right
|
|
||||||
화자 식별:
|
|
||||||
- Voice signature 생성
|
|
||||||
- 기존 프로필과 매칭
|
|
||||||
- 신규 화자 자동 등록
|
|
||||||
end note
|
|
||||||
|
|
||||||
AzureClient --> Speaker: speakerId
|
|
||||||
deactivate AzureClient
|
|
||||||
|
|
||||||
Speaker --> Service: speaker info
|
|
||||||
deactivate Speaker
|
|
||||||
|
|
||||||
== 화자별 세그먼트 저장 ==
|
|
||||||
|
|
||||||
Service -> Repository: saveSttSegment(segment)
|
Service -> Repository: saveSttSegment(segment)
|
||||||
activate Repository
|
activate Repository
|
||||||
|
|
||||||
Repository -> DB: STT 세그먼트 저장\n(세션ID, 텍스트, 화자ID, 타임스탬프, 신뢰도)
|
Repository -> DB: STT 세그먼트 저장\n(세션ID, 텍스트, 타임스탬프, 신뢰도)
|
||||||
activate DB
|
activate DB
|
||||||
DB --> Repository: segment saved
|
DB --> Repository: segment saved
|
||||||
deactivate DB
|
deactivate DB
|
||||||
@ -141,24 +119,13 @@ deactivate DB
|
|||||||
Repository --> Service: saved
|
Repository --> Service: saved
|
||||||
deactivate Repository
|
deactivate Repository
|
||||||
|
|
||||||
Service -> Repository: updateSpeakerInfo(recordingId, speakerId)
|
Service --> Controller: streaming response\n{text, timestamp, confidence}
|
||||||
activate Repository
|
|
||||||
|
|
||||||
Repository -> DB: 화자 정보 저장/업데이트\n(녹음ID, 화자ID, 세그먼트수)
|
|
||||||
activate DB
|
|
||||||
DB --> Repository: 업데이트 완료
|
|
||||||
deactivate DB
|
|
||||||
|
|
||||||
Repository --> Service: 완료
|
|
||||||
deactivate Repository
|
|
||||||
|
|
||||||
Service --> Controller: streaming response\n{text, speaker, timestamp, confidence}
|
|
||||||
deactivate Service
|
deactivate Service
|
||||||
|
|
||||||
Controller --> Gateway: WebSocket message
|
Controller --> Gateway: WebSocket message
|
||||||
deactivate Controller
|
deactivate Controller
|
||||||
|
|
||||||
Gateway --> Frontend: 실시간 자막 전송\n{text, speaker, timestamp}
|
Gateway --> Frontend: 실시간 자막 전송\n{text, timestamp}
|
||||||
deactivate Gateway
|
deactivate Gateway
|
||||||
|
|
||||||
note over Frontend, EventHub
|
note over Frontend, EventHub
|
||||||
@ -166,12 +133,10 @@ note over Frontend, EventHub
|
|||||||
- DB 녹음 생성: ~100ms
|
- DB 녹음 생성: ~100ms
|
||||||
- Azure 인식기 초기화: ~500ms
|
- Azure 인식기 초기화: ~500ms
|
||||||
- Blob 경로 생성: ~200ms
|
- Blob 경로 생성: ~200ms
|
||||||
- 화자 식별: ~300ms
|
|
||||||
- 실시간 인식 지연: < 1초
|
- 실시간 인식 지연: < 1초
|
||||||
- 총 초기화 시간: ~1.1초
|
- 총 초기화 시간: ~0.8초
|
||||||
|
|
||||||
정확도:
|
정확도:
|
||||||
- 화자 식별 정확도: > 90%
|
|
||||||
- 음성 인식 정확도: 60-95%
|
- 음성 인식 정확도: 60-95%
|
||||||
end note
|
end note
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
@startuml
|
@startuml
|
||||||
!theme mono
|
!theme mono
|
||||||
|
|
||||||
title STT Service - 음성-텍스트 변환 (실시간/배치 통합)
|
title STT Service - 음성-텍스트 변환 (실시간 전용)
|
||||||
|
|
||||||
participant "Frontend<<E>>" as Frontend
|
participant "Frontend<<E>>" as Frontend
|
||||||
participant "API Gateway<<E>>" as Gateway
|
participant "API Gateway<<E>>" as Gateway
|
||||||
@ -15,7 +15,7 @@ database "STT DB" as DB
|
|||||||
database "Azure Blob Storage<<E>>" as BlobStorage
|
database "Azure Blob Storage<<E>>" as BlobStorage
|
||||||
queue "Azure Event Hubs<<E>>" as EventHub
|
queue "Azure Event Hubs<<E>>" as EventHub
|
||||||
|
|
||||||
== 음성 데이터 스트리밍 수신 (실시간 모드) ==
|
== 음성 데이터 스트리밍 수신 ==
|
||||||
|
|
||||||
Frontend -> Gateway: POST /api/transcripts/stream\n(audioData, recordingId, timestamp)
|
Frontend -> Gateway: POST /api/transcripts/stream\n(audioData, recordingId, timestamp)
|
||||||
activate Gateway
|
activate Gateway
|
||||||
@ -26,9 +26,8 @@ activate Controller
|
|||||||
Controller -> Service: processAudioStream(audioData, recordingId)
|
Controller -> Service: processAudioStream(audioData, recordingId)
|
||||||
activate Service
|
activate Service
|
||||||
|
|
||||||
alt 실시간 변환 모드
|
Service -> Engine: streamingTranscribe(audioData)
|
||||||
Service -> Engine: streamingTranscribe(audioData)
|
activate Engine
|
||||||
activate Engine
|
|
||||||
|
|
||||||
Engine -> AzureClient: recognizeAsync(audioData)
|
Engine -> AzureClient: recognizeAsync(audioData)
|
||||||
activate AzureClient
|
activate AzureClient
|
||||||
@ -38,7 +37,6 @@ alt 실시간 변환 모드
|
|||||||
Azure Speech 설정:
|
Azure Speech 설정:
|
||||||
- Mode: Continuous
|
- Mode: Continuous
|
||||||
- 언어: ko-KR
|
- 언어: ko-KR
|
||||||
- 화자 식별 활성화
|
|
||||||
- 타임스탬프 자동 기록
|
- 타임스탬프 자동 기록
|
||||||
- 신뢰도 점수 계산
|
- 신뢰도 점수 계산
|
||||||
- Profanity filter
|
- Profanity filter
|
||||||
@ -49,7 +47,7 @@ alt 실시간 변환 모드
|
|||||||
BlobStorage --> AzureClient: 저장 완료
|
BlobStorage --> AzureClient: 저장 완료
|
||||||
deactivate BlobStorage
|
deactivate BlobStorage
|
||||||
|
|
||||||
AzureClient --> Engine: RecognitionResult\n(text, speakerId, confidence, timestamp, duration)
|
AzureClient --> Engine: RecognitionResult\n(text, confidence, timestamp, duration)
|
||||||
deactivate AzureClient
|
deactivate AzureClient
|
||||||
|
|
||||||
== 정확도 검증 및 처리 ==
|
== 정확도 검증 및 처리 ==
|
||||||
@ -71,7 +69,7 @@ alt 실시간 변환 모드
|
|||||||
Service -> TranscriptRepo: createTranscript(recordingId, segment)
|
Service -> TranscriptRepo: createTranscript(recordingId, segment)
|
||||||
activate TranscriptRepo
|
activate TranscriptRepo
|
||||||
|
|
||||||
TranscriptRepo -> DB: 변환 결과 저장\n(텍스트ID, 녹음ID, 화자ID, 텍스트, 신뢰도, 타임스탬프, 경고플래그)
|
TranscriptRepo -> DB: 변환 결과 저장\n(텍스트ID, 녹음ID, 텍스트, 신뢰도, 타임스탬프, 경고플래그)
|
||||||
activate DB
|
activate DB
|
||||||
DB --> TranscriptRepo: transcriptId 반환
|
DB --> TranscriptRepo: transcriptId 반환
|
||||||
deactivate DB
|
deactivate DB
|
||||||
@ -79,19 +77,6 @@ alt 실시간 변환 모드
|
|||||||
TranscriptRepo --> Service: TranscriptEntity 반환
|
TranscriptRepo --> Service: TranscriptEntity 반환
|
||||||
deactivate TranscriptRepo
|
deactivate TranscriptRepo
|
||||||
|
|
||||||
== 화자 정보 업데이트 ==
|
|
||||||
|
|
||||||
Service -> RecordingRepo: updateSpeakerInfo(recordingId, speakerId)
|
|
||||||
activate RecordingRepo
|
|
||||||
|
|
||||||
RecordingRepo -> DB: 화자 정보 저장/업데이트\n(녹음ID, 화자ID, 세그먼트수)
|
|
||||||
activate DB
|
|
||||||
DB --> RecordingRepo: 업데이트 완료
|
|
||||||
deactivate DB
|
|
||||||
|
|
||||||
RecordingRepo --> Service: 완료
|
|
||||||
deactivate RecordingRepo
|
|
||||||
|
|
||||||
== 이벤트 발행 ==
|
== 이벤트 발행 ==
|
||||||
|
|
||||||
Service -> EventHub: TranscriptSegmentReady 이벤트 발행
|
Service -> EventHub: TranscriptSegmentReady 이벤트 발행
|
||||||
@ -102,7 +87,6 @@ alt 실시간 변환 모드
|
|||||||
- recordingId
|
- recordingId
|
||||||
- meetingId
|
- meetingId
|
||||||
- text
|
- text
|
||||||
- speakerId
|
|
||||||
- timestamp
|
- timestamp
|
||||||
- confidence
|
- confidence
|
||||||
end note
|
end note
|
||||||
@ -112,128 +96,18 @@ alt 실시간 변환 모드
|
|||||||
Service --> Controller: TranscriptResponse\n(transcriptId, text, confidence, warningFlag)
|
Service --> Controller: TranscriptResponse\n(transcriptId, text, confidence, warningFlag)
|
||||||
deactivate Service
|
deactivate Service
|
||||||
|
|
||||||
Controller --> Gateway: 200 OK\n(transcriptId, text, speakerId, timestamp, confidence)
|
Controller --> Gateway: 200 OK\n(transcriptId, text, timestamp, confidence)
|
||||||
deactivate Controller
|
deactivate Controller
|
||||||
|
|
||||||
Gateway --> Frontend: 실시간 자막 응답
|
Gateway --> Frontend: 실시간 자막 응답
|
||||||
deactivate Gateway
|
deactivate Gateway
|
||||||
|
|
||||||
else 배치 변환 모드
|
|
||||||
Gateway -> Controller: POST /api/v1/stt/transcribe\n{sessionId, audioFile}
|
|
||||||
activate Controller
|
|
||||||
|
|
||||||
Controller -> Service: transcribeAudio(sessionId, audioFile)
|
|
||||||
activate Service
|
|
||||||
|
|
||||||
Service -> RecordingRepo: findSessionById(sessionId)
|
|
||||||
activate RecordingRepo
|
|
||||||
RecordingRepo -> DB: STT 세션 조회\n(세션ID 기준)
|
|
||||||
DB --> RecordingRepo: session data
|
|
||||||
RecordingRepo --> Service: RecordingEntity
|
|
||||||
deactivate RecordingRepo
|
|
||||||
|
|
||||||
Service -> Engine: batchTranscribe(audioFile)
|
|
||||||
activate Engine
|
|
||||||
|
|
||||||
Engine -> AzureClient: batchTranscriptionAsync(audioUrl)
|
|
||||||
activate AzureClient
|
|
||||||
note right
|
|
||||||
배치 처리:
|
|
||||||
- 전체 파일 업로드
|
|
||||||
- 백그라운드 처리
|
|
||||||
- Callback URL 제공
|
|
||||||
- 화자별 그룹화
|
|
||||||
- 문장 경계 보정
|
|
||||||
end note
|
|
||||||
|
|
||||||
AzureClient --> Engine: transcription job ID
|
|
||||||
deactivate AzureClient
|
|
||||||
|
|
||||||
Engine --> Service: job submitted
|
|
||||||
deactivate Engine
|
|
||||||
|
|
||||||
Service -> RecordingRepo: updateSessionStatus(sessionId, "PROCESSING")
|
|
||||||
activate RecordingRepo
|
|
||||||
RecordingRepo -> DB: 세션 상태 업데이트\n(상태='처리중')
|
|
||||||
DB --> RecordingRepo: updated
|
|
||||||
RecordingRepo --> Service: updated
|
|
||||||
deactivate RecordingRepo
|
|
||||||
|
|
||||||
Service --> Controller: 202 Accepted\n{jobId, status}
|
|
||||||
deactivate Service
|
|
||||||
|
|
||||||
Controller --> Gateway: 202 Accepted
|
|
||||||
deactivate Controller
|
|
||||||
|
|
||||||
== 배치 처리 완료 (Callback) ==
|
|
||||||
|
|
||||||
AzureClient -> Controller: POST /api/v1/stt/callback\n{jobId, segments}
|
|
||||||
activate Controller
|
|
||||||
|
|
||||||
Controller -> Service: processBatchResult(jobId, segments)
|
|
||||||
activate Service
|
|
||||||
|
|
||||||
loop 각 세그먼트 처리
|
|
||||||
Service -> TranscriptRepo: createTranscript(recordingId, segment)
|
|
||||||
activate TranscriptRepo
|
|
||||||
TranscriptRepo -> DB: 변환 결과 저장
|
|
||||||
DB --> TranscriptRepo: saved
|
|
||||||
TranscriptRepo --> Service: saved
|
|
||||||
deactivate TranscriptRepo
|
|
||||||
end
|
|
||||||
|
|
||||||
== 전체 텍스트 통합 ==
|
|
||||||
|
|
||||||
Service -> TranscriptRepo: aggregateTranscription(sessionId)
|
|
||||||
activate TranscriptRepo
|
|
||||||
TranscriptRepo -> DB: 세그먼트 목록 조회\n(세션ID 기준, 타임스탬프 순 정렬)
|
|
||||||
DB --> TranscriptRepo: ordered segments
|
|
||||||
TranscriptRepo --> Service: segments
|
|
||||||
deactivate TranscriptRepo
|
|
||||||
|
|
||||||
Service -> Service: mergeSegments(segments)
|
|
||||||
note right
|
|
||||||
세그먼트 병합:
|
|
||||||
- 화자별 그룹화
|
|
||||||
- 시간 순서 정렬
|
|
||||||
- 문장 경계 보정
|
|
||||||
end note
|
|
||||||
|
|
||||||
Service -> RecordingRepo: saveTranscription(fullText)
|
|
||||||
activate RecordingRepo
|
|
||||||
RecordingRepo -> DB: 전체 텍스트 저장 및 상태 업데이트\n(전체텍스트, 상태='완료')
|
|
||||||
DB --> RecordingRepo: saved
|
|
||||||
RecordingRepo --> Service: updated session
|
|
||||||
deactivate RecordingRepo
|
|
||||||
|
|
||||||
Service -> EventHub: TranscriptionCompletedEvent 발행
|
|
||||||
note right
|
|
||||||
Event:
|
|
||||||
- sessionId
|
|
||||||
- meetingId
|
|
||||||
- fullText
|
|
||||||
- completedAt
|
|
||||||
end note
|
|
||||||
|
|
||||||
Service --> Controller: TranscriptionResponse\n{sessionId, text, segments}
|
|
||||||
deactivate Service
|
|
||||||
|
|
||||||
Controller --> Gateway: 200 OK\n{transcription, metadata}
|
|
||||||
deactivate Controller
|
|
||||||
end
|
|
||||||
|
|
||||||
note over Frontend, EventHub
|
note over Frontend, EventHub
|
||||||
**실시간 모드 처리 시간:**
|
**처리 시간:**
|
||||||
- Azure STT 처리: 1-3초
|
- Azure STT 처리: 1-3초
|
||||||
- DB 저장: ~100ms
|
- DB 저장: ~100ms
|
||||||
- Event 발행: ~50ms
|
- Event 발행: ~50ms
|
||||||
- 총 처리 시간: 1-4초
|
- 총 처리 시간: 1-3초
|
||||||
|
|
||||||
**배치 모드 처리 시간:**
|
|
||||||
- 파일 업로드: ~1-2초
|
|
||||||
- Azure 배치 처리: 5-30초 (파일 크기에 따라)
|
|
||||||
- DB 저장: ~500ms
|
|
||||||
- 총 처리 시간: 7-33초
|
|
||||||
|
|
||||||
**정확도 경고 기준:**
|
**정확도 경고 기준:**
|
||||||
- < 60%: 수동 수정 권장 (경고 플래그)
|
- < 60%: 수동 수정 권장 (경고 플래그)
|
||||||
|
|||||||
@ -49,7 +49,7 @@
|
|||||||
- 실시간 협업: WebSocket 기반 실시간 동기화, 버전 관리, 충돌 해결
|
- 실시간 협업: WebSocket 기반 실시간 동기화, 버전 관리, 충돌 해결
|
||||||
- 템플릿 관리: 회의록 템플릿 관리
|
- 템플릿 관리: 회의록 템플릿 관리
|
||||||
- 통계 생성: 회의 및 Todo 통계
|
- 통계 생성: 회의 및 Todo 통계
|
||||||
3. **STT** - 음성 녹음 관리, 음성-텍스트 변환, 화자 식별 (기본 기능)
|
3. **STT** - 음성 스트리밍 처리, 실시간 음성-텍스트 변환 (기본 기능)
|
||||||
4. **AI** - AI 기반 회의록 자동화, Todo 추출, 지능형 검색 (RAG 통합)
|
4. **AI** - AI 기반 회의록 자동화, Todo 추출, 지능형 검색 (RAG 통합)
|
||||||
- LLM 기반 회의록 자동 작성
|
- LLM 기반 회의록 자동 작성
|
||||||
- Todo 자동 추출 및 담당자 식별
|
- Todo 자동 추출 및 담당자 식별
|
||||||
@ -477,30 +477,29 @@ UFR-MEET-055: [회의록수정] 회의 참석자로서 | 나는, 검증이 완
|
|||||||
3. STT 서비스 (음성 인식 및 변환 - 기본 기능)
|
3. STT 서비스 (음성 인식 및 변환 - 기본 기능)
|
||||||
1) 음성 인식 및 변환
|
1) 음성 인식 및 변환
|
||||||
UFR-STT-010: [음성녹음인식] 회의 참석자로서 | 나는, 발언 내용이 자동으로 기록되기 위해 | 음성이 실시간으로 녹음되고 인식되기를 원한다.
|
UFR-STT-010: [음성녹음인식] 회의 참석자로서 | 나는, 발언 내용이 자동으로 기록되기 위해 | 음성이 실시간으로 녹음되고 인식되기를 원한다.
|
||||||
- 시나리오: 음성 녹음 및 발언 인식
|
- 시나리오: 음성 실시간 인식
|
||||||
회의가 시작된 상황에서 | 참석자가 발언을 시작하면 | 음성이 자동으로 녹음되고 화자가 식별되며 발언이 인식된다.
|
회의가 시작된 상황에서 | 참석자가 발언을 시작하면 | 음성이 실시간으로 텍스트로 변환된다.
|
||||||
|
|
||||||
[음성 녹음 처리]
|
[음성 스트리밍 처리]
|
||||||
- 오디오 스트림 실시간 캡처
|
- 오디오 스트림 실시간 캡처
|
||||||
- 회의 ID와 연결
|
- 회의 ID와 연결
|
||||||
- 음성 데이터 저장 (Azure 스토리지)
|
- **음성 파일은 저장하지 않음** (실시간 스트리밍만 처리)
|
||||||
|
|
||||||
[발언 인식 처리]
|
[음성 인식 처리]
|
||||||
- AI 음성인식 엔진 연동 (Azure Speech 등)
|
- AI 음성인식 엔진 연동 (Azure Speech 등)
|
||||||
- 화자 자동 식별
|
- 실시간 텍스트 변환
|
||||||
- 참석자 목록 매칭
|
|
||||||
- 음성 특징 분석
|
|
||||||
- 타임스탬프 기록
|
- 타임스탬프 기록
|
||||||
- 발언 구간 구분
|
|
||||||
|
|
||||||
[처리 결과]
|
[처리 결과]
|
||||||
- 음성 녹음이 시작됨 (녹음 ID)
|
- 음성 스트리밍이 시작됨 (세션 ID)
|
||||||
- 발언이 인식됨 (발언 ID, 화자, 타임스탬프)
|
- 텍스트가 변환됨 (세그먼트 ID, 텍스트, 타임스탬프)
|
||||||
- 실시간으로 텍스트 변환 요청 (UFR-STT-020 연동)
|
- 실시간으로 텍스트 변환 요청 (UFR-STT-020 연동)
|
||||||
|
- **음성 파일은 저장되지 않고 스트리밍만 처리됨**
|
||||||
|
- **화자 식별 기능 없음** (단순 텍스트 변환만)
|
||||||
|
|
||||||
[성능 요구사항]
|
[성능 요구사항]
|
||||||
- 발언 인식 지연 시간: 1초 이내
|
- 음성 인식 지연 시간: 1초 이내
|
||||||
- 화자 식별 정확도: 90% 이상
|
- 변환 정확도: 85% 이상
|
||||||
|
|
||||||
[비고]
|
[비고]
|
||||||
- STT는 기본 기능으로 경쟁사 대부분이 제공하는 기능임
|
- STT는 기본 기능으로 경쟁사 대부분이 제공하는 기능임
|
||||||
|
|||||||
46
docker-compose.test.yml
Normal file
46
docker-compose.test.yml
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
# Test Database
|
||||||
|
postgres-test:
|
||||||
|
image: postgres:15-alpine
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: sttdb_test
|
||||||
|
POSTGRES_USER: testuser
|
||||||
|
POSTGRES_PASSWORD: testpass
|
||||||
|
ports:
|
||||||
|
- "5433:5432"
|
||||||
|
volumes:
|
||||||
|
- postgres_test_data:/var/lib/postgresql/data
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U testuser -d sttdb_test"]
|
||||||
|
interval: 5s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
# Test Redis
|
||||||
|
redis-test:
|
||||||
|
image: redis:7-alpine
|
||||||
|
ports:
|
||||||
|
- "6380:6379"
|
||||||
|
command: redis-server --requirepass testpass
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "redis-cli", "-a", "testpass", "ping"]
|
||||||
|
interval: 5s
|
||||||
|
timeout: 3s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
|
# Test Azure Storage Emulator (Azurite)
|
||||||
|
azurite-test:
|
||||||
|
image: mcr.microsoft.com/azure-storage/azurite
|
||||||
|
ports:
|
||||||
|
- "10000:10000" # Blob service
|
||||||
|
- "10001:10001" # Queue service
|
||||||
|
- "10002:10002" # Table service
|
||||||
|
command: azurite --blobHost 0.0.0.0 --queueHost 0.0.0.0 --tableHost 0.0.0.0
|
||||||
|
volumes:
|
||||||
|
- azurite_data:/data
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgres_test_data:
|
||||||
|
azurite_data:
|
||||||
279
logs/ai.log
279
logs/ai.log
@ -1438,3 +1438,282 @@ Caused by: io.lettuce.core.RedisCommandExecutionException: NOAUTH HELLO must be
|
|||||||
2025-10-23 16:37:29 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@1d9c4491] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@20505460]
|
2025-10-23 16:37:29 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@1d9c4491] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@20505460]
|
||||||
2025-10-23 16:37:29 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
|
2025-10-23 16:37:29 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
|
||||||
2025-10-23 16:37:29 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.
|
2025-10-23 16:37:29 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.
|
||||||
|
2025-10-23 17:10:40 [main] INFO com.unicorn.hgzero.ai.AiApplication - Starting AiApplication using Java 23.0.2 with PID 43872 (/Users/jominseo/HGZero/ai/build/classes/java/main started by jominseo in /Users/jominseo/HGZero)
|
||||||
|
2025-10-23 17:10:40 [main] DEBUG com.unicorn.hgzero.ai.AiApplication - Running with Spring Boot v3.3.0, Spring v6.1.8
|
||||||
|
2025-10-23 17:10:40 [main] INFO com.unicorn.hgzero.ai.AiApplication - No active profile set, falling back to 1 default profile: "default"
|
||||||
|
2025-10-23 17:10:40 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
|
||||||
|
2025-10-23 17:10:40 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
|
||||||
|
2025-10-23 17:10:40 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 3 ms. Found 0 JPA repository interfaces.
|
||||||
|
2025-10-23 17:10:40 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
|
||||||
|
2025-10-23 17:10:40 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
|
||||||
|
2025-10-23 17:10:40 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 0 ms. Found 0 Redis repository interfaces.
|
||||||
|
2025-10-23 17:10:41 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8084 (http)
|
||||||
|
2025-10-23 17:10:41 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
|
||||||
|
2025-10-23 17:10:41 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.24]
|
||||||
|
2025-10-23 17:10:41 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
|
||||||
|
2025-10-23 17:10:41 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 776 ms
|
||||||
|
2025-10-23 17:10:41 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
|
||||||
|
2025-10-23 17:10:41 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.2.Final
|
||||||
|
2025-10-23 17:10:41 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@3e2d65e1
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@3e2d65e1
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@3e2d65e1
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@1174676f
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@1174676f
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@71f8ce0e
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@71f8ce0e
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@4fd92289
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@4fd92289
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@1a8e44fe
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@1a8e44fe
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@1a8e44fe
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@287317df
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@287317df
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@287317df
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@1fcc3461
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@1fcc3461
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@1987807b
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@71469e01
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@71469e01
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@41bbb219
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@3f2ae973
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@1a8b22b5
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@1a8b22b5
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@1a8b22b5
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@5f781173
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@5f781173
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@5f781173
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@43cf5bff
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@43cf5bff
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@43cf5bff
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@2b464384
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@2b464384
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@2b464384
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@681b42d3
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@681b42d3
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@681b42d3
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@77f7352a
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@77f7352a
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@4ede8888
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@4ede8888
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@571db8b4
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@571db8b4
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@571db8b4
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@65a2755e
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@2b3242a5
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@2b3242a5
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@11120583
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@2bf0c70d
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@2bf0c70d
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@2bf0c70d
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@5d8e4fa8
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@649009d6
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@652f26da
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@484a5ddd
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@484a5ddd
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@6796a873
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@6796a873
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@3acc3ee
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@1f293cb7
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@5972e3a
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@5790cbcb
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@32c6d164
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@645c9f0f
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@58068b40
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@58068b40
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@999cd18
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@999cd18
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@dd060be
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@dd060be
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@df432ec
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@df432ec
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@6144e499
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@6144e499
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@26f204a4
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@28295554
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@4e671ef
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@4e671ef
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@42403dc6
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@74a1d60e
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@16c0be3b
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@219edc05
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@219edc05
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@62f37bfd
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@1818d00b
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@b3a8455
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@b3a8455
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@5c930fc3
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@5c930fc3
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@25c6ab3f
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@25c6ab3f
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@25c6ab3f
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@7b80af04
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@7b80af04
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@7b80af04
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@2447940d
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@60ee7a51
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@70e1aa20
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@70e1aa20
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@e67d3b7
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@e67d3b7
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@e67d3b7
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@1618c98a
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@5b715ea
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@787a0fd6
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@787a0fd6
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@48b09105
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@48b09105
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@48b09105
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@18b45500
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@18b45500
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@25110bb9
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@25110bb9
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@dbda472
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@dbda472
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@41492479
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@41492479
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@7bef7505
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@7bef7505
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@568ef502
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@36f05595
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@3c46e6f6
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@3c46e6f6
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@1c79d093
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@746fd19b
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@61d7bb61
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@33f81280
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@3991fe6d
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@3a0e7f89
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@665ed71a
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@15c1b543
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@23954300
|
||||||
|
2025-10-23 17:10:41 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
|
||||||
|
2025-10-23 17:10:41 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
|
||||||
|
2025-10-23 17:10:41 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@5f5c0eda
|
||||||
|
2025-10-23 17:10:41 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@31b7112d) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@47fc9ce)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@1b5d1d9) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@703a2bc9)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT))
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT))
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@e460ca1
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@e460ca1
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@3c46e6f6`
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@268e30d4] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@7c50709a]
|
||||||
|
2025-10-23 17:10:41 [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)
|
||||||
|
2025-10-23 17:10:41 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@268e30d4] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@263f6e96]
|
||||||
|
2025-10-23 17:10:41 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@263f6e96] for TypeConfiguration
|
||||||
|
2025-10-23 17:10:41 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
|
||||||
|
2025-10-23 17:10:41 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
|
||||||
|
2025-10-23 17:10:42 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library
|
||||||
|
2025-10-23 17:10:42 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration -
|
||||||
|
|
||||||
|
Using generated security password: 4d9e182a-5838-4fd3-8e57-70219ebe9076
|
||||||
|
|
||||||
|
This generated password is for development use only. Your security configuration must be updated before running your application in production.
|
||||||
|
|
||||||
|
2025-10-23 17:10:42 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager
|
||||||
|
2025-10-23 17:10:42 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator'
|
||||||
|
2025-10-23 17:10:42 [main] INFO o.s.s.web.DefaultSecurityFilterChain - Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@23d1090, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@46c6541f, org.springframework.security.web.context.SecurityContextHolderFilter@67744663, org.springframework.security.web.header.HeaderWriterFilter@1a2bcce1, org.springframework.web.filter.CorsFilter@aba3735, org.springframework.security.web.csrf.CsrfFilter@417c9b17, org.springframework.security.web.authentication.logout.LogoutFilter@75b598a5, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@401b7109, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@24a024c8, org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter@16bba8ae, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@7f36b021, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@387cd426, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@6295cc30, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@7c689379, org.springframework.security.web.access.ExceptionTranslationFilter@ae5eeee, org.springframework.security.web.access.intercept.AuthorizationFilter@431bf770]
|
||||||
|
2025-10-23 17:10:42 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8084 (http) with context path '/'
|
||||||
|
2025-10-23 17:10:42 [main] INFO com.unicorn.hgzero.ai.AiApplication - Started AiApplication in 2.293 seconds (process running for 2.491)
|
||||||
|
2025-10-23 17:10:42 [RMI TCP Connection(1)-127.0.0.1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
|
||||||
|
2025-10-23 17:10:42 [RMI TCP Connection(1)-127.0.0.1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
|
||||||
|
2025-10-23 17:10:42 [RMI TCP Connection(1)-127.0.0.1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 1 ms
|
||||||
|
2025-10-23 17:10:42 [boundedElastic-1] WARN o.s.b.a.d.r.RedisReactiveHealthIndicator - Redis health check failed
|
||||||
|
org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis
|
||||||
|
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.translateException(LettuceConnectionFactory.java:1847)
|
||||||
|
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1778)
|
||||||
|
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getNativeConnection(LettuceConnectionFactory.java:1580)
|
||||||
|
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.lambda$getConnection$0(LettuceConnectionFactory.java:1560)
|
||||||
|
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.doInLock(LettuceConnectionFactory.java:1521)
|
||||||
|
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$SharedConnection.getConnection(LettuceConnectionFactory.java:1557)
|
||||||
|
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getSharedReactiveConnection(LettuceConnectionFactory.java:1268)
|
||||||
|
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getReactiveConnection(LettuceConnectionFactory.java:1143)
|
||||||
|
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.getReactiveConnection(LettuceConnectionFactory.java:119)
|
||||||
|
at reactor.core.publisher.MonoSupplier.call(MonoSupplier.java:67)
|
||||||
|
at reactor.core.publisher.FluxSubscribeOnCallable$CallableSubscribeOnSubscription.run(FluxSubscribeOnCallable.java:228)
|
||||||
|
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:68)
|
||||||
|
at reactor.core.scheduler.SchedulerTask.call(SchedulerTask.java:28)
|
||||||
|
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
|
||||||
|
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
|
||||||
|
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
|
||||||
|
at java.base/java.lang.Thread.run(Thread.java:1575)
|
||||||
|
Caused by: io.lettuce.core.RedisConnectionException: Unable to connect to 20.249.177.114/<unresolved>:6379
|
||||||
|
at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:78)
|
||||||
|
at io.lettuce.core.RedisConnectionException.create(RedisConnectionException.java:56)
|
||||||
|
at io.lettuce.core.AbstractRedisClient.getConnection(AbstractRedisClient.java:350)
|
||||||
|
at io.lettuce.core.RedisClient.connect(RedisClient.java:215)
|
||||||
|
at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.lambda$getConnection$1(StandaloneConnectionProvider.java:112)
|
||||||
|
at java.base/java.util.Optional.orElseGet(Optional.java:364)
|
||||||
|
at org.springframework.data.redis.connection.lettuce.StandaloneConnectionProvider.getConnection(StandaloneConnectionProvider.java:112)
|
||||||
|
at org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory$ExceptionTranslatingConnectionProvider.getConnection(LettuceConnectionFactory.java:1776)
|
||||||
|
... 16 common frames omitted
|
||||||
|
Caused by: io.lettuce.core.RedisCommandExecutionException: NOAUTH HELLO must be called with the client already authenticated, otherwise the HELLO <proto> AUTH <user> <pass> option can be used to authenticate the client and select the RESP protocol version at the same time
|
||||||
|
at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:147)
|
||||||
|
at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116)
|
||||||
|
at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120)
|
||||||
|
at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111)
|
||||||
|
at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63)
|
||||||
|
at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745)
|
||||||
|
at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680)
|
||||||
|
at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597)
|
||||||
|
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
|
||||||
|
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
|
||||||
|
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
|
||||||
|
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1407)
|
||||||
|
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
|
||||||
|
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
|
||||||
|
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918)
|
||||||
|
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
|
||||||
|
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
|
||||||
|
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
|
||||||
|
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
|
||||||
|
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
|
||||||
|
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:994)
|
||||||
|
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
|
||||||
|
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
|
||||||
|
... 1 common frames omitted
|
||||||
|
2025-10-23 17:11:28 [http-nio-8084-exec-1] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui.html
|
||||||
|
2025-10-23 17:11:28 [http-nio-8084-exec-1] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-23 17:11:28 [http-nio-8084-exec-1] DEBUG o.s.s.w.s.HttpSessionRequestCache - Saved request http://localhost:8084/swagger-ui.html?continue to session
|
||||||
|
2025-10-23 17:11:28 [http-nio-8084-exec-1] DEBUG o.s.s.w.a.DelegatingAuthenticationEntryPoint - Trying to match using And [Not [RequestHeaderRequestMatcher [expectedHeaderName=X-Requested-With, expectedHeaderValue=XMLHttpRequest]], MediaTypeRequestMatcher [contentNegotiationStrategy=org.springframework.web.accept.ContentNegotiationManager@49c72fb7, matchingMediaTypes=[application/xhtml+xml, image/*, text/html, text/plain], useEquals=false, ignoredMediaTypes=[*/*]]]
|
||||||
|
2025-10-23 17:11:28 [http-nio-8084-exec-1] DEBUG o.s.s.w.a.DelegatingAuthenticationEntryPoint - Match found! Executing org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint@7d91e9c9
|
||||||
|
2025-10-23 17:11:28 [http-nio-8084-exec-1] DEBUG o.s.s.web.DefaultRedirectStrategy - Redirecting to http://localhost:8084/login
|
||||||
|
2025-10-23 17:11:28 [http-nio-8084-exec-2] DEBUG o.s.security.web.FilterChainProxy - Securing GET /login
|
||||||
|
2025-10-23 17:11:28 [http-nio-8084-exec-3] DEBUG o.s.security.web.FilterChainProxy - Securing GET /favicon.ico
|
||||||
|
2025-10-23 17:11:28 [http-nio-8084-exec-3] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-23 17:11:28 [http-nio-8084-exec-3] DEBUG o.s.s.w.a.DelegatingAuthenticationEntryPoint - Trying to match using And [Not [RequestHeaderRequestMatcher [expectedHeaderName=X-Requested-With, expectedHeaderValue=XMLHttpRequest]], MediaTypeRequestMatcher [contentNegotiationStrategy=org.springframework.web.accept.ContentNegotiationManager@49c72fb7, matchingMediaTypes=[application/xhtml+xml, image/*, text/html, text/plain], useEquals=false, ignoredMediaTypes=[*/*]]]
|
||||||
|
2025-10-23 17:11:28 [http-nio-8084-exec-3] DEBUG o.s.s.w.a.DelegatingAuthenticationEntryPoint - Match found! Executing org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint@7d91e9c9
|
||||||
|
2025-10-23 17:11:28 [http-nio-8084-exec-3] DEBUG o.s.s.web.DefaultRedirectStrategy - Redirecting to http://localhost:8084/login
|
||||||
|
2025-10-23 17:11:28 [http-nio-8084-exec-4] DEBUG o.s.security.web.FilterChainProxy - Securing GET /login
|
||||||
|
2025-10-23 17:11:43 [http-nio-8084-exec-5] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui.html
|
||||||
|
2025-10-23 17:11:43 [http-nio-8084-exec-5] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-23 17:11:43 [http-nio-8084-exec-5] DEBUG o.s.s.w.s.HttpSessionRequestCache - Saved request http://localhost:8084/swagger-ui.html?continue to session
|
||||||
|
2025-10-23 17:11:43 [http-nio-8084-exec-5] DEBUG o.s.s.w.a.DelegatingAuthenticationEntryPoint - Trying to match using And [Not [RequestHeaderRequestMatcher [expectedHeaderName=X-Requested-With, expectedHeaderValue=XMLHttpRequest]], MediaTypeRequestMatcher [contentNegotiationStrategy=org.springframework.web.accept.ContentNegotiationManager@49c72fb7, matchingMediaTypes=[application/xhtml+xml, image/*, text/html, text/plain], useEquals=false, ignoredMediaTypes=[*/*]]]
|
||||||
|
2025-10-23 17:11:43 [http-nio-8084-exec-5] DEBUG o.s.s.w.a.DelegatingAuthenticationEntryPoint - Match found! Executing org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint@7d91e9c9
|
||||||
|
2025-10-23 17:11:43 [http-nio-8084-exec-5] DEBUG o.s.s.web.DefaultRedirectStrategy - Redirecting to http://localhost:8084/login
|
||||||
|
2025-10-23 17:11:43 [http-nio-8084-exec-6] DEBUG o.s.security.web.FilterChainProxy - Securing GET /login
|
||||||
|
2025-10-23 17:11:43 [http-nio-8084-exec-7] DEBUG o.s.security.web.FilterChainProxy - Securing GET /favicon.ico
|
||||||
|
2025-10-23 17:11:43 [http-nio-8084-exec-7] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-23 17:11:43 [http-nio-8084-exec-7] DEBUG o.s.s.w.a.DelegatingAuthenticationEntryPoint - Trying to match using And [Not [RequestHeaderRequestMatcher [expectedHeaderName=X-Requested-With, expectedHeaderValue=XMLHttpRequest]], MediaTypeRequestMatcher [contentNegotiationStrategy=org.springframework.web.accept.ContentNegotiationManager@49c72fb7, matchingMediaTypes=[application/xhtml+xml, image/*, text/html, text/plain], useEquals=false, ignoredMediaTypes=[*/*]]]
|
||||||
|
2025-10-23 17:11:43 [http-nio-8084-exec-7] DEBUG o.s.s.w.a.DelegatingAuthenticationEntryPoint - Match found! Executing org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint@7d91e9c9
|
||||||
|
2025-10-23 17:11:43 [http-nio-8084-exec-7] DEBUG o.s.s.web.DefaultRedirectStrategy - Redirecting to http://localhost:8084/login
|
||||||
|
2025-10-23 17:11:43 [http-nio-8084-exec-8] DEBUG o.s.security.web.FilterChainProxy - Securing GET /login
|
||||||
|
2025-10-23 17:12:37 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
|
||||||
|
2025-10-23 17:12:37 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@263f6e96] for TypeConfiguration
|
||||||
|
2025-10-23 17:12:37 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@7aa91cdd] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@263f6e96]
|
||||||
|
2025-10-23 17:12:37 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
|
||||||
|
2025-10-23 17:12:37 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.
|
||||||
|
|||||||
@ -1036,3 +1036,873 @@ This generated password is for development use only. Your security configuration
|
|||||||
2025-10-24 10:34:56 [http-nio-8082-exec-8] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson 호출 - 파라미터: [SecurityContextHolderAwareRequestWrapper[ org.springframework.security.web.header.HeaderWriterFilter$HeaderWriterRequest@7089f4a5], /v3/api-docs, ko_KR]
|
2025-10-24 10:34:56 [http-nio-8082-exec-8] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson 호출 - 파라미터: [SecurityContextHolderAwareRequestWrapper[ org.springframework.security.web.header.HeaderWriterFilter$HeaderWriterRequest@7089f4a5], /v3/api-docs, ko_KR]
|
||||||
2025-10-24 10:34:57 [http-nio-8082-exec-8] INFO o.s.api.AbstractOpenApiResource - Init duration for springdoc-openapi is: 340 ms
|
2025-10-24 10:34:57 [http-nio-8082-exec-8] INFO o.s.api.AbstractOpenApiResource - Init duration for springdoc-openapi is: 340 ms
|
||||||
2025-10-24 10:34:57 [http-nio-8082-exec-8] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson 완료 - 실행시간: 349ms
|
2025-10-24 10:34:57 [http-nio-8082-exec-8] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson 완료 - 실행시간: 349ms
|
||||||
|
2025-10-24 13:19:09 [main] INFO c.u.h.meeting.MeetingApplication - Starting MeetingApplication using Java 21.0.8 with PID 63724 (/Users/adela/home/workspace/recent/HGZero/meeting/build/classes/java/main started by adela in /Users/adela/home/workspace/recent/HGZero/meeting)
|
||||||
|
2025-10-24 13:19:09 [main] DEBUG c.u.h.meeting.MeetingApplication - Running with Spring Boot v3.3.5, Spring v6.1.14
|
||||||
|
2025-10-24 13:19:09 [main] INFO c.u.h.meeting.MeetingApplication - The following 1 profile is active: "dev"
|
||||||
|
2025-10-24 13:19:10 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
|
||||||
|
2025-10-24 13:19:10 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
|
||||||
|
2025-10-24 13:19:10 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 70 ms. Found 5 JPA repository interfaces.
|
||||||
|
2025-10-24 13:19:10 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
|
||||||
|
2025-10-24 13:19:10 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
|
||||||
|
2025-10-24 13:19:10 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 13:19:10 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 13:19:10 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 13:19:10 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TemplateJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 13:19:10 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TodoJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 13:19:10 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 0 Redis repository interfaces.
|
||||||
|
2025-10-24 13:19:11 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8082 (http)
|
||||||
|
2025-10-24 13:19:11 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
|
||||||
|
2025-10-24 13:19:11 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31]
|
||||||
|
2025-10-24 13:19:11 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
|
||||||
|
2025-10-24 13:19:11 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1154 ms
|
||||||
|
2025-10-24 13:19:11 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
|
||||||
|
2025-10-24 13:19:11 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final
|
||||||
|
2025-10-24 13:19:11 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@bff764c
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@bff764c
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@bff764c
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@3beaa16d
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@3beaa16d
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@49153009
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@49153009
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@a1b7549
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@a1b7549
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@7aa63f50
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@7aa63f50
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@7aa63f50
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@142918a0
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@142918a0
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@142918a0
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@745cf754
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@745cf754
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@25bc65ab
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@6eab92f3
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@6eab92f3
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@321b7b9e
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@21eedcde
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@67396475
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@67396475
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@67396475
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@55b74e6b
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@55b74e6b
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@55b74e6b
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@3c1908c8
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@3c1908c8
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@3c1908c8
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@6bc62bb9
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@6bc62bb9
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@6bc62bb9
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@47f0e078
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@47f0e078
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@47f0e078
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@28db2afb
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@28db2afb
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@5c703860
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@5c703860
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@6315bb4
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@6315bb4
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@6315bb4
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@4682882a
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@37fffef3
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@37fffef3
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@6a116354
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@66716959
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@66716959
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@66716959
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@34e07e65
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@7ca0166c
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@1dcad16f
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@701c482e
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@701c482e
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@4738131e
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@4738131e
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@3b576ee3
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@705d914f
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@6212ea52
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@65b5b5ed
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@6595ffce
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@795eddda
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@c6bf8d9
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@c6bf8d9
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@44392e64
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@44392e64
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@e18d2a2
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@e18d2a2
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@1a77eb6
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@1a77eb6
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@52d9f36b
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@52d9f36b
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@5f9ebd5a
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@175bf9c9
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@2db3675a
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@2db3675a
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@306c9b2c
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@1ab28416
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@52efb338
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@64508788
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@64508788
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@30b1c5d5
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@3e2d65e1
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@1174676f
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@1174676f
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@71f8ce0e
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@71f8ce0e
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@4fd92289
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@4fd92289
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@4fd92289
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@1a8e44fe
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@1a8e44fe
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@1a8e44fe
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@287317df
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@1fcc3461
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@1987807b
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@1987807b
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@71469e01
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@71469e01
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@71469e01
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@41bbb219
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@3f2ae973
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@1a8b22b5
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@1a8b22b5
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@5f781173
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@5f781173
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@5f781173
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@43cf5bff
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@43cf5bff
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@2b464384
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@2b464384
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@681b42d3
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@681b42d3
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@77f7352a
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@77f7352a
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@4ede8888
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@4ede8888
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@571db8b4
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@65a2755e
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@61d6c8c4
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@61d6c8c4
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@4040ccae
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@15bb8ed5
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@7e1fb22c
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@38fc34fd
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@7178d811
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@2e013ba1
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@2d8c729f
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@740ee00f
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@430106cf
|
||||||
|
2025-10-24 13:19:11 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
|
||||||
|
2025-10-24 13:19:11 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
|
||||||
|
2025-10-24 13:19:11 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@556843a5
|
||||||
|
2025-10-24 13:19:11 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
|
||||||
|
2025-10-24 13:19:11 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@368d51ca) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@2a349a73)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@2ad6895a) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@10e4cc6)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT))
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT))
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@7a75183d
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@7a75183d
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@61d6c8c4`
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007)
|
||||||
|
2025-10-24 13:19:11 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@42a7e7e1] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@e2d9923]
|
||||||
|
2025-10-24 13:19:12 [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)
|
||||||
|
2025-10-24 13:19:12 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@42a7e7e1] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@88fe9a8]
|
||||||
|
2025-10-24 13:19:12 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists meetings
|
||||||
|
alter column description set data type TEXT
|
||||||
|
2025-10-24 13:19:12 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists meetings
|
||||||
|
alter column participants set data type TEXT
|
||||||
|
2025-10-24 13:19:12 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists minutes_sections
|
||||||
|
alter column content set data type TEXT
|
||||||
|
2025-10-24 13:19:12 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists templates
|
||||||
|
alter column description set data type TEXT
|
||||||
|
2025-10-24 13:19:12 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists templates
|
||||||
|
alter column sections set data type TEXT
|
||||||
|
2025-10-24 13:19:12 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists todos
|
||||||
|
alter column description set data type TEXT
|
||||||
|
2025-10-24 13:19:12 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@88fe9a8] for TypeConfiguration
|
||||||
|
2025-10-24 13:19:12 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
|
||||||
|
2025-10-24 13:19:12 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used.
|
||||||
|
2025-10-24 13:19:13 [main] INFO c.u.h.m.infra.cache.CacheConfig - Redis 연결 설정 - host: 20.249.177.114, port: 6379, database: 1
|
||||||
|
2025-10-24 13:19:13 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library
|
||||||
|
2025-10-24 13:19:13 [main] INFO c.u.h.m.infra.cache.CacheConfig - Redis 템플릿 설정 완료
|
||||||
|
2025-10-24 13:19:13 [main] INFO c.u.h.m.infra.cache.CacheConfig - ObjectMapper 설정 완료
|
||||||
|
2025-10-24 13:19:13 [main] INFO c.u.h.m.infra.config.EventHubConfig - Initializing Azure EventHub configuration with hub name: hgzero-eventhub-name
|
||||||
|
2025-10-24 13:19:13 [main] INFO c.u.h.m.infra.config.EventHubConfig - Creating EventHub producer for hub: hgzero-eventhub-name
|
||||||
|
2025-10-24 13:19:13 [main] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_868ef4_1761279553291"}
|
||||||
|
2025-10-24 13:19:13 [main] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"}
|
||||||
|
2025-10-24 13:19:13 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
|
||||||
|
2025-10-24 13:19:13 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration -
|
||||||
|
|
||||||
|
Using generated security password: 56f935c6-ace5-41ea-8980-4b503478fd58
|
||||||
|
|
||||||
|
This generated password is for development use only. Your security configuration must be updated before running your application in production.
|
||||||
|
|
||||||
|
2025-10-24 13:19:13 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager
|
||||||
|
2025-10-24 13:19:13 [main] INFO c.u.h.m.infra.config.WebSocketConfig - WebSocket 핸들러 등록 완료 - endpoint: /ws/minutes/{minutesId}
|
||||||
|
2025-10-24 13:19:13 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator'
|
||||||
|
2025-10-24 13:19:13 [main] DEBUG o.s.s.web.DefaultSecurityFilterChain - Will secure any request with filters: DisableEncodeUrlFilter, WebAsyncManagerIntegrationFilter, SecurityContextHolderFilter, HeaderWriterFilter, CorsFilter, LogoutFilter, JwtAuthenticationFilter, RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter, AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, AuthorizationFilter
|
||||||
|
2025-10-24 13:19:14 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8082 (http) with context path '/'
|
||||||
|
2025-10-24 13:19:14 [main] INFO c.u.h.meeting.MeetingApplication - Started MeetingApplication in 4.535 seconds (process running for 4.728)
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 14 ms
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui/index.html
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-1] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Secured GET /swagger-ui/index.html
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui/swagger-ui.css
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-4] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-5] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui/index.css
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-6] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui/swagger-ui-bundle.js
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-5] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-6] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-6] DEBUG o.s.security.web.FilterChainProxy - Secured GET /swagger-ui/swagger-ui-bundle.js
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Secured GET /swagger-ui/swagger-ui.css
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-8] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui/swagger-initializer.js
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-5] DEBUG o.s.security.web.FilterChainProxy - Secured GET /swagger-ui/index.css
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-7] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui/swagger-ui-standalone-preset.js
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-8] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-8] DEBUG o.s.security.web.FilterChainProxy - Secured GET /swagger-ui/swagger-initializer.js
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-7] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-7] DEBUG o.s.security.web.FilterChainProxy - Secured GET /swagger-ui/swagger-ui-standalone-preset.js
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-10] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui/favicon-32x32.png
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-10] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-10] DEBUG o.s.security.web.FilterChainProxy - Secured GET /swagger-ui/favicon-32x32.png
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-9] DEBUG o.s.security.web.FilterChainProxy - Securing GET /v3/api-docs/swagger-config
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-9] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-9] DEBUG o.s.security.web.FilterChainProxy - Secured GET /v3/api-docs/swagger-config
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-9] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] org.springdoc.webmvc.ui.SwaggerConfigResource.openapiJson 호출 - 파라미터: [SecurityContextHolderAwareRequestWrapper[ org.springframework.security.web.header.HeaderWriterFilter$HeaderWriterRequest@61b368ce]]
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-9] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] org.springdoc.webmvc.ui.SwaggerConfigResource.openapiJson 완료 - 실행시간: 0ms
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Securing GET /v3/api-docs
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-1] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Secured GET /v3/api-docs
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson 호출 - 파라미터: [SecurityContextHolderAwareRequestWrapper[ org.springframework.security.web.header.HeaderWriterFilter$HeaderWriterRequest@75391c2a], /v3/api-docs, ko_KR]
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-1] INFO o.s.api.AbstractOpenApiResource - Init duration for springdoc-openapi is: 416 ms
|
||||||
|
2025-10-24 13:19:29 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson 완료 - 실행시간: 426ms
|
||||||
|
2025-10-24 13:47:44 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Upstream connection publisher was completed. Terminating processor.","entityPath":"hgzero-eventhub-name"}
|
||||||
|
2025-10-24 13:47:44 [SpringApplicationShutdownHook] INFO c.a.c.a.i.ReactorConnection - {"az.sdk.message":"Disposing of ReactorConnection.","connectionId":"MF_868ef4_1761279553291","isTransient":false,"isInitiatedByClient":true,"shutdownMessage":"Disposed by client."}
|
||||||
|
2025-10-24 13:47:44 [SpringApplicationShutdownHook] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Channel is disposed.","entityPath":"hgzero-eventhub-name"}
|
||||||
|
2025-10-24 13:47:44 [SpringApplicationShutdownHook] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Closing JPA EntityManagerFactory for persistence unit 'default'
|
||||||
|
2025-10-24 13:47:44 [SpringApplicationShutdownHook] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryClosed from [org.hibernate.internal.SessionFactoryImpl@88fe9a8] for TypeConfiguration
|
||||||
|
2025-10-24 13:47:44 [SpringApplicationShutdownHook] DEBUG o.h.type.spi.TypeConfiguration$Scope - Un-scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration$Scope@66faa3af] from SessionFactory [org.hibernate.internal.SessionFactoryImpl@88fe9a8]
|
||||||
|
2025-10-24 13:47:44 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown initiated...
|
||||||
|
2025-10-24 13:47:44 [SpringApplicationShutdownHook] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Shutdown completed.
|
||||||
|
2025-10-24 13:47:48 [main] INFO c.u.h.meeting.MeetingApplication - Starting MeetingApplication using Java 21.0.8 with PID 68660 (/Users/adela/home/workspace/recent/HGZero/meeting/build/classes/java/main started by adela in /Users/adela/home/workspace/recent/HGZero/meeting)
|
||||||
|
2025-10-24 13:47:48 [main] DEBUG c.u.h.meeting.MeetingApplication - Running with Spring Boot v3.3.5, Spring v6.1.14
|
||||||
|
2025-10-24 13:47:48 [main] INFO c.u.h.meeting.MeetingApplication - The following 1 profile is active: "dev"
|
||||||
|
2025-10-24 13:47:48 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
|
||||||
|
2025-10-24 13:47:48 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
|
||||||
|
2025-10-24 13:47:48 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 68 ms. Found 5 JPA repository interfaces.
|
||||||
|
2025-10-24 13:47:48 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
|
||||||
|
2025-10-24 13:47:48 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
|
||||||
|
2025-10-24 13:47:48 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 13:47:48 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 13:47:48 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 13:47:48 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TemplateJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 13:47:48 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TodoJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 13:47:48 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 0 Redis repository interfaces.
|
||||||
|
2025-10-24 13:47:49 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8082 (http)
|
||||||
|
2025-10-24 13:47:49 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
|
||||||
|
2025-10-24 13:47:49 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31]
|
||||||
|
2025-10-24 13:47:49 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
|
||||||
|
2025-10-24 13:47:49 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1195 ms
|
||||||
|
2025-10-24 13:47:49 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
|
||||||
|
2025-10-24 13:47:49 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final
|
||||||
|
2025-10-24 13:47:49 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@5d2e65bd
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@5d2e65bd
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@5d2e65bd
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@254513e8
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@254513e8
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@74450c9b
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@74450c9b
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@74f89bad
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@74f89bad
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@5ad50b02
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@5ad50b02
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@5ad50b02
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@570299e3
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@570299e3
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@570299e3
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@bff764c
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@bff764c
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@3beaa16d
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@49153009
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@49153009
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@a1b7549
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@7aa63f50
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@142918a0
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@142918a0
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@142918a0
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@745cf754
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@745cf754
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@745cf754
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@25bc65ab
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@25bc65ab
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@25bc65ab
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@6eab92f3
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@6eab92f3
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@6eab92f3
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@321b7b9e
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@321b7b9e
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@321b7b9e
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@21eedcde
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@21eedcde
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@67396475
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@67396475
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@55b74e6b
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@55b74e6b
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@55b74e6b
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@3c1908c8
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@6bc62bb9
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@6bc62bb9
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@47f0e078
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@28db2afb
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@28db2afb
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@28db2afb
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@5c703860
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@6315bb4
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@4682882a
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@37fffef3
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@37fffef3
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@6a116354
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@6a116354
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@66716959
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@34e07e65
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@7ca0166c
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@1dcad16f
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@701c482e
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@4738131e
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@3b576ee3
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@3b576ee3
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@705d914f
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@705d914f
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@6212ea52
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@6212ea52
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@65b5b5ed
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@65b5b5ed
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@6595ffce
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@6595ffce
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@795eddda
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@c6bf8d9
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@44392e64
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@44392e64
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@e18d2a2
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@1a77eb6
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@52d9f36b
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@5f9ebd5a
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@5f9ebd5a
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@175bf9c9
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@2db3675a
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@306c9b2c
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@306c9b2c
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@1ab28416
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@1ab28416
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@52efb338
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@52efb338
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@52efb338
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@64508788
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@64508788
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@64508788
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@30b1c5d5
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@3e2d65e1
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@1174676f
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@1174676f
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@71f8ce0e
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@71f8ce0e
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@71f8ce0e
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@4fd92289
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@1a8e44fe
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@287317df
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@287317df
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@1fcc3461
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@1fcc3461
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@1fcc3461
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@1987807b
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@1987807b
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@71469e01
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@71469e01
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@41bbb219
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@41bbb219
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@3f2ae973
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@3f2ae973
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@1a8b22b5
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@1a8b22b5
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@5f781173
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@43cf5bff
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@6c13019c
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@6c13019c
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@4f7ef948
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@6fdaef04
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@3cacc87
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@3bc6c10f
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@3dcbbbc
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@4040ccae
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@15bb8ed5
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@18f8ebd4
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@7e1fb22c
|
||||||
|
2025-10-24 13:47:49 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
|
||||||
|
2025-10-24 13:47:49 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
|
||||||
|
2025-10-24 13:47:49 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@17ea3bc0
|
||||||
|
2025-10-24 13:47:49 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
|
||||||
|
2025-10-24 13:47:49 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@52fe87e0) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@37393dab)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@4866a755) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@1361e880)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT))
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT))
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@e0d9e3f
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@e0d9e3f
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@6c13019c`
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007)
|
||||||
|
2025-10-24 13:47:49 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@417b3642] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@6bd28e4a]
|
||||||
|
2025-10-24 13:47:50 [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)
|
||||||
|
2025-10-24 13:47:50 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@417b3642] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@2b592f17]
|
||||||
|
2025-10-24 13:47:50 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists meetings
|
||||||
|
alter column description set data type TEXT
|
||||||
|
2025-10-24 13:47:50 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists meetings
|
||||||
|
alter column participants set data type TEXT
|
||||||
|
2025-10-24 13:47:50 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists minutes_sections
|
||||||
|
alter column content set data type TEXT
|
||||||
|
2025-10-24 13:47:50 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists templates
|
||||||
|
alter column description set data type TEXT
|
||||||
|
2025-10-24 13:47:50 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists templates
|
||||||
|
alter column sections set data type TEXT
|
||||||
|
2025-10-24 13:47:50 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists todos
|
||||||
|
alter column description set data type TEXT
|
||||||
|
2025-10-24 13:47:50 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@2b592f17] for TypeConfiguration
|
||||||
|
2025-10-24 13:47:50 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
|
||||||
|
2025-10-24 13:47:50 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used.
|
||||||
|
2025-10-24 13:47:51 [main] INFO c.u.h.m.infra.cache.CacheConfig - Redis 연결 설정 - host: 20.249.177.114, port: 6379, database: 1
|
||||||
|
2025-10-24 13:47:51 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library
|
||||||
|
2025-10-24 13:47:51 [main] INFO c.u.h.m.infra.cache.CacheConfig - Redis 템플릿 설정 완료
|
||||||
|
2025-10-24 13:47:51 [main] INFO c.u.h.m.infra.cache.CacheConfig - ObjectMapper 설정 완료
|
||||||
|
2025-10-24 13:47:51 [main] INFO c.u.h.m.infra.config.EventHubConfig - Initializing Azure EventHub configuration with hub name: hgzero-eventhub-name
|
||||||
|
2025-10-24 13:47:51 [main] INFO c.u.h.m.infra.config.EventHubConfig - Creating EventHub producer for hub: hgzero-eventhub-name
|
||||||
|
2025-10-24 13:47:51 [main] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_a59cb7_1761281271496"}
|
||||||
|
2025-10-24 13:47:51 [main] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"}
|
||||||
|
2025-10-24 13:47:51 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
|
||||||
|
2025-10-24 13:47:51 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration -
|
||||||
|
|
||||||
|
Using generated security password: 961311b1-6145-43f6-953c-04e70e3447ad
|
||||||
|
|
||||||
|
This generated password is for development use only. Your security configuration must be updated before running your application in production.
|
||||||
|
|
||||||
|
2025-10-24 13:47:51 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager
|
||||||
|
2025-10-24 13:47:51 [main] INFO c.u.h.m.infra.config.WebSocketConfig - WebSocket 핸들러 등록 완료 - endpoint: /ws/minutes/{minutesId}
|
||||||
|
2025-10-24 13:47:51 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator'
|
||||||
|
2025-10-24 13:47:52 [main] DEBUG o.s.s.web.DefaultSecurityFilterChain - Will secure any request with filters: DisableEncodeUrlFilter, WebAsyncManagerIntegrationFilter, SecurityContextHolderFilter, HeaderWriterFilter, CorsFilter, LogoutFilter, JwtAuthenticationFilter, RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter, AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, AuthorizationFilter
|
||||||
|
2025-10-24 13:47:52 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8082 (http) with context path '/'
|
||||||
|
2025-10-24 13:47:52 [main] INFO c.u.h.meeting.MeetingApplication - Started MeetingApplication in 4.575 seconds (process running for 4.775)
|
||||||
|
2025-10-24 13:47:55 [http-nio-8082-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
|
||||||
|
2025-10-24 13:47:55 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
|
||||||
|
2025-10-24 13:47:55 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 2 ms
|
||||||
|
2025-10-24 13:47:55 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui/index.html
|
||||||
|
2025-10-24 13:47:55 [http-nio-8082-exec-1] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:47:55 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Secured GET /swagger-ui/index.html
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-2] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui/swagger-ui.css
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-2] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-3] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui/index.css
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-2] DEBUG o.s.security.web.FilterChainProxy - Secured GET /swagger-ui/swagger-ui.css
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-3] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-3] DEBUG o.s.security.web.FilterChainProxy - Secured GET /swagger-ui/index.css
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-5] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui/swagger-ui-standalone-preset.js
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-5] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui/swagger-ui-bundle.js
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-5] DEBUG o.s.security.web.FilterChainProxy - Secured GET /swagger-ui/swagger-ui-standalone-preset.js
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-6] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui/swagger-initializer.js
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-4] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-6] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-6] DEBUG o.s.security.web.FilterChainProxy - Secured GET /swagger-ui/swagger-initializer.js
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Secured GET /swagger-ui/swagger-ui-bundle.js
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-8] DEBUG o.s.security.web.FilterChainProxy - Securing GET /swagger-ui/favicon-32x32.png
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-7] DEBUG o.s.security.web.FilterChainProxy - Securing GET /v3/api-docs/swagger-config
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-8] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-7] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-8] DEBUG o.s.security.web.FilterChainProxy - Secured GET /swagger-ui/favicon-32x32.png
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-7] DEBUG o.s.security.web.FilterChainProxy - Secured GET /v3/api-docs/swagger-config
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-7] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] org.springdoc.webmvc.ui.SwaggerConfigResource.openapiJson 호출 - 파라미터: [SecurityContextHolderAwareRequestWrapper[ org.springframework.security.web.header.HeaderWriterFilter$HeaderWriterRequest@7231de39]]
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-7] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] org.springdoc.webmvc.ui.SwaggerConfigResource.openapiJson 완료 - 실행시간: 0ms
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-9] DEBUG o.s.security.web.FilterChainProxy - Securing GET /v3/api-docs
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-9] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-9] DEBUG o.s.security.web.FilterChainProxy - Secured GET /v3/api-docs
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-9] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson 호출 - 파라미터: [SecurityContextHolderAwareRequestWrapper[ org.springframework.security.web.header.HeaderWriterFilter$HeaderWriterRequest@7472d8df], /v3/api-docs, ko_KR]
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-9] INFO o.s.api.AbstractOpenApiResource - Init duration for springdoc-openapi is: 384 ms
|
||||||
|
2025-10-24 13:47:56 [http-nio-8082-exec-9] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson 완료 - 실행시간: 394ms
|
||||||
|
2025-10-24 14:18:38 [main] INFO c.u.h.meeting.MeetingApplication - Starting MeetingApplication using Java 21.0.8 with PID 74804 (/Users/adela/home/workspace/recent/HGZero/meeting/build/classes/java/main started by adela in /Users/adela/home/workspace/recent/HGZero/meeting)
|
||||||
|
2025-10-24 14:18:38 [main] DEBUG c.u.h.meeting.MeetingApplication - Running with Spring Boot v3.3.5, Spring v6.1.14
|
||||||
|
2025-10-24 14:18:38 [main] INFO c.u.h.meeting.MeetingApplication - The following 1 profile is active: "dev"
|
||||||
|
2025-10-24 14:18:38 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
|
||||||
|
2025-10-24 14:18:38 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 70 ms. Found 5 JPA repository interfaces.
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MeetingJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.MinutesSectionJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TemplateJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.s.d.r.c.RepositoryConfigurationExtensionSupport - Spring Data Redis - Could not safely identify store assignment for repository candidate interface com.unicorn.hgzero.meeting.infra.gateway.repository.TodoJpaRepository; If you want this repository to be a Redis repository, consider annotating your entities with one of these annotations: org.springframework.data.redis.core.RedisHash (preferred), or consider extending one of the following types with your repository: org.springframework.data.keyvalue.repository.KeyValueRepository
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.s.d.r.c.RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 12 ms. Found 0 Redis repository interfaces.
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat initialized with port 8082 (http)
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.a.catalina.core.StandardService - Starting service [Tomcat]
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.a.catalina.core.StandardEngine - Starting Servlet engine: [Apache Tomcat/10.1.31]
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.s.b.w.s.c.ServletWebServerApplicationContext - Root WebApplicationContext: initialization completed in 1182 ms
|
||||||
|
2025-10-24 14:18:39 [main] INFO o.h.jpa.internal.util.LogHelper - HHH000204: Processing PersistenceUnitInfo [name: default]
|
||||||
|
2025-10-24 14:18:40 [main] INFO org.hibernate.Version - HHH000412: Hibernate ORM core version 6.5.3.Final
|
||||||
|
2025-10-24 14:18:40 [main] INFO o.h.c.i.RegionFactoryInitiator - HHH000026: Second-level cache disabled
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@41bbb219
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration boolean -> org.hibernate.type.BasicTypeReference@41bbb219
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Boolean -> org.hibernate.type.BasicTypeReference@41bbb219
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration numeric_boolean -> org.hibernate.type.BasicTypeReference@3f2ae973
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.NumericBooleanConverter -> org.hibernate.type.BasicTypeReference@3f2ae973
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration true_false -> org.hibernate.type.BasicTypeReference@1a8b22b5
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.TrueFalseConverter -> org.hibernate.type.BasicTypeReference@1a8b22b5
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration yes_no -> org.hibernate.type.BasicTypeReference@5f781173
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.YesNoConverter -> org.hibernate.type.BasicTypeReference@5f781173
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@43cf5bff
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte -> org.hibernate.type.BasicTypeReference@43cf5bff
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Byte -> org.hibernate.type.BasicTypeReference@43cf5bff
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary -> org.hibernate.type.BasicTypeReference@2b464384
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration byte[] -> org.hibernate.type.BasicTypeReference@2b464384
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [B -> org.hibernate.type.BasicTypeReference@2b464384
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration binary_wrapper -> org.hibernate.type.BasicTypeReference@681b42d3
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-binary -> org.hibernate.type.BasicTypeReference@681b42d3
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration image -> org.hibernate.type.BasicTypeReference@77f7352a
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration blob -> org.hibernate.type.BasicTypeReference@4ede8888
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Blob -> org.hibernate.type.BasicTypeReference@4ede8888
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob -> org.hibernate.type.BasicTypeReference@571db8b4
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_blob_wrapper -> org.hibernate.type.BasicTypeReference@65a2755e
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@2b3242a5
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration short -> org.hibernate.type.BasicTypeReference@2b3242a5
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Short -> org.hibernate.type.BasicTypeReference@2b3242a5
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration integer -> org.hibernate.type.BasicTypeReference@11120583
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration int -> org.hibernate.type.BasicTypeReference@11120583
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Integer -> org.hibernate.type.BasicTypeReference@11120583
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@2bf0c70d
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration long -> org.hibernate.type.BasicTypeReference@2bf0c70d
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Long -> org.hibernate.type.BasicTypeReference@2bf0c70d
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@5d8e4fa8
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration float -> org.hibernate.type.BasicTypeReference@5d8e4fa8
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Float -> org.hibernate.type.BasicTypeReference@5d8e4fa8
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@649009d6
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration double -> org.hibernate.type.BasicTypeReference@649009d6
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Double -> org.hibernate.type.BasicTypeReference@649009d6
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_integer -> org.hibernate.type.BasicTypeReference@652f26da
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigInteger -> org.hibernate.type.BasicTypeReference@652f26da
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration big_decimal -> org.hibernate.type.BasicTypeReference@484a5ddd
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.math.BigDecimal -> org.hibernate.type.BasicTypeReference@484a5ddd
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character -> org.hibernate.type.BasicTypeReference@6796a873
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char -> org.hibernate.type.BasicTypeReference@6796a873
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Character -> org.hibernate.type.BasicTypeReference@6796a873
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration character_nchar -> org.hibernate.type.BasicTypeReference@3acc3ee
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration string -> org.hibernate.type.BasicTypeReference@1f293cb7
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.String -> org.hibernate.type.BasicTypeReference@1f293cb7
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nstring -> org.hibernate.type.BasicTypeReference@5972e3a
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration characters -> org.hibernate.type.BasicTypeReference@5790cbcb
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration char[] -> org.hibernate.type.BasicTypeReference@5790cbcb
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration [C -> org.hibernate.type.BasicTypeReference@5790cbcb
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration wrapper-characters -> org.hibernate.type.BasicTypeReference@32c6d164
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration text -> org.hibernate.type.BasicTypeReference@645c9f0f
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ntext -> org.hibernate.type.BasicTypeReference@58068b40
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration clob -> org.hibernate.type.BasicTypeReference@999cd18
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Clob -> org.hibernate.type.BasicTypeReference@999cd18
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration nclob -> org.hibernate.type.BasicTypeReference@dd060be
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.NClob -> org.hibernate.type.BasicTypeReference@dd060be
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob -> org.hibernate.type.BasicTypeReference@df432ec
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_char_array -> org.hibernate.type.BasicTypeReference@6144e499
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_clob_character_array -> org.hibernate.type.BasicTypeReference@26f204a4
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob -> org.hibernate.type.BasicTypeReference@28295554
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_character_array -> org.hibernate.type.BasicTypeReference@4e671ef
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration materialized_nclob_char_array -> org.hibernate.type.BasicTypeReference@42403dc6
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> org.hibernate.type.BasicTypeReference@74a1d60e
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> org.hibernate.type.BasicTypeReference@74a1d60e
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDateTime -> org.hibernate.type.BasicTypeReference@16c0be3b
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDateTime -> org.hibernate.type.BasicTypeReference@16c0be3b
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalDate -> org.hibernate.type.BasicTypeReference@219edc05
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalDate -> org.hibernate.type.BasicTypeReference@219edc05
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration LocalTime -> org.hibernate.type.BasicTypeReference@62f37bfd
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.LocalTime -> org.hibernate.type.BasicTypeReference@62f37bfd
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> org.hibernate.type.BasicTypeReference@1818d00b
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> org.hibernate.type.BasicTypeReference@1818d00b
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@b3a8455
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@5c930fc3
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> org.hibernate.type.BasicTypeReference@25c6ab3f
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> org.hibernate.type.BasicTypeReference@25c6ab3f
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeUtc -> org.hibernate.type.BasicTypeReference@7b80af04
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithTimezone -> org.hibernate.type.BasicTypeReference@2447940d
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@60ee7a51
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> org.hibernate.type.BasicTypeReference@70e1aa20
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> org.hibernate.type.BasicTypeReference@70e1aa20
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithTimezone -> org.hibernate.type.BasicTypeReference@e67d3b7
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTimeWithoutTimezone -> org.hibernate.type.BasicTypeReference@1618c98a
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration date -> org.hibernate.type.BasicTypeReference@5b715ea
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Date -> org.hibernate.type.BasicTypeReference@5b715ea
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration time -> org.hibernate.type.BasicTypeReference@787a0fd6
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Time -> org.hibernate.type.BasicTypeReference@787a0fd6
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timestamp -> org.hibernate.type.BasicTypeReference@48b09105
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.sql.Timestamp -> org.hibernate.type.BasicTypeReference@48b09105
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Date -> org.hibernate.type.BasicTypeReference@48b09105
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar -> org.hibernate.type.BasicTypeReference@18b45500
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Calendar -> org.hibernate.type.BasicTypeReference@18b45500
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.GregorianCalendar -> org.hibernate.type.BasicTypeReference@18b45500
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_date -> org.hibernate.type.BasicTypeReference@25110bb9
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration calendar_time -> org.hibernate.type.BasicTypeReference@dbda472
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration instant -> org.hibernate.type.BasicTypeReference@41492479
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Instant -> org.hibernate.type.BasicTypeReference@41492479
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid -> org.hibernate.type.BasicTypeReference@7bef7505
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.UUID -> org.hibernate.type.BasicTypeReference@7bef7505
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration pg-uuid -> org.hibernate.type.BasicTypeReference@7bef7505
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-binary -> org.hibernate.type.BasicTypeReference@568ef502
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration uuid-char -> org.hibernate.type.BasicTypeReference@36f05595
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration class -> org.hibernate.type.BasicTypeReference@3e12c5de
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Class -> org.hibernate.type.BasicTypeReference@3e12c5de
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration currency -> org.hibernate.type.BasicTypeReference@3e55d844
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Currency -> org.hibernate.type.BasicTypeReference@3e55d844
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Currency -> org.hibernate.type.BasicTypeReference@3e55d844
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration locale -> org.hibernate.type.BasicTypeReference@1f521c69
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.Locale -> org.hibernate.type.BasicTypeReference@1f521c69
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration serializable -> org.hibernate.type.BasicTypeReference@2b3abeeb
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.io.Serializable -> org.hibernate.type.BasicTypeReference@2b3abeeb
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration timezone -> org.hibernate.type.BasicTypeReference@3aeb267
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.util.TimeZone -> org.hibernate.type.BasicTypeReference@3aeb267
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZoneOffset -> org.hibernate.type.BasicTypeReference@13a9cdae
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZoneOffset -> org.hibernate.type.BasicTypeReference@13a9cdae
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration url -> org.hibernate.type.BasicTypeReference@1c972ae6
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.net.URL -> org.hibernate.type.BasicTypeReference@1c972ae6
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration vector -> org.hibernate.type.BasicTypeReference@62a41279
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration row_version -> org.hibernate.type.BasicTypeReference@146fa9c0
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration object -> org.hibernate.type.JavaObjectType@338270ea
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@338270ea
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration null -> org.hibernate.type.NullType@23954300
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_date -> org.hibernate.type.BasicTypeReference@6aae82cc
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_time -> org.hibernate.type.BasicTypeReference@622ba721
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_timestamp -> org.hibernate.type.BasicTypeReference@6b2f7527
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar -> org.hibernate.type.BasicTypeReference@7509226c
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_date -> org.hibernate.type.BasicTypeReference@4c9cce17
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_calendar_time -> org.hibernate.type.BasicTypeReference@73316a0a
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_binary -> org.hibernate.type.BasicTypeReference@63a7af06
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration imm_serializable -> org.hibernate.type.BasicTypeReference@5f01fb5c
|
||||||
|
2025-10-24 14:18:40 [main] INFO o.s.o.j.p.SpringPersistenceUnitInfo - No LoadTimeWeaver setup: ignoring JPA class transformer
|
||||||
|
2025-10-24 14:18:40 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting...
|
||||||
|
2025-10-24 14:18:40 [main] INFO com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@6f8fb906
|
||||||
|
2025-10-24 14:18:40 [main] INFO com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed.
|
||||||
|
2025-10-24 14:18:40 [main] WARN org.hibernate.orm.deprecation - HHH90000025: PostgreSQLDialect does not need to be specified explicitly using 'hibernate.dialect' (remove the property setting and it will be selected by default)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(2003, org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@790d629a) replaced previous registration(org.hibernate.type.descriptor.sql.internal.ArrayDdlTypeImpl@346e5cc)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.h.t.d.sql.spi.DdlTypeRegistry - addDescriptor(6, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@2cd2c764) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@d17d554)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2004, BlobTypeDescriptor(BLOB_BINDING)) replaced previous registration(BlobTypeDescriptor(DEFAULT))
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.h.t.d.jdbc.spi.JdbcTypeRegistry - addDescriptor(2005, ClobTypeDescriptor(CLOB_BINDING)) replaced previous registration(ClobTypeDescriptor(DEFAULT))
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration JAVA_OBJECT -> org.hibernate.type.JavaObjectType@40199d5e
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.lang.Object -> org.hibernate.type.JavaObjectType@40199d5e
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Type registration key [java.lang.Object] overrode previous entry : `org.hibernate.type.JavaObjectType@338270ea`
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.DurationType -> basicType@1(java.time.Duration,3015)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration Duration -> basicType@1(java.time.Duration,3015)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.Duration -> basicType@1(java.time.Duration,3015)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetDateTimeType -> basicType@2(java.time.OffsetDateTime,3003)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetDateTime -> basicType@2(java.time.OffsetDateTime,3003)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.ZonedDateTimeType -> basicType@3(java.time.ZonedDateTime,3003)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.ZonedDateTime -> basicType@3(java.time.ZonedDateTime,3003)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration org.hibernate.type.OffsetTimeType -> basicType@4(java.time.OffsetTime,3007)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration OffsetTime -> basicType@4(java.time.OffsetTime,3007)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.hibernate.type.BasicTypeRegistry - Adding type registration java.time.OffsetTime -> basicType@4(java.time.OffsetTime,3007)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@5dff108c] to MetadataBuildingContext [org.hibernate.boot.internal.MetadataBuildingContextRootImpl@22d47f09]
|
||||||
|
2025-10-24 14:18:40 [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)
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG o.h.type.spi.TypeConfiguration$Scope - Scoping TypeConfiguration [org.hibernate.type.spi.TypeConfiguration@5dff108c] to SessionFactoryImplementor [org.hibernate.internal.SessionFactoryImpl@1ae69abe]
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists meetings
|
||||||
|
alter column description set data type TEXT
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists meetings
|
||||||
|
alter column participants set data type TEXT
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists minutes_sections
|
||||||
|
alter column content set data type TEXT
|
||||||
|
2025-10-24 14:18:40 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists templates
|
||||||
|
alter column description set data type TEXT
|
||||||
|
2025-10-24 14:18:41 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists templates
|
||||||
|
alter column sections set data type TEXT
|
||||||
|
2025-10-24 14:18:41 [main] DEBUG org.hibernate.SQL -
|
||||||
|
alter table if exists todos
|
||||||
|
alter column description set data type TEXT
|
||||||
|
2025-10-24 14:18:41 [main] TRACE o.h.type.spi.TypeConfiguration$Scope - Handling #sessionFactoryCreated from [org.hibernate.internal.SessionFactoryImpl@1ae69abe] for TypeConfiguration
|
||||||
|
2025-10-24 14:18:41 [main] INFO o.s.o.j.LocalContainerEntityManagerFactoryBean - Initialized JPA EntityManagerFactory for persistence unit 'default'
|
||||||
|
2025-10-24 14:18:41 [main] INFO o.s.d.j.r.query.QueryEnhancerFactory - Hibernate is in classpath; If applicable, HQL parser will be used.
|
||||||
|
2025-10-24 14:18:41 [main] INFO c.u.h.m.infra.cache.CacheConfig - Redis 연결 설정 - host: 20.249.177.114, port: 6379, database: 1
|
||||||
|
2025-10-24 14:18:41 [main] ERROR i.n.r.d.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library
|
||||||
|
2025-10-24 14:18:41 [main] INFO c.u.h.m.infra.cache.CacheConfig - Redis 템플릿 설정 완료
|
||||||
|
2025-10-24 14:18:41 [main] INFO c.u.h.m.infra.cache.CacheConfig - ObjectMapper 설정 완료
|
||||||
|
2025-10-24 14:18:41 [main] INFO c.u.h.m.infra.config.EventHubConfig - Initializing Azure EventHub configuration with hub name: hgzero-eventhub-name
|
||||||
|
2025-10-24 14:18:41 [main] INFO c.u.h.m.infra.config.EventHubConfig - Creating EventHub producer for hub: hgzero-eventhub-name
|
||||||
|
2025-10-24 14:18:41 [main] INFO c.a.m.e.EventHubClientBuilder - {"az.sdk.message":"Emitting a single connection.","connectionId":"MF_5dcff9_1761283121917"}
|
||||||
|
2025-10-24 14:18:41 [main] INFO c.a.m.e.i.EventHubConnectionProcessor - {"az.sdk.message":"Setting next AMQP channel.","entityPath":"hgzero-eventhub-name"}
|
||||||
|
2025-10-24 14:18:42 [main] WARN o.s.b.a.o.j.JpaBaseConfiguration$JpaWebConfiguration - spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
|
||||||
|
2025-10-24 14:18:42 [main] WARN o.s.b.a.s.s.UserDetailsServiceAutoConfiguration -
|
||||||
|
|
||||||
|
Using generated security password: 6f862cd6-9b02-4031-857b-66dd1f3f8910
|
||||||
|
|
||||||
|
This generated password is for development use only. Your security configuration must be updated before running your application in production.
|
||||||
|
|
||||||
|
2025-10-24 14:18:42 [main] INFO o.s.s.c.a.a.c.InitializeUserDetailsBeanManagerConfigurer$InitializeUserDetailsManagerConfigurer - Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager
|
||||||
|
2025-10-24 14:18:42 [main] INFO c.u.h.m.infra.config.WebSocketConfig - WebSocket 핸들러 등록 완료 - endpoint: /ws/minutes/{minutesId}
|
||||||
|
2025-10-24 14:18:42 [main] INFO o.s.b.a.e.web.EndpointLinksResolver - Exposing 3 endpoints beneath base path '/actuator'
|
||||||
|
2025-10-24 14:18:42 [main] DEBUG o.s.s.web.DefaultSecurityFilterChain - Will secure any request with filters: DisableEncodeUrlFilter, WebAsyncManagerIntegrationFilter, SecurityContextHolderFilter, HeaderWriterFilter, CorsFilter, LogoutFilter, JwtAuthenticationFilter, RequestCacheAwareFilter, SecurityContextHolderAwareRequestFilter, AnonymousAuthenticationFilter, SessionManagementFilter, ExceptionTranslationFilter, AuthorizationFilter
|
||||||
|
2025-10-24 14:18:42 [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port 8082 (http) with context path '/'
|
||||||
|
2025-10-24 14:18:43 [main] INFO c.u.h.meeting.MeetingApplication - Started MeetingApplication in 4.633 seconds (process running for 4.868)
|
||||||
|
2025-10-24 14:18:45 [http-nio-8082-exec-1] INFO o.a.c.c.C.[Tomcat].[localhost].[/] - Initializing Spring DispatcherServlet 'dispatcherServlet'
|
||||||
|
2025-10-24 14:18:45 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Initializing Servlet 'dispatcherServlet'
|
||||||
|
2025-10-24 14:18:45 [http-nio-8082-exec-1] INFO o.s.web.servlet.DispatcherServlet - Completed initialization in 3 ms
|
||||||
|
2025-10-24 14:18:45 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Securing GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:18:45 [http-nio-8082-exec-1] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:18:45 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Secured GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:18:45 [http-nio-8082-exec-1] WARN o.s.w.s.m.s.DefaultHandlerExceptionResolver - Resolved [org.springframework.web.bind.MissingRequestHeaderException: Required request header 'X-User-Id' for method parameter type String is not present]
|
||||||
|
2025-10-24 14:18:45 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Securing GET /error
|
||||||
|
2025-10-24 14:18:45 [http-nio-8082-exec-1] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:18:45 [http-nio-8082-exec-1] DEBUG o.s.s.w.a.Http403ForbiddenEntryPoint - Pre-authenticated entry point called. Rejecting access
|
||||||
|
2025-10-24 14:18:46 [http-nio-8082-exec-3] DEBUG o.s.security.web.FilterChainProxy - Securing GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:18:46 [http-nio-8082-exec-3] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:18:46 [http-nio-8082-exec-3] DEBUG o.s.security.web.FilterChainProxy - Secured GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:18:46 [http-nio-8082-exec-3] WARN o.s.w.s.m.s.DefaultHandlerExceptionResolver - Resolved [org.springframework.web.bind.MissingRequestHeaderException: Required request header 'X-User-Id' for method parameter type String is not present]
|
||||||
|
2025-10-24 14:18:46 [http-nio-8082-exec-3] DEBUG o.s.security.web.FilterChainProxy - Securing GET /error
|
||||||
|
2025-10-24 14:18:46 [http-nio-8082-exec-3] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:18:46 [http-nio-8082-exec-3] DEBUG o.s.s.w.a.Http403ForbiddenEntryPoint - Pre-authenticated entry point called. Rejecting access
|
||||||
|
2025-10-24 14:18:47 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Securing GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:18:47 [http-nio-8082-exec-4] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:18:47 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Secured GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:18:47 [http-nio-8082-exec-4] WARN o.s.w.s.m.s.DefaultHandlerExceptionResolver - Resolved [org.springframework.web.bind.MissingRequestHeaderException: Required request header 'X-User-Id' for method parameter type String is not present]
|
||||||
|
2025-10-24 14:18:47 [http-nio-8082-exec-4] DEBUG o.s.security.web.FilterChainProxy - Securing GET /error
|
||||||
|
2025-10-24 14:18:47 [http-nio-8082-exec-4] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:18:47 [http-nio-8082-exec-4] DEBUG o.s.s.w.a.Http403ForbiddenEntryPoint - Pre-authenticated entry point called. Rejecting access
|
||||||
|
2025-10-24 14:18:47 [http-nio-8082-exec-5] DEBUG o.s.security.web.FilterChainProxy - Securing GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:18:47 [http-nio-8082-exec-5] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:18:47 [http-nio-8082-exec-5] DEBUG o.s.security.web.FilterChainProxy - Secured GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:18:47 [http-nio-8082-exec-5] WARN o.s.w.s.m.s.DefaultHandlerExceptionResolver - Resolved [org.springframework.web.bind.MissingRequestHeaderException: Required request header 'X-User-Id' for method parameter type String is not present]
|
||||||
|
2025-10-24 14:18:47 [http-nio-8082-exec-5] DEBUG o.s.security.web.FilterChainProxy - Securing GET /error
|
||||||
|
2025-10-24 14:18:47 [http-nio-8082-exec-5] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:18:47 [http-nio-8082-exec-5] DEBUG o.s.s.w.a.Http403ForbiddenEntryPoint - Pre-authenticated entry point called. Rejecting access
|
||||||
|
2025-10-24 14:18:48 [http-nio-8082-exec-6] DEBUG o.s.security.web.FilterChainProxy - Securing GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:18:48 [http-nio-8082-exec-6] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:18:48 [http-nio-8082-exec-6] DEBUG o.s.security.web.FilterChainProxy - Secured GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:18:48 [http-nio-8082-exec-6] WARN o.s.w.s.m.s.DefaultHandlerExceptionResolver - Resolved [org.springframework.web.bind.MissingRequestHeaderException: Required request header 'X-User-Id' for method parameter type String is not present]
|
||||||
|
2025-10-24 14:18:48 [http-nio-8082-exec-6] DEBUG o.s.security.web.FilterChainProxy - Securing GET /error
|
||||||
|
2025-10-24 14:18:48 [http-nio-8082-exec-6] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:18:48 [http-nio-8082-exec-6] DEBUG o.s.s.w.a.Http403ForbiddenEntryPoint - Pre-authenticated entry point called. Rejecting access
|
||||||
|
2025-10-24 14:18:48 [http-nio-8082-exec-7] DEBUG o.s.security.web.FilterChainProxy - Securing GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:18:48 [http-nio-8082-exec-7] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:18:48 [http-nio-8082-exec-7] DEBUG o.s.security.web.FilterChainProxy - Secured GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:18:48 [http-nio-8082-exec-7] WARN o.s.w.s.m.s.DefaultHandlerExceptionResolver - Resolved [org.springframework.web.bind.MissingRequestHeaderException: Required request header 'X-User-Id' for method parameter type String is not present]
|
||||||
|
2025-10-24 14:18:48 [http-nio-8082-exec-7] DEBUG o.s.security.web.FilterChainProxy - Securing GET /error
|
||||||
|
2025-10-24 14:18:48 [http-nio-8082-exec-7] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:18:48 [http-nio-8082-exec-7] DEBUG o.s.s.w.a.Http403ForbiddenEntryPoint - Pre-authenticated entry point called. Rejecting access
|
||||||
|
2025-10-24 14:19:17 [http-nio-8082-exec-8] DEBUG o.s.security.web.FilterChainProxy - Securing GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:17 [http-nio-8082-exec-8] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:19:17 [http-nio-8082-exec-8] DEBUG o.s.security.web.FilterChainProxy - Secured GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:17 [http-nio-8082-exec-8] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.getMeeting 호출 - 파라미터: [meeting-scheduled-1, user-001]
|
||||||
|
2025-10-24 14:19:17 [http-nio-8082-exec-8] INFO c.u.h.m.i.c.MeetingController - 회의 정보 조회 요청 - meetingId: meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:17 [http-nio-8082-exec-8] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:17 [http-nio-8082-exec-8] DEBUG org.hibernate.SQL -
|
||||||
|
select
|
||||||
|
me1_0.meeting_id,
|
||||||
|
me1_0.created_at,
|
||||||
|
me1_0.description,
|
||||||
|
me1_0.ended_at,
|
||||||
|
me1_0.organizer_id,
|
||||||
|
me1_0.participants,
|
||||||
|
me1_0.scheduled_at,
|
||||||
|
me1_0.started_at,
|
||||||
|
me1_0.status,
|
||||||
|
me1_0.template_id,
|
||||||
|
me1_0.title,
|
||||||
|
me1_0.updated_at
|
||||||
|
from
|
||||||
|
meetings me1_0
|
||||||
|
where
|
||||||
|
me1_0.meeting_id=?
|
||||||
|
2025-10-24 14:19:17 [http-nio-8082-exec-8] INFO c.u.h.m.i.c.MeetingController - 회의 정보 조회 완료 - meetingId: meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:17 [http-nio-8082-exec-8] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.getMeeting 완료 - 실행시간: 96ms
|
||||||
|
2025-10-24 14:19:22 [http-nio-8082-exec-10] DEBUG o.s.security.web.FilterChainProxy - Securing GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:22 [http-nio-8082-exec-10] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:19:22 [http-nio-8082-exec-10] DEBUG o.s.security.web.FilterChainProxy - Secured GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:22 [http-nio-8082-exec-10] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.getMeeting 호출 - 파라미터: [meeting-scheduled-1, user-001]
|
||||||
|
2025-10-24 14:19:22 [http-nio-8082-exec-10] INFO c.u.h.m.i.c.MeetingController - 회의 정보 조회 요청 - meetingId: meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:22 [http-nio-8082-exec-10] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:22 [http-nio-8082-exec-10] DEBUG org.hibernate.SQL -
|
||||||
|
select
|
||||||
|
me1_0.meeting_id,
|
||||||
|
me1_0.created_at,
|
||||||
|
me1_0.description,
|
||||||
|
me1_0.ended_at,
|
||||||
|
me1_0.organizer_id,
|
||||||
|
me1_0.participants,
|
||||||
|
me1_0.scheduled_at,
|
||||||
|
me1_0.started_at,
|
||||||
|
me1_0.status,
|
||||||
|
me1_0.template_id,
|
||||||
|
me1_0.title,
|
||||||
|
me1_0.updated_at
|
||||||
|
from
|
||||||
|
meetings me1_0
|
||||||
|
where
|
||||||
|
me1_0.meeting_id=?
|
||||||
|
2025-10-24 14:19:22 [http-nio-8082-exec-10] INFO c.u.h.m.i.c.MeetingController - 회의 정보 조회 완료 - meetingId: meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:22 [http-nio-8082-exec-10] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.getMeeting 완료 - 실행시간: 40ms
|
||||||
|
2025-10-24 14:19:25 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Securing GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:25 [http-nio-8082-exec-1] DEBUG o.s.s.w.a.AnonymousAuthenticationFilter - Set SecurityContextHolder to anonymous SecurityContext
|
||||||
|
2025-10-24 14:19:25 [http-nio-8082-exec-1] DEBUG o.s.security.web.FilterChainProxy - Secured GET /api/meetings/meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:25 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.getMeeting 호출 - 파라미터: [meeting-scheduled-1, user-001]
|
||||||
|
2025-10-24 14:19:25 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MeetingController - 회의 정보 조회 요청 - meetingId: meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:25 [http-nio-8082-exec-1] DEBUG c.u.h.m.biz.service.MeetingService - Getting meeting: meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:25 [http-nio-8082-exec-1] DEBUG org.hibernate.SQL -
|
||||||
|
select
|
||||||
|
me1_0.meeting_id,
|
||||||
|
me1_0.created_at,
|
||||||
|
me1_0.description,
|
||||||
|
me1_0.ended_at,
|
||||||
|
me1_0.organizer_id,
|
||||||
|
me1_0.participants,
|
||||||
|
me1_0.scheduled_at,
|
||||||
|
me1_0.started_at,
|
||||||
|
me1_0.status,
|
||||||
|
me1_0.template_id,
|
||||||
|
me1_0.title,
|
||||||
|
me1_0.updated_at
|
||||||
|
from
|
||||||
|
meetings me1_0
|
||||||
|
where
|
||||||
|
me1_0.meeting_id=?
|
||||||
|
2025-10-24 14:19:25 [http-nio-8082-exec-1] INFO c.u.h.m.i.c.MeetingController - 회의 정보 조회 완료 - meetingId: meeting-scheduled-1
|
||||||
|
2025-10-24 14:19:25 [http-nio-8082-exec-1] INFO c.u.hgzero.common.aop.LoggingAspect - [Controller] com.unicorn.hgzero.meeting.infra.controller.MeetingController.getMeeting 완료 - 실행시간: 35ms
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import lombok.Getter;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -32,6 +33,16 @@ public class Meeting {
|
|||||||
*/
|
*/
|
||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 회의 목적
|
||||||
|
*/
|
||||||
|
private String purpose;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 회의 장소
|
||||||
|
*/
|
||||||
|
private String location;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 회의 일시
|
* 회의 일시
|
||||||
*/
|
*/
|
||||||
@ -96,4 +107,14 @@ public class Meeting {
|
|||||||
public boolean isInProgress() {
|
public boolean isInProgress() {
|
||||||
return "IN_PROGRESS".equals(this.status);
|
return "IN_PROGRESS".equals(this.status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 참석자 추가
|
||||||
|
*/
|
||||||
|
public void addParticipant(String participantEmail) {
|
||||||
|
if (this.participants == null) {
|
||||||
|
this.participants = new ArrayList<>();
|
||||||
|
}
|
||||||
|
this.participants.add(participantEmail);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -35,6 +35,11 @@ public class MeetingDTO {
|
|||||||
*/
|
*/
|
||||||
private final LocalDateTime endTime;
|
private final LocalDateTime endTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 회의 목적
|
||||||
|
*/
|
||||||
|
private final String purpose;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 회의 장소
|
* 회의 장소
|
||||||
*/
|
*/
|
||||||
@ -79,7 +84,8 @@ public class MeetingDTO {
|
|||||||
.title(meeting.getTitle())
|
.title(meeting.getTitle())
|
||||||
.startTime(meeting.getStartedAt() != null ? meeting.getStartedAt() : meeting.getScheduledAt())
|
.startTime(meeting.getStartedAt() != null ? meeting.getStartedAt() : meeting.getScheduledAt())
|
||||||
.endTime(meeting.getEndedAt())
|
.endTime(meeting.getEndedAt())
|
||||||
.location(null) // Meeting 도메인에 location 필드가 없어서 null로 설정
|
.purpose(meeting.getPurpose())
|
||||||
|
.location(meeting.getLocation())
|
||||||
.agenda(meeting.getDescription())
|
.agenda(meeting.getDescription())
|
||||||
.participants(meeting.getParticipants().stream()
|
.participants(meeting.getParticipants().stream()
|
||||||
.map(participantId -> ParticipantDTO.builder()
|
.map(participantId -> ParticipantDTO.builder()
|
||||||
|
|||||||
@ -27,7 +27,8 @@ public class MeetingService implements
|
|||||||
StartMeetingUseCase,
|
StartMeetingUseCase,
|
||||||
EndMeetingUseCase,
|
EndMeetingUseCase,
|
||||||
CancelMeetingUseCase,
|
CancelMeetingUseCase,
|
||||||
GetMeetingUseCase {
|
GetMeetingUseCase,
|
||||||
|
InviteParticipantUseCase {
|
||||||
|
|
||||||
private final MeetingReader meetingReader;
|
private final MeetingReader meetingReader;
|
||||||
private final MeetingWriter meetingWriter;
|
private final MeetingWriter meetingWriter;
|
||||||
@ -47,7 +48,9 @@ public class MeetingService implements
|
|||||||
Meeting meeting = Meeting.builder()
|
Meeting meeting = Meeting.builder()
|
||||||
.meetingId(meetingId)
|
.meetingId(meetingId)
|
||||||
.title(command.title())
|
.title(command.title())
|
||||||
|
.purpose(command.purpose())
|
||||||
.description(command.description())
|
.description(command.description())
|
||||||
|
.location(command.location())
|
||||||
.scheduledAt(command.scheduledAt())
|
.scheduledAt(command.scheduledAt())
|
||||||
.status("SCHEDULED")
|
.status("SCHEDULED")
|
||||||
.organizerId(command.organizerId())
|
.organizerId(command.organizerId())
|
||||||
@ -198,4 +201,43 @@ public class MeetingService implements
|
|||||||
|
|
||||||
return meetingReader.findByOrganizerIdAndStatus(organizerId, status);
|
return meetingReader.findByOrganizerIdAndStatus(organizerId, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 회의 참석자 초대
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public void inviteParticipant(InviteParticipantCommand command) {
|
||||||
|
log.info("Inviting participant to meeting: {}, email: {}", command.meetingId(), command.email());
|
||||||
|
|
||||||
|
// 회의 조회
|
||||||
|
Meeting meeting = meetingReader.findById(command.meetingId())
|
||||||
|
.orElseThrow(() -> new BusinessException(ErrorCode.ENTITY_NOT_FOUND));
|
||||||
|
|
||||||
|
// 회의 상태 검증 (예약됨 또는 진행중인 회의만 초대 가능)
|
||||||
|
if ("COMPLETED".equals(meeting.getStatus()) || "CANCELLED".equals(meeting.getStatus())) {
|
||||||
|
throw new BusinessException(ErrorCode.INVALID_INPUT_VALUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 이미 참석자로 등록되었는지 확인
|
||||||
|
if (meeting.getParticipants() != null && meeting.getParticipants().contains(command.email())) {
|
||||||
|
log.warn("Email {} is already a participant of meeting {}", command.email(), command.meetingId());
|
||||||
|
throw new BusinessException(ErrorCode.DUPLICATE_RESOURCE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 참석자 목록에 추가
|
||||||
|
meeting.addParticipant(command.email());
|
||||||
|
|
||||||
|
// 저장
|
||||||
|
meetingWriter.save(meeting);
|
||||||
|
|
||||||
|
// TODO: 실제 이메일 발송 구현 필요
|
||||||
|
// 이메일 발송 서비스 호출
|
||||||
|
// emailService.sendInvitation(command.email(), meeting, command.frontendUrl());
|
||||||
|
// 현재는 로그만 남기고 성공으로 처리
|
||||||
|
log.info("Invitation email would be sent to {} for meeting {} (Frontend URL: {})",
|
||||||
|
command.email(), meeting.getTitle(), command.frontendUrl());
|
||||||
|
|
||||||
|
log.info("Participant invited successfully: {} to meeting {}", command.email(), command.meetingId());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,8 +20,10 @@ public interface CreateMeetingUseCase {
|
|||||||
*/
|
*/
|
||||||
record CreateMeetingCommand(
|
record CreateMeetingCommand(
|
||||||
String title,
|
String title,
|
||||||
|
String purpose,
|
||||||
String description,
|
String description,
|
||||||
LocalDateTime scheduledAt,
|
LocalDateTime scheduledAt,
|
||||||
|
String location,
|
||||||
String organizerId,
|
String organizerId,
|
||||||
List<String> participants,
|
List<String> participants,
|
||||||
String templateId
|
String templateId
|
||||||
|
|||||||
@ -0,0 +1,23 @@
|
|||||||
|
package com.unicorn.hgzero.meeting.biz.usecase.in.meeting;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 회의 참석자 초대 UseCase
|
||||||
|
*/
|
||||||
|
public interface InviteParticipantUseCase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 회의 참석자 초대
|
||||||
|
* 이메일로 초대장 발송
|
||||||
|
*/
|
||||||
|
void inviteParticipant(InviteParticipantCommand command);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 참석자 초대 명령
|
||||||
|
*/
|
||||||
|
record InviteParticipantCommand(
|
||||||
|
String meetingId,
|
||||||
|
String email,
|
||||||
|
String inviterName,
|
||||||
|
String frontendUrl
|
||||||
|
) {}
|
||||||
|
}
|
||||||
@ -47,6 +47,8 @@ public class SecurityConfig {
|
|||||||
.requestMatchers("/health").permitAll()
|
.requestMatchers("/health").permitAll()
|
||||||
// WebSocket endpoints
|
// WebSocket endpoints
|
||||||
.requestMatchers("/ws/**").permitAll()
|
.requestMatchers("/ws/**").permitAll()
|
||||||
|
// Meeting API endpoints (for testing)
|
||||||
|
.requestMatchers("/api/meetings/**").permitAll()
|
||||||
// All other requests require authentication
|
// All other requests require authentication
|
||||||
.anyRequest().authenticated()
|
.anyRequest().authenticated()
|
||||||
)
|
)
|
||||||
|
|||||||
@ -22,7 +22,7 @@ public class SwaggerConfig {
|
|||||||
return new OpenAPI()
|
return new OpenAPI()
|
||||||
.info(apiInfo())
|
.info(apiInfo())
|
||||||
.addServersItem(new Server()
|
.addServersItem(new Server()
|
||||||
.url("http://localhost:8081")
|
.url("http://localhost:8082")
|
||||||
.description("Local Development"))
|
.description("Local Development"))
|
||||||
.addServersItem(new Server()
|
.addServersItem(new Server()
|
||||||
.url("{protocol}://{host}:{port}")
|
.url("{protocol}://{host}:{port}")
|
||||||
|
|||||||
@ -4,7 +4,9 @@ import com.unicorn.hgzero.common.dto.ApiResponse;
|
|||||||
import com.unicorn.hgzero.meeting.biz.dto.MeetingDTO;
|
import com.unicorn.hgzero.meeting.biz.dto.MeetingDTO;
|
||||||
import com.unicorn.hgzero.meeting.biz.usecase.in.meeting.*;
|
import com.unicorn.hgzero.meeting.biz.usecase.in.meeting.*;
|
||||||
import com.unicorn.hgzero.meeting.infra.dto.request.CreateMeetingRequest;
|
import com.unicorn.hgzero.meeting.infra.dto.request.CreateMeetingRequest;
|
||||||
|
import com.unicorn.hgzero.meeting.infra.dto.request.InviteParticipantRequest;
|
||||||
import com.unicorn.hgzero.meeting.infra.dto.request.SelectTemplateRequest;
|
import com.unicorn.hgzero.meeting.infra.dto.request.SelectTemplateRequest;
|
||||||
|
import com.unicorn.hgzero.meeting.infra.dto.response.InviteParticipantResponse;
|
||||||
import com.unicorn.hgzero.meeting.infra.dto.response.MeetingResponse;
|
import com.unicorn.hgzero.meeting.infra.dto.response.MeetingResponse;
|
||||||
import com.unicorn.hgzero.meeting.infra.dto.response.SessionResponse;
|
import com.unicorn.hgzero.meeting.infra.dto.response.SessionResponse;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
@ -35,6 +37,7 @@ public class MeetingController {
|
|||||||
private final EndMeetingUseCase endMeetingUseCase;
|
private final EndMeetingUseCase endMeetingUseCase;
|
||||||
private final GetMeetingUseCase getMeetingUseCase;
|
private final GetMeetingUseCase getMeetingUseCase;
|
||||||
private final CancelMeetingUseCase cancelMeetingUseCase;
|
private final CancelMeetingUseCase cancelMeetingUseCase;
|
||||||
|
private final InviteParticipantUseCase inviteParticipantUseCase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 회의 예약
|
* 회의 예약
|
||||||
@ -63,8 +66,10 @@ public class MeetingController {
|
|||||||
var meetingData = createMeetingUseCase.createMeeting(
|
var meetingData = createMeetingUseCase.createMeeting(
|
||||||
new CreateMeetingUseCase.CreateMeetingCommand(
|
new CreateMeetingUseCase.CreateMeetingCommand(
|
||||||
request.getTitle(),
|
request.getTitle(),
|
||||||
|
request.getPurpose(),
|
||||||
request.getAgenda(),
|
request.getAgenda(),
|
||||||
request.getStartTime(),
|
request.getStartTime(),
|
||||||
|
request.getLocation(),
|
||||||
userId,
|
userId,
|
||||||
request.getParticipants(),
|
request.getParticipants(),
|
||||||
null // 템플릿 ID는 나중에 적용
|
null // 템플릿 ID는 나중에 적용
|
||||||
@ -239,4 +244,53 @@ public class MeetingController {
|
|||||||
|
|
||||||
return ResponseEntity.ok(ApiResponse.success(null));
|
return ResponseEntity.ok(ApiResponse.success(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 회의 참석자 초대
|
||||||
|
*
|
||||||
|
* @param meetingId 회의 ID
|
||||||
|
* @param userId 사용자 ID
|
||||||
|
* @param userName 사용자명
|
||||||
|
* @param userEmail 사용자 이메일
|
||||||
|
* @param request 참석자 초대 요청
|
||||||
|
* @return 초대 결과
|
||||||
|
*/
|
||||||
|
@Operation(
|
||||||
|
summary = "회의 참석자 초대",
|
||||||
|
description = "진행 중이거나 예약된 회의에 새로운 참석자를 초대합니다. 초대된 참석자에게는 회의록 프론트엔드 URL과 함께 이메일이 발송됩니다.",
|
||||||
|
security = @SecurityRequirement(name = "bearerAuth")
|
||||||
|
)
|
||||||
|
@PostMapping("/{meetingId}/invite")
|
||||||
|
public ResponseEntity<ApiResponse<InviteParticipantResponse>> inviteParticipant(
|
||||||
|
@Parameter(description = "회의 ID", required = true)
|
||||||
|
@PathVariable String meetingId,
|
||||||
|
@Parameter(description = "사용자 ID", required = true)
|
||||||
|
@RequestHeader("X-User-Id") String userId,
|
||||||
|
@Parameter(description = "사용자명", required = true)
|
||||||
|
@RequestHeader("X-User-Name") String userName,
|
||||||
|
@Parameter(description = "사용자 이메일", required = true)
|
||||||
|
@RequestHeader("X-User-Email") String userEmail,
|
||||||
|
@Valid @RequestBody InviteParticipantRequest request) {
|
||||||
|
|
||||||
|
log.info("참석자 초대 요청 - meetingId: {}, email: {}, inviter: {}",
|
||||||
|
meetingId, request.getEmail(), userName);
|
||||||
|
|
||||||
|
// 프론트엔드 URL 생성 (실제 환경에서는 설정에서 가져와야 함)
|
||||||
|
String frontendUrl = "https://meeting.hgzero.com/meeting/" + meetingId;
|
||||||
|
|
||||||
|
inviteParticipantUseCase.inviteParticipant(
|
||||||
|
new InviteParticipantUseCase.InviteParticipantCommand(
|
||||||
|
meetingId,
|
||||||
|
request.getEmail(),
|
||||||
|
userName,
|
||||||
|
frontendUrl
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
var response = InviteParticipantResponse.of(meetingId, request.getEmail());
|
||||||
|
|
||||||
|
log.info("참석자 초대 완료 - meetingId: {}, email: {}", meetingId, request.getEmail());
|
||||||
|
|
||||||
|
return ResponseEntity.ok(ApiResponse.success(response));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -24,6 +24,10 @@ public class CreateMeetingRequest {
|
|||||||
@Schema(description = "회의 제목", example = "Q1 전략 회의", required = true)
|
@Schema(description = "회의 제목", example = "Q1 전략 회의", required = true)
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
|
@NotBlank(message = "회의 목적은 필수입니다")
|
||||||
|
@Schema(description = "회의 목적", example = "2025년 1분기 신제품 개발 방향 수립", required = true)
|
||||||
|
private String purpose;
|
||||||
|
|
||||||
@NotNull(message = "회의 시작 시간은 필수입니다")
|
@NotNull(message = "회의 시작 시간은 필수입니다")
|
||||||
@Schema(description = "회의 시작 시간", example = "2025-01-25T14:00:00", required = true)
|
@Schema(description = "회의 시작 시간", example = "2025-01-25T14:00:00", required = true)
|
||||||
private LocalDateTime startTime;
|
private LocalDateTime startTime;
|
||||||
|
|||||||
@ -0,0 +1,23 @@
|
|||||||
|
package com.unicorn.hgzero.meeting.infra.dto.request;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.Email;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 참석자 초대 요청 DTO
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Schema(description = "참석자 초대 요청")
|
||||||
|
public class InviteParticipantRequest {
|
||||||
|
|
||||||
|
@NotBlank(message = "이메일 주소는 필수입니다")
|
||||||
|
@Email(message = "올바른 이메일 형식이 아닙니다")
|
||||||
|
@Schema(description = "초대할 참석자 이메일", example = "newparticipant@example.com", required = true)
|
||||||
|
private String email;
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
package com.unicorn.hgzero.meeting.infra.dto.response;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 참석자 초대 응답 DTO
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Schema(description = "참석자 초대 응답")
|
||||||
|
public class InviteParticipantResponse {
|
||||||
|
|
||||||
|
@Schema(description = "회의 ID", example = "123e4567-e89b-12d3-a456-426614174000")
|
||||||
|
private String meetingId;
|
||||||
|
|
||||||
|
@Schema(description = "초대된 참석자 이메일", example = "newparticipant@example.com")
|
||||||
|
private String invitedEmail;
|
||||||
|
|
||||||
|
@Schema(description = "초대 성공 여부", example = "true")
|
||||||
|
private boolean success;
|
||||||
|
|
||||||
|
@Schema(description = "메시지", example = "참석자 초대가 완료되었습니다. 이메일을 확인해주세요.")
|
||||||
|
private String message;
|
||||||
|
|
||||||
|
public static InviteParticipantResponse of(String meetingId, String email) {
|
||||||
|
return new InviteParticipantResponse(
|
||||||
|
meetingId,
|
||||||
|
email,
|
||||||
|
true,
|
||||||
|
"참석자 초대가 완료되었습니다. 이메일을 확인해주세요."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -28,6 +28,9 @@ public class MeetingResponse {
|
|||||||
@Schema(description = "회의 종료 시간", example = "2025-01-25T16:00:00")
|
@Schema(description = "회의 종료 시간", example = "2025-01-25T16:00:00")
|
||||||
private final LocalDateTime endTime;
|
private final LocalDateTime endTime;
|
||||||
|
|
||||||
|
@Schema(description = "회의 목적", example = "2025년 1분기 신제품 개발 방향 수립")
|
||||||
|
private final String purpose;
|
||||||
|
|
||||||
@Schema(description = "회의 장소", example = "회의실 A")
|
@Schema(description = "회의 장소", example = "회의실 A")
|
||||||
private final String location;
|
private final String location;
|
||||||
|
|
||||||
@ -58,6 +61,7 @@ public class MeetingResponse {
|
|||||||
.title(dto.getTitle())
|
.title(dto.getTitle())
|
||||||
.startTime(dto.getStartTime())
|
.startTime(dto.getStartTime())
|
||||||
.endTime(dto.getEndTime())
|
.endTime(dto.getEndTime())
|
||||||
|
.purpose(dto.getPurpose())
|
||||||
.location(dto.getLocation())
|
.location(dto.getLocation())
|
||||||
.agenda(dto.getAgenda())
|
.agenda(dto.getAgenda())
|
||||||
.participants(dto.getParticipants().stream()
|
.participants(dto.getParticipants().stream()
|
||||||
|
|||||||
@ -51,7 +51,7 @@ public class SwaggerConfig {
|
|||||||
.url("https://www.apache.org/licenses/LICENSE-2.0.html")))
|
.url("https://www.apache.org/licenses/LICENSE-2.0.html")))
|
||||||
.servers(List.of(
|
.servers(List.of(
|
||||||
new Server()
|
new Server()
|
||||||
.url("http://localhost:8080")
|
.url("http://localhost:8085")
|
||||||
.description("Local Development Server"),
|
.description("Local Development Server"),
|
||||||
new Server()
|
new Server()
|
||||||
.url("https://api.hgzero.com")
|
.url("https://api.hgzero.com")
|
||||||
|
|||||||
@ -3,6 +3,18 @@ bootJar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
// Common module
|
||||||
|
implementation project(':common')
|
||||||
|
|
||||||
|
// Spring Boot starters
|
||||||
|
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||||
|
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
||||||
|
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
||||||
|
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
|
||||||
|
|
||||||
|
// Database
|
||||||
|
runtimeOnly 'org.postgresql:postgresql'
|
||||||
|
|
||||||
// Azure Speech SDK
|
// Azure Speech SDK
|
||||||
implementation "com.microsoft.cognitiveservices.speech:client-sdk:${azureSpeechVersion}"
|
implementation "com.microsoft.cognitiveservices.speech:client-sdk:${azureSpeechVersion}"
|
||||||
|
|
||||||
@ -14,4 +26,11 @@ dependencies {
|
|||||||
|
|
||||||
// WebSocket
|
// WebSocket
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-websocket'
|
implementation 'org.springframework.boot:spring-boot-starter-websocket'
|
||||||
|
|
||||||
|
// Test dependencies
|
||||||
|
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
||||||
|
testRuntimeOnly 'com.h2database:h2'
|
||||||
|
testImplementation('it.ozimov:embedded-redis:0.7.3') {
|
||||||
|
exclude group: 'org.slf4j', module: 'slf4j-simple'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,146 +0,0 @@
|
|||||||
package com.unicorn.hgzero.stt.controller;
|
|
||||||
|
|
||||||
import com.unicorn.hgzero.common.dto.ApiResponse;
|
|
||||||
import com.unicorn.hgzero.stt.dto.SpeakerDto;
|
|
||||||
import com.unicorn.hgzero.stt.service.SpeakerService;
|
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Content;
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
|
||||||
import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.http.ResponseEntity;
|
|
||||||
import org.springframework.validation.annotation.Validated;
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
|
||||||
|
|
||||||
import jakarta.validation.Valid;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 관리 컨트롤러
|
|
||||||
* 화자 식별 및 관리 기능을 제공
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/api/v1/stt/speakers")
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@Validated
|
|
||||||
@Tag(name = "화자 관리", description = "화자 식별 및 관리 API")
|
|
||||||
public class SpeakerController {
|
|
||||||
|
|
||||||
private final SpeakerService speakerService;
|
|
||||||
|
|
||||||
@Operation(
|
|
||||||
summary = "화자 식별",
|
|
||||||
description = "음성 데이터로부터 화자를 식별합니다."
|
|
||||||
)
|
|
||||||
@ApiResponses(value = {
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "200",
|
|
||||||
description = "화자 식별 성공",
|
|
||||||
content = @Content(schema = @Schema(implementation = SpeakerDto.IdentificationResponse.class))
|
|
||||||
),
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "400",
|
|
||||||
description = "잘못된 요청"
|
|
||||||
),
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "404",
|
|
||||||
description = "녹음을 찾을 수 없음"
|
|
||||||
)
|
|
||||||
})
|
|
||||||
@PostMapping("/identify")
|
|
||||||
public ResponseEntity<ApiResponse<SpeakerDto.IdentificationResponse>> identifySpeaker(
|
|
||||||
@Valid @RequestBody SpeakerDto.IdentifyRequest request) {
|
|
||||||
log.info("화자 식별 요청 - recordingId: {}", request.getRecordingId());
|
|
||||||
|
|
||||||
SpeakerDto.IdentificationResponse response = speakerService.identifySpeaker(request);
|
|
||||||
|
|
||||||
return ResponseEntity.ok(ApiResponse.success(response));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Operation(
|
|
||||||
summary = "화자 정보 조회",
|
|
||||||
description = "화자의 상세 정보를 조회합니다."
|
|
||||||
)
|
|
||||||
@ApiResponses(value = {
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "200",
|
|
||||||
description = "조회 성공",
|
|
||||||
content = @Content(schema = @Schema(implementation = SpeakerDto.DetailResponse.class))
|
|
||||||
),
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "404",
|
|
||||||
description = "화자를 찾을 수 없음"
|
|
||||||
)
|
|
||||||
})
|
|
||||||
@GetMapping("/{speakerId}")
|
|
||||||
public ResponseEntity<ApiResponse<SpeakerDto.DetailResponse>> getSpeaker(
|
|
||||||
@Parameter(description = "화자 ID", required = true)
|
|
||||||
@PathVariable String speakerId) {
|
|
||||||
log.debug("화자 조회 요청 - speakerId: {}", speakerId);
|
|
||||||
|
|
||||||
SpeakerDto.DetailResponse response = speakerService.getSpeaker(speakerId);
|
|
||||||
|
|
||||||
return ResponseEntity.ok(ApiResponse.success(response));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Operation(
|
|
||||||
summary = "화자 정보 수정",
|
|
||||||
description = "화자의 이름 및 사용자 연결 정보를 수정합니다."
|
|
||||||
)
|
|
||||||
@ApiResponses(value = {
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "200",
|
|
||||||
description = "수정 성공",
|
|
||||||
content = @Content(schema = @Schema(implementation = SpeakerDto.DetailResponse.class))
|
|
||||||
),
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "400",
|
|
||||||
description = "잘못된 요청"
|
|
||||||
),
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "404",
|
|
||||||
description = "화자를 찾을 수 없음"
|
|
||||||
)
|
|
||||||
})
|
|
||||||
@PutMapping("/{speakerId}")
|
|
||||||
public ResponseEntity<ApiResponse<SpeakerDto.DetailResponse>> updateSpeaker(
|
|
||||||
@Parameter(description = "화자 ID", required = true)
|
|
||||||
@PathVariable String speakerId,
|
|
||||||
@Valid @RequestBody SpeakerDto.UpdateRequest request) {
|
|
||||||
log.info("화자 정보 수정 요청 - speakerId: {}, speakerName: {}",
|
|
||||||
speakerId, request.getSpeakerName());
|
|
||||||
|
|
||||||
SpeakerDto.DetailResponse response = speakerService.updateSpeaker(speakerId, request);
|
|
||||||
|
|
||||||
return ResponseEntity.ok(ApiResponse.success(response));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Operation(
|
|
||||||
summary = "녹음별 화자 목록 조회",
|
|
||||||
description = "특정 녹음에 참여한 화자 목록과 통계를 조회합니다."
|
|
||||||
)
|
|
||||||
@ApiResponses(value = {
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "200",
|
|
||||||
description = "조회 성공",
|
|
||||||
content = @Content(schema = @Schema(implementation = SpeakerDto.ListResponse.class))
|
|
||||||
),
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "404",
|
|
||||||
description = "녹음을 찾을 수 없음"
|
|
||||||
)
|
|
||||||
})
|
|
||||||
@GetMapping("/recordings/{recordingId}")
|
|
||||||
public ResponseEntity<ApiResponse<SpeakerDto.ListResponse>> getRecordingSpeakers(
|
|
||||||
@Parameter(description = "녹음 ID", required = true)
|
|
||||||
@PathVariable String recordingId) {
|
|
||||||
log.debug("녹음별 화자 목록 조회 요청 - recordingId: {}", recordingId);
|
|
||||||
|
|
||||||
SpeakerDto.ListResponse response = speakerService.getRecordingSpeakers(recordingId);
|
|
||||||
|
|
||||||
return ResponseEntity.ok(ApiResponse.success(response));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -12,11 +12,9 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses;
|
|||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.http.MediaType;
|
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
|
||||||
|
|
||||||
import jakarta.validation.Valid;
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
@ -64,64 +62,7 @@ public class TranscriptionController {
|
|||||||
return ResponseEntity.ok(ApiResponse.success(response));
|
return ResponseEntity.ok(ApiResponse.success(response));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(
|
|
||||||
summary = "배치 음성 변환",
|
|
||||||
description = "오디오 파일을 업로드하여 배치 변환 작업을 시작합니다."
|
|
||||||
)
|
|
||||||
@ApiResponses(value = {
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "200",
|
|
||||||
description = "배치 작업 시작 성공",
|
|
||||||
content = @Content(schema = @Schema(implementation = TranscriptionDto.BatchResponse.class))
|
|
||||||
),
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "400",
|
|
||||||
description = "잘못된 파일 형식 또는 요청"
|
|
||||||
),
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "404",
|
|
||||||
description = "녹음 세션을 찾을 수 없음"
|
|
||||||
)
|
|
||||||
})
|
|
||||||
@PostMapping(value = "/batch", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
|
|
||||||
public ResponseEntity<ApiResponse<TranscriptionDto.BatchResponse>> transcribeAudioBatch(
|
|
||||||
@Parameter(description = "배치 변환 요청 정보")
|
|
||||||
@Valid @RequestPart("request") TranscriptionDto.BatchRequest request,
|
|
||||||
@Parameter(description = "변환할 오디오 파일")
|
|
||||||
@RequestPart("audioFile") MultipartFile audioFile) {
|
|
||||||
log.info("배치 음성 변환 요청 - recordingId: {}, fileSize: {}",
|
|
||||||
request.getRecordingId(), audioFile.getSize());
|
|
||||||
|
|
||||||
TranscriptionDto.BatchResponse response = transcriptionService.transcribeAudioBatch(request, audioFile);
|
|
||||||
|
|
||||||
return ResponseEntity.ok(ApiResponse.success(response));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Operation(
|
|
||||||
summary = "배치 변환 완료 콜백",
|
|
||||||
description = "Azure 배치 변환 완료 시 호출되는 콜백 엔드포인트입니다."
|
|
||||||
)
|
|
||||||
@ApiResponses(value = {
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "200",
|
|
||||||
description = "콜백 처리 성공",
|
|
||||||
content = @Content(schema = @Schema(implementation = TranscriptionDto.CompleteResponse.class))
|
|
||||||
),
|
|
||||||
@io.swagger.v3.oas.annotations.responses.ApiResponse(
|
|
||||||
responseCode = "400",
|
|
||||||
description = "잘못된 콜백 데이터"
|
|
||||||
)
|
|
||||||
})
|
|
||||||
@PostMapping("/batch/callback")
|
|
||||||
public ResponseEntity<ApiResponse<TranscriptionDto.CompleteResponse>> processBatchCallback(
|
|
||||||
@Valid @RequestBody TranscriptionDto.BatchCallbackRequest request) {
|
|
||||||
log.info("배치 변환 콜백 처리 - jobId: {}, status: {}",
|
|
||||||
request.getJobId(), request.getStatus());
|
|
||||||
|
|
||||||
TranscriptionDto.CompleteResponse response = transcriptionService.processBatchCallback(request);
|
|
||||||
|
|
||||||
return ResponseEntity.ok(ApiResponse.success(response));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Operation(
|
@Operation(
|
||||||
summary = "변환 결과 조회",
|
summary = "변환 결과 조회",
|
||||||
@ -141,15 +82,10 @@ public class TranscriptionController {
|
|||||||
@GetMapping("/{recordingId}")
|
@GetMapping("/{recordingId}")
|
||||||
public ResponseEntity<ApiResponse<TranscriptionDto.Response>> getTranscription(
|
public ResponseEntity<ApiResponse<TranscriptionDto.Response>> getTranscription(
|
||||||
@Parameter(description = "녹음 ID", required = true)
|
@Parameter(description = "녹음 ID", required = true)
|
||||||
@PathVariable String recordingId,
|
@PathVariable String recordingId) {
|
||||||
@Parameter(description = "세그먼트 정보 포함 여부")
|
log.debug("변환 결과 조회 요청 - recordingId: {}", recordingId);
|
||||||
@RequestParam(required = false, defaultValue = "false") Boolean includeSegments,
|
|
||||||
@Parameter(description = "특정 화자 필터")
|
|
||||||
@RequestParam(required = false) String speakerId) {
|
|
||||||
log.debug("변환 결과 조회 요청 - recordingId: {}, includeSegments: {}, speakerId: {}",
|
|
||||||
recordingId, includeSegments, speakerId);
|
|
||||||
|
|
||||||
TranscriptionDto.Response response = transcriptionService.getTranscription(recordingId, includeSegments, speakerId);
|
TranscriptionDto.Response response = transcriptionService.getTranscription(recordingId);
|
||||||
|
|
||||||
return ResponseEntity.ok(ApiResponse.success(response));
|
return ResponseEntity.ok(ApiResponse.success(response));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -50,16 +50,6 @@ public class Recording {
|
|||||||
*/
|
*/
|
||||||
private final Integer duration;
|
private final Integer duration;
|
||||||
|
|
||||||
/**
|
|
||||||
* 파일 크기 (bytes)
|
|
||||||
*/
|
|
||||||
private final Long fileSize;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 저장 경로
|
|
||||||
*/
|
|
||||||
private final String storagePath;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 언어 설정
|
* 언어 설정
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -1,72 +0,0 @@
|
|||||||
package com.unicorn.hgzero.stt.domain;
|
|
||||||
|
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.ToString;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 도메인 모델
|
|
||||||
* 음성 화자 정보를 나타내는 도메인 객체
|
|
||||||
*/
|
|
||||||
@Getter
|
|
||||||
@Builder
|
|
||||||
@ToString
|
|
||||||
public class Speaker {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 ID
|
|
||||||
*/
|
|
||||||
private final String speakerId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 이름
|
|
||||||
*/
|
|
||||||
private final String speakerName;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Azure Speaker Profile ID
|
|
||||||
*/
|
|
||||||
private final String profileId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 연결된 사용자 ID
|
|
||||||
*/
|
|
||||||
private final String userId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 총 발언 세그먼트 수
|
|
||||||
*/
|
|
||||||
private final Integer totalSegments;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 총 발언 시간 (초)
|
|
||||||
*/
|
|
||||||
private final Integer totalDuration;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 평균 식별 신뢰도
|
|
||||||
*/
|
|
||||||
private final Double averageConfidence;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 최초 등장 시간
|
|
||||||
*/
|
|
||||||
private final LocalDateTime firstAppeared;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 최근 등장 시간
|
|
||||||
*/
|
|
||||||
private final LocalDateTime lastAppeared;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 생성 시간
|
|
||||||
*/
|
|
||||||
private final LocalDateTime createdAt;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 수정 시간
|
|
||||||
*/
|
|
||||||
private final LocalDateTime updatedAt;
|
|
||||||
}
|
|
||||||
@ -50,7 +50,6 @@ public class RecordingDto {
|
|||||||
private final String sessionId;
|
private final String sessionId;
|
||||||
private final String status;
|
private final String status;
|
||||||
private final String streamUrl;
|
private final String streamUrl;
|
||||||
private final String storagePath;
|
|
||||||
private final Integer estimatedInitTime;
|
private final Integer estimatedInitTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,8 +94,6 @@ public class RecordingDto {
|
|||||||
private final LocalDateTime startTime;
|
private final LocalDateTime startTime;
|
||||||
private final LocalDateTime endTime;
|
private final LocalDateTime endTime;
|
||||||
private final Integer duration;
|
private final Integer duration;
|
||||||
private final Long fileSize;
|
|
||||||
private final String storagePath;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -116,7 +113,6 @@ public class RecordingDto {
|
|||||||
private final Integer duration;
|
private final Integer duration;
|
||||||
private final Integer speakerCount;
|
private final Integer speakerCount;
|
||||||
private final Integer segmentCount;
|
private final Integer segmentCount;
|
||||||
private final String storagePath;
|
|
||||||
private final String language;
|
private final String language;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,109 +0,0 @@
|
|||||||
package com.unicorn.hgzero.stt.dto;
|
|
||||||
|
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.ToString;
|
|
||||||
|
|
||||||
import jakarta.validation.constraints.NotBlank;
|
|
||||||
import jakarta.validation.constraints.DecimalMax;
|
|
||||||
import jakarta.validation.constraints.DecimalMin;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 관련 DTO 클래스들
|
|
||||||
*/
|
|
||||||
public class SpeakerDto {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 식별 요청 DTO
|
|
||||||
*/
|
|
||||||
@Getter
|
|
||||||
@Builder
|
|
||||||
@ToString
|
|
||||||
public static class IdentifyRequest {
|
|
||||||
|
|
||||||
@NotBlank(message = "녹음 ID는 필수입니다")
|
|
||||||
private final String recordingId;
|
|
||||||
|
|
||||||
@NotBlank(message = "오디오 프레임은 필수입니다")
|
|
||||||
private final String audioFrame;
|
|
||||||
|
|
||||||
private final Long timestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 식별 응답 DTO
|
|
||||||
*/
|
|
||||||
@Getter
|
|
||||||
@Builder
|
|
||||||
@ToString
|
|
||||||
public static class IdentificationResponse {
|
|
||||||
|
|
||||||
private final String speakerId;
|
|
||||||
private final String speakerName;
|
|
||||||
private final Double confidence;
|
|
||||||
private final Boolean isNewSpeaker;
|
|
||||||
private final String profileId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 상세 응답 DTO
|
|
||||||
*/
|
|
||||||
@Getter
|
|
||||||
@Builder
|
|
||||||
@ToString
|
|
||||||
public static class DetailResponse {
|
|
||||||
|
|
||||||
private final String speakerId;
|
|
||||||
private final String speakerName;
|
|
||||||
private final String profileId;
|
|
||||||
private final String userId;
|
|
||||||
private final Integer totalSegments;
|
|
||||||
private final Integer totalDuration;
|
|
||||||
private final Double averageConfidence;
|
|
||||||
private final LocalDateTime firstAppeared;
|
|
||||||
private final LocalDateTime lastAppeared;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 정보 업데이트 요청 DTO
|
|
||||||
*/
|
|
||||||
@Getter
|
|
||||||
@Builder
|
|
||||||
@ToString
|
|
||||||
public static class UpdateRequest {
|
|
||||||
|
|
||||||
private final String speakerName;
|
|
||||||
private final String userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 목록 응답 DTO
|
|
||||||
*/
|
|
||||||
@Getter
|
|
||||||
@Builder
|
|
||||||
@ToString
|
|
||||||
public static class ListResponse {
|
|
||||||
|
|
||||||
private final String recordingId;
|
|
||||||
private final Integer speakerCount;
|
|
||||||
private final List<SpeakerSummary> speakers;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 요약 DTO
|
|
||||||
*/
|
|
||||||
@Getter
|
|
||||||
@Builder
|
|
||||||
@ToString
|
|
||||||
public static class SpeakerSummary {
|
|
||||||
|
|
||||||
private final String speakerId;
|
|
||||||
private final String speakerName;
|
|
||||||
private final Integer segmentCount;
|
|
||||||
private final Integer totalDuration;
|
|
||||||
private final Double speakingRatio;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -62,12 +62,10 @@ public class RecordingEvent {
|
|||||||
private LocalDateTime startTime;
|
private LocalDateTime startTime;
|
||||||
private LocalDateTime endTime;
|
private LocalDateTime endTime;
|
||||||
private Integer duration;
|
private Integer duration;
|
||||||
private Long fileSize;
|
|
||||||
private String storagePath;
|
|
||||||
private LocalDateTime eventTime;
|
private LocalDateTime eventTime;
|
||||||
|
|
||||||
public static RecordingStopped of(String recordingId, String meetingId, String stoppedBy,
|
public static RecordingStopped of(String recordingId, String meetingId, String stoppedBy,
|
||||||
LocalDateTime startTime, Integer duration, Long fileSize, String storagePath) {
|
LocalDateTime startTime, Integer duration) {
|
||||||
return RecordingStopped.builder()
|
return RecordingStopped.builder()
|
||||||
.eventId(java.util.UUID.randomUUID().toString())
|
.eventId(java.util.UUID.randomUUID().toString())
|
||||||
.eventType("RecordingStopped")
|
.eventType("RecordingStopped")
|
||||||
@ -77,8 +75,6 @@ public class RecordingEvent {
|
|||||||
.startTime(startTime)
|
.startTime(startTime)
|
||||||
.endTime(LocalDateTime.now())
|
.endTime(LocalDateTime.now())
|
||||||
.duration(duration)
|
.duration(duration)
|
||||||
.fileSize(fileSize)
|
|
||||||
.storagePath(storagePath)
|
|
||||||
.eventTime(LocalDateTime.now())
|
.eventTime(LocalDateTime.now())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,120 +0,0 @@
|
|||||||
package com.unicorn.hgzero.stt.event;
|
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 관련 이벤트 정의
|
|
||||||
*/
|
|
||||||
public class SpeakerEvent {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 신규 화자 식별 이벤트
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@Builder
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
public static class NewSpeakerIdentified {
|
|
||||||
private String eventId;
|
|
||||||
private String eventType;
|
|
||||||
private String speakerId;
|
|
||||||
private String speakerName;
|
|
||||||
private String profileId;
|
|
||||||
private String recordingId;
|
|
||||||
private String meetingId;
|
|
||||||
private Double confidence;
|
|
||||||
private LocalDateTime firstAppeared;
|
|
||||||
private LocalDateTime eventTime;
|
|
||||||
|
|
||||||
public static NewSpeakerIdentified of(String speakerId, String speakerName, String profileId,
|
|
||||||
String recordingId, String meetingId, Double confidence) {
|
|
||||||
return NewSpeakerIdentified.builder()
|
|
||||||
.eventId(java.util.UUID.randomUUID().toString())
|
|
||||||
.eventType("NewSpeakerIdentified")
|
|
||||||
.speakerId(speakerId)
|
|
||||||
.speakerName(speakerName)
|
|
||||||
.profileId(profileId)
|
|
||||||
.recordingId(recordingId)
|
|
||||||
.meetingId(meetingId)
|
|
||||||
.confidence(confidence)
|
|
||||||
.firstAppeared(LocalDateTime.now())
|
|
||||||
.eventTime(LocalDateTime.now())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 정보 업데이트 이벤트
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@Builder
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
public static class SpeakerUpdated {
|
|
||||||
private String eventId;
|
|
||||||
private String eventType;
|
|
||||||
private String speakerId;
|
|
||||||
private String oldSpeakerName;
|
|
||||||
private String newSpeakerName;
|
|
||||||
private String oldUserId;
|
|
||||||
private String newUserId;
|
|
||||||
private String updatedBy;
|
|
||||||
private LocalDateTime eventTime;
|
|
||||||
|
|
||||||
public static SpeakerUpdated of(String speakerId, String oldSpeakerName, String newSpeakerName,
|
|
||||||
String oldUserId, String newUserId, String updatedBy) {
|
|
||||||
return SpeakerUpdated.builder()
|
|
||||||
.eventId(java.util.UUID.randomUUID().toString())
|
|
||||||
.eventType("SpeakerUpdated")
|
|
||||||
.speakerId(speakerId)
|
|
||||||
.oldSpeakerName(oldSpeakerName)
|
|
||||||
.newSpeakerName(newSpeakerName)
|
|
||||||
.oldUserId(oldUserId)
|
|
||||||
.newUserId(newUserId)
|
|
||||||
.updatedBy(updatedBy)
|
|
||||||
.eventTime(LocalDateTime.now())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 통계 업데이트 이벤트
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@Builder
|
|
||||||
@NoArgsConstructor
|
|
||||||
@AllArgsConstructor
|
|
||||||
public static class SpeakerStatisticsUpdated {
|
|
||||||
private String eventId;
|
|
||||||
private String eventType;
|
|
||||||
private String speakerId;
|
|
||||||
private String recordingId;
|
|
||||||
private String meetingId;
|
|
||||||
private Integer totalSegments;
|
|
||||||
private Integer totalDuration;
|
|
||||||
private Double averageConfidence;
|
|
||||||
private LocalDateTime lastAppeared;
|
|
||||||
private LocalDateTime eventTime;
|
|
||||||
|
|
||||||
public static SpeakerStatisticsUpdated of(String speakerId, String recordingId, String meetingId,
|
|
||||||
Integer totalSegments, Integer totalDuration, Double averageConfidence) {
|
|
||||||
return SpeakerStatisticsUpdated.builder()
|
|
||||||
.eventId(java.util.UUID.randomUUID().toString())
|
|
||||||
.eventType("SpeakerStatisticsUpdated")
|
|
||||||
.speakerId(speakerId)
|
|
||||||
.recordingId(recordingId)
|
|
||||||
.meetingId(meetingId)
|
|
||||||
.totalSegments(totalSegments)
|
|
||||||
.totalDuration(totalDuration)
|
|
||||||
.averageConfidence(averageConfidence)
|
|
||||||
.lastAppeared(LocalDateTime.now())
|
|
||||||
.eventTime(LocalDateTime.now())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -43,12 +43,6 @@ public class RecordingEntity extends BaseTimeEntity {
|
|||||||
@Column(name = "duration")
|
@Column(name = "duration")
|
||||||
private Integer duration;
|
private Integer duration;
|
||||||
|
|
||||||
@Column(name = "file_size")
|
|
||||||
private Long fileSize;
|
|
||||||
|
|
||||||
@Column(name = "storage_path", length = 500)
|
|
||||||
private String storagePath;
|
|
||||||
|
|
||||||
@Column(name = "language", length = 10, nullable = false)
|
@Column(name = "language", length = 10, nullable = false)
|
||||||
private String language;
|
private String language;
|
||||||
|
|
||||||
@ -70,8 +64,6 @@ public class RecordingEntity extends BaseTimeEntity {
|
|||||||
.startTime(startTime)
|
.startTime(startTime)
|
||||||
.endTime(endTime)
|
.endTime(endTime)
|
||||||
.duration(duration)
|
.duration(duration)
|
||||||
.fileSize(fileSize)
|
|
||||||
.storagePath(storagePath)
|
|
||||||
.language(language)
|
.language(language)
|
||||||
.speakerCount(speakerCount)
|
.speakerCount(speakerCount)
|
||||||
.segmentCount(segmentCount)
|
.segmentCount(segmentCount)
|
||||||
@ -90,8 +82,6 @@ public class RecordingEntity extends BaseTimeEntity {
|
|||||||
.startTime(recording.getStartTime())
|
.startTime(recording.getStartTime())
|
||||||
.endTime(recording.getEndTime())
|
.endTime(recording.getEndTime())
|
||||||
.duration(recording.getDuration())
|
.duration(recording.getDuration())
|
||||||
.fileSize(recording.getFileSize())
|
|
||||||
.storagePath(recording.getStoragePath())
|
|
||||||
.language(recording.getLanguage())
|
.language(recording.getLanguage())
|
||||||
.speakerCount(recording.getSpeakerCount())
|
.speakerCount(recording.getSpeakerCount())
|
||||||
.segmentCount(recording.getSegmentCount())
|
.segmentCount(recording.getSegmentCount())
|
||||||
|
|||||||
@ -1,104 +0,0 @@
|
|||||||
package com.unicorn.hgzero.stt.repository.entity;
|
|
||||||
|
|
||||||
import com.unicorn.hgzero.common.entity.BaseTimeEntity;
|
|
||||||
import com.unicorn.hgzero.stt.domain.Speaker;
|
|
||||||
import jakarta.persistence.*;
|
|
||||||
import lombok.*;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 엔티티
|
|
||||||
* 음성 화자 정보를 저장하는 JPA 엔티티
|
|
||||||
*/
|
|
||||||
@Entity
|
|
||||||
@Table(name = "speakers")
|
|
||||||
@Getter
|
|
||||||
@NoArgsConstructor(access = AccessLevel.PROTECTED)
|
|
||||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
|
||||||
@Builder
|
|
||||||
@ToString
|
|
||||||
public class SpeakerEntity extends BaseTimeEntity {
|
|
||||||
|
|
||||||
@Id
|
|
||||||
@Column(name = "speaker_id", length = 50)
|
|
||||||
private String speakerId;
|
|
||||||
|
|
||||||
@Column(name = "speaker_name", length = 100)
|
|
||||||
private String speakerName;
|
|
||||||
|
|
||||||
@Column(name = "profile_id", length = 100)
|
|
||||||
private String profileId;
|
|
||||||
|
|
||||||
@Column(name = "user_id", length = 50)
|
|
||||||
private String userId;
|
|
||||||
|
|
||||||
@Column(name = "total_segments")
|
|
||||||
private Integer totalSegments;
|
|
||||||
|
|
||||||
@Column(name = "total_duration")
|
|
||||||
private Integer totalDuration;
|
|
||||||
|
|
||||||
@Column(name = "average_confidence")
|
|
||||||
private Double averageConfidence;
|
|
||||||
|
|
||||||
@Column(name = "first_appeared")
|
|
||||||
private LocalDateTime firstAppeared;
|
|
||||||
|
|
||||||
@Column(name = "last_appeared")
|
|
||||||
private LocalDateTime lastAppeared;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 도메인 객체로 변환
|
|
||||||
*/
|
|
||||||
public Speaker toDomain() {
|
|
||||||
return Speaker.builder()
|
|
||||||
.speakerId(speakerId)
|
|
||||||
.speakerName(speakerName)
|
|
||||||
.profileId(profileId)
|
|
||||||
.userId(userId)
|
|
||||||
.totalSegments(totalSegments)
|
|
||||||
.totalDuration(totalDuration)
|
|
||||||
.averageConfidence(averageConfidence)
|
|
||||||
.firstAppeared(firstAppeared)
|
|
||||||
.lastAppeared(lastAppeared)
|
|
||||||
.createdAt(getCreatedAt())
|
|
||||||
.updatedAt(getUpdatedAt())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 도메인 객체에서 엔티티 생성
|
|
||||||
*/
|
|
||||||
public static SpeakerEntity fromDomain(Speaker speaker) {
|
|
||||||
return SpeakerEntity.builder()
|
|
||||||
.speakerId(speaker.getSpeakerId())
|
|
||||||
.speakerName(speaker.getSpeakerName())
|
|
||||||
.profileId(speaker.getProfileId())
|
|
||||||
.userId(speaker.getUserId())
|
|
||||||
.totalSegments(speaker.getTotalSegments())
|
|
||||||
.totalDuration(speaker.getTotalDuration())
|
|
||||||
.averageConfidence(speaker.getAverageConfidence())
|
|
||||||
.firstAppeared(speaker.getFirstAppeared())
|
|
||||||
.lastAppeared(speaker.getLastAppeared())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 정보 업데이트
|
|
||||||
*/
|
|
||||||
public void updateSpeakerInfo(String speakerName, String userId) {
|
|
||||||
this.speakerName = speakerName;
|
|
||||||
this.userId = userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 통계 정보 업데이트
|
|
||||||
*/
|
|
||||||
public void updateStatistics(Integer totalSegments, Integer totalDuration, Double averageConfidence) {
|
|
||||||
this.totalSegments = totalSegments;
|
|
||||||
this.totalDuration = totalDuration;
|
|
||||||
this.averageConfidence = averageConfidence;
|
|
||||||
this.lastAppeared = LocalDateTime.now();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,51 +0,0 @@
|
|||||||
package com.unicorn.hgzero.stt.repository.jpa;
|
|
||||||
|
|
||||||
import com.unicorn.hgzero.stt.repository.entity.SpeakerEntity;
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository;
|
|
||||||
import org.springframework.data.jpa.repository.Query;
|
|
||||||
import org.springframework.data.repository.query.Param;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 JPA Repository
|
|
||||||
* 화자 정보에 대한 데이터베이스 접근을 담당
|
|
||||||
*/
|
|
||||||
@Repository
|
|
||||||
public interface SpeakerRepository extends JpaRepository<SpeakerEntity, String> {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 사용자 ID로 화자 조회
|
|
||||||
*/
|
|
||||||
Optional<SpeakerEntity> findByUserId(String userId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Azure Profile ID로 화자 조회
|
|
||||||
*/
|
|
||||||
Optional<SpeakerEntity> findByProfileId(String profileId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자명으로 검색
|
|
||||||
*/
|
|
||||||
List<SpeakerEntity> findBySpeakerNameContaining(String speakerName);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 발언 비중이 높은 화자 조회
|
|
||||||
*/
|
|
||||||
@Query("SELECT s FROM SpeakerEntity s WHERE s.totalDuration > :minDuration ORDER BY s.totalDuration DESC")
|
|
||||||
List<SpeakerEntity> findActiveSpeakers(@Param("minDuration") Integer minDuration);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 신뢰도가 낮은 화자 조회
|
|
||||||
*/
|
|
||||||
@Query("SELECT s FROM SpeakerEntity s WHERE s.averageConfidence < :threshold ORDER BY s.averageConfidence ASC")
|
|
||||||
List<SpeakerEntity> findLowConfidenceSpeakers(@Param("threshold") Double threshold);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 사용자 ID 미지정 화자 조회
|
|
||||||
*/
|
|
||||||
@Query("SELECT s FROM SpeakerEntity s WHERE s.userId IS NULL ORDER BY s.totalDuration DESC")
|
|
||||||
List<SpeakerEntity> findUnassignedSpeakers();
|
|
||||||
}
|
|
||||||
@ -50,7 +50,6 @@ public class RecordingServiceImpl implements RecordingService {
|
|||||||
.language(request.getLanguage() != null ? request.getLanguage() : "ko-KR")
|
.language(request.getLanguage() != null ? request.getLanguage() : "ko-KR")
|
||||||
.speakerCount(0)
|
.speakerCount(0)
|
||||||
.segmentCount(0)
|
.segmentCount(0)
|
||||||
.storagePath(generateStoragePath(request.getMeetingId(), request.getSessionId()))
|
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
recordingRepository.save(recording);
|
recordingRepository.save(recording);
|
||||||
@ -65,7 +64,6 @@ public class RecordingServiceImpl implements RecordingService {
|
|||||||
.sessionId(request.getSessionId())
|
.sessionId(request.getSessionId())
|
||||||
.status("READY")
|
.status("READY")
|
||||||
.streamUrl(streamUrl)
|
.streamUrl(streamUrl)
|
||||||
.storagePath(recording.getStoragePath())
|
|
||||||
.estimatedInitTime(1100)
|
.estimatedInitTime(1100)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
@ -119,14 +117,13 @@ public class RecordingServiceImpl implements RecordingService {
|
|||||||
|
|
||||||
// 녹음 시간 계산 (임시로 30분으로 설정)
|
// 녹음 시간 계산 (임시로 30분으로 설정)
|
||||||
Integer duration = 1800; // 실제로는 startTime과 endTime 차이 계산
|
Integer duration = 1800; // 실제로는 startTime과 endTime 차이 계산
|
||||||
Long fileSize = 172800000L; // 실제로는 Azure Blob에서 파일 크기 조회
|
|
||||||
|
|
||||||
RecordingEntity savedRecording = recordingRepository.save(recording);
|
RecordingEntity savedRecording = recordingRepository.save(recording);
|
||||||
|
|
||||||
// 녹음 중지 이벤트 발행
|
// 녹음 중지 이벤트 발행 (음성 파일 저장하지 않으므로 파일 정보 제외)
|
||||||
RecordingEvent.RecordingStopped event = RecordingEvent.RecordingStopped.of(
|
RecordingEvent.RecordingStopped event = RecordingEvent.RecordingStopped.of(
|
||||||
recordingId, recording.getMeetingId(), request.getStoppedBy(),
|
recordingId, recording.getMeetingId(), request.getStoppedBy(),
|
||||||
recording.getStartTime(), duration, fileSize, recording.getStoragePath()
|
recording.getStartTime(), duration
|
||||||
);
|
);
|
||||||
eventPublisher.publishAsync("recording-events", event);
|
eventPublisher.publishAsync("recording-events", event);
|
||||||
|
|
||||||
@ -138,8 +135,6 @@ public class RecordingServiceImpl implements RecordingService {
|
|||||||
.startTime(recording.getStartTime())
|
.startTime(recording.getStartTime())
|
||||||
.endTime(endTime)
|
.endTime(endTime)
|
||||||
.duration(duration)
|
.duration(duration)
|
||||||
.fileSize(fileSize)
|
|
||||||
.storagePath(recording.getStoragePath())
|
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,7 +155,6 @@ public class RecordingServiceImpl implements RecordingService {
|
|||||||
.duration(recording.getDuration())
|
.duration(recording.getDuration())
|
||||||
.speakerCount(recording.getSpeakerCount())
|
.speakerCount(recording.getSpeakerCount())
|
||||||
.segmentCount(recording.getSegmentCount())
|
.segmentCount(recording.getSegmentCount())
|
||||||
.storagePath(recording.getStoragePath())
|
|
||||||
.language(recording.getLanguage())
|
.language(recording.getLanguage())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
@ -181,10 +175,4 @@ public class RecordingServiceImpl implements RecordingService {
|
|||||||
String.format("%03d", (int)(Math.random() * 1000));
|
String.format("%03d", (int)(Math.random() * 1000));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 저장 경로 생성
|
|
||||||
*/
|
|
||||||
private String generateStoragePath(String meetingId, String sessionId) {
|
|
||||||
return String.format("recordings/%s/%s.wav", meetingId, sessionId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -1,43 +0,0 @@
|
|||||||
package com.unicorn.hgzero.stt.service;
|
|
||||||
|
|
||||||
import com.unicorn.hgzero.stt.dto.SpeakerDto;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 서비스 인터페이스
|
|
||||||
* 화자 식별 및 관리 기능을 정의
|
|
||||||
*/
|
|
||||||
public interface SpeakerService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 식별
|
|
||||||
*
|
|
||||||
* @param request 화자 식별 요청
|
|
||||||
* @return 화자 식별 응답
|
|
||||||
*/
|
|
||||||
SpeakerDto.IdentificationResponse identifySpeaker(SpeakerDto.IdentifyRequest request);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 정보 조회
|
|
||||||
*
|
|
||||||
* @param speakerId 화자 ID
|
|
||||||
* @return 화자 상세 응답
|
|
||||||
*/
|
|
||||||
SpeakerDto.DetailResponse getSpeaker(String speakerId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 정보 업데이트
|
|
||||||
*
|
|
||||||
* @param speakerId 화자 ID
|
|
||||||
* @param request 화자 업데이트 요청
|
|
||||||
* @return 화자 상세 응답
|
|
||||||
*/
|
|
||||||
SpeakerDto.DetailResponse updateSpeaker(String speakerId, SpeakerDto.UpdateRequest request);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 녹음의 화자 목록 조회
|
|
||||||
*
|
|
||||||
* @param recordingId 녹음 ID
|
|
||||||
* @return 화자 목록 응답
|
|
||||||
*/
|
|
||||||
SpeakerDto.ListResponse getRecordingSpeakers(String recordingId);
|
|
||||||
}
|
|
||||||
@ -1,218 +0,0 @@
|
|||||||
package com.unicorn.hgzero.stt.service;
|
|
||||||
|
|
||||||
import com.unicorn.hgzero.common.exception.BusinessException;
|
|
||||||
import com.unicorn.hgzero.common.exception.ErrorCode;
|
|
||||||
import com.unicorn.hgzero.stt.dto.SpeakerDto;
|
|
||||||
import com.unicorn.hgzero.stt.event.SpeakerEvent;
|
|
||||||
import com.unicorn.hgzero.stt.event.publisher.EventPublisher;
|
|
||||||
import com.unicorn.hgzero.stt.repository.entity.SpeakerEntity;
|
|
||||||
import com.unicorn.hgzero.stt.repository.jpa.SpeakerRepository;
|
|
||||||
import com.unicorn.hgzero.stt.repository.jpa.TranscriptSegmentRepository;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 서비스 구현체
|
|
||||||
* 화자 식별 및 관리 기능을 구현
|
|
||||||
*/
|
|
||||||
@Slf4j
|
|
||||||
@Service
|
|
||||||
@RequiredArgsConstructor
|
|
||||||
@Transactional
|
|
||||||
public class SpeakerServiceImpl implements SpeakerService {
|
|
||||||
|
|
||||||
private final SpeakerRepository speakerRepository;
|
|
||||||
private final TranscriptSegmentRepository segmentRepository;
|
|
||||||
private final EventPublisher eventPublisher;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SpeakerDto.IdentificationResponse identifySpeaker(SpeakerDto.IdentifyRequest request) {
|
|
||||||
log.info("화자 식별 시작 - recordingId: {}", request.getRecordingId());
|
|
||||||
|
|
||||||
// Azure Speaker Recognition API 호출 시뮬레이션
|
|
||||||
String profileId = simulateAzureSpeakerRecognition(request.getAudioFrame());
|
|
||||||
Double confidence = simulateIdentificationConfidence();
|
|
||||||
|
|
||||||
// 기존 화자 조회
|
|
||||||
SpeakerEntity speaker = speakerRepository.findByProfileId(profileId).orElse(null);
|
|
||||||
boolean isNewSpeaker = false;
|
|
||||||
|
|
||||||
if (speaker == null) {
|
|
||||||
// 신규 화자 등록
|
|
||||||
String speakerId = generateSpeakerId();
|
|
||||||
String speakerName = "화자-" + speakerId.substring(4);
|
|
||||||
|
|
||||||
speaker = SpeakerEntity.builder()
|
|
||||||
.speakerId(speakerId)
|
|
||||||
.speakerName(speakerName)
|
|
||||||
.profileId(profileId)
|
|
||||||
.totalSegments(0)
|
|
||||||
.totalDuration(0)
|
|
||||||
.averageConfidence(confidence)
|
|
||||||
.firstAppeared(LocalDateTime.now())
|
|
||||||
.lastAppeared(LocalDateTime.now())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
speakerRepository.save(speaker);
|
|
||||||
isNewSpeaker = true;
|
|
||||||
|
|
||||||
// 신규 화자 식별 이벤트 발행
|
|
||||||
SpeakerEvent.NewSpeakerIdentified event = SpeakerEvent.NewSpeakerIdentified.of(
|
|
||||||
speakerId, speakerName, profileId, request.getRecordingId(),
|
|
||||||
extractMeetingIdFromRecordingId(request.getRecordingId()), confidence
|
|
||||||
);
|
|
||||||
eventPublisher.publishAsync("speaker-events", event);
|
|
||||||
|
|
||||||
log.info("신규 화자 등록 완료 - speakerId: {}, confidence: {}", speakerId, confidence);
|
|
||||||
} else {
|
|
||||||
log.debug("기존 화자 식별 - speakerId: {}, confidence: {}", speaker.getSpeakerId(), confidence);
|
|
||||||
}
|
|
||||||
|
|
||||||
return SpeakerDto.IdentificationResponse.builder()
|
|
||||||
.speakerId(speaker.getSpeakerId())
|
|
||||||
.speakerName(speaker.getSpeakerName())
|
|
||||||
.confidence(confidence)
|
|
||||||
.isNewSpeaker(isNewSpeaker)
|
|
||||||
.profileId(profileId)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional(readOnly = true)
|
|
||||||
public SpeakerDto.DetailResponse getSpeaker(String speakerId) {
|
|
||||||
log.debug("화자 정보 조회 - speakerId: {}", speakerId);
|
|
||||||
|
|
||||||
SpeakerEntity speaker = findSpeakerById(speakerId);
|
|
||||||
|
|
||||||
return SpeakerDto.DetailResponse.builder()
|
|
||||||
.speakerId(speaker.getSpeakerId())
|
|
||||||
.speakerName(speaker.getSpeakerName())
|
|
||||||
.profileId(speaker.getProfileId())
|
|
||||||
.userId(speaker.getUserId())
|
|
||||||
.totalSegments(speaker.getTotalSegments())
|
|
||||||
.totalDuration(speaker.getTotalDuration())
|
|
||||||
.averageConfidence(speaker.getAverageConfidence())
|
|
||||||
.firstAppeared(speaker.getFirstAppeared())
|
|
||||||
.lastAppeared(speaker.getLastAppeared())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SpeakerDto.DetailResponse updateSpeaker(String speakerId, SpeakerDto.UpdateRequest request) {
|
|
||||||
log.info("화자 정보 업데이트 - speakerId: {}", speakerId);
|
|
||||||
|
|
||||||
SpeakerEntity speaker = findSpeakerById(speakerId);
|
|
||||||
|
|
||||||
// 화자 정보 업데이트
|
|
||||||
String oldSpeakerName = speaker.getSpeakerName();
|
|
||||||
String oldUserId = speaker.getUserId();
|
|
||||||
speaker.updateSpeakerInfo(request.getSpeakerName(), request.getUserId());
|
|
||||||
SpeakerEntity savedSpeaker = speakerRepository.save(speaker);
|
|
||||||
|
|
||||||
// 화자 정보 업데이트 이벤트 발행
|
|
||||||
SpeakerEvent.SpeakerUpdated event = SpeakerEvent.SpeakerUpdated.of(
|
|
||||||
speakerId, oldSpeakerName, request.getSpeakerName(),
|
|
||||||
oldUserId, request.getUserId(), "SYSTEM"
|
|
||||||
);
|
|
||||||
eventPublisher.publishAsync("speaker-events", event);
|
|
||||||
|
|
||||||
log.info("화자 정보 업데이트 완료 - speakerId: {}, speakerName: {}",
|
|
||||||
speakerId, request.getSpeakerName());
|
|
||||||
|
|
||||||
return getSpeaker(speakerId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Transactional(readOnly = true)
|
|
||||||
public SpeakerDto.ListResponse getRecordingSpeakers(String recordingId) {
|
|
||||||
log.debug("녹음 화자 목록 조회 - recordingId: {}", recordingId);
|
|
||||||
|
|
||||||
// 녹음별 화자 통계 조회
|
|
||||||
List<Object[]> speakerStats = segmentRepository.getSpeakerStatisticsByRecording(recordingId);
|
|
||||||
|
|
||||||
List<SpeakerDto.SpeakerSummary> speakers = speakerStats.stream()
|
|
||||||
.map(stat -> {
|
|
||||||
String speakerId = (String) stat[0];
|
|
||||||
Long segmentCount = (Long) stat[1];
|
|
||||||
Double totalDuration = (Double) stat[2];
|
|
||||||
Double averageConfidence = (Double) stat[3];
|
|
||||||
|
|
||||||
// 화자 정보 조회
|
|
||||||
SpeakerEntity speaker = speakerRepository.findById(speakerId).orElse(null);
|
|
||||||
String speakerName = speaker != null ? speaker.getSpeakerName() : "알 수 없는 화자";
|
|
||||||
|
|
||||||
// 발언 비율 계산 (전체 시간 대비)
|
|
||||||
Double speakingRatio = calculateSpeakingRatio(recordingId, totalDuration);
|
|
||||||
|
|
||||||
return SpeakerDto.SpeakerSummary.builder()
|
|
||||||
.speakerId(speakerId)
|
|
||||||
.speakerName(speakerName)
|
|
||||||
.segmentCount(segmentCount.intValue())
|
|
||||||
.totalDuration(totalDuration.intValue())
|
|
||||||
.speakingRatio(speakingRatio)
|
|
||||||
.build();
|
|
||||||
})
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
return SpeakerDto.ListResponse.builder()
|
|
||||||
.recordingId(recordingId)
|
|
||||||
.speakerCount(speakers.size())
|
|
||||||
.speakers(speakers)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 ID로 엔티티 조회
|
|
||||||
*/
|
|
||||||
private SpeakerEntity findSpeakerById(String speakerId) {
|
|
||||||
return speakerRepository.findById(speakerId)
|
|
||||||
.orElseThrow(() -> new BusinessException(ErrorCode.ENTITY_NOT_FOUND, "화자를 찾을 수 없습니다"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 ID 생성
|
|
||||||
*/
|
|
||||||
private String generateSpeakerId() {
|
|
||||||
return "SPK-" + String.format("%03d", (int)(Math.random() * 999) + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Azure Speaker Recognition 시뮬레이션
|
|
||||||
*/
|
|
||||||
private String simulateAzureSpeakerRecognition(String audioFrame) {
|
|
||||||
// 실제로는 Azure Cognitive Services Speaker Recognition API 호출
|
|
||||||
return "PROFILE-" + UUID.randomUUID().toString().substring(0, 8).toUpperCase();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 화자 식별 신뢰도 시뮬레이션
|
|
||||||
*/
|
|
||||||
private Double simulateIdentificationConfidence() {
|
|
||||||
// 실제로는 Azure Speaker Recognition API에서 반환
|
|
||||||
return 0.90 + (Math.random() * 0.10); // 0.90 ~ 1.0
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 발언 비율 계산
|
|
||||||
*/
|
|
||||||
private Double calculateSpeakingRatio(String recordingId, Double speakerDuration) {
|
|
||||||
// 전체 녹음 시간 조회 (임시로 1800초로 설정)
|
|
||||||
Double totalDuration = 1800.0;
|
|
||||||
return speakerDuration / totalDuration;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 녹음 ID에서 회의 ID 추출
|
|
||||||
*/
|
|
||||||
private String extractMeetingIdFromRecordingId(String recordingId) {
|
|
||||||
// 실제로는 Recording 엔티티에서 조회
|
|
||||||
return "MEETING-" + recordingId.substring(4, 12);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -2,7 +2,6 @@ package com.unicorn.hgzero.stt.service;
|
|||||||
|
|
||||||
import com.unicorn.hgzero.stt.dto.TranscriptionDto;
|
import com.unicorn.hgzero.stt.dto.TranscriptionDto;
|
||||||
import com.unicorn.hgzero.stt.dto.TranscriptSegmentDto;
|
import com.unicorn.hgzero.stt.dto.TranscriptSegmentDto;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 음성 변환 서비스 인터페이스
|
* 음성 변환 서비스 인터페이스
|
||||||
@ -18,30 +17,13 @@ public interface TranscriptionService {
|
|||||||
*/
|
*/
|
||||||
TranscriptSegmentDto.Response processAudioStream(TranscriptionDto.StreamRequest request);
|
TranscriptSegmentDto.Response processAudioStream(TranscriptionDto.StreamRequest request);
|
||||||
|
|
||||||
/**
|
|
||||||
* 배치 음성-텍스트 변환
|
|
||||||
*
|
|
||||||
* @param request 배치 변환 요청
|
|
||||||
* @param audioFile 오디오 파일
|
|
||||||
* @return 배치 변환 응답
|
|
||||||
*/
|
|
||||||
TranscriptionDto.BatchResponse transcribeAudioBatch(TranscriptionDto.BatchRequest request, MultipartFile audioFile);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 배치 변환 완료 콜백 처리
|
|
||||||
*
|
|
||||||
* @param request 배치 콜백 요청
|
|
||||||
* @return 변환 완료 응답
|
|
||||||
*/
|
|
||||||
TranscriptionDto.CompleteResponse processBatchCallback(TranscriptionDto.BatchCallbackRequest request);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 변환 텍스트 전체 조회
|
* 변환 텍스트 전체 조회
|
||||||
*
|
*
|
||||||
* @param recordingId 녹음 ID
|
* @param recordingId 녹음 ID
|
||||||
* @param includeSegments 세그먼트 포함 여부
|
|
||||||
* @param speakerId 화자 ID 필터
|
|
||||||
* @return 변환 결과 응답
|
* @return 변환 결과 응답
|
||||||
*/
|
*/
|
||||||
TranscriptionDto.Response getTranscription(String recordingId, Boolean includeSegments, String speakerId);
|
TranscriptionDto.Response getTranscription(String recordingId);
|
||||||
}
|
}
|
||||||
@ -16,9 +16,10 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.ZoneId;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -78,12 +79,14 @@ public class TranscriptionServiceImpl implements TranscriptionService {
|
|||||||
updateRecordingStatistics(request.getRecordingId());
|
updateRecordingStatistics(request.getRecordingId());
|
||||||
|
|
||||||
// 세그먼트 생성 이벤트 발행
|
// 세그먼트 생성 이벤트 발행
|
||||||
LocalDateTime timestampAsLocalDateTime = java.time.Instant.ofEpochMilli(request.getTimestamp())
|
LocalDateTime timestampAsDateTime = LocalDateTime.ofInstant(
|
||||||
.atZone(java.time.ZoneId.systemDefault()).toLocalDateTime();
|
Instant.ofEpochMilli(request.getTimestamp()),
|
||||||
|
ZoneId.systemDefault()
|
||||||
|
);
|
||||||
TranscriptionEvent.SegmentCreated event = TranscriptionEvent.SegmentCreated.of(
|
TranscriptionEvent.SegmentCreated event = TranscriptionEvent.SegmentCreated.of(
|
||||||
segmentId, request.getRecordingId(), recording.getMeetingId(),
|
segmentId, request.getRecordingId(), recording.getMeetingId(),
|
||||||
recognizedText, speakerId, "화자-" + speakerId.substring(4),
|
recognizedText, speakerId, "화자-" + speakerId.substring(4),
|
||||||
timestampAsLocalDateTime, 3.5, confidence, warningFlag
|
timestampAsDateTime, 3.5, confidence, warningFlag
|
||||||
);
|
);
|
||||||
eventPublisher.publishAsync("transcription-events", event);
|
eventPublisher.publishAsync("transcription-events", event);
|
||||||
|
|
||||||
@ -111,93 +114,21 @@ public class TranscriptionServiceImpl implements TranscriptionService {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public TranscriptionDto.BatchResponse transcribeAudioBatch(TranscriptionDto.BatchRequest request, MultipartFile audioFile) {
|
|
||||||
log.info("배치 음성 변환 시작 - recordingId: {}, fileSize: {}",
|
|
||||||
request.getRecordingId(), audioFile.getSize());
|
|
||||||
|
|
||||||
// 녹음 존재 확인
|
|
||||||
RecordingEntity recording = findRecordingById(request.getRecordingId());
|
|
||||||
|
|
||||||
// 배치 작업 ID 생성
|
|
||||||
String jobId = generateJobId();
|
|
||||||
|
|
||||||
// Azure Batch Transcription Job 생성 (실제로는 Azure Speech SDK 사용)
|
|
||||||
// 여기서는 시뮬레이션
|
|
||||||
|
|
||||||
log.info("배치 음성 변환 작업 생성 완료 - jobId: {}", jobId);
|
|
||||||
|
|
||||||
return TranscriptionDto.BatchResponse.builder()
|
|
||||||
.jobId(jobId)
|
|
||||||
.recordingId(request.getRecordingId())
|
|
||||||
.status("PROCESSING")
|
|
||||||
.estimatedCompletionTime(LocalDateTime.now().plusSeconds(30))
|
|
||||||
.callbackUrl(request.getCallbackUrl())
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public TranscriptionDto.CompleteResponse processBatchCallback(TranscriptionDto.BatchCallbackRequest request) {
|
|
||||||
log.info("배치 변환 콜백 처리 - jobId: {}, status: {}", request.getJobId(), request.getStatus());
|
|
||||||
|
|
||||||
if ("COMPLETED".equals(request.getStatus()) && request.getSegments() != null) {
|
|
||||||
// 세그먼트 저장
|
|
||||||
for (TranscriptSegmentDto.Detail segmentDto : request.getSegments()) {
|
|
||||||
String segmentId = generateSegmentId();
|
|
||||||
|
|
||||||
TranscriptSegmentEntity segment = TranscriptSegmentEntity.builder()
|
|
||||||
.segmentId(segmentId)
|
|
||||||
.transcriptId(segmentDto.getTranscriptId())
|
|
||||||
.text(segmentDto.getText())
|
|
||||||
.speakerId(segmentDto.getSpeakerId())
|
|
||||||
.speakerName(segmentDto.getSpeakerName())
|
|
||||||
.timestamp(segmentDto.getTimestamp())
|
|
||||||
.duration(segmentDto.getDuration())
|
|
||||||
.confidence(segmentDto.getConfidence())
|
|
||||||
.warningFlag(segmentDto.getConfidence() < 0.6)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
segmentRepository.save(segment);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 전체 텍스트 통합 및 변환 결과 저장
|
|
||||||
String recordingId = extractRecordingIdFromJobId(request.getJobId());
|
|
||||||
aggregateAndSaveTranscription(recordingId, request.getSegments());
|
|
||||||
}
|
|
||||||
|
|
||||||
return TranscriptionDto.CompleteResponse.builder()
|
|
||||||
.jobId(request.getJobId())
|
|
||||||
.status(request.getStatus())
|
|
||||||
.segmentCount(request.getSegments() != null ? request.getSegments().size() : 0)
|
|
||||||
.totalDuration(calculateTotalDuration(request.getSegments()))
|
|
||||||
.averageConfidence(calculateAverageConfidence(request.getSegments()))
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
public TranscriptionDto.Response getTranscription(String recordingId, Boolean includeSegments, String speakerId) {
|
public TranscriptionDto.Response getTranscription(String recordingId) {
|
||||||
log.debug("변환 텍스트 조회 - recordingId: {}, includeSegments: {}", recordingId, includeSegments);
|
log.debug("변환 텍스트 조회 - recordingId: {}", recordingId);
|
||||||
|
|
||||||
// 변환 결과 조회
|
// 변환 결과 조회
|
||||||
TranscriptionEntity transcription = transcriptionRepository.findByRecordingId(recordingId)
|
TranscriptionEntity transcription = transcriptionRepository.findByRecordingId(recordingId)
|
||||||
.orElseThrow(() -> new BusinessException(ErrorCode.ENTITY_NOT_FOUND, "변환 결과를 찾을 수 없습니다"));
|
.orElseThrow(() -> new BusinessException(ErrorCode.ENTITY_NOT_FOUND, "변환 결과를 찾을 수 없습니다"));
|
||||||
|
|
||||||
List<TranscriptSegmentDto.Detail> segments = null;
|
// 세그먼트 정보 포함
|
||||||
|
List<TranscriptSegmentEntity> segmentEntities = segmentRepository.findByRecordingIdOrderByTimestamp(recordingId);
|
||||||
if (Boolean.TRUE.equals(includeSegments)) {
|
List<TranscriptSegmentDto.Detail> segments = segmentEntities.stream()
|
||||||
List<TranscriptSegmentEntity> segmentEntities;
|
.map(this::convertToSegmentDetail)
|
||||||
|
.collect(Collectors.toList());
|
||||||
if (speakerId != null) {
|
|
||||||
segmentEntities = segmentRepository.findByRecordingIdAndSpeakerIdOrderByTimestamp(recordingId, speakerId);
|
|
||||||
} else {
|
|
||||||
segmentEntities = segmentRepository.findByRecordingIdOrderByTimestamp(recordingId);
|
|
||||||
}
|
|
||||||
|
|
||||||
segments = segmentEntities.stream()
|
|
||||||
.map(this::convertToSegmentDetail)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
return TranscriptionDto.Response.builder()
|
return TranscriptionDto.Response.builder()
|
||||||
.recordingId(recordingId)
|
.recordingId(recordingId)
|
||||||
|
|||||||
@ -4,8 +4,8 @@ spring:
|
|||||||
|
|
||||||
# Database Configuration
|
# Database Configuration
|
||||||
datasource:
|
datasource:
|
||||||
url: jdbc:${DB_KIND:postgresql}://${DB_HOST:4.230.65.89}:${DB_PORT:5432}/${DB_NAME:sttdb}
|
url: jdbc:${DB_KIND:postgresql}://${DB_HOST:localhost}:${DB_PORT:5432}/${DB_NAME:sttdb}
|
||||||
username: ${DB_USERNAME:hgzerouser}
|
username: ${DB_USERNAME:stt_user}
|
||||||
password: ${DB_PASSWORD:}
|
password: ${DB_PASSWORD:}
|
||||||
driver-class-name: org.postgresql.Driver
|
driver-class-name: org.postgresql.Driver
|
||||||
hikari:
|
hikari:
|
||||||
@ -21,6 +21,7 @@ spring:
|
|||||||
show-sql: ${SHOW_SQL:true}
|
show-sql: ${SHOW_SQL:true}
|
||||||
properties:
|
properties:
|
||||||
hibernate:
|
hibernate:
|
||||||
|
dialect: org.hibernate.dialect.PostgreSQLDialect
|
||||||
format_sql: true
|
format_sql: true
|
||||||
use_sql_comments: true
|
use_sql_comments: true
|
||||||
hibernate:
|
hibernate:
|
||||||
@ -29,7 +30,7 @@ spring:
|
|||||||
# Redis Configuration
|
# Redis Configuration
|
||||||
data:
|
data:
|
||||||
redis:
|
redis:
|
||||||
host: ${REDIS_HOST:20.249.177.114}
|
host: ${REDIS_HOST:localhost}
|
||||||
port: ${REDIS_PORT:6379}
|
port: ${REDIS_PORT:6379}
|
||||||
password: ${REDIS_PASSWORD:}
|
password: ${REDIS_PASSWORD:}
|
||||||
timeout: 2000ms
|
timeout: 2000ms
|
||||||
@ -39,7 +40,7 @@ spring:
|
|||||||
max-idle: 8
|
max-idle: 8
|
||||||
min-idle: 0
|
min-idle: 0
|
||||||
max-wait: -1ms
|
max-wait: -1ms
|
||||||
database: ${REDIS_DATABASE:2}
|
database: ${REDIS_DATABASE:3}
|
||||||
|
|
||||||
# Server Configuration
|
# Server Configuration
|
||||||
server:
|
server:
|
||||||
@ -47,9 +48,9 @@ server:
|
|||||||
|
|
||||||
# JWT Configuration
|
# JWT Configuration
|
||||||
jwt:
|
jwt:
|
||||||
secret: ${JWT_SECRET:}
|
secret: ${JWT_SECRET:HGZero_Secret_Key_For_Development_Only}
|
||||||
access-token-validity: ${JWT_ACCESS_TOKEN_VALIDITY:3600}
|
access-token-validity: ${JWT_ACCESS_TOKEN_VALIDITY:1800}
|
||||||
refresh-token-validity: ${JWT_REFRESH_TOKEN_VALIDITY:604800}
|
refresh-token-validity: ${JWT_REFRESH_TOKEN_VALIDITY:86400}
|
||||||
|
|
||||||
# CORS Configuration
|
# CORS Configuration
|
||||||
cors:
|
cors:
|
||||||
|
|||||||
@ -1,16 +1,19 @@
|
|||||||
package com.unicorn.hgzero.stt;
|
package com.unicorn.hgzero.stt;
|
||||||
|
|
||||||
|
import com.unicorn.hgzero.stt.config.TestConfig;
|
||||||
import org.junit.jupiter.api.DisplayName;
|
import org.junit.jupiter.api.DisplayName;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.test.context.ActiveProfiles;
|
import org.springframework.test.context.ActiveProfiles;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* STT 애플리케이션 통합 테스트
|
* STT 애플리케이션 통합 테스트
|
||||||
* 전체 애플리케이션 컨텍스트 로딩 및 기본 설정 검증
|
* 전체 애플리케이션 컨텍스트 로딩 및 기본 설정 검증
|
||||||
*/
|
*/
|
||||||
@SpringBootTest
|
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
|
||||||
@ActiveProfiles("test")
|
@ActiveProfiles("test")
|
||||||
|
@Import(TestConfig.class)
|
||||||
@DisplayName("STT 애플리케이션 테스트")
|
@DisplayName("STT 애플리케이션 테스트")
|
||||||
class SttApplicationTest {
|
class SttApplicationTest {
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,82 @@
|
|||||||
|
package com.unicorn.hgzero.stt.config;
|
||||||
|
|
||||||
|
import com.unicorn.hgzero.stt.event.publisher.EventPublisher;
|
||||||
|
import com.unicorn.hgzero.stt.repository.jpa.RecordingRepository;
|
||||||
|
import com.unicorn.hgzero.stt.repository.jpa.SpeakerRepository;
|
||||||
|
import com.unicorn.hgzero.stt.repository.jpa.TranscriptionRepository;
|
||||||
|
import com.unicorn.hgzero.stt.repository.jpa.TranscriptSegmentRepository;
|
||||||
|
import com.unicorn.hgzero.stt.service.RecordingService;
|
||||||
|
import com.unicorn.hgzero.stt.service.SpeakerService;
|
||||||
|
import com.unicorn.hgzero.stt.service.TranscriptionService;
|
||||||
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||||
|
import org.springframework.boot.autoconfigure.domain.EntityScan;
|
||||||
|
import org.springframework.boot.test.context.TestConfiguration;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Primary;
|
||||||
|
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
|
||||||
|
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||||
|
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import redis.embedded.RedisServer;
|
||||||
|
|
||||||
|
import jakarta.annotation.PostConstruct;
|
||||||
|
import jakarta.annotation.PreDestroy;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 테스트용 설정 클래스
|
||||||
|
* Embedded Redis 서버와 Mock Bean들을 제공
|
||||||
|
*/
|
||||||
|
@TestConfiguration
|
||||||
|
@EnableJpaRepositories(basePackages = "com.unicorn.hgzero.stt.repository.jpa")
|
||||||
|
@EntityScan(basePackages = "com.unicorn.hgzero.stt.repository.entity")
|
||||||
|
@ComponentScan(basePackages = {"com.unicorn.hgzero.stt.service", "com.unicorn.hgzero.stt.config"})
|
||||||
|
public class TestConfig {
|
||||||
|
|
||||||
|
private RedisServer redisServer;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void startRedis() {
|
||||||
|
try {
|
||||||
|
redisServer = new RedisServer(6370);
|
||||||
|
redisServer.start();
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Redis 서버 시작 실패 시 로그만 남기고 계속 진행
|
||||||
|
System.err.println("Failed to start embedded Redis server: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreDestroy
|
||||||
|
public void stopRedis() {
|
||||||
|
if (redisServer != null && redisServer.isActive()) {
|
||||||
|
redisServer.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@Primary
|
||||||
|
public EventPublisher eventPublisher() {
|
||||||
|
return mock(EventPublisher.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@Primary
|
||||||
|
@ConditionalOnMissingBean
|
||||||
|
public RedisConnectionFactory redisConnectionFactory() {
|
||||||
|
// Embedded Redis에 연결하는 실제 ConnectionFactory
|
||||||
|
return new LettuceConnectionFactory("localhost", 6370);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@Primary
|
||||||
|
@ConditionalOnMissingBean
|
||||||
|
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
|
||||||
|
RedisTemplate<String, Object> template = new RedisTemplate<>();
|
||||||
|
template.setConnectionFactory(connectionFactory);
|
||||||
|
return template;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,55 @@
|
|||||||
|
package com.unicorn.hgzero.stt.config;
|
||||||
|
|
||||||
|
import org.springframework.boot.test.context.TestConfiguration;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Primary;
|
||||||
|
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||||
|
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import redis.embedded.RedisServer;
|
||||||
|
|
||||||
|
import jakarta.annotation.PostConstruct;
|
||||||
|
import jakarta.annotation.PreDestroy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WebMvcTest용 최소한의 설정 클래스
|
||||||
|
* Repository는 MockBean으로 별도 처리
|
||||||
|
*/
|
||||||
|
@TestConfiguration
|
||||||
|
@ComponentScan(basePackages = "com.unicorn.hgzero.stt.config")
|
||||||
|
public class WebMvcTestConfig {
|
||||||
|
|
||||||
|
private RedisServer redisServer;
|
||||||
|
|
||||||
|
@PostConstruct
|
||||||
|
public void startRedis() {
|
||||||
|
try {
|
||||||
|
redisServer = new RedisServer(6371); // 다른 포트 사용
|
||||||
|
redisServer.start();
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("Failed to start embedded Redis server: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreDestroy
|
||||||
|
public void stopRedis() {
|
||||||
|
if (redisServer != null && redisServer.isActive()) {
|
||||||
|
redisServer.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@Primary
|
||||||
|
public RedisConnectionFactory redisConnectionFactory() {
|
||||||
|
return new LettuceConnectionFactory("localhost", 6371);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
@Primary
|
||||||
|
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
|
||||||
|
RedisTemplate<String, Object> template = new RedisTemplate<>();
|
||||||
|
template.setConnectionFactory(connectionFactory);
|
||||||
|
return template;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
package com.unicorn.hgzero.stt.controller;
|
package com.unicorn.hgzero.stt.controller;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.unicorn.hgzero.stt.config.WebMvcTestConfig;
|
||||||
import com.unicorn.hgzero.stt.dto.RecordingDto;
|
import com.unicorn.hgzero.stt.dto.RecordingDto;
|
||||||
import com.unicorn.hgzero.stt.service.RecordingService;
|
import com.unicorn.hgzero.stt.service.RecordingService;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
@ -9,6 +10,7 @@ import org.junit.jupiter.api.Test;
|
|||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||||
import org.springframework.boot.test.mock.mockito.MockBean;
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.test.web.servlet.MockMvc;
|
import org.springframework.test.web.servlet.MockMvc;
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,109 @@
|
|||||||
|
package com.unicorn.hgzero.stt.controller;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.unicorn.hgzero.stt.dto.RecordingDto;
|
||||||
|
import com.unicorn.hgzero.stt.service.RecordingService;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.DisplayName;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||||
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.test.web.servlet.MockMvc;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import static org.mockito.ArgumentMatchers.*;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
|
||||||
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 간단한 녹음 컨트롤러 테스트
|
||||||
|
*/
|
||||||
|
@WebMvcTest(RecordingController.class)
|
||||||
|
@DisplayName("간단한 녹음 컨트롤러 테스트")
|
||||||
|
class SimpleRecordingControllerTest {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private MockMvc mockMvc;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ObjectMapper objectMapper;
|
||||||
|
|
||||||
|
@MockBean
|
||||||
|
private RecordingService recordingService;
|
||||||
|
|
||||||
|
private RecordingDto.PrepareRequest prepareRequest;
|
||||||
|
private RecordingDto.PrepareResponse prepareResponse;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() {
|
||||||
|
prepareRequest = RecordingDto.PrepareRequest.builder()
|
||||||
|
.meetingId("MEETING-001")
|
||||||
|
.sessionId("SESSION-001")
|
||||||
|
.language("ko-KR")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
prepareResponse = RecordingDto.PrepareResponse.builder()
|
||||||
|
.recordingId("REC-20250123-001")
|
||||||
|
.sessionId("SESSION-001")
|
||||||
|
.status("READY")
|
||||||
|
.streamUrl("wss://api.example.com/stt/v1/ws/stt/SESSION-001")
|
||||||
|
.storagePath("recordings/MEETING-001/SESSION-001.wav")
|
||||||
|
.estimatedInitTime(1100)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("녹음 준비 API 성공")
|
||||||
|
void prepareRecording_Success() throws Exception {
|
||||||
|
// Given
|
||||||
|
when(recordingService.prepareRecording(any(RecordingDto.PrepareRequest.class)))
|
||||||
|
.thenReturn(prepareResponse);
|
||||||
|
|
||||||
|
// When & Then
|
||||||
|
mockMvc.perform(post("/api/v1/stt/recordings/prepare")
|
||||||
|
.contentType(MediaType.APPLICATION_JSON)
|
||||||
|
.content(objectMapper.writeValueAsString(prepareRequest)))
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(jsonPath("$.success").value(true))
|
||||||
|
.andExpect(jsonPath("$.data.recordingId").value("REC-20250123-001"))
|
||||||
|
.andExpect(jsonPath("$.data.sessionId").value("SESSION-001"))
|
||||||
|
.andExpect(jsonPath("$.data.status").value("READY"));
|
||||||
|
|
||||||
|
verify(recordingService).prepareRecording(any(RecordingDto.PrepareRequest.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("녹음 시작 API 성공")
|
||||||
|
void startRecording_Success() throws Exception {
|
||||||
|
// Given
|
||||||
|
String recordingId = "REC-20250123-001";
|
||||||
|
RecordingDto.StartRequest startRequest = RecordingDto.StartRequest.builder()
|
||||||
|
.startedBy("user001")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
RecordingDto.StatusResponse statusResponse = RecordingDto.StatusResponse.builder()
|
||||||
|
.recordingId(recordingId)
|
||||||
|
.status("RECORDING")
|
||||||
|
.startTime(LocalDateTime.now())
|
||||||
|
.duration(0)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
when(recordingService.startRecording(eq(recordingId), any(RecordingDto.StartRequest.class)))
|
||||||
|
.thenReturn(statusResponse);
|
||||||
|
|
||||||
|
// When & Then
|
||||||
|
mockMvc.perform(post("/api/v1/stt/recordings/{recordingId}/start", recordingId)
|
||||||
|
.contentType(MediaType.APPLICATION_JSON)
|
||||||
|
.content(objectMapper.writeValueAsString(startRequest)))
|
||||||
|
.andExpect(status().isOk())
|
||||||
|
.andExpect(jsonPath("$.success").value(true))
|
||||||
|
.andExpect(jsonPath("$.data.recordingId").value(recordingId))
|
||||||
|
.andExpect(jsonPath("$.data.status").value("RECORDING"));
|
||||||
|
|
||||||
|
verify(recordingService).startRecording(eq(recordingId), any(RecordingDto.StartRequest.class));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,14 +1,21 @@
|
|||||||
package com.unicorn.hgzero.stt.integration;
|
package com.unicorn.hgzero.stt.integration;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
import com.unicorn.hgzero.stt.config.TestConfig;
|
||||||
import com.unicorn.hgzero.stt.dto.RecordingDto;
|
import com.unicorn.hgzero.stt.dto.RecordingDto;
|
||||||
import com.unicorn.hgzero.stt.dto.TranscriptionDto;
|
import com.unicorn.hgzero.stt.dto.TranscriptionDto;
|
||||||
import com.unicorn.hgzero.stt.dto.SpeakerDto;
|
import com.unicorn.hgzero.stt.dto.SpeakerDto;
|
||||||
|
import com.unicorn.hgzero.stt.service.RecordingService;
|
||||||
|
import com.unicorn.hgzero.stt.service.SpeakerService;
|
||||||
|
import com.unicorn.hgzero.stt.service.TranscriptionService;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.DisplayName;
|
import org.junit.jupiter.api.DisplayName;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureWebMvc;
|
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureWebMvc;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.boot.test.mock.mockito.MockBean;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.test.context.ActiveProfiles;
|
import org.springframework.test.context.ActiveProfiles;
|
||||||
import org.springframework.test.web.servlet.MockMvc;
|
import org.springframework.test.web.servlet.MockMvc;
|
||||||
@ -16,6 +23,8 @@ import org.springframework.test.web.servlet.MvcResult;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
|
||||||
|
import static org.mockito.ArgumentMatchers.*;
|
||||||
|
import static org.mockito.Mockito.*;
|
||||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
|
||||||
|
|
||||||
@ -23,10 +32,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
|
|||||||
* STT API 통합 테스트
|
* STT API 통합 테스트
|
||||||
* 전체 워크플로우 시나리오 테스트
|
* 전체 워크플로우 시나리오 테스트
|
||||||
*/
|
*/
|
||||||
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
|
||||||
@AutoConfigureWebMvc
|
@AutoConfigureWebMvc
|
||||||
@ActiveProfiles("test")
|
@ActiveProfiles("test")
|
||||||
@Transactional
|
|
||||||
@DisplayName("STT API 통합 테스트")
|
@DisplayName("STT API 통합 테스트")
|
||||||
class SttApiIntegrationTest {
|
class SttApiIntegrationTest {
|
||||||
|
|
||||||
@ -36,6 +44,99 @@ class SttApiIntegrationTest {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ObjectMapper objectMapper;
|
private ObjectMapper objectMapper;
|
||||||
|
|
||||||
|
@MockBean
|
||||||
|
private RecordingService recordingService;
|
||||||
|
|
||||||
|
@MockBean
|
||||||
|
private SpeakerService speakerService;
|
||||||
|
|
||||||
|
@MockBean
|
||||||
|
private TranscriptionService transcriptionService;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() {
|
||||||
|
// RecordingService Mock 설정
|
||||||
|
when(recordingService.prepareRecording(any(RecordingDto.PrepareRequest.class)))
|
||||||
|
.thenReturn(RecordingDto.PrepareResponse.builder()
|
||||||
|
.recordingId("REC-20250123-001")
|
||||||
|
.sessionId("SESSION-INTEGRATION-001")
|
||||||
|
.status("READY")
|
||||||
|
.streamUrl("wss://api.example.com/stt/v1/ws/stt/SESSION-INTEGRATION-001")
|
||||||
|
.storagePath("recordings/MEETING-INTEGRATION-001/SESSION-INTEGRATION-001.wav")
|
||||||
|
.estimatedInitTime(1100)
|
||||||
|
.build());
|
||||||
|
|
||||||
|
when(recordingService.startRecording(anyString(), any(RecordingDto.StartRequest.class)))
|
||||||
|
.thenReturn(RecordingDto.StatusResponse.builder()
|
||||||
|
.recordingId("REC-20250123-001")
|
||||||
|
.status("RECORDING")
|
||||||
|
.startTime(java.time.LocalDateTime.now())
|
||||||
|
.duration(0)
|
||||||
|
.build());
|
||||||
|
|
||||||
|
when(recordingService.stopRecording(anyString(), any(RecordingDto.StopRequest.class)))
|
||||||
|
.thenReturn(RecordingDto.StatusResponse.builder()
|
||||||
|
.recordingId("REC-20250123-001")
|
||||||
|
.status("STOPPED")
|
||||||
|
.startTime(java.time.LocalDateTime.now().minusMinutes(30))
|
||||||
|
.endTime(java.time.LocalDateTime.now())
|
||||||
|
.duration(1800)
|
||||||
|
.fileSize(172800000L)
|
||||||
|
.storagePath("recordings/MEETING-INTEGRATION-001/SESSION-INTEGRATION-001.wav")
|
||||||
|
.build());
|
||||||
|
|
||||||
|
when(recordingService.getRecording(anyString()))
|
||||||
|
.thenReturn(RecordingDto.DetailResponse.builder()
|
||||||
|
.recordingId("REC-20250123-001")
|
||||||
|
.meetingId("MEETING-INTEGRATION-001")
|
||||||
|
.sessionId("SESSION-INTEGRATION-001")
|
||||||
|
.status("STOPPED")
|
||||||
|
.startTime(java.time.LocalDateTime.now().minusMinutes(30))
|
||||||
|
.endTime(java.time.LocalDateTime.now())
|
||||||
|
.duration(1800)
|
||||||
|
.speakerCount(3)
|
||||||
|
.segmentCount(45)
|
||||||
|
.storagePath("recordings/MEETING-INTEGRATION-001/SESSION-INTEGRATION-001.wav")
|
||||||
|
.language("ko-KR")
|
||||||
|
.build());
|
||||||
|
|
||||||
|
// TranscriptionService Mock 설정
|
||||||
|
when(transcriptionService.processAudioStream(any(TranscriptionDto.StreamRequest.class)))
|
||||||
|
.thenReturn(com.unicorn.hgzero.stt.dto.TranscriptSegmentDto.Response.builder()
|
||||||
|
.recordingId("REC-20250123-001")
|
||||||
|
.transcriptId("TRANS-001")
|
||||||
|
.text("안녕하세요")
|
||||||
|
.confidence(0.95)
|
||||||
|
.timestamp(System.currentTimeMillis())
|
||||||
|
.speakerId("SPK-001")
|
||||||
|
.duration(2.5)
|
||||||
|
.build());
|
||||||
|
|
||||||
|
when(transcriptionService.getTranscription(anyString(), any(), any()))
|
||||||
|
.thenReturn(TranscriptionDto.Response.builder()
|
||||||
|
.recordingId("REC-20250123-001")
|
||||||
|
.fullText("안녕하세요. 오늘 회의를 시작하겠습니다.")
|
||||||
|
.segmentCount(45)
|
||||||
|
.speakerCount(3)
|
||||||
|
.totalDuration(1800)
|
||||||
|
.averageConfidence(0.92)
|
||||||
|
.build());
|
||||||
|
|
||||||
|
// SpeakerService Mock 설정
|
||||||
|
when(speakerService.identifySpeaker(any(SpeakerDto.IdentifyRequest.class)))
|
||||||
|
.thenReturn(SpeakerDto.IdentificationResponse.builder()
|
||||||
|
.speakerId("SPK-001")
|
||||||
|
.confidence(0.95)
|
||||||
|
.isNewSpeaker(false)
|
||||||
|
.build());
|
||||||
|
|
||||||
|
when(speakerService.getRecordingSpeakers(anyString()))
|
||||||
|
.thenReturn(SpeakerDto.ListResponse.builder()
|
||||||
|
.recordingId("REC-20250123-001")
|
||||||
|
.speakerCount(3)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("전체 STT 워크플로우 통합 테스트")
|
@DisplayName("전체 STT 워크플로우 통합 테스트")
|
||||||
void fullSttWorkflowIntegrationTest() throws Exception {
|
void fullSttWorkflowIntegrationTest() throws Exception {
|
||||||
@ -141,6 +242,17 @@ class SttApiIntegrationTest {
|
|||||||
@Test
|
@Test
|
||||||
@DisplayName("에러 케이스 통합 테스트")
|
@DisplayName("에러 케이스 통합 테스트")
|
||||||
void errorCasesIntegrationTest() throws Exception {
|
void errorCasesIntegrationTest() throws Exception {
|
||||||
|
// 존재하지 않는 녹음에 대한 Mock 설정
|
||||||
|
when(recordingService.startRecording(eq("NONEXISTENT-001"), any(RecordingDto.StartRequest.class)))
|
||||||
|
.thenThrow(new com.unicorn.hgzero.common.exception.BusinessException(
|
||||||
|
com.unicorn.hgzero.common.exception.ErrorCode.ENTITY_NOT_FOUND,
|
||||||
|
"녹음을 찾을 수 없습니다"));
|
||||||
|
|
||||||
|
when(transcriptionService.getTranscription(eq("NONEXISTENT-001"), any(), any()))
|
||||||
|
.thenThrow(new com.unicorn.hgzero.common.exception.BusinessException(
|
||||||
|
com.unicorn.hgzero.common.exception.ErrorCode.ENTITY_NOT_FOUND,
|
||||||
|
"변환 결과를 찾을 수 없습니다"));
|
||||||
|
|
||||||
// 존재하지 않는 녹음 시작 시도
|
// 존재하지 않는 녹음 시작 시도
|
||||||
RecordingDto.StartRequest startRequest = RecordingDto.StartRequest.builder()
|
RecordingDto.StartRequest startRequest = RecordingDto.StartRequest.builder()
|
||||||
.startedBy("test-user")
|
.startedBy("test-user")
|
||||||
|
|||||||
@ -50,6 +50,8 @@ class TranscriptionServiceTest {
|
|||||||
private TranscriptionServiceImpl transcriptionService;
|
private TranscriptionServiceImpl transcriptionService;
|
||||||
|
|
||||||
private RecordingEntity recordingEntity;
|
private RecordingEntity recordingEntity;
|
||||||
|
private TranscriptSegmentEntity segmentEntity;
|
||||||
|
private TranscriptionEntity transcriptionEntity;
|
||||||
private TranscriptionDto.StreamRequest streamRequest;
|
private TranscriptionDto.StreamRequest streamRequest;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
@ -60,6 +62,22 @@ class TranscriptionServiceTest {
|
|||||||
.sessionId("SESSION-001")
|
.sessionId("SESSION-001")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
segmentEntity = TranscriptSegmentEntity.builder()
|
||||||
|
.segmentId("SEG-001")
|
||||||
|
.recordingId("REC-20250123-001")
|
||||||
|
.text("테스트 음성 변환 결과")
|
||||||
|
.timestamp(System.currentTimeMillis())
|
||||||
|
.confidence(0.95)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
transcriptionEntity = TranscriptionEntity.builder()
|
||||||
|
.transcriptId("TRANS-001")
|
||||||
|
.recordingId("REC-20250123-001")
|
||||||
|
.fullText("전체 음성 변환 결과")
|
||||||
|
.segmentCount(1)
|
||||||
|
.averageConfidence(0.95)
|
||||||
|
.build();
|
||||||
|
|
||||||
streamRequest = TranscriptionDto.StreamRequest.builder()
|
streamRequest = TranscriptionDto.StreamRequest.builder()
|
||||||
.recordingId("REC-20250123-001")
|
.recordingId("REC-20250123-001")
|
||||||
.audioData("base64-encoded-audio-data")
|
.audioData("base64-encoded-audio-data")
|
||||||
@ -73,7 +91,7 @@ class TranscriptionServiceTest {
|
|||||||
void processAudioStream_Success() {
|
void processAudioStream_Success() {
|
||||||
// Given
|
// Given
|
||||||
when(recordingRepository.findById(anyString())).thenReturn(Optional.of(recordingEntity));
|
when(recordingRepository.findById(anyString())).thenReturn(Optional.of(recordingEntity));
|
||||||
when(segmentRepository.save(any(TranscriptSegmentEntity.class))).thenReturn(any());
|
when(segmentRepository.save(any(TranscriptSegmentEntity.class))).thenReturn(segmentEntity);
|
||||||
when(segmentRepository.getSpeakerStatisticsByRecording(anyString())).thenReturn(List.of());
|
when(segmentRepository.getSpeakerStatisticsByRecording(anyString())).thenReturn(List.of());
|
||||||
when(segmentRepository.countByRecordingId(anyString())).thenReturn(1L);
|
when(segmentRepository.countByRecordingId(anyString())).thenReturn(1L);
|
||||||
when(recordingRepository.save(any(RecordingEntity.class))).thenReturn(recordingEntity);
|
when(recordingRepository.save(any(RecordingEntity.class))).thenReturn(recordingEntity);
|
||||||
@ -88,9 +106,9 @@ class TranscriptionServiceTest {
|
|||||||
assertThat(response.getConfidence()).isGreaterThan(0.8);
|
assertThat(response.getConfidence()).isGreaterThan(0.8);
|
||||||
assertThat(response.getSpeakerId()).isNotEmpty();
|
assertThat(response.getSpeakerId()).isNotEmpty();
|
||||||
|
|
||||||
verify(recordingRepository).findById("REC-20250123-001");
|
verify(recordingRepository, atLeastOnce()).findById("REC-20250123-001");
|
||||||
verify(segmentRepository).save(any(TranscriptSegmentEntity.class));
|
verify(segmentRepository).save(any(TranscriptSegmentEntity.class));
|
||||||
verify(eventPublisher).publishAsync(eq("transcription-events"), any());
|
verify(eventPublisher, atLeastOnce()).publishAsync(eq("transcription-events"), any());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -114,7 +132,7 @@ class TranscriptionServiceTest {
|
|||||||
void processAudioStream_LowConfidenceWarning() {
|
void processAudioStream_LowConfidenceWarning() {
|
||||||
// Given
|
// Given
|
||||||
when(recordingRepository.findById(anyString())).thenReturn(Optional.of(recordingEntity));
|
when(recordingRepository.findById(anyString())).thenReturn(Optional.of(recordingEntity));
|
||||||
when(segmentRepository.save(any(TranscriptSegmentEntity.class))).thenReturn(any());
|
when(segmentRepository.save(any(TranscriptSegmentEntity.class))).thenReturn(segmentEntity);
|
||||||
when(segmentRepository.getSpeakerStatisticsByRecording(anyString())).thenReturn(List.of());
|
when(segmentRepository.getSpeakerStatisticsByRecording(anyString())).thenReturn(List.of());
|
||||||
when(segmentRepository.countByRecordingId(anyString())).thenReturn(1L);
|
when(segmentRepository.countByRecordingId(anyString())).thenReturn(1L);
|
||||||
when(recordingRepository.save(any(RecordingEntity.class))).thenReturn(recordingEntity);
|
when(recordingRepository.save(any(RecordingEntity.class))).thenReturn(recordingEntity);
|
||||||
@ -191,8 +209,8 @@ class TranscriptionServiceTest {
|
|||||||
.segments(segments)
|
.segments(segments)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
when(segmentRepository.save(any(TranscriptSegmentEntity.class))).thenReturn(any());
|
when(segmentRepository.save(any(TranscriptSegmentEntity.class))).thenReturn(segmentEntity);
|
||||||
when(transcriptionRepository.save(any(TranscriptionEntity.class))).thenReturn(any());
|
when(transcriptionRepository.save(any(TranscriptionEntity.class))).thenReturn(transcriptionEntity);
|
||||||
|
|
||||||
// When
|
// When
|
||||||
TranscriptionDto.CompleteResponse response = transcriptionService.processBatchCallback(callbackRequest);
|
TranscriptionDto.CompleteResponse response = transcriptionService.processBatchCallback(callbackRequest);
|
||||||
|
|||||||
@ -1,55 +1,131 @@
|
|||||||
# STT 서비스 테스트 설정
|
# 테스트 환경별 설정 선택
|
||||||
spring:
|
# 1. 단위 테스트용 (기본)
|
||||||
profiles:
|
# 2. Docker 통합 테스트용 (integration-test profile 활성화 시)
|
||||||
active: test
|
|
||||||
|
|
||||||
# 데이터베이스 설정 (H2 인메모리)
|
spring:
|
||||||
|
application:
|
||||||
|
name: stt-test
|
||||||
|
|
||||||
|
# Bean Override 허용
|
||||||
|
main:
|
||||||
|
allow-bean-definition-overriding: true
|
||||||
|
|
||||||
|
# In-Memory Database (기본값)
|
||||||
datasource:
|
datasource:
|
||||||
url: jdbc:h2:mem:testdb
|
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
|
||||||
driver-class-name: org.h2.Driver
|
|
||||||
username: sa
|
username: sa
|
||||||
password:
|
password:
|
||||||
|
driver-class-name: org.h2.Driver
|
||||||
|
|
||||||
# JPA 설정
|
|
||||||
jpa:
|
jpa:
|
||||||
|
show-sql: false
|
||||||
hibernate:
|
hibernate:
|
||||||
ddl-auto: create-drop
|
ddl-auto: create-drop
|
||||||
show-sql: true
|
|
||||||
properties:
|
properties:
|
||||||
hibernate:
|
hibernate:
|
||||||
dialect: org.hibernate.dialect.H2Dialect
|
dialect: org.hibernate.dialect.H2Dialect
|
||||||
format_sql: true
|
|
||||||
|
|
||||||
# Redis 설정 (임베디드)
|
# Mock Redis (handled by TestConfig)
|
||||||
redis:
|
data:
|
||||||
host: localhost
|
redis:
|
||||||
port: 6370
|
host: localhost
|
||||||
timeout: 2000ms
|
port: 6370
|
||||||
|
password:
|
||||||
|
database: 0
|
||||||
|
|
||||||
# JWT 설정
|
# Test Server
|
||||||
security:
|
server:
|
||||||
jwt:
|
port: 0
|
||||||
secret: test-secret-key-for-jwt-token-generation-test
|
|
||||||
expiration: 86400
|
|
||||||
|
|
||||||
# Azure 서비스 설정 (테스트용 더미)
|
# Mock Azure Services
|
||||||
azure:
|
azure:
|
||||||
speech:
|
speech:
|
||||||
subscription-key: test-key
|
subscription-key: test-key
|
||||||
region: koreacentral
|
region: eastus
|
||||||
endpoint: https://test.cognitiveservices.azure.com/
|
language: ko-KR
|
||||||
|
blob:
|
||||||
storage:
|
connection-string: DefaultEndpointsProtocol=https;AccountName=test;AccountKey=test;EndpointSuffix=core.windows.net
|
||||||
connection-string: DefaultEndpointsProtocol=https;AccountName=testaccount;AccountKey=testkey;EndpointSuffix=core.windows.net
|
|
||||||
container-name: test-recordings
|
container-name: test-recordings
|
||||||
|
eventhub:
|
||||||
event-hubs:
|
connection-string: Endpoint=sb://test.servicebus.windows.net/;SharedAccessKeyName=test;SharedAccessKey=test
|
||||||
connection-string: Endpoint=sb://test-eventhub.servicebus.windows.net/;SharedAccessKeyName=test;SharedAccessKey=test
|
name: test-events
|
||||||
consumer-group: test-group
|
consumer-group: test-group
|
||||||
|
|
||||||
# 로깅 설정
|
---
|
||||||
|
# Docker 통합 테스트용 설정
|
||||||
|
spring:
|
||||||
|
config:
|
||||||
|
activate:
|
||||||
|
on-profile: integration-test
|
||||||
|
|
||||||
|
# Real PostgreSQL (via Docker)
|
||||||
|
datasource:
|
||||||
|
url: jdbc:postgresql://localhost:5433/sttdb_test
|
||||||
|
username: testuser
|
||||||
|
password: testpass
|
||||||
|
driver-class-name: org.postgresql.Driver
|
||||||
|
|
||||||
|
jpa:
|
||||||
|
show-sql: true
|
||||||
|
hibernate:
|
||||||
|
ddl-auto: update
|
||||||
|
properties:
|
||||||
|
hibernate:
|
||||||
|
dialect: org.hibernate.dialect.PostgreSQLDialect
|
||||||
|
|
||||||
|
# Real Redis (via Docker)
|
||||||
|
data:
|
||||||
|
redis:
|
||||||
|
host: localhost
|
||||||
|
port: 6380
|
||||||
|
password: testpass
|
||||||
|
database: 0
|
||||||
|
|
||||||
|
# Real Server
|
||||||
|
server:
|
||||||
|
port: 8083
|
||||||
|
|
||||||
|
# Azure Emulator (Azurite)
|
||||||
|
azure:
|
||||||
|
speech:
|
||||||
|
subscription-key: test-key
|
||||||
|
region: eastus
|
||||||
|
language: ko-KR
|
||||||
|
blob:
|
||||||
|
connection-string: DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;
|
||||||
|
container-name: test-recordings
|
||||||
|
eventhub:
|
||||||
|
connection-string: Endpoint=sb://test.servicebus.windows.net/;SharedAccessKeyName=test;SharedAccessKey=test
|
||||||
|
name: test-events
|
||||||
|
consumer-group: test-group
|
||||||
|
|
||||||
|
---
|
||||||
|
# 공통 설정
|
||||||
|
jwt:
|
||||||
|
secret: test-secret-key-for-testing-purposes-only-not-for-production-use
|
||||||
|
access-token-validity: 3600
|
||||||
|
refresh-token-validity: 604800
|
||||||
|
|
||||||
|
cors:
|
||||||
|
allowed-origins: "*"
|
||||||
|
|
||||||
|
management:
|
||||||
|
endpoints:
|
||||||
|
enabled-by-default: false
|
||||||
|
endpoint:
|
||||||
|
health:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
springdoc:
|
||||||
|
api-docs:
|
||||||
|
enabled: false
|
||||||
|
swagger-ui:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
com.unicorn.hgzero.stt: DEBUG
|
com.unicorn.hgzero.stt: INFO
|
||||||
org.springframework.web: DEBUG
|
org.springframework: WARN
|
||||||
org.hibernate.SQL: DEBUG
|
org.hibernate: WARN
|
||||||
|
pattern:
|
||||||
|
console: "%d{HH:mm:ss} %-5level %logger{36} - %msg%n"
|
||||||
|
|||||||
50
test-scripts/run-integration-tests.sh
Executable file
50
test-scripts/run-integration-tests.sh
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# STT 서비스 통합 테스트 실행 스크립트
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "🚀 STT 서비스 통합 테스트 시작"
|
||||||
|
|
||||||
|
# 1. Docker 테스트 환경 시작
|
||||||
|
echo "📦 Docker 테스트 환경 시작..."
|
||||||
|
docker-compose -f docker-compose.test.yml up -d
|
||||||
|
|
||||||
|
# 2. 서비스 준비 대기
|
||||||
|
echo "⏳ 서비스 준비 대기 중..."
|
||||||
|
sleep 15
|
||||||
|
|
||||||
|
# 3. 데이터베이스 준비 확인
|
||||||
|
echo "🔍 PostgreSQL 연결 확인..."
|
||||||
|
until docker-compose -f docker-compose.test.yml exec -T postgres-test pg_isready -U testuser -d sttdb_test; do
|
||||||
|
echo "PostgreSQL 준비 중..."
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
|
||||||
|
# 4. Redis 연결 확인
|
||||||
|
echo "🔍 Redis 연결 확인..."
|
||||||
|
until docker-compose -f docker-compose.test.yml exec -T redis-test redis-cli -a testpass ping | grep PONG; do
|
||||||
|
echo "Redis 준비 중..."
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
|
||||||
|
# 5. 통합 테스트 실행
|
||||||
|
echo "🧪 통합 테스트 실행..."
|
||||||
|
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-23.0.2.jdk/Contents/Home
|
||||||
|
./gradlew :stt:test -Dspring.profiles.active=integration-test
|
||||||
|
|
||||||
|
# 6. 결과 출력
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "✅ 통합 테스트 성공!"
|
||||||
|
else
|
||||||
|
echo "❌ 통합 테스트 실패!"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 7. Docker 환경 정리 (선택)
|
||||||
|
read -p "Docker 테스트 환경을 정리하시겠습니까? (y/N): " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
echo "🧹 Docker 테스트 환경 정리 중..."
|
||||||
|
docker-compose -f docker-compose.test.yml down -v
|
||||||
|
echo "✅ 정리 완료"
|
||||||
|
fi
|
||||||
@ -22,7 +22,7 @@ public class SwaggerConfig {
|
|||||||
return new OpenAPI()
|
return new OpenAPI()
|
||||||
.info(apiInfo())
|
.info(apiInfo())
|
||||||
.addServersItem(new Server()
|
.addServersItem(new Server()
|
||||||
.url("http://localhost:8080")
|
.url("http://localhost:8081")
|
||||||
.description("Local Development"))
|
.description("Local Development"))
|
||||||
.addServersItem(new Server()
|
.addServersItem(new Server()
|
||||||
.url("{protocol}://{host}:{port}")
|
.url("{protocol}://{host}:{port}")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user