Skip to content

Commit 24630ee

Browse files
authored
Lesson 12 feat: Corrected line split (#313)
* feat: Created methods for guest model and checkout model * fix: Fixed package * fix:added reader.readline to each method * feat: corrected line.split * feat:added items * feat:Implemented Csv Readers * fix: Fixed mmethods
1 parent 4b54cd2 commit 24630ee

File tree

1 file changed

+118
-0
lines changed
  • lesson_12/io/io_app/src/main/java/com/codedifferently/lesson12/factory/natayaprice

1 file changed

+118
-0
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
package com.codedifferently.lesson12.factory.natayaprice;
2+
3+
import com.codedifferently.lesson12.factory.LibraryCsvDataLoader;
4+
import com.codedifferently.lesson12.models.CheckoutModel;
5+
import com.codedifferently.lesson12.models.LibraryDataModel;
6+
import com.codedifferently.lesson12.models.LibraryGuestModel;
7+
import com.codedifferently.lesson12.models.MediaItemModel;
8+
import com.opencsv.CSVReader;
9+
import com.opencsv.exceptions.CsvValidationException;
10+
import java.io.FileReader;
11+
import java.io.IOException;
12+
import java.time.Instant;
13+
import java.util.ArrayList;
14+
import java.util.HashMap;
15+
import java.util.List;
16+
import java.util.Map;
17+
import java.util.UUID;
18+
import org.springframework.core.io.ClassPathResource;
19+
import org.springframework.stereotype.Service;
20+
21+
@Service
22+
public class CsvDataLoader implements LibraryCsvDataLoader {
23+
24+
@Override
25+
public LibraryDataModel loadData() {
26+
LibraryDataModel libraryDataModel = new LibraryDataModel();
27+
try {
28+
libraryDataModel.mediaItems = readMediaItemsFromCsv("csv/media_items.csv");
29+
libraryDataModel.guests = readGuestsFromCsv("csv/guests.csv");
30+
populateGuestsWithCheckouts("csv/checked_out_items.csv", libraryDataModel.guests);
31+
} catch (IOException | CsvValidationException e) {
32+
throw new RuntimeException("Failed to load data from CSV files", e);
33+
}
34+
return libraryDataModel;
35+
}
36+
37+
private List<MediaItemModel> readMediaItemsFromCsv(String filePath)
38+
throws IOException, CsvValidationException {
39+
List<MediaItemModel> mediaItems = new ArrayList<>();
40+
try (CSVReader reader =
41+
new CSVReader(new FileReader(new ClassPathResource(filePath).getFile()))) {
42+
String[] header = reader.readNext(); // Skip header
43+
String[] line;
44+
while ((line = reader.readNext()) != null) {
45+
MediaItemModel mediaItem = parseMediaItem(line);
46+
mediaItems.add(mediaItem);
47+
}
48+
}
49+
return mediaItems;
50+
}
51+
52+
private MediaItemModel parseMediaItem(String[] line) {
53+
MediaItemModel mediaItem = new MediaItemModel();
54+
mediaItem.type = line[0];
55+
mediaItem.id = UUID.fromString(line[1]);
56+
mediaItem.title = line[2];
57+
mediaItem.isbn = line[3];
58+
mediaItem.authors = List.of(line[4].split("\\s*,\\s*"));
59+
mediaItem.pages = parseInteger(line[5]);
60+
mediaItem.runtime = parseInteger(line[6]);
61+
mediaItem.edition = line[7];
62+
return mediaItem;
63+
}
64+
65+
private int parseInteger(String value) {
66+
try {
67+
return Integer.parseInt(value);
68+
} catch (NumberFormatException e) {
69+
return 0;
70+
}
71+
}
72+
73+
private List<LibraryGuestModel> readGuestsFromCsv(String filePath)
74+
throws IOException, CsvValidationException {
75+
List<LibraryGuestModel> guests = new ArrayList<>();
76+
try (CSVReader reader =
77+
new CSVReader(new FileReader(new ClassPathResource(filePath).getFile()))) {
78+
String[] header = reader.readNext(); // Skip header
79+
String[] line;
80+
while ((line = reader.readNext()) != null) {
81+
LibraryGuestModel guest = new LibraryGuestModel();
82+
guest.type = line[0];
83+
guest.name = line[1];
84+
guest.email = line[2];
85+
guests.add(guest);
86+
}
87+
}
88+
return guests;
89+
}
90+
91+
private void populateGuestsWithCheckouts(String filePath, List<LibraryGuestModel> guests)
92+
throws IOException, CsvValidationException {
93+
Map<String, List<CheckoutModel>> checkoutsByGuestEmail = new HashMap<>();
94+
try (CSVReader reader =
95+
new CSVReader(new FileReader(new ClassPathResource(filePath).getFile()))) {
96+
String[] header = reader.readNext(); // Skip header
97+
String[] line;
98+
while ((line = reader.readNext()) != null) {
99+
String email = line[0];
100+
CheckoutModel checkout = parseCheckout(line);
101+
checkoutsByGuestEmail.computeIfAbsent(email, k -> new ArrayList<>()).add(checkout);
102+
}
103+
}
104+
// Assign checked-out items to respective guests
105+
for (LibraryGuestModel guest : guests) {
106+
List<CheckoutModel> checkouts =
107+
checkoutsByGuestEmail.getOrDefault(guest.email, new ArrayList<>());
108+
guest.checkedOutItems = checkouts;
109+
}
110+
}
111+
112+
private CheckoutModel parseCheckout(String[] line) {
113+
CheckoutModel checkout = new CheckoutModel();
114+
checkout.itemId = UUID.fromString(line[1]);
115+
checkout.dueDate = Instant.parse(line[2]);
116+
return checkout;
117+
}
118+
}

0 commit comments

Comments
 (0)