Skip to content

Commit

Permalink
new db table and procedure to save imported guids in db to use for de…
Browse files Browse the repository at this point in the history
…letion
  • Loading branch information
vmanawat committed Oct 9, 2024
1 parent 8775294 commit 49be553
Show file tree
Hide file tree
Showing 5 changed files with 125 additions and 28 deletions.
8 changes: 8 additions & 0 deletions backend/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -263,3 +263,11 @@ model aqi_data_classifications {
update_user_id String @db.VarChar(200)
update_utc_timestamp DateTime @db.Timestamp(6)
}

model aqi_imported_data {
aqi_imported_data_id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
file_name String? @db.VarChar(200)
original_file_name String? @db.VarChar(200)
imported_guids Json?
create_utc_timestamp DateTime @db.Timestamp(6)
}
75 changes: 56 additions & 19 deletions backend/src/aqi_api/aqi_api.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,9 @@ export class AqiApiService {
async fieldVisits(body: any) {
try {
const response = await this.axiosInstance.post("/v1/fieldvisits", body);
this.logger.log(`API call to POST Field Visits succeeded: ${response.status}`);
this.logger.log(
`API call to POST Field Visits succeeded: ${response.status}`,
);
return response.data.id;
} catch (err) {
console.error(
Expand All @@ -35,11 +37,16 @@ export class AqiApiService {
}

async putFieldVisits(GUID: string, body: any) {
try{
const response = await this.axiosInstance.put(`/v1/fieldvisits/${GUID}`, body);
this.logger.log(`API call to PUT Field Visits succeeded: ${response.status}`);
try {
const response = await this.axiosInstance.put(
`/v1/fieldvisits/${GUID}`,
body,
);
this.logger.log(
`API call to PUT Field Visits succeeded: ${response.status}`,
);
return response.data.id;
}catch (err){
} catch (err) {
console.error(
"API CALL TO PUT Field Visits failed: ",
err.response.data.message,
Expand All @@ -50,7 +57,9 @@ export class AqiApiService {
async fieldActivities(body: any) {
try {
const response = await this.axiosInstance.post("/v1/activities", body);
this.logger.log(`API call to POST Activities succeeded: ${response.status}`);
this.logger.log(
`API call to POST Activities succeeded: ${response.status}`,
);
return response.data.id;
} catch (err) {
console.error(
Expand All @@ -61,11 +70,16 @@ export class AqiApiService {
}

async putFieldActivities(GUID: string, body: any) {
try{
const response = await this.axiosInstance.put(`/v1/activities/${GUID}`, body);
this.logger.log(`API call to PUT Field Activities succeeded: ${response.status}`);
try {
const response = await this.axiosInstance.put(
`/v1/activities/${GUID}`,
body,
);
this.logger.log(
`API call to PUT Field Activities succeeded: ${response.status}`,
);
return response.data.id;
}catch (err){
} catch (err) {
console.error(
"API CALL TO PUT Field Activities failed: ",
err.response.data.message,
Expand All @@ -76,7 +90,9 @@ export class AqiApiService {
async fieldSpecimens(body: any) {
try {
const response = await this.axiosInstance.post("/v1/specimens", body);
this.logger.log(`API call to POST Specimens succeeded: ${response.status}`);
this.logger.log(
`API call to POST Specimens succeeded: ${response.status}`,
);
return response.data.id;
} catch (err) {
console.error(
Expand All @@ -87,18 +103,40 @@ export class AqiApiService {
}

async putSpecimens(GUID: string, body: any) {
try{
const response = await this.axiosInstance.put(`/v1/specimens/${GUID}`, body);
this.logger.log(`API call to PUT Specimens succeeded: ${response.status}`);
try {
const response = await this.axiosInstance.put(
`/v1/specimens/${GUID}`,
body,
);
this.logger.log(
`API call to PUT Specimens succeeded: ${response.status}`,
);
return response.data.id;
}catch (err){
} catch (err) {
console.error(
"API CALL TO PUT Specimens failed: ",
err.response.data.message,
);
}
}

async getObservationsFromFile(fileName: string) {
try {
let observations = (
await this.axiosInstance.get("/v2/observations?limit=1000")
).data.domainObjects;

const relatedData = observations.filter((observation) =>
observation.extendedAttributes
.some((attribute) => attribute.text === fileName)
)
.map((observation) => observation.id);
return relatedData;
} catch (err) {
console.error("API CALL TO GET Observations from File failed: ", err);
}
}

async importObservations(fileName: any, method: string) {
const formData = new FormData();
formData.append("file", fs.createReadStream(fileName));
Expand Down Expand Up @@ -145,7 +183,6 @@ export class AqiApiService {
const obsStatus = await this.getObservationsStatusResult(statusURL);

const errorMessages = this.parseObsResultResponse(obsStatus);

return errorMessages;
}
} catch (err) {
Expand All @@ -169,7 +206,7 @@ export class AqiApiService {
},
});

await wait(5000);
await wait(7000);

const obsResultResponse = await axios.get(
`${process.env.AQI_BASE_URL}/v2/observationimports/${response.data.id}/result`,
Expand Down Expand Up @@ -244,7 +281,7 @@ export class AqiApiService {
aqi_field_visit_start_time: queryParam[1],
},
});
if (result.length > 0){
if (result.length > 0) {
return result[0].aqi_field_visits_id;
} else {
return null;
Expand Down Expand Up @@ -397,7 +434,7 @@ export class AqiApiService {
if (uniqueObservations.length > 0) {
try {
let deletion = await axios.delete(
`${process.env.AQI_BASE_URL}/v2/observations?specimentIds=${uniqueSpecimens}`,
`${process.env.AQI_BASE_URL}/v2/observations?specimenIds=${uniqueSpecimens}`,
{
headers: {
Authorization: `token ${process.env.AQI_ACCESS_TOKEN}`,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -569,7 +569,11 @@ export class FileParseValidateService {
return specimenIds;
}

async formulateObservationFile(observationData: any, fileName: string) {
async formulateObservationFile(
observationData: any,
fileName: string,
originalFileName: string,
) {
const obsToWrite: ObservationFile[] = [];

observationData.map((source) => {
Expand All @@ -584,6 +588,7 @@ export class FileParseValidateService {
newObs[targetKey] = source[sourceKey];
}
});
newObs["EA_FileID"] = originalFileName;
obsToWrite.push(newObs);
});

Expand Down Expand Up @@ -964,6 +969,45 @@ export class FileParseValidateService {
return;
}

async saveAQIInsertedElements(
fileName: string,
originalFileName: string,
visitInfo: any[],
activityInfo: any[],
specimenInfo: any[],
) {
let importedGUIDS = {};

const visitGUIDS = visitInfo.map((visit) => visit.rec.fieldVisit);
const activityGUIDS = activityInfo.map(
(activity) => activity.rec.activity.id,
);
const specimenGUIDS = specimenInfo.map(
(specimen) => specimen.rec.specimen.id,
);

const observationGUIDS =
await this.aqiService.getObservationsFromFile(originalFileName);

importedGUIDS["observations"] = observationGUIDS;
importedGUIDS["specimens"] = specimenGUIDS;
importedGUIDS["activities"] = activityGUIDS;
importedGUIDS["visits"] = visitGUIDS;

const imported_guids_data = {
file_name: fileName,
original_file_name: originalFileName,
imported_guids: importedGUIDS,
create_utc_timestamp: new Date(),
};

await this.prisma.$transaction(async (prisma) => {
await prisma.aqi_imported_data.create({
data: imported_guids_data
});
})
}

async parseFile(
file: string,
fileName: string,
Expand Down Expand Up @@ -1033,6 +1077,7 @@ export class FileParseValidateService {
const ObsFilePath = await this.formulateObservationFile(
allObservations,
fileName,
originalFileName,
);

const uniqueMinistryContacts = Array.from(
Expand Down Expand Up @@ -1194,13 +1239,13 @@ export class FileParseValidateService {
);

// Save the created GUIDs to aqi_inserted_elements
// console.log(visitInfo);
// console.log(activityInfo);
// console.log(specimenInfo);

// console.log(visitInfo.length);
// console.log(activityInfo.length);
// console.log(specimenInfo.length);
await this.saveAQIInsertedElements(
fileName,
originalFileName,
visitInfo,
activityInfo,
specimenInfo,
);

const file_error_log_data = {
file_submission_id: file_submission_id,
Expand Down
2 changes: 1 addition & 1 deletion migrations/sql/V1.0.0__submission_status_code.sql
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ values (
(now() at time zone 'utc'),
'VMANAWAT',
(now() at time zone 'utc')
)
),
(
'DELETED',
'Deleted',
Expand Down
7 changes: 7 additions & 0 deletions migrations/sql/V1.1.1__aqi_imported_data.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
CREATE TABLE IF NOT EXISTS enmods.aqi_imported_data (
aqi_imported_data_id UUID PRIMARY KEY NOT NULL DEFAULT gen_random_uuid(),
file_name varchar(200) NULL,
original_file_name varchar(200) NULL,
imported_guids JSONB NULL,
create_utc_timestamp timestamp NOT NULL
);

0 comments on commit 49be553

Please sign in to comment.