Project

General

Profile

1
package eu.dnetlib.usagestats.services;
2

    
3
import eu.dnetlib.usagestats.portal.CountryRepositories;
4
import eu.dnetlib.usagestats.portal.CountryUsageStats;
5
import eu.dnetlib.usagestats.portal.CountryUsageStatsAll;
6
import eu.dnetlib.usagestats.portal.MonthlyUsageStats;
7
import eu.dnetlib.usagestats.portal.TotalStats;
8
import eu.dnetlib.usagestats.portal.TotalStatsReposViewsDownloads;
9
import eu.dnetlib.usagestats.portal.UsageStats;
10
import eu.dnetlib.usagestats.repositories.UsageStatsRepository;
11
import org.springframework.stereotype.Service;
12

    
13
import java.util.ArrayList;
14
import java.util.List;
15

    
16
@Service
17
public class UsageStatsServiceImpl implements UsageStatsService {
18

    
19
    private final UsageStatsRepository usageStatsRepository;
20

    
21
    public UsageStatsServiceImpl(UsageStatsRepository usageStatsRepository) {
22
        this.usageStatsRepository = usageStatsRepository;
23
    }
24

    
25
    @Override
26
    public UsageStats getDatasourceClicks(String id) {
27
        String query = "SELECT 'views', sum(s.count), sum(s.openaire) FROM views_stats s where s.repository_id=? "
28
                + "UNION ALL SELECT 'downloads', sum(s.count), sum(s.openaire) FROM downloads_stats s where s.repository_id=? "
29
                + "UNION ALL SELECT 'pageviews', sum(s.count), '0' FROM pageviews_stats s, result_datasources rd where rd.id=s.result_id and rd.datasource=? ";
30

    
31
        List<String> values = new ArrayList<>();
32
        values.add(id);
33
        values.add(id);
34
        values.add(id);
35

    
36
        return usageStatsRepository.executeUsageStats(query, values, "datasource");
37
    }
38

    
39
    /*
40
    @Override
41
    public UsageStats getOrganizationClicks(String organizationId) {
42

    
43
        String query = "select sum(number_of_views) from organization_stats where id=?";
44

    
45
        List<String> values = new ArrayList<>();
46
        values.add(organizationId);
47

    
48
        return usageStatsRepository.executeUsageStats(query, values, "organization");
49

    
50
    }
51
     */
52
    @Override
53
    public UsageStats getProjectClicks(String projectId) {
54
        String query = "SELECT 'views', sum(s.count), sum(s.openaire) FROM views_stats s, project_results pr where pr.result=s.result_id and pr.id=? "
55
                + "UNION ALL SELECT 'downloads', sum(s.count), sum(s.openaire) FROM downloads_stats s, project_results pr where pr.result=s.result_id and pr.id=? "
56
                + "UNION ALL SELECT 'pageviews', sum(s.count), '0' FROM pageviews_stats s, project_results pr where pr.result=s.result_id and pr.id=?;";
57

    
58
        List<String> values = new ArrayList<>();
59
        values.add(projectId);
60
        values.add(projectId);
61
        values.add(projectId);
62

    
63
        return usageStatsRepository.executeUsageStats(query, values, "project");
64
    }
65

    
66
    @Override
67
    public UsageStats getResultClicks(String id) {
68
        String query = "SELECT 'views', s.repository_id, CASE WHEN s.source='OpenAIRE' THEN d.name ELSE d.name ||' - '|| s.source END, sum(count), sum(openaire) FROM views_stats s, datasource d WHERE s.repository_id=d.id AND s.result_id=? GROUP BY s.source, s.repository_id, d.name "
69
                + "UNION ALL SELECT 'downloads', s.repository_id, CASE WHEN s.source='OpenAIRE' THEN d.name ELSE d.name ||' - '|| s.source END, sum(count), sum(s.openaire) FROM downloads_stats s, datasource d WHERE s.repository_id=d.id AND s.result_id=? GROUP BY s.source, s.repository_id, d.name "
70
                + "UNION ALL SELECT 'pageviews', 'OpenAIRE id', 'OpenAIRE', sum(count), '0' FROM pageviews_stats s WHERE result_id=?;";
71

    
72
        List<String> values = new ArrayList<>();
73
        values.add(id);
74
        values.add(id);
75
        values.add(id);
76

    
77
        return usageStatsRepository.executeUsageStats(query, values, "result");
78
    }
79

    
80
    @Override
81
    public TotalStats getTotalStats() {
82
        return usageStatsRepository.executeTotalStats();
83
    }
84

    
85
    @Override
86
    public List<MonthlyUsageStats> getMonthlyUsageStats() {
87
        String query = "select date, sum(downloads) as downloads, sum(views) as views from usage_stats group by date order by date asc";
88
        return usageStatsRepository.executeMontlyUsageStats(query);
89
    }
90

    
91
    @Override
92
    public List<MonthlyUsageStats> getMonthlyUsageStatsForRepo(String id) {
93
        String query = "select date, sum(downloads) as downloads, sum(views) as views from usage_stats where repository_id=? group by date order by date asc";
94
        return usageStatsRepository.executeMontlyUsageStatsForRepo(query,id);
95
    }
96
    
97
   /* @Override
98
    public List<CountryUsageStats> getCountryUsageStats() {
99
        String query = "select c.name, sum(views) as views, sum(downloads) as downloads from public.torganization t, public.organization_datasources o, public.country c, usage_stats where o.datasource=t.id\n" +
100
                        "and c.code=t.country and o.id=repository_id group by c.name ";
101
        return usageStatsRepository.executeCountryUsageStats(query);
102
    }*/
103
    @Override
104
    public CountryUsageStatsAll getCountryUsageStatsAll() {
105
        String query = "select c.name, count(distinct repository_id) as total_repos, sum(views) as views, sum(downloads) as downloads from public.torganization t, public.organization_datasources o, public.country c, usage_stats where o.datasource=t.id\n" +
106
                        "and c.code=t.country and o.id=repository_id group by c.name ";
107
        return usageStatsRepository.executeCountryUsageStats(query);
108
    }
109
    @Override
110
    public CountryUsageStats getCountryUsageStats(String country) {
111
        String query = "select count(distinct repository_id) as total_repos, sum(views) as views, sum(downloads) as downloads from public.torganization t, public.organization_datasources o, public.country c, usage_stats where o.datasource=t.id\n" +
112
                        "and c.code=t.country and o.id=repository_id and c.name=?";
113
        return usageStatsRepository.executeCountryUsageStats(query, country);
114
    }
115

    
116

    
117
    @Override
118
    public List<CountryRepositories> getCountryRepositories() {
119
        String query = "select c.name, d.name from public.datasource d, public.torganization t, public.organization_datasources o, public.country c, usage_stats \n" +
120
"where o.datasource=t.id and c.code=t.country and o.id=repository_id and repository_id=d.id group by d.name, c.name order by c.name";
121
        return usageStatsRepository.executeCountryRepositories(query);
122
    }
123

    
124
    @Override
125
    public TotalStatsReposViewsDownloads getTotalStatsReposViewsDownloads() {
126
        String query = "select count(distinct repository_id) as repositories, sum(views) as views, sum(downloads) as downloads from usage_stats";
127

    
128
        return usageStatsRepository.executeTotalStatsReposViewsDownloads(query);
129

    
130
    }
131

    
132
}
(4-4/4)