@@ -32,32 +32,28 @@ export class UserService {
3232 }
3333
3434 async findOneByUsername ( githubToken : string , ip : string , lowerUsername : string ) : Promise < UserProfileDto > {
35- let user = null ;
36- if ( await this . userRepository . isDuplicatedRequestIp ( ip , lowerUsername ) ) {
37- user = await this . userRepository . findOneByLowerUsername ( lowerUsername ) ;
38- } else {
39- user = await this . userRepository . findOneByLowerUsernameAndUpdateViews ( lowerUsername ) ;
40- }
41-
35+ let user = await this . userRepository . findOneByLowerUsername ( lowerUsername ) ;
4236 if ( ! user ) {
43- user = await this . updateUser ( lowerUsername , githubToken ) ;
44- if ( ! user . scoreHistory ) {
45- user . scoreHistory = [ ] ;
37+ try {
38+ user = await this . updateUser ( lowerUsername , githubToken ) ;
39+ if ( ! user . scoreHistory ) {
40+ user . scoreHistory = [ ] ;
41+ }
42+ user . scoreHistory . push ( { date : new Date ( ) , score : user . score } ) ;
43+ user = await this . userRepository . createOrUpdate ( user ) ;
44+ } catch {
45+ throw new HttpException ( `can't update this user.` , HttpStatus . NO_CONTENT ) ;
4646 }
47- user . scoreHistory . push ( { date : new Date ( ) , score : user . score } ) ;
48- user = await this . userRepository . createOrUpdate ( user ) ;
4947 }
50- await this . userRepository . createOrUpdate ( user ) ;
51-
5248 const { totalRank, tierRank } =
5349 ( await this . getUserRelativeRanking ( user ) ) || ( await this . setUserRelativeRanking ( user ) ) ;
50+ if ( ! ( await this . userRepository . isDuplicatedRequestIp ( ip , lowerUsername ) ) && user . history ) {
51+ user . dailyViews += 1 ;
52+ await this . userRepository . createOrUpdate ( user ) ;
53+ }
5454 this . userRepository . setDuplicatedRequestIp ( ip , lowerUsername ) ;
5555 user . updateDelayTime = await this . userRepository . findUpdateScoreTimeToLive ( lowerUsername ) ;
56- user . totalRank = totalRank ;
57- user . tierRank = tierRank ;
58- user . startExp = getStartExp ( user . score ) ;
59- user . needExp = getNeedExp ( user . score ) ;
60- return user ;
56+ return { ...user , totalRank, tierRank, startExp : getStartExp ( user . score ) , needExp : getNeedExp ( user . score ) } ;
6157 }
6258
6359 async findAllByPrefixUsername ( limit : number , lowerUsername : string ) : Promise < AutoCompleteDto [ ] > {
@@ -83,6 +79,24 @@ export class UserService {
8379 organizations,
8480 pinnedRepositories,
8581 } ;
82+ if ( ! updatedUser . scoreHistory ) {
83+ updatedUser . scoreHistory = [ ] ;
84+ }
85+ const KR_TIME_DIFF = 9 * 60 * 60 * 1000 ;
86+ const utc = updatedUser . scoreHistory [ updatedUser . scoreHistory . length - 1 ] . date . getTime ( ) ;
87+ if ( new Date ( utc + KR_TIME_DIFF ) . getDate ( ) == new Date ( ) . getDate ( ) ) {
88+ updatedUser . scoreHistory . pop ( ) ;
89+ }
90+ updatedUser . scoreHistory . push ( {
91+ date : new Date ( ) ,
92+ score : updatedUser . score ,
93+ } ) ;
94+ if ( updatedUser . scoreHistory . length > 1 ) {
95+ updatedUser . scoreDifference =
96+ updatedUser . score - updatedUser . scoreHistory [ updatedUser . scoreHistory . length - 2 ] . score ;
97+ } else {
98+ updatedUser . scoreDifference = 0 ;
99+ }
86100 user = await this . userRepository . createOrUpdate ( updatedUser ) ;
87101 const { totalRank, tierRank } = await this . setUserRelativeRanking ( user ) ;
88102 const userWithRank : UserProfileDto = {
@@ -102,15 +116,6 @@ export class UserService {
102116 await sleep ( GITHUB_API_DELAY ) ;
103117 try {
104118 const updateUser = await this . updateUser ( user . lowerUsername , githubToken ) ;
105- if ( ! updateUser . scoreHistory ) updateUser . scoreHistory = [ ] ;
106- if ( updateUser . scoreHistory . length ) updateUser . scoreHistory . pop ( ) ;
107- updateUser . scoreHistory . push ( { date : new Date ( ) , score : updateUser . score } ) ;
108- if ( updateUser . scoreHistory . length > 1 ) {
109- updateUser . scoreDifference =
110- updateUser . score - updateUser . scoreHistory [ updateUser . scoreHistory . length - 2 ] . score ;
111- } else {
112- updateUser . scoreDifference = 0 ;
113- }
114119 this . userRepository . createOrUpdate ( updateUser ) ;
115120 this . userRepository . deleteCachedUserRank ( updateUser . lowerUsername + '&' ) ;
116121 } catch {
@@ -126,17 +131,6 @@ export class UserService {
126131 await sleep ( GITHUB_API_DELAY ) ;
127132 try {
128133 const updatedUser = await this . updateUser ( user . lowerUsername , githubToken ) ;
129- if ( ! updatedUser . scoreHistory ) updatedUser . scoreHistory = [ ] ;
130- updatedUser . scoreHistory . push ( {
131- date : new Date ( ) ,
132- score : updatedUser . score ,
133- } ) ;
134- if ( updatedUser . scoreHistory . length > 1 ) {
135- updatedUser . scoreDifference =
136- updatedUser . score - updatedUser . scoreHistory [ updatedUser . scoreHistory . length - 2 ] . score ;
137- } else {
138- updatedUser . scoreDifference = 0 ;
139- }
140134 updatedUser . dailyViews = 0 ;
141135 this . userRepository . createOrUpdate ( updatedUser ) ;
142136 } catch {
@@ -202,20 +196,16 @@ export class UserService {
202196 username : lowerUsername ,
203197 id,
204198 } ) ;
205-
206199 const personalResponse : any = await octokit . graphql ( nonForkRepositoryQuery , {
207200 username : lowerUsername ,
208201 id,
209202 } ) ;
210-
211203 const followersResponse : any = await octokit . graphql ( followersQuery , {
212204 username : lowerUsername ,
213205 } ) ;
214-
215206 const issuesResponse : any = await octokit . graphql ( issueQuery , {
216207 username : lowerUsername ,
217208 } ) ;
218-
219209 let languagesScore = new Map ( ) ;
220210 function getCommitScore ( acc : number , repository ) {
221211 if ( ! repository . defaultBranchRef ) {
0 commit comments