@@ -7,7 +7,7 @@ import userLangs from "./templates/user-langs";
77import userProfileRepos from "./templates/user-profile-repos" ;
88import userProfileCard from "./templates/user-profile-card" ;
99import { GithubService } from "../github/github.service" ;
10- import { Repository } from "@octokit/graphql-schema" ;
10+ import { Repository , Language } from "@octokit/graphql-schema" ;
1111
1212@Injectable ( )
1313export class SocialCardService {
@@ -17,19 +17,42 @@ export class SocialCardService {
1717 ) { }
1818
1919 async getUserData ( username : string ) : Promise < {
20- langs : string [ ] ,
20+ langs : ( Language & {
21+ size : number ,
22+ } ) [ ] ,
23+ langTotal : number ,
2124 repos : Repository [ ] ,
2225 avatarUrl : string ,
2326 } > {
27+ const langs : Record < string , Language & {
28+ size : number ,
29+ } > = { } ;
30+ const today = ( new Date ) ;
31+ const today30daysAgo = new Date ( ( new Date ) . setDate ( today . getDate ( ) - 30 ) ) ;
2432 const user = await this . githubService . getUser ( username ) ;
25-
26- /*
27- * console.log(user);
28- * console.log(user.repositories.nodes);
29- */
33+ const langRepos = user . repositories . nodes ?. filter ( repo => new Date ( String ( repo ?. pushedAt ) ) > today30daysAgo ) as Repository [ ] ;
34+ let langTotal = 0 ;
35+
36+ langRepos . map ( repo => {
37+ repo . languages ?. edges ?. map ( edge => {
38+ if ( edge ?. node . id ) {
39+ langTotal += edge . size ;
40+
41+ if ( ! Object . keys ( langs ) . includes ( edge . node . id ) ) {
42+ langs [ edge . node . id ] = {
43+ ...edge . node ,
44+ size : edge . size ,
45+ } ;
46+ } else {
47+ langs [ edge . node . id ] . size += edge . size ;
48+ }
49+ }
50+ } ) ;
51+ } ) ;
3052
3153 return {
32- langs : [ ] ,
54+ langs : Array . from ( Object . values ( langs ) ) ,
55+ langTotal,
3356 repos : user . topRepositories . nodes ?. filter ( repo => ! repo ?. isPrivate && repo ?. owner . login !== username ) as Repository [ ] ,
3457 avatarUrl : `${ String ( user . avatarUrl ) } &size=150` ,
3558 } ;
@@ -45,9 +68,9 @@ export class SocialCardService {
4568 const { html } = await import ( "satori-html" ) ;
4669 const satori = ( await import ( "satori" ) ) . default ;
4770
48- const { avatarUrl, repos, langs } = await this . getUserData ( username ) ;
71+ const { avatarUrl, repos, langs, langTotal } = await this . getUserData ( username ) ;
4972
50- const template = html ( userProfileCard ( avatarUrl , username , userLangs ( langs ) , userProfileRepos ( repos ) ) ) ;
73+ const template = html ( userProfileCard ( avatarUrl , username , userLangs ( langs , langTotal ) , userProfileRepos ( repos ) ) ) ;
5174
5275 const robotoArrayBuffer = await readFile ( "node_modules/@fontsource/roboto/files/roboto-latin-ext-400-normal.woff" ) ;
5376
0 commit comments