diff --git a/api/src/paths/project/{projectId}/survey/{surveyId}/observation/submission/get.ts b/api/src/paths/project/{projectId}/survey/{surveyId}/observation/submission/get.ts index 4dccca0414..a359cc90cf 100644 --- a/api/src/paths/project/{projectId}/survey/{surveyId}/observation/submission/get.ts +++ b/api/src/paths/project/{projectId}/survey/{surveyId}/observation/submission/get.ts @@ -120,7 +120,7 @@ export function getOccurenceSubmission(): RequestHandler { !occurrenceSubmissionData || !occurrenceSubmissionData.rows || !occurrenceSubmissionData.rows[0] || - occurrenceSubmissionData.rows[0].soft_delete_timestamp + occurrenceSubmissionData.rows[0].delete_timestamp ) { return res.status(200).json(null); } diff --git a/api/src/queries/survey/survey-occurrence-queries.ts b/api/src/queries/survey/survey-occurrence-queries.ts index 616eec33d8..cc91db47ae 100644 --- a/api/src/queries/survey/survey-occurrence-queries.ts +++ b/api/src/queries/survey/survey-occurrence-queries.ts @@ -114,7 +114,7 @@ export const getLatestSurveyOccurrenceSubmissionSQL = (surveyId: number): SQLSta os.occurrence_submission_id as id, os.survey_id, os.source, - os.soft_delete_timestamp, + os.delete_timestamp, os.event_timestamp, os.key, os.file_name, @@ -246,7 +246,7 @@ export const deleteOccurrenceSubmissionSQL = (occurrenceSubmissionId: number): S const sqlStatement: SQLStatement = SQL` UPDATE occurrence_submission - SET soft_delete_timestamp = now() + SET delete_timestamp = now() WHERE occurrence_submission_id = ${occurrenceSubmissionId}; `; diff --git a/app/src/features/surveys/view/SurveyObservations.tsx b/app/src/features/surveys/view/SurveyObservations.tsx index b906003181..b5b55e4f8a 100644 --- a/app/src/features/surveys/view/SurveyObservations.tsx +++ b/app/src/features/surveys/view/SurveyObservations.tsx @@ -72,12 +72,8 @@ const SurveyObservations = () => { const [isLoading, setIsLoading] = useState(true); const [isValidating, setIsValidating] = useState(false); const [isPolling, setIsPolling] = useState(false); - - const [pollingFunction, setPollingFunction] = useState(); const [pollingTime, setPollingTime] = useState(0); - useInterval(pollingFunction, pollingTime); - const dialogContext = useContext(DialogContext); const fetchObservationSubmission = useCallback(async () => { @@ -107,6 +103,8 @@ const SurveyObservations = () => { }); }, [biohubApi.observation, projectId, surveyId]); + useInterval(fetchObservationSubmission, pollingTime); + useEffect(() => { if (isLoading) { fetchObservationSubmission(); @@ -114,7 +112,6 @@ const SurveyObservations = () => { if (isPolling && !pollingTime) { setPollingTime(2000); - setPollingFunction(() => fetchObservationSubmission); } }, [ biohubApi, diff --git a/database/src/migrations/20210819170006_add_delete_timestamp_to_occurrence_submission.ts b/database/src/migrations/20210819170006_add_delete_timestamp_to_occurrence_submission.ts new file mode 100644 index 0000000000..f2e92b1d0f --- /dev/null +++ b/database/src/migrations/20210819170006_add_delete_timestamp_to_occurrence_submission.ts @@ -0,0 +1,62 @@ +import * as Knex from 'knex'; + +const DB_SCHEMA = process.env.DB_SCHEMA; + +export async function up(knex: Knex): Promise { + await knex.raw(` + set schema '${DB_SCHEMA}'; + set search_path = ${DB_SCHEMA},public; + + ALTER TABLE ${DB_SCHEMA}.occurrence_submission add column delete_timestamp timestamptz(6); + + create or replace view survey_status as + with not_published as (select os.survey_id, max(ss.submission_status_id) as submission_status_id from occurrence_submission os, submission_status ss + where not exists (select 1 from submission_status ss2, submission_status_type sst, occurrence_submission os2 + where os.survey_id = os2.survey_id + and os2.delete_timestamp is null + and ss2.occurrence_submission_id = os2.occurrence_submission_id + and sst.submission_status_type_id = ss2.submission_status_type_id + and sst.name = api_get_character_system_constant('OCCURRENCE_SUBMISSION_STATE_PUBLISHED') + and sst.record_end_date is null) + group by os.survey_id), + published as (select os.survey_id, max(ss.submission_status_id) as submission_status_id from occurrence_submission os, submission_status ss, submission_status_type sst + where ss.submission_status_type_id = sst.submission_status_type_id + and sst.name = api_get_character_system_constant('OCCURRENCE_SUBMISSION_STATE_PUBLISHED') + and sst.record_end_date is null + and os.delete_timestamp is null + group by os.survey_id) + select s.project_id project_id, np.survey_id survey_id, sst.name survey_status, ss3.event_timestamp status_event_timestamp from not_published np, submission_status ss3, submission_status_type sst, survey s + where ss3.submission_status_id = np.submission_status_id + and sst.submission_status_type_id = ss3.submission_status_type_id + and s.survey_id = np.survey_id + union + select s.project_id project_id, p.survey_id survey_id, sst.name survey_status, ss3.event_timestamp status_event_timestamp from published p, submission_status ss3, submission_status_type sst, survey s + where ss3.submission_status_id = p.submission_status_id + and sst.submission_status_type_id = ss3.submission_status_type_id + and s.survey_id = p.survey_id + ; + + set search_path = biohub_dapi_v1; + + set role biohub_api; + + create or replace view occurrence_submission as select * from ${DB_SCHEMA}.occurrence_submission; + + set role postgres; + `); +} + +export async function down(knex: Knex): Promise { + await knex.raw(` + SET SCHEMA '${DB_SCHEMA}'; + SET SEARCH_PATH = ${DB_SCHEMA},public, biohub_dapi_v1; + + SET ROLE biohub_api; + + create or replace view occurrence_submission as select * from ${DB_SCHEMA}.occurrence_submission; + + SET ROLE postgres; + + ALTER TABLE ${DB_SCHEMA}.occurrence_submission remove column delete_timestamp; + `); +} diff --git a/database/src/migrations/20210819170006_add_soft_delete_timestamp_to_occurrence_submission.ts b/database/src/migrations/20210819170006_add_soft_delete_timestamp_to_occurrence_submission.ts deleted file mode 100644 index dfb2967b4b..0000000000 --- a/database/src/migrations/20210819170006_add_soft_delete_timestamp_to_occurrence_submission.ts +++ /dev/null @@ -1,35 +0,0 @@ -import * as Knex from 'knex'; - -const DB_SCHEMA = process.env.DB_SCHEMA; - -export async function up(knex: Knex): Promise { - await knex.raw(` - set schema '${DB_SCHEMA}'; - set search_path = ${DB_SCHEMA},public; - - ALTER TABLE ${DB_SCHEMA}.occurrence_submission add column soft_delete_timestamp timestamptz(6); - - set search_path = biohub_dapi_v1; - - set role biohub_api; - - create or replace view occurrence_submission as select * from ${DB_SCHEMA}.occurrence_submission; - - set role postgres; - `); -} - -export async function down(knex: Knex): Promise { - await knex.raw(` - SET SCHEMA '${DB_SCHEMA}'; - SET SEARCH_PATH = ${DB_SCHEMA},public, biohub_dapi_v1; - - SET ROLE biohub_api; - - create or replace view occurrence_submission as select * from ${DB_SCHEMA}.occurrence_submission; - - SET ROLE postgres; - - ALTER TABLE ${DB_SCHEMA}.occurrence_submission remove column soft_delete_timestamp; - `); -} diff --git a/database/src/migrations/release.0.22/vw_survey_status.sql b/database/src/migrations/release.0.22/vw_survey_status.sql index 6e092304df..adb53bb4aa 100644 --- a/database/src/migrations/release.0.22/vw_survey_status.sql +++ b/database/src/migrations/release.0.22/vw_survey_status.sql @@ -1,26 +1,26 @@ --- vw_survey_status.sql - -create or replace view survey_status as -with not_published as (select os.survey_id, max(ss.submission_status_id) as submission_status_id from occurrence_submission os, submission_status ss - where not exists (select 1 from submission_status ss2, submission_status_type sst, occurrence_submission os2 - where os2.survey_id = os2.survey_id - and ss2.occurrence_submission_id = os2.occurrence_submission_id - and sst.submission_status_type_id = ss2.submission_status_type_id - and sst.name = api_get_character_system_constant('OCCURRENCE_SUBMISSION_STATE_PUBLISHED') - and sst.record_end_date is null) - group by os.survey_id), - published as (select os.survey_id, max(ss.submission_status_id) as submission_status_id from occurrence_submission os, submission_status ss, submission_status_type sst - where ss.submission_status_type_id = sst.submission_status_type_id - and sst.name = api_get_character_system_constant('OCCURRENCE_SUBMISSION_STATE_PUBLISHED') - and sst.record_end_date is null - group by os.survey_id) -select s.project_id project_id, np.survey_id survey_id, sst.name survey_status, ss3.event_timestamp status_event_timestamp from not_published np, submission_status ss3, submission_status_type sst, survey s - where ss3.submission_status_id = np.submission_status_id - and sst.submission_status_type_id = ss3.submission_status_type_id - and s.survey_id = np.survey_id -union -select s.project_id project_id, p.survey_id survey_id, sst.name survey_status, ss3.event_timestamp status_event_timestamp from published p, submission_status ss3, submission_status_type sst, survey s - where ss3.submission_status_id = p.submission_status_id - and sst.submission_status_type_id = ss3.submission_status_type_id - and s.survey_id = p.survey_id +-- vw_survey_status.sql + +create or replace view survey_status as +with not_published as (select os.survey_id, max(ss.submission_status_id) as submission_status_id from occurrence_submission os, submission_status ss + where not exists (select 1 from submission_status ss2, submission_status_type sst, occurrence_submission os2 + where os2.survey_id = os2.survey_id + and ss2.occurrence_submission_id = os2.occurrence_submission_id + and sst.submission_status_type_id = ss2.submission_status_type_id + and sst.name = api_get_character_system_constant('OCCURRENCE_SUBMISSION_STATE_PUBLISHED') + and sst.record_end_date is null) + group by os.survey_id), + published as (select os.survey_id, max(ss.submission_status_id) as submission_status_id from occurrence_submission os, submission_status ss, submission_status_type sst + where ss.submission_status_type_id = sst.submission_status_type_id + and sst.name = api_get_character_system_constant('OCCURRENCE_SUBMISSION_STATE_PUBLISHED') + and sst.record_end_date is null + group by os.survey_id) +select s.project_id project_id, np.survey_id survey_id, sst.name survey_status, ss3.event_timestamp status_event_timestamp from not_published np, submission_status ss3, submission_status_type sst, survey s + where ss3.submission_status_id = np.submission_status_id + and sst.submission_status_type_id = ss3.submission_status_type_id + and s.survey_id = np.survey_id +union +select s.project_id project_id, p.survey_id survey_id, sst.name survey_status, ss3.event_timestamp status_event_timestamp from published p, submission_status ss3, submission_status_type sst, survey s + where ss3.submission_status_id = p.submission_status_id + and sst.submission_status_type_id = ss3.submission_status_type_id + and s.survey_id = p.survey_id ; \ No newline at end of file