#include #include #include "csv.h" #include "api.h" #include #include "person.h" #include "vaccine.h" #define FILE_READ_BUFFER_SIZE 2048 #define VACCINE_LOT_TYPE_NAME "VACCINE_LOT" #define VACCINE_LOT_NUM_FIELDS 7 // Get the API version information const char* api_version() { return "UOC PP 20212"; } // Load data from a CSV file. If reset is true, remove previous data tApiError api_loadData(tApiData* data, const char* filename, bool reset) { tApiError error; FILE *fin; char buffer[FILE_READ_BUFFER_SIZE]; tCSVEntry entry; // Check input data assert( data != NULL ); assert(filename != NULL); // Reset current data if (reset) { // Remove previous information error = api_freeData(data); if (error != E_SUCCESS) { return error; } // Initialize the data error = api_initData(data); if (error != E_SUCCESS) { return error; } } // Open the input file fin = fopen(filename, "r"); if (fin == NULL) { return E_FILE_NOT_FOUND; } // Read file line by line while (fgets(buffer, FILE_READ_BUFFER_SIZE, fin)) { // Remove new line character buffer[strcspn(buffer, "\n\r")] = '\0'; csv_initEntry(&entry); csv_parseEntry(&entry, buffer, NULL); // Add this new entry to the api Data error = api_addDataEntry(data, entry); if (error != E_SUCCESS) { return error; } csv_freeEntry(&entry); } fclose(fin); return E_SUCCESS; } // Initialize the data structure tApiError api_initData(tApiData* data) { ////////////////////////////////// // Ex PR1 2b ///////////////////////////////// population_init(&(data->population)); vaccineList_init(&(data->vaccines)); vaccineLotData_init(&(data->vaccineLots)); return E_SUCCESS; } // Add a new vaccines lot tApiError api_addVaccineLot(tApiData* data, tCSVEntry entry) { ////////////////////////////////// // Ex PR1 2c ///////////////////////////////// tApiError ret = E_NOT_IMPLEMENTED; if (csv_numFields(entry) == VACCINE_LOT_NUM_FIELDS) { if (csv_getType(&entry) == VACCINE_LOT_TYPE_NAME) { // OK ret = E_SUCCESS; } else { // numFields other than valid one ret = E_INVALID_ENTRY_TYPE; } } else { // csv record type other than valid one ret = E_INVALID_ENTRY_FORMAT; } return ret; } // Get the number of persons registered on the application int api_populationCount(tApiData data) { ////////////////////////////////// // Ex PR1 2d ///////////////////////////////// return -1; } // Get the number of vaccines registered on the application int api_vaccineCount(tApiData data) { ////////////////////////////////// // Ex PR1 2d ///////////////////////////////// return -1; } // Get the number of vaccine lots registered on the application int api_vaccineLotsCount(tApiData data) { ////////////////////////////////// // Ex PR1 2d ///////////////////////////////// return -1; } // Free all used memory tApiError api_freeData(tApiData* data) { ////////////////////////////////// // Ex PR1 2e ///////////////////////////////// return E_NOT_IMPLEMENTED; } // Add a new entry tApiError api_addDataEntry(tApiData* data, tCSVEntry entry) { ////////////////////////////////// // Ex PR1 2f ///////////////////////////////// return E_NOT_IMPLEMENTED; } // Get vaccine data tApiError api_getVaccine(tApiData data, const char *name, tCSVEntry *entry) { ////////////////////////////////// // Ex PR1 3a ///////////////////////////////// return E_NOT_IMPLEMENTED; } // Get vaccine lot data tApiError api_getVaccineLot(tApiData data, const char* cp, const char* vaccine, tDateTime timestamp, tCSVEntry *entry) { ////////////////////////////////// // Ex PR1 3b ///////////////////////////////// return E_NOT_IMPLEMENTED; } // Get registered vaccines tApiError api_getVaccines(tApiData data, tCSVData *vaccines) { ////////////////////////////////// // Ex PR1 3c ///////////////////////////////// return E_NOT_IMPLEMENTED; } // Get vaccine lots tApiError api_getVaccineLots(tApiData data, tCSVData *lots) { ////////////////////////////////// // Ex PR1 3d ///////////////////////////////// return E_NOT_IMPLEMENTED; }