Skip to content

Commit

Permalink
feat: added feature for downloading user report csv file
Browse files Browse the repository at this point in the history
  • Loading branch information
abuudarda committed Jul 16, 2023
1 parent c96ecd5 commit 955b8c8
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
"/api/v1/auth/**",
"/api/v1/quiz/public/**",
"/api/v1/storage/public/**",
"/api/v1/reports/users/csv",
"/v2/api-docs",
"/v3/api-docs",
"/v3/api-docs/**",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package com.quiz_app.controller.reportcontroller;

import com.quiz_app.entity.user.Role;
import com.quiz_app.entity.user.User;
import com.quiz_app.service.report.ReportService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.opencsv.CSVWriter;

import java.io.IOException;
import java.io.StringWriter;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

@RestController
@RequestMapping("/api/v1/reports")
//@RequiredArgsConstructor
@CrossOrigin(origins = "http://localhost:3000")
public class ReportController {

private final ReportService reportService;

@Autowired
public ReportController(ReportService reportService) {
this.reportService = reportService;
}

@GetMapping("/users/csv")
public ResponseEntity<String> generateUserReportCSV() {
System.out.println("ggggggggggggggggggggggggggggg");
// List<User> users = reportService.getAllUsers();
User user = User.builder()
.id(1)
.username("user1")
.firstname("Abu")
.lastname("Darda")
.email("a@a.com")
.role(Role.USER)
.phoneNumber("1234567890")
.dateOfBirth(LocalDate.now())
.build();

List<User> users = Collections.singletonList(user);
// Generate CSV content using OpenCSV
String csvContent = generateCSV(users);
System.out.println("Number of users: " + users.size());

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("text/csv"));
headers.set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=users_report.csv");

return new ResponseEntity<>(csvContent, headers, HttpStatus.OK);
}

// go for pdf

private String generateCSV(List<User> users) {
// Implement the logic to convert the user data into CSV format using OpenCSV

StringWriter writer = new StringWriter();
try (CSVWriter csvWriter = new CSVWriter(writer)) {
String[] header = {"ID", "Username", "Firstname", "Lastname", "Email", "Role", "Phone Number", "Date of Birth"};
csvWriter.writeNext(header);

for (User user : users) {
String[] row = {
String.valueOf(user.getId()),
user.getUsername(),
user.getFirstname(),
user.getLastname(),
user.getEmail(),
user.getRole().toString(),
user.getPhoneNumber(),
user.getDateOfBirth().toString()
};
csvWriter.writeNext(row);
}
} catch (IOException e) {
// Handle CSV generation error
e.printStackTrace();
}

return writer.toString();
}
}
4 changes: 0 additions & 4 deletions src/main/java/com/quiz_app/entity/user/UserReports.java

This file was deleted.

30 changes: 30 additions & 0 deletions src/main/java/com/quiz_app/service/report/ReportService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.quiz_app.service.report;

import com.quiz_app.entity.user.User;
import com.quiz_app.repository.UserRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
@Service
//@RequiredArgsConstructor
@RestController
@RequestMapping("/api/reports")
//@CrossOrigin(origins = "http://localhost:3000") // Replace with your frontend URL
public class ReportService {

private final UserRepository userRepository;

@Autowired
public ReportService(UserRepository userRepository) {
this.userRepository = userRepository;
}

public List<User> getAllUsers() {
return userRepository.findAll();
}
}

0 comments on commit 955b8c8

Please sign in to comment.