From 744a2fa40be5c9e3112b175edaf51a845e1eee37 Mon Sep 17 00:00:00 2001 From: nguyennt1 Date: Tue, 25 Nov 2025 00:07:33 +0700 Subject: [PATCH] first --- .cursor/worktrees.json | 5 + .../VegaHRM.Backend.vega-hrm-report.main.iml | 8 ++ .../error/app-error-2025-11-15.log.gz | Bin 0 -> 20645 bytes .../error/app-error-2025-11-17.log.gz | Bin 0 -> 8189 bytes .../info/app-info-2025-11-15.log.gz | Bin 0 -> 65145 bytes .../info/app-info-2025-11-17.log.gz | Bin 0 -> 34594 bytes .../error/app-error-2025-11-24.log.gz | Bin 0 -> 1575 bytes .../info/app-info-2025-11-15.log.gz | Bin 0 -> 1688 bytes .../info/app-info-2025-11-17.log.gz | Bin 0 -> 1712 bytes .../info/app-info-2025-11-24.log.gz | Bin 0 -> 10254 bytes vega-hrm-auth/build.gradle | 23 +-- .../com/vega/hrm/config/OpenApiConfig.java | 36 +++++ .../vega/hrm/controller/GoogleController.java | 2 +- .../com/vega/hrm/service/GoogleService.java | 43 +++--- vega-hrm-core/build.gradle | 26 ++-- .../vega/hrm/core/component/TokenStore.java | 38 ++++- vega-hrm-report/build.gradle | 37 +++-- .../vega/hrm/report/config/OpenApiConfig.java | 36 +++++ .../controller/ReportGoogleController.java | 82 ++++++++++- .../hrm/report/request/GetRevenueRequest.java | 19 +++ .../hrm/report/response/ReportTypeDto.java | 16 +++ .../hrm/report/response/RevenueDataDto.java | 16 +++ .../serivce/CreateReportingJobService.java | 2 - .../report/serivce/YouTubeReportService.java | 133 ++++++++++++++++++ 24 files changed, 463 insertions(+), 59 deletions(-) create mode 100644 .cursor/worktrees.json create mode 100644 .idea/modules/vega-hrm-report/VegaHRM.Backend.vega-hrm-report.main.iml create mode 100644 logs/vega-hrm-auth/error/app-error-2025-11-15.log.gz create mode 100644 logs/vega-hrm-auth/error/app-error-2025-11-17.log.gz create mode 100644 logs/vega-hrm-auth/info/app-info-2025-11-15.log.gz create mode 100644 logs/vega-hrm-auth/info/app-info-2025-11-17.log.gz create mode 100644 logs/vega-hrm-report/error/app-error-2025-11-24.log.gz create mode 100644 logs/vega-hrm-report/info/app-info-2025-11-15.log.gz create mode 100644 logs/vega-hrm-report/info/app-info-2025-11-17.log.gz create mode 100644 logs/vega-hrm-report/info/app-info-2025-11-24.log.gz create mode 100644 vega-hrm-auth/src/main/java/com/vega/hrm/config/OpenApiConfig.java create mode 100644 vega-hrm-report/src/main/java/com/vega/hrm/report/config/OpenApiConfig.java create mode 100644 vega-hrm-report/src/main/java/com/vega/hrm/report/request/GetRevenueRequest.java create mode 100644 vega-hrm-report/src/main/java/com/vega/hrm/report/response/ReportTypeDto.java create mode 100644 vega-hrm-report/src/main/java/com/vega/hrm/report/response/RevenueDataDto.java create mode 100644 vega-hrm-report/src/main/java/com/vega/hrm/report/serivce/YouTubeReportService.java diff --git a/.cursor/worktrees.json b/.cursor/worktrees.json new file mode 100644 index 0000000..77e9744 --- /dev/null +++ b/.cursor/worktrees.json @@ -0,0 +1,5 @@ +{ + "setup-worktree": [ + "npm install" + ] +} diff --git a/.idea/modules/vega-hrm-report/VegaHRM.Backend.vega-hrm-report.main.iml b/.idea/modules/vega-hrm-report/VegaHRM.Backend.vega-hrm-report.main.iml new file mode 100644 index 0000000..835666a --- /dev/null +++ b/.idea/modules/vega-hrm-report/VegaHRM.Backend.vega-hrm-report.main.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/logs/vega-hrm-auth/error/app-error-2025-11-15.log.gz b/logs/vega-hrm-auth/error/app-error-2025-11-15.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..d9922205d1dcfbc4becaf6b69893feebc24bd79e GIT binary patch literal 20645 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 ZjbUsKZHG`|+w=zq=4FnnxlpKNbfuL$* zuahnIuDf2RhG`?@3_kH08|wI+CrX=sl0?F1MkoncN{^4(f*}qH=)yN)<}f-MfYY_xE;J9k z$wDS8=7QqHm^ z;Jv3n-_*72qXOm|vEYzs6^e*M%FQN(EQ-h=ax)kO4g@@8S!CA7JlI&>*{BlbRERpo z!y-Wm<3tnofEfm{3bKf&5K<^NflI^lhpExRH$W~)1x9TNzLKGsWxDV;zQ^kd-c!mT z9!nBJE=xZi^&dnCR0CZ)I5_NIo?PS-thyq`x1vB#In(|e&Cx(^N+D*(pVO0s8MIBp z_1m{wZ>>DMHy#8+b3eE5`ezel;;T46JHfMfq4}h2+YJN?^^wW|zZ0qXr%XGFljuKW z9`b-l=U7(dyeOqz>N6?n0j7rIb|FqJIHY8S_T%)SdPFaT%;#zCy!j1l;+zK}{V!ET zo(i>+rbw`VB~zSIqS)X2^x0H#E5u)@7<&y+s}tDE{z66a7DFb%j=gI`b8bvh$^2D# zM{6Kbd8Cz5zKVuS1`*eAy+K$lDO8J~H*V^p-gnBB>xJ++To-!39AJz95yu$GnUL6T zuKNk|=X~XdEr*(TyImXik-4h~@_5RF03CV7r=@1TuP{1ym3dKxe2%45jo>{*tEf=S zMl5z};*=x3?k;9YT`@y(%e2@Z!APkH_Vdd3;FR6b^%(QvonvppsgOq)!FSzFpx+A- zbCnrpCynB^Yc z9%03@83&K-x2PH|tVWCK*2+&I$JCYf>EJ{E^XTmCq?9U_RlA7FulMuN`}fv^(lZMy z)XX$bzed)VVCq|=*@JuDcXl1u-RZV}SlNdJsIBqZw{UrW;sNR8J?Q9dVI8zBr`NNb zj)UKAuiNR^Tfy`*x%o4?`NeXO3WChX+#MBS#($n*s#-WbHZP}{G+A-gva|fkw%m?o zcPyti@%*N<(mE6Cw1>+291gK+T)X3u3z6CLjbOxeiXdG2{1Um~NQMfoC5w^Jf~ixR zy$bM-TTjgv4D8wiZfJ;wuvl39-K*)Q!b56c{Bir51C@@W3Hctzv`cVER@~NNed5@(sO_e zi;3|NH_5TEaci04Hj{8)gaWVm9nrHe(Q>t{HRfwiT0w!(fTrfL!ez+J^Mxqk+APV2 zydz<61Yxl2Mo|vU>78OBTkS%XHBjX!w1g-bzi7#Q=?TmZ@Aa$u>*K-RKGi*3uSp2C zFmqgcXLG=1mZdr2LZj#n^j<;1(7dOfH;tPTVxV!=(;nbh!b5DU!B!@3rTQjIXI9zd z6?OjlRX?NAAdb;=n*J(ZK1x+ow75KdD$ihR5^)yez=HiN#fDXVirqbX>RB%j4)!iT z;4ce;0Z)A`5~Pi$YuoM3oaG-PZV{z_ z2;a~w7vcC8V3zQOP#H~kGeHwId7=3;Lfm!`hHj_*d@@y=*?W|0hE-`hGVmHYUHA&dFJGXl&K@{|flYKLK&5 z?^xU0Jq!@F(iECWF$sXqiq()p*0p-o#oft;7Q0Cac0A8afUGxE>b9iKK2kC!5}{(g z`aH~#FIPt`xMISr1+My<0UFOX1P2>u3xqjHSv761Ujmr&~f literal 0 HcmV?d00001 diff --git a/logs/vega-hrm-report/info/app-info-2025-11-17.log.gz b/logs/vega-hrm-report/info/app-info-2025-11-17.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..07a57e54d294aefaa2e92a9c788b79f63c6c17da GIT binary patch literal 1712 zcmV;h22c4PiwFP!00000|J7JqPuofmer~1nA4a@DD`ITtZmCiOfhGt_4&m~UplV}p zk}dYGyI!Z{{Q5IvC*UG;2(+qBBSn$z^*8r#X5!jzz2Z0(rwOj()!SaR2^APkn14Id zDwRPc)?7$oZt!;h^U)dp^sa3BI3D!GglowRhbtC}fElHsW!aWv9SO<8zuvm#@DUTT z05~*E8zEOiqjMfBZ8~ur3ZEIFB%}#FK4uGsI4GbF--VgOpx=e6>$)x2IrPR0 z8MEa$!#F>+_R$0`gYg2dD{~!HbcQ;fq#_K)e#nx9C*!XOIVN==AtiVKlO;$wOP7H6 zo&tSWW?8Gmvd;>bZ^VK_tkqP691?DJVamdg3?es!QQ$zprz{Q4`j`h>t2C8uJR>fGP>9^X{(zETG9 zSR4~_QTp+q^B_W?8tBsQ;Zf)ECpG}alucGYi7|-H`=HsGmHxMY)M=AsSP9&zxwDvDBtslkV zA7mc#fJo+8R>iz1q+Q}ODd_>GhSRD+lvr>?$qKa}(}(I2y)b1yPfGKqO!{xBi88@Y z*TgvwMDp^g_!X)1y0pnsVWXtU6YO_nN~@43_G6d6DpM|0gslds(+O;4|DYaOharog zWw&kEnHv+A5`P(9e+@($541AMS7DFIAmkcGTZC1SLRAQQ>t^GKuN!5;^+Na@M!DWE z2N)ti$T386CM33-Q72~poUi<_=THx?R?Bc}_H*X00?4BY4+3=LHJ=oE`GLad+?Az8 zDe^g1QaOV65UspGF&VMesfQDpv>Oe~l1;_*#4Xd}U;qQ9LO93@--A@>TwEw^UbHOna@o>EEw(@|-ii5ql>^7`!cuxebp=8+4L*|UXUz;%KkT>AVH zxu7qn3PzGeNNB;t*_gd@@S5WmH=48aQy|r0K|(Nr8&<<|pImJI1K4&O9uh9rLQo0$ zf`{N|T#H?cO+p@&p*iKt#ED`7@yIo2s1_{~X^cELlPaTJnwYX^0L~sV!PrM!KMQ}| zIscq1+s;VKtryd?iwuj2@enu3v9NJzncy-Lb6-paUh_MmXJNwSYFFEyuRUo6Il?yV zXdWrth0HwLhhnbHl5EI2681(A2D@$;X3(78$@j6xXx#L)2RN4S zDYn&MFO|1aeV2tZt8DV}I)D47lhSAqMQAz=f2A+?6BXtyE=!-%GuWC$ltwtPVE;<6 zVU?d^ch8=B*2~?){mW1I%YvZG6JLuMX=BH=?dopE@(+&xSLsA*-V` zTXuu+0uRwv^U;|Eyv-+5{uQi`frgAeI zFS7A~;aG)@y31qaPb9&WDj%CQW>+Uc{a4yrG_%#5`u5Z>wbFf>0$Xj5Xy*8$1E`fD z0s&-o5fV|s4%TY1urrcjS@*WS8fL9u*(Q46GJEF-C{lHn8@91#{lZ92{C1d4KBr9L z(4&u7-m<96#ShH@lN#%38+*X^reglsWvbko^_>5j)uUE@dO=$MONLzZcs0rwCO;p} z$ysyQ-YfNg8UAnu{N!JNIMdgyRwc&r`>v#TdwEWUNv)5 zzM2$Zhx60~NP0b`ZVTERAR}WU5h~`Z&!;KU G761T^8&Z4# literal 0 HcmV?d00001 diff --git a/logs/vega-hrm-report/info/app-info-2025-11-24.log.gz b/logs/vega-hrm-report/info/app-info-2025-11-24.log.gz new file mode 100644 index 0000000000000000000000000000000000000000..cf441339e52c38818aee71dd2b61545dc25490f0 GIT binary patch literal 10254 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 R%VclDD-+_I>aCCv{{_cAF2?`> literal 0 HcmV?d00001 diff --git a/vega-hrm-auth/build.gradle b/vega-hrm-auth/build.gradle index ffef6d8..91dd460 100644 --- a/vega-hrm-auth/build.gradle +++ b/vega-hrm-auth/build.gradle @@ -22,18 +22,16 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-log4j2:3.4.0' implementation 'org.springframework.boot:spring-boot-starter-validation:3.4.0' implementation 'de.mkammerer:argon2-jvm:2.1' + // Google API Services implementation "com.google.apis:google-api-services-youtube:v3-rev182-1.22.0" - implementation("com.google.collections:google-collections:1.0") - implementation("com.google.guava:guava:31.1-jre") implementation("com.google.apis:google-api-services-youtubeAnalytics:v2-rev272-1.25.0") - implementation "com.google.http-client:google-http-client-jackson2:1.20.0" - - // OAuth Client implementation 'com.google.apis:google-api-services-oauth2:v2-rev157-1.25.0' + + // Google API Client (phiên bản mới) + implementation 'com.google.api-client:google-api-client:1.34.1' implementation 'com.google.oauth-client:google-oauth-client-jetty:1.34.1' - implementation 'com.google.api-client:google-api-client:1.32.1' - // Google Collections - implementation "com.google.collections:google-collections:1.0" + implementation "com.google.http-client:google-http-client-jackson2:1.43.3" + implementation 'com.google.guava:guava:32.1.3-jre' implementation 'com.google.code.gson:gson:2.11.0' annotationProcessor 'org.projectlombok:lombok:1.18.38' implementation project(":vega-hrm-core") @@ -50,11 +48,14 @@ configurations { exclude group: 'ch.qos.logback', module: 'logback-classic' exclude group: 'com.google.guava', module: 'guava-jdk5' - exclude group: 'com.google.collections', module: 'google-collections' // very old + exclude group: 'com.google.collections', module: 'google-collections' resolutionStrategy { - // bắt buộc dùng guava hiện đại - force "com.google.guava:guava:32.1.3-jre" + // Bắt buộc dùng Guava mới nhất + force 'com.google.guava:guava:32.1.3-jre' + force 'com.google.api-client:google-api-client:1.34.1' + force 'com.google.oauth-client:google-oauth-client-jetty:1.34.1' + force 'com.google.http-client:google-http-client-jackson2:1.43.3' } } } diff --git a/vega-hrm-auth/src/main/java/com/vega/hrm/config/OpenApiConfig.java b/vega-hrm-auth/src/main/java/com/vega/hrm/config/OpenApiConfig.java new file mode 100644 index 0000000..a814df2 --- /dev/null +++ b/vega-hrm-auth/src/main/java/com/vega/hrm/config/OpenApiConfig.java @@ -0,0 +1,36 @@ +package com.vega.hrm.config; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Contact; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.info.License; +import org.springdoc.core.models.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class OpenApiConfig { + + @Bean + public OpenAPI authOpenAPI() { + return new OpenAPI() + .info(new Info() + .title("Vega HRM Auth API") + .version("v1") + .description("Tài liệu mô tả các API xác thực, phân quyền và tích hợp Google cho Vega HRM.") + .contact(new Contact() + .name("Vega HRM Backend Team") + .email("backend@vegahrm.local")) + .license(new License().name("Proprietary"))); + } + + @Bean + public GroupedOpenApi authGroupedOpenApi() { + return GroupedOpenApi.builder() + .group("auth") + .packagesToScan("com.vega.hrm.controller") + .pathsToMatch("/api/**") + .build(); + } +} + diff --git a/vega-hrm-auth/src/main/java/com/vega/hrm/controller/GoogleController.java b/vega-hrm-auth/src/main/java/com/vega/hrm/controller/GoogleController.java index 36ed050..b8d574d 100644 --- a/vega-hrm-auth/src/main/java/com/vega/hrm/controller/GoogleController.java +++ b/vega-hrm-auth/src/main/java/com/vega/hrm/controller/GoogleController.java @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController -@RequestMapping("api/google/user") +@RequestMapping({"api/google/user", "api/auth/google"}) @RequiredArgsConstructor @Tag(name = "Auth - Google", description = "Luồng OAuth2 với Google phục vụ xác thực người dùng") public class GoogleController { diff --git a/vega-hrm-auth/src/main/java/com/vega/hrm/service/GoogleService.java b/vega-hrm-auth/src/main/java/com/vega/hrm/service/GoogleService.java index edd313d..e56a08f 100644 --- a/vega-hrm-auth/src/main/java/com/vega/hrm/service/GoogleService.java +++ b/vega-hrm-auth/src/main/java/com/vega/hrm/service/GoogleService.java @@ -6,7 +6,6 @@ import com.google.api.client.auth.oauth2.AuthorizationCodeFlow; import com.google.api.client.auth.oauth2.AuthorizationCodeRequestUrl; import com.google.api.client.auth.oauth2.BearerToken; import com.google.api.client.auth.oauth2.Credential; -import com.google.api.client.auth.oauth2.TokenResponse; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; import com.google.api.client.googleapis.auth.oauth2.GoogleTokenResponse; @@ -21,14 +20,12 @@ import com.vega.hrm.core.models.responses.BaseResponse; import com.vega.hrm.core.dto.GoogleOAuthConfig; import com.google.api.services.oauth2.model.Userinfo; import com.vega.hrm.core.repositories.UserGoogleTokenRepository; -import com.vega.hrm.dto.CustomTokenResponse; import java.io.IOException; import java.security.GeneralSecurityException; import java.time.Instant; import java.util.Objects; import java.util.UUID; import lombok.RequiredArgsConstructor; -import lombok.Setter; import org.springframework.stereotype.Service; @Service @@ -100,26 +97,40 @@ public class GoogleService { String email = userInfo.getEmail(); var userGoogleToken = userGoogleTokenRepository.findUserGoogleTokenByEmail(email); - if (userGoogleToken == null) { userGoogleToken = new UserGoogleToken(); userGoogleToken.setId(UUID.randomUUID()); userGoogleToken.setEmail(email); - userGoogleToken.setAccessToken(tokenResponse.getAccessToken()); - userGoogleToken.setRefreshToken(tokenResponse.getRefreshToken()); - userGoogleToken.setScope(tokenResponse.getScope()); - userGoogleToken.setExpiresIn(tokenResponse.getExpiresInSeconds()); - userGoogleToken.setRefreshTokenExpiresIn(tokenResponse.getExpiresInSeconds()); - userGoogleToken.setExpiresAt(Instant.now().plusSeconds(tokenResponse.getExpiresInSeconds())); - userGoogleToken.setTokenType(tokenResponse.getTokenType()); - - userGoogleToken.setRefreshTokenExpiresAt(Instant.now().plusSeconds(tokenResponse.get("refresh_token_expires_in") != null - ? Long.valueOf(tokenResponse.get("refresh_token_expires_in").toString()) - : null)); userGoogleToken.setCreatedAt(Instant.now()); - userGoogleTokenRepository.save(userGoogleToken); } + Instant now = Instant.now(); + Long expiresInSeconds = tokenResponse.getExpiresInSeconds(); + Object refreshTokenExpiresInObj = tokenResponse.get("refresh_token_expires_in"); + Long refreshTokenExpiresInSeconds = refreshTokenExpiresInObj != null + ? Long.valueOf(refreshTokenExpiresInObj.toString()) + : null; + + userGoogleToken.setAccessToken(tokenResponse.getAccessToken()); + userGoogleToken.setRefreshToken(tokenResponse.getRefreshToken()); + userGoogleToken.setScope(tokenResponse.getScope()); + userGoogleToken.setExpiresIn(expiresInSeconds); + userGoogleToken.setRefreshTokenExpiresIn(refreshTokenExpiresInSeconds); + userGoogleToken.setTokenType(tokenResponse.getTokenType()); + userGoogleToken.setUpdatedAt(now); + + if (expiresInSeconds != null) { + userGoogleToken.setExpiresAt(now.plusSeconds(expiresInSeconds)); + } else if (userGoogleToken.getExpiresAt() == null) { + userGoogleToken.setExpiresAt(now); + } + if (refreshTokenExpiresInSeconds != null) { + userGoogleToken.setRefreshTokenExpiresAt(now.plusSeconds(refreshTokenExpiresInSeconds)); + } else if (userGoogleToken.getRefreshTokenExpiresAt() == null) { + userGoogleToken.setRefreshTokenExpiresAt(now); + } + + userGoogleTokenRepository.save(userGoogleToken); tokenStore.storeToken(email, tokenResponse); return BaseResponse.success("00",true); } diff --git a/vega-hrm-core/build.gradle b/vega-hrm-core/build.gradle index ebd3673..795f8ec 100644 --- a/vega-hrm-core/build.gradle +++ b/vega-hrm-core/build.gradle @@ -44,17 +44,15 @@ dependencies { implementation 'org.bouncycastle:bcpkix-jdk18on:1.80' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.6' + // Google API Services implementation "com.google.apis:google-api-services-youtube:v3-rev182-1.22.0" - implementation("com.google.collections:google-collections:1.0") - implementation("com.google.guava:guava:20.0") implementation("com.google.apis:google-api-services-youtubeAnalytics:v2-rev272-1.25.0") - implementation "com.google.http-client:google-http-client-jackson2:1.20.0" - // OAuth Client - implementation "com.google.oauth-client:google-oauth-client-jetty:1.20.0" - - // Google Collections - implementation "com.google.collections:google-collections:1.0" + // Google API Client (phiên bản mới) + implementation 'com.google.api-client:google-api-client:1.34.1' + implementation 'com.google.oauth-client:google-oauth-client-jetty:1.34.1' + implementation "com.google.http-client:google-http-client-jackson2:1.43.3" + implementation 'com.google.guava:guava:32.1.3-jre' implementation 'com.google.code.gson:gson:2.11.0' // https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt-orgjson @@ -68,5 +66,17 @@ configurations { // Loại bỏ logging mặc định exclude group: 'ch.qos.logback', module: 'logback-classic' + + // Loại bỏ các thư viện Guava/Google Collections cũ + exclude group: 'com.google.guava', module: 'guava-jdk5' + exclude group: 'com.google.collections', module: 'google-collections' + + resolutionStrategy { + // Bắt buộc dùng Guava mới nhất + force 'com.google.guava:guava:32.1.3-jre' + force 'com.google.api-client:google-api-client:1.34.1' + force 'com.google.oauth-client:google-oauth-client-jetty:1.34.1' + force 'com.google.http-client:google-http-client-jackson2:1.43.3' + } } } diff --git a/vega-hrm-core/src/main/java/com/vega/hrm/core/component/TokenStore.java b/vega-hrm-core/src/main/java/com/vega/hrm/core/component/TokenStore.java index cd2a423..5218640 100644 --- a/vega-hrm-core/src/main/java/com/vega/hrm/core/component/TokenStore.java +++ b/vega-hrm-core/src/main/java/com/vega/hrm/core/component/TokenStore.java @@ -2,26 +2,38 @@ package com.vega.hrm.core.component; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.auth.oauth2.TokenResponse; +import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.JsonFactory; +import com.vega.hrm.core.entities.UserGoogleToken; +import com.vega.hrm.core.repositories.UserGoogleTokenRepository; import java.util.concurrent.ConcurrentHashMap; -import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @Component +@RequiredArgsConstructor public class TokenStore { private final ConcurrentHashMap tokenMap = new ConcurrentHashMap<>(); + private final UserGoogleTokenRepository userGoogleTokenRepository; public void storeToken(String userId, TokenResponse tokenResponse) { tokenMap.put(userId, tokenResponse); } public TokenResponse getTokenResponse(String userId) { - return tokenMap.get(userId); + TokenResponse tokenResponse = tokenMap.get(userId); + if (tokenResponse == null) { + tokenResponse = loadTokenFromDatabase(userId); + if (tokenResponse != null) { + tokenMap.put(userId, tokenResponse); + } + } + return tokenResponse; } public Credential buildCredential(HttpTransport transport, JsonFactory jsonFactory, String userId, String clientId, String clientSecret) { - TokenResponse tokenResponse = tokenMap.get(userId); + TokenResponse tokenResponse = getTokenResponse(userId); if (tokenResponse == null) { return null; } @@ -33,4 +45,24 @@ public class TokenStore { .build() .setFromTokenResponse(tokenResponse); } + + private TokenResponse loadTokenFromDatabase(String userId) { + UserGoogleToken userGoogleToken = userGoogleTokenRepository.findUserGoogleTokenByEmail(userId); + if (userGoogleToken == null) { + return null; + } + + TokenResponse tokenResponse = new TokenResponse() + .setAccessToken(userGoogleToken.getAccessToken()) + .setRefreshToken(userGoogleToken.getRefreshToken()) + .setScope(userGoogleToken.getScope()) + .setTokenType(userGoogleToken.getTokenType()) + .setExpiresInSeconds(userGoogleToken.getExpiresIn()); + + if (userGoogleToken.getRefreshTokenExpiresIn() != null) { + tokenResponse.set("refresh_token_expires_in", userGoogleToken.getRefreshTokenExpiresIn()); + } + + return tokenResponse; + } } diff --git a/vega-hrm-report/build.gradle b/vega-hrm-report/build.gradle index ddb3451..0a39c4e 100644 --- a/vega-hrm-report/build.gradle +++ b/vega-hrm-report/build.gradle @@ -22,28 +22,23 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-log4j2:3.4.0' implementation 'org.springframework.boot:spring-boot-starter-validation:3.4.0' implementation 'de.mkammerer:argon2-jvm:2.1' - implementation "com.google.apis:google-api-services-youtube:v3-rev182-1.22.0" - implementation("com.google.collections:google-collections:1.0") - implementation("com.google.guava:guava:20.0") - implementation("com.google.apis:google-api-services-youtubeAnalytics:v2-rev272-1.25.0") - implementation "com.google.http-client:google-http-client-jackson2:1.20.0" - - // OAuth Client - implementation "com.google.oauth-client:google-oauth-client-jetty:1.20.0" + // Google API Services + implementation 'com.google.apis:google-api-services-youtube:v3-rev182-1.22.0' + implementation 'com.google.apis:google-api-services-youtubeAnalytics:v2-rev272-1.25.0' + implementation 'com.google.apis:google-api-services-youtubereporting:v1-rev10-1.22.0' implementation 'com.google.apis:google-api-services-oauth2:v2-rev157-1.25.0' - implementation 'com.google.oauth-client:google-oauth-client-jetty:1.34.1' - implementation 'com.google.api-client:google-api-client:2.3.0' - // Google Collections - implementation "com.google.collections:google-collections:1.0" + // Google API Client (phiên bản mới để tương thích với YouTube libs) + implementation 'com.google.api-client:google-api-client:1.34.1' + implementation 'com.google.oauth-client:google-oauth-client-jetty:1.34.1' + implementation 'com.google.http-client:google-http-client-jackson2:1.43.3' + implementation 'com.google.guava:guava:32.1.3-jre' implementation 'com.google.code.gson:gson:2.11.0' + annotationProcessor 'org.projectlombok:lombok:1.18.38' implementation project(":vega-hrm-core") implementation 'jakarta.annotation:jakarta.annotation-api:2.1.1' - // YouTube Reporting API - implementation "com.google.apis:google-api-services-youtubereporting:v1-rev10-1.22.0" - } configurations { @@ -53,5 +48,17 @@ configurations { // Loại bỏ logging mặc định exclude group: 'ch.qos.logback', module: 'logback-classic' + + // Loại bỏ các thư viện Guava/Google Collections cũ + exclude group: 'com.google.guava', module: 'guava-jdk5' + exclude group: 'com.google.collections', module: 'google-collections' + + resolutionStrategy { + // Bắt buộc dùng Guava mới nhất + force 'com.google.guava:guava:32.1.3-jre' + force 'com.google.api-client:google-api-client:1.34.1' + force 'com.google.oauth-client:google-oauth-client-jetty:1.34.1' + force 'com.google.http-client:google-http-client-jackson2:1.43.3' + } } } diff --git a/vega-hrm-report/src/main/java/com/vega/hrm/report/config/OpenApiConfig.java b/vega-hrm-report/src/main/java/com/vega/hrm/report/config/OpenApiConfig.java new file mode 100644 index 0000000..71a8bb0 --- /dev/null +++ b/vega-hrm-report/src/main/java/com/vega/hrm/report/config/OpenApiConfig.java @@ -0,0 +1,36 @@ +package com.vega.hrm.report.config; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Contact; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.info.License; +import org.springdoc.core.models.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class OpenApiConfig { + + @Bean + public OpenAPI reportOpenAPI() { + return new OpenAPI() + .info(new Info() + .title("Vega HRM Report API") + .version("v1") + .description("Danh mục API phục vụ trích xuất báo cáo và đồng bộ dữ liệu YouTube/Google cho Vega HRM.") + .contact(new Contact() + .name("Vega HRM Backend Team") + .email("backend@vegahrm.local")) + .license(new License().name("Proprietary"))); + } + + @Bean + public GroupedOpenApi reportGroupedOpenApi() { + return GroupedOpenApi.builder() + .group("report") + .packagesToScan("com.vega.hrm.report.controller") + .pathsToMatch("/api/**") + .build(); + } +} + diff --git a/vega-hrm-report/src/main/java/com/vega/hrm/report/controller/ReportGoogleController.java b/vega-hrm-report/src/main/java/com/vega/hrm/report/controller/ReportGoogleController.java index db219cc..7dee775 100644 --- a/vega-hrm-report/src/main/java/com/vega/hrm/report/controller/ReportGoogleController.java +++ b/vega-hrm-report/src/main/java/com/vega/hrm/report/controller/ReportGoogleController.java @@ -6,15 +6,26 @@ import com.vega.hrm.core.component.TokenStore; import com.vega.hrm.core.dto.GoogleOAuthConfig; import com.vega.hrm.core.models.responses.BaseResponse; import com.vega.hrm.report.request.GetDragRevenueRequest; +import com.vega.hrm.report.request.GetRevenueRequest; +import com.vega.hrm.report.response.ReportTypeDto; +import com.vega.hrm.report.response.RevenueDataDto; import com.vega.hrm.report.serivce.CreateReportingJobService; +import com.vega.hrm.report.serivce.YouTubeReportService; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import java.io.IOException; import java.security.GeneralSecurityException; +import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController @@ -24,19 +35,29 @@ import org.springframework.web.bind.annotation.RestController; public class ReportGoogleController { private final CreateReportingJobService createReportingJob; + private final YouTubeReportService youTubeReportService; private final GoogleOAuthConfig googleOAuthConfig; + private final TokenStore tokenStore; @GetMapping("/youtube/demo") @Operation(summary = "Khởi tạo job demo YouTube", description = "Thực thi job báo cáo mẫu với cấu hình được lưu trữ trong hệ thống.") - public ResponseEntity> getRevenue(GetDragRevenueRequest getDragRevenueRequest) + public ResponseEntity> getRevenue(@RequestBody GetDragRevenueRequest getDragRevenueRequest) throws GeneralSecurityException, IOException { - var tokenStore = new TokenStore(); + String email = getDragRevenueRequest != null ? getDragRevenueRequest.getEmail() : null; + if (!StringUtils.hasText(email)) { + return ResponseEntity.ok(BaseResponse.invalid("Email không được để trống")); + } + + if (tokenStore.getTokenResponse(email) == null) { + return ResponseEntity.ok(BaseResponse.invalid("Không tìm thấy token Google cho email đã cung cấp")); + } + createReportingJob.createJobWithStoredCredential( tokenStore, googleOAuthConfig, GoogleNetHttpTransport.newTrustedTransport(), JacksonFactory.getDefaultInstance(), - "default", + email, "channel_monetized_playback_a1", // report type "vega-monetization-daily" // job name ); @@ -48,4 +69,59 @@ public class ReportGoogleController { .build() ); } + + @GetMapping("/report-types") + @Operation(summary = "Lấy danh sách Report Types", description = "Lấy tất cả các loại báo cáo có sẵn từ YouTube Reporting API.") + public ResponseEntity>> getReportTypes( + @Parameter(description = "Email của người dùng đã xác thực với Google") + @RequestParam String email + ) throws GeneralSecurityException, IOException { + if (!StringUtils.hasText(email)) { + return ResponseEntity.ok(BaseResponse.invalid("Email không được để trống")); + } + + if (tokenStore.getTokenResponse(email) == null) { + return ResponseEntity.ok(BaseResponse.invalid("Không tìm thấy token Google cho email đã cung cấp")); + } + + List reportTypes = youTubeReportService.getReportTypes( + email, + GoogleNetHttpTransport.newTrustedTransport(), + JacksonFactory.getDefaultInstance() + ); + + return ResponseEntity.ok( + BaseResponse.>builder() + .code("00") + .message("Lấy danh sách report types thành công") + .data(reportTypes) + .build() + ); + } + + @PostMapping("/revenue") + @Operation(summary = "Lấy dữ liệu doanh thu", description = "Lấy dữ liệu doanh thu ước tính từ YouTube Analytics API theo khoảng thời gian.") + public ResponseEntity>> getRevenueData( + @Valid @RequestBody GetRevenueRequest request + ) throws GeneralSecurityException, IOException { + if (tokenStore.getTokenResponse(request.getEmail()) == null) { + return ResponseEntity.ok(BaseResponse.invalid("Không tìm thấy token Google cho email đã cung cấp")); + } + + List revenueData = youTubeReportService.getRevenue( + request.getEmail(), + request.getStartDate(), + request.getEndDate(), + GoogleNetHttpTransport.newTrustedTransport(), + JacksonFactory.getDefaultInstance() + ); + + return ResponseEntity.ok( + BaseResponse.>builder() + .code("00") + .message("Lấy dữ liệu doanh thu thành công") + .data(revenueData) + .build() + ); + } } diff --git a/vega-hrm-report/src/main/java/com/vega/hrm/report/request/GetRevenueRequest.java b/vega-hrm-report/src/main/java/com/vega/hrm/report/request/GetRevenueRequest.java new file mode 100644 index 0000000..34b5aff --- /dev/null +++ b/vega-hrm-report/src/main/java/com/vega/hrm/report/request/GetRevenueRequest.java @@ -0,0 +1,19 @@ +package com.vega.hrm.report.request; + +import jakarta.validation.constraints.NotBlank; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class GetRevenueRequest { + @NotBlank(message = "Email không được để trống") + private String email; + + @NotBlank(message = "Ngày bắt đầu không được để trống") + private String startDate; // format: YYYY-MM-DD + + @NotBlank(message = "Ngày kết thúc không được để trống") + private String endDate; // format: YYYY-MM-DD +} + diff --git a/vega-hrm-report/src/main/java/com/vega/hrm/report/response/ReportTypeDto.java b/vega-hrm-report/src/main/java/com/vega/hrm/report/response/ReportTypeDto.java new file mode 100644 index 0000000..6463c21 --- /dev/null +++ b/vega-hrm-report/src/main/java/com/vega/hrm/report/response/ReportTypeDto.java @@ -0,0 +1,16 @@ +package com.vega.hrm.report.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ReportTypeDto { + private String id; + private String name; +} + diff --git a/vega-hrm-report/src/main/java/com/vega/hrm/report/response/RevenueDataDto.java b/vega-hrm-report/src/main/java/com/vega/hrm/report/response/RevenueDataDto.java new file mode 100644 index 0000000..047bb98 --- /dev/null +++ b/vega-hrm-report/src/main/java/com/vega/hrm/report/response/RevenueDataDto.java @@ -0,0 +1,16 @@ +package com.vega.hrm.report.response; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RevenueDataDto { + private String date; + private Double estimatedRevenue; +} + diff --git a/vega-hrm-report/src/main/java/com/vega/hrm/report/serivce/CreateReportingJobService.java b/vega-hrm-report/src/main/java/com/vega/hrm/report/serivce/CreateReportingJobService.java index aefd108..068a8a8 100644 --- a/vega-hrm-report/src/main/java/com/vega/hrm/report/serivce/CreateReportingJobService.java +++ b/vega-hrm-report/src/main/java/com/vega/hrm/report/serivce/CreateReportingJobService.java @@ -15,11 +15,9 @@ import com.google.api.services.youtubereporting.model.ReportType; import com.vega.hrm.core.component.TokenStore; import com.vega.hrm.core.dto.GoogleOAuthConfig; import com.vega.hrm.core.helpers.LogHelper; -import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStreamReader; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/vega-hrm-report/src/main/java/com/vega/hrm/report/serivce/YouTubeReportService.java b/vega-hrm-report/src/main/java/com/vega/hrm/report/serivce/YouTubeReportService.java new file mode 100644 index 0000000..fd63ed2 --- /dev/null +++ b/vega-hrm-report/src/main/java/com/vega/hrm/report/serivce/YouTubeReportService.java @@ -0,0 +1,133 @@ +package com.vega.hrm.report.serivce; + +import com.google.api.client.auth.oauth2.Credential; +import com.google.api.client.googleapis.json.GoogleJsonResponseException; +import com.google.api.client.http.HttpTransport; +import com.google.api.client.json.JsonFactory; +import com.google.api.services.youtubeAnalytics.v2.YouTubeAnalytics; +import com.google.api.services.youtubeAnalytics.v2.model.QueryResponse; +import com.google.api.services.youtubereporting.YouTubeReporting; +import com.google.api.services.youtubereporting.model.ListReportTypesResponse; +import com.google.api.services.youtubereporting.model.ReportType; +import com.vega.hrm.core.component.TokenStore; +import com.vega.hrm.core.dto.GoogleOAuthConfig; +import com.vega.hrm.core.helpers.LogHelper; +import com.vega.hrm.report.response.ReportTypeDto; +import com.vega.hrm.report.response.RevenueDataDto; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class YouTubeReportService { + private static final String APPLICATION_NAME = "vega-report"; + private final TokenStore tokenStore; + private final GoogleOAuthConfig googleOAuthConfig; + + /** + * Lấy danh sách tất cả report types từ YouTube Reporting API + */ + public List getReportTypes(String email, HttpTransport httpTransport, JsonFactory jsonFactory) + throws IOException { + Credential credential = tokenStore.buildCredential( + httpTransport, + jsonFactory, + email, + googleOAuthConfig.clientId, + googleOAuthConfig.clientSecret + ); + + if (credential == null) { + throw new IllegalStateException("Không tìm thấy token Google cho email: " + email); + } + + YouTubeReporting youtubeReporting = new YouTubeReporting.Builder(httpTransport, jsonFactory, credential) + .setApplicationName(APPLICATION_NAME) + .build(); + + try { + ListReportTypesResponse reportTypesListResponse = youtubeReporting.reportTypes().list().execute(); + List reportTypeList = reportTypesListResponse.getReportTypes(); + + if (reportTypeList == null || reportTypeList.isEmpty()) { + LogHelper.info("Không tìm thấy report types nào."); + return new ArrayList<>(); + } + + List result = new ArrayList<>(); + for (ReportType reportType : reportTypeList) { + result.add(ReportTypeDto.builder() + .id(reportType.getId()) + .name(reportType.getName()) + .build()); + } + + return result; + } catch (GoogleJsonResponseException e) { + LogHelper.error("Lỗi khi lấy report types: " + e.getDetails().getMessage()); + throw new IOException("Không thể lấy danh sách report types: " + e.getDetails().getMessage()); + } + } + + /** + * Lấy dữ liệu doanh thu từ YouTube Analytics API + */ + public List getRevenue(String email, String startDate, String endDate, + HttpTransport httpTransport, JsonFactory jsonFactory) + throws IOException { + Credential credential = tokenStore.buildCredential( + httpTransport, + jsonFactory, + email, + googleOAuthConfig.clientId, + googleOAuthConfig.clientSecret + ); + + if (credential == null) { + throw new IllegalStateException("Không tìm thấy token Google cho email: " + email); + } + + YouTubeAnalytics youtubeAnalytics = new YouTubeAnalytics.Builder(httpTransport, jsonFactory, credential) + .setApplicationName(APPLICATION_NAME) + .build(); + + try { + QueryResponse queryResponse = youtubeAnalytics.reports().query() + .setIds("channel==MINE") + .setStartDate(startDate) + .setEndDate(endDate) + .setMetrics("estimatedRevenue") + .setDimensions("day") + .execute(); + + List result = new ArrayList<>(); + + if (queryResponse.getRows() != null) { + for (List row : queryResponse.getRows()) { + if (row.size() >= 2) { + String date = row.get(0).toString(); + Double revenue = row.get(1) instanceof Number + ? ((Number) row.get(1)).doubleValue() + : Double.parseDouble(row.get(1).toString()); + + result.add(RevenueDataDto.builder() + .date(date) + .estimatedRevenue(revenue) + .build()); + } + } + } + + LogHelper.info("Đã lấy được " + result.size() + " dòng dữ liệu doanh thu."); + return result; + + } catch (GoogleJsonResponseException e) { + LogHelper.error("Lỗi khi lấy dữ liệu revenue: " + e.getDetails().getMessage()); + throw new IOException("Không thể lấy dữ liệu doanh thu: " + e.getDetails().getMessage()); + } + } +} +