Skip to content

Commit 697c8e7

Browse files
committed
Mapping properties to camelCase
1 parent df18914 commit 697c8e7

8 files changed

+39
-24
lines changed

dataAccess/githubFetcher.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11

22
import axios from 'axios';
33
import RepoFetcher from '../models/repoFetcherModel';
4+
import { convertJsonToRepository } from '../mappers/mapProperties';
45

56
export const githubFetcher: RepoFetcher = {
67
async getRepositories(org: string) {
78
const response = await axios.get(`https://api.github.com/orgs/${org}/repos`);
8-
return response.data;
9+
return convertJsonToRepository(response.data);
910
}
1011
};

mappers/mapProperties.ts

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
2+
import { Repository, RepositoryJson } from "../models/repositoryModel";
3+
4+
export const convertJsonToRepository = (value: RepositoryJson[]) : Repository[] => {
5+
return value.map((repo) => ({
6+
name: repo.name,
7+
stargazersCount: repo.stargazers_count,
8+
updatedAt: repo.updated_at,
9+
}));
10+
};

models/repoFetcherModel.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
import Repository from "../models/repositoryModel";
2+
import { Repository } from "../models/repositoryModel";
33

44
interface RepoFetcher {
55
getRepositories(org: string): Promise<Repository []>;

models/repositoryModel.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11

2-
interface Repository {
2+
export interface RepositoryJson {
33
name: string,
44
stargazers_count: number;
55
updated_at: string;
66
}
77

8-
export default Repository;
8+
export interface Repository {
9+
name: string,
10+
stargazersCount: number;
11+
updatedAt: string;
12+
}

services/repositoriesService.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11

2-
import Repository from "../models/repositoryModel";
2+
import { Repository } from "../models/repositoryModel";
33

44
export const popularRepos = (repositories: Repository[]): Repository[] =>
5-
repositories.filter((repo) => repo.stargazers_count > 5);
5+
repositories.filter((repo) => repo.stargazersCount > 5);
66

77
export const lastUpdatedRepos = (repositories: Repository[]): Repository[] => {
88
const sortedRepos = repositories.sort((a, b) => {
9-
return new Date(b.updated_at).getTime() - new Date(a.updated_at).getTime();
9+
return new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime();
1010
});
1111

1212
return sortedRepos.slice(0, 5);
1313
};
1414

1515
export const totalStars = (repositories: Repository[]): number =>
16-
repositories.reduce((acc, repo) => acc + repo.stargazers_count, 0);
16+
repositories.reduce((acc, repo) => acc + repo.stargazersCount, 0);
1717

1818

1919
export const topRepos = (repositories: Repository[]): Repository[] => {
20-
const sortedRepos = repositories.sort((a, b) => b.stargazers_count - a.stargazers_count);
20+
const sortedRepos = repositories.sort((a, b) => b.stargazersCount - a.stargazersCount);
2121

2222
return sortedRepos.slice(0, 5);
2323
};

specs/fixtures/repositories.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11

22
export const repositories = [
3-
{ name: 'repo1', stargazers_count: 6, updated_at: '2023-10-15T19:30:00Z'},
4-
{ name: 'repo2', stargazers_count: 3, updated_at: '2023-10-20T10:15:00Z' },
5-
{ name: 'hrepo3', stargazers_count: 20, updated_at: '2023-10-20T10:15:00Z' },
6-
{ name: 'repo4', stargazers_count: 12, updated_at: '2023-10-20T10:15:00Z' },
7-
{ name: 'repo5', stargazers_count: 7, updated_at: '2023-10-20T10:15:00Z' },
8-
{ name: 'repo6', stargazers_count: 14, updated_at: '2023-10-20T10:15:00Z' }
3+
{ name: 'repo1', stargazersCount: 6, updatedAt: '2023-10-15T19:30:00Z'},
4+
{ name: 'repo2', stargazersCount: 3, updatedAt: '2023-10-20T10:15:00Z' },
5+
{ name: 'hrepo3', stargazersCount: 20, updatedAt: '2023-10-20T10:15:00Z' },
6+
{ name: 'repo4', stargazersCount: 12, updatedAt: '2023-10-20T10:15:00Z' },
7+
{ name: 'repo5', stargazersCount: 7, updatedAt: '2023-10-20T10:15:00Z' },
8+
{ name: 'repo6', stargazersCount: 14, updatedAt: '2023-10-20T10:15:00Z' }
99
];

specs/repositoriesController.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
import Repository from "../models/repositoryModel";
2+
import {Repository} from "../models/repositoryModel";
33
import { repositories } from "./fixtures/repositories";
44
import RepoFetcher from '../models/repoFetcherModel';
55
import { getPopularRepos, getLastUpdatedRepos, getTotalStars, getTopRepos, getListAlphabetic } from '../controllers/repositoriesController';

specs/repositoriesService.spec.ts

+8-8
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ describe('Repositories Service', () => {
88
const popularRepositories = popularRepos(repositories);
99

1010
expect(popularRepositories[0].name).toBe('repo1');
11-
expect(popularRepositories[0].stargazers_count).toBe(6);
12-
expect(popularRepositories[0].updated_at).toBe('2023-10-15T19:30:00Z');
11+
expect(popularRepositories[0].stargazersCount).toBe(6);
12+
expect(popularRepositories[0].updatedAt).toBe('2023-10-15T19:30:00Z');
1313
});
1414
});
1515

@@ -18,12 +18,12 @@ describe('Repositories Service', () => {
1818
const lastUpdatedRepositories = lastUpdatedRepos(repositories);
1919

2020
expect(lastUpdatedRepositories[0].name).toBe('repo2');
21-
expect(lastUpdatedRepositories[0].stargazers_count).toBe(3);
22-
expect(lastUpdatedRepositories[0].updated_at).toBe('2023-10-20T10:15:00Z');
21+
expect(lastUpdatedRepositories[0].stargazersCount).toBe(3);
22+
expect(lastUpdatedRepositories[0].updatedAt).toBe('2023-10-20T10:15:00Z');
2323

2424
expect(lastUpdatedRepositories[1].name).toBe('hrepo3');
25-
expect(lastUpdatedRepositories[1].stargazers_count).toBe(20);
26-
expect(lastUpdatedRepositories[1].updated_at).toBe('2023-10-20T10:15:00Z');
25+
expect(lastUpdatedRepositories[1].stargazersCount).toBe(20);
26+
expect(lastUpdatedRepositories[1].updatedAt).toBe('2023-10-20T10:15:00Z');
2727
});
2828
});
2929

@@ -40,8 +40,8 @@ describe('Repositories Service', () => {
4040

4141
expect(topRepositories).toHaveLength(5);
4242
expect(topRepositories[0].name).toBe('hrepo3');
43-
expect(topRepositories[0].stargazers_count).toBe(20);
44-
expect(topRepositories[0].updated_at).toBe('2023-10-20T10:15:00Z');
43+
expect(topRepositories[0].stargazersCount).toBe(20);
44+
expect(topRepositories[0].updatedAt).toBe('2023-10-20T10:15:00Z');
4545
});
4646
});
4747

0 commit comments

Comments
 (0)