/ src / DatabaseController.cpp
DatabaseController.cpp
 1  /**
 2   * @file DatabaseController.cpp
 3   * @author Rene Ceska xceska06 (xceska06@stud.fit.vutbr.cz)
 4   * @date 2023-11-19
 5   */
 6  #include "inc/DatabaseController.h"
 7  
 8  std::vector<DatabaseObject> DatabaseController::loadAllRows() {
 9    std::vector<DatabaseObject> result;
10    while (!file.eof()) {
11      int err;
12      result.push_back(loadNextRow(&err));
13    }
14    return result;
15  }
16  
17  std::vector<unsigned char>
18  DatabaseController::sanitaze(std::vector<unsigned char> input) {
19    std::vector<unsigned char> result;
20    // allow only printable ascii charactes and numbers
21    for (unsigned long int i = 0; i < input.size(); i++) {
22      if (input[i] >= 32 && input[i] <= 126) {
23        result.push_back(input[i]);
24      }
25    }
26    return result;
27  }
28  
29  DatabaseObject DatabaseController::loadNextRow(int *err) {
30  
31    if (file.eof()) {
32      *err = 1;
33      return DatabaseObject(std::vector<unsigned char>(),
34                            std::vector<unsigned char>(),
35                            std::vector<unsigned char>());
36    }
37  
38    std::vector<unsigned char> name;
39    std::vector<unsigned char> uid;
40    std::vector<unsigned char> email;
41  
42    // read csv line
43    std::string line;
44    std::getline(file, line);
45    if (line == "") {
46      *err = 1;
47      return DatabaseObject(std::vector<unsigned char>(),
48                            std::vector<unsigned char>(),
49                            std::vector<unsigned char>());
50    }
51    std::stringstream ss(line);
52    std::string token;
53    std::getline(ss, token, ';');
54  
55    name = DatabaseController::sanitaze(
56        std::vector<unsigned char>(token.begin(), token.end()));
57    std::getline(ss, token, ';');
58    uid = DatabaseController::sanitaze(
59        std::vector<unsigned char>(token.begin(), token.end()));
60    std::getline(ss, token, ';');
61    email = DatabaseController::sanitaze(
62        std::vector<unsigned char>(token.begin(), token.end()));
63    *err = 0;
64    return DatabaseObject(name, uid, email);
65  }
66  
67  DatabaseController::DatabaseController(std::string fileName) {
68    file.open(fileName);
69  }
70  
71  DatabaseController::~DatabaseController() { file.close(); }