Skip to content

Commit 2c6591a

Browse files
mauberti-bcNickPhuraMacDeluca
authored
SIMSBIOHUB-647: Create/Edit Observations Page (#1444)
* New Create and Edit Observations page. * Add support for multiple subcounts per observation. * Update existing observation endpoints/services and UI components to work with subcounts (rather than observations) * Migration to move 'environment' attributes from the subcount record to the observation record * Migration to move 'sign_id' from the subcount record to the observation record. * Misc cleanup/fixes --------- Co-authored-by: Nick Phura <nickphura@gmail.com> Co-authored-by: Mac Deluca <Mac.Deluca@quartech.com>
1 parent 24f9b5a commit 2c6591a

File tree

172 files changed

+10014
-6912
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

172 files changed

+10014
-6912
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { z } from 'zod';
2+
3+
/**
4+
* Environment Qualitative Model.
5+
*
6+
* @description Data model for `environment_qualitative`.
7+
*/
8+
export const EnvironmentQualitativeModel = z.object({
9+
environment_qualitative_id: z.string().uuid(),
10+
name: z.string(),
11+
description: z.string().nullable(),
12+
record_end_date: z.string().nullable(),
13+
create_date: z.string(),
14+
create_user: z.number(),
15+
update_date: z.string().nullable(),
16+
update_user: z.number().nullable(),
17+
revision_count: z.number()
18+
});
19+
20+
export type EnvironmentQualitativeModel = z.infer<typeof EnvironmentQualitativeModel>;
21+
22+
/**
23+
* Environment Qualitative Record.
24+
*
25+
* @description Data record for `environment_qualitative`.
26+
*/
27+
export const EnvironmentQualitativeRecord = EnvironmentQualitativeModel.omit({
28+
create_date: true,
29+
create_user: true,
30+
update_date: true,
31+
update_user: true,
32+
revision_count: true
33+
});
34+
35+
export type EnvironmentQualitativeRecord = z.infer<typeof EnvironmentQualitativeRecord>;
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { z } from 'zod';
2+
3+
/**
4+
* Environment Qualitative Option Model.
5+
*
6+
* @description Data model for `environment_qualitative_option`.
7+
*/
8+
export const EnvironmentQualitativeOptionModel = z.object({
9+
environment_qualitative_option_id: z.string(),
10+
environment_qualitative_id: z.string(),
11+
name: z.string(),
12+
description: z.string().nullable(),
13+
record_end_date: z.string().nullable(),
14+
create_date: z.string(),
15+
create_user: z.number(),
16+
update_date: z.string().nullable(),
17+
update_user: z.number().nullable(),
18+
revision_count: z.number()
19+
});
20+
21+
export type EnvironmentQualitativeOptionModel = z.infer<typeof EnvironmentQualitativeOptionModel>;
22+
23+
/**
24+
* Environment Qualitative Option Record.
25+
*
26+
* @description Data record for `environment_qualitative_option`.
27+
*/
28+
export const EnvironmentQualitativeOptionRecord = EnvironmentQualitativeOptionModel.omit({
29+
create_date: true,
30+
create_user: true,
31+
update_date: true,
32+
update_user: true,
33+
revision_count: true
34+
});
35+
36+
export type EnvironmentQualitativeOptionRecord = z.infer<typeof EnvironmentQualitativeOptionRecord>;
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { z } from 'zod';
2+
import { EnvironmentUnit } from '../database-units/environment_unit';
3+
4+
/**
5+
* Environment Quantitative Model.
6+
*
7+
* @description Data model for `environment_quantitative`.
8+
*/
9+
export const EnvironmentQuantitativeModel = z.object({
10+
environment_quantitative_id: z.string().uuid(),
11+
name: z.string(),
12+
description: z.string().nullable(),
13+
min: z.number().nullable(),
14+
max: z.number().nullable(),
15+
unit: EnvironmentUnit.nullable(),
16+
record_end_date: z.string().nullable(),
17+
create_date: z.string(),
18+
create_user: z.number(),
19+
update_date: z.string().nullable(),
20+
update_user: z.number().nullable(),
21+
revision_count: z.number()
22+
});
23+
24+
export type EnvironmentQuantitativeModel = z.infer<typeof EnvironmentQuantitativeModel>;
25+
26+
/**
27+
* Environment Quantitative Record.
28+
*
29+
* @description Data record for `environment_quantitative`.
30+
*/
31+
export const EnvironmentQuantitativeRecord = EnvironmentQuantitativeModel.omit({
32+
create_date: true,
33+
create_user: true,
34+
update_date: true,
35+
update_user: true,
36+
revision_count: true
37+
});
38+
39+
export type EnvironmentQuantitativeRecord = z.infer<typeof EnvironmentQuantitativeRecord>;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { z } from 'zod';
2+
3+
/**
4+
* Observation Environment Qualitative Model.
5+
*
6+
* @description Data model for `observation_environment_qualitative`.
7+
*/
8+
export const ObservationEnvironmentQualitativeModel = z.object({
9+
observation_environment_qualitative_id: z.number(),
10+
survey_observation_id: z.number(),
11+
environment_qualitative_id: z.string().uuid(),
12+
environment_qualitative_option_id: z.string().uuid(),
13+
create_date: z.string(),
14+
create_user: z.number(),
15+
update_date: z.string().nullable(),
16+
update_user: z.number().nullable(),
17+
revision_count: z.number()
18+
});
19+
20+
export type ObservationEnvironmentQualitativeModel = z.infer<typeof ObservationEnvironmentQualitativeModel>;
21+
22+
/**
23+
* Observation Environment Qualitative Record.
24+
*
25+
* @description Data record for `observation_environment_qualitative`.
26+
*/
27+
export const ObservationEnvironmentQualitativeRecord = ObservationEnvironmentQualitativeModel.omit({
28+
create_date: true,
29+
create_user: true,
30+
update_date: true,
31+
update_user: true,
32+
revision_count: true
33+
});
34+
35+
export type ObservationEnvironmentQualitativeRecord = z.infer<typeof ObservationEnvironmentQualitativeRecord>;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { z } from 'zod';
2+
3+
/**
4+
* Observation Environment Quantitative Model.
5+
*
6+
* @description Data model for `observation_environment_quantitative`.
7+
*/
8+
export const ObservationEnvironmentQuantitativeModel = z.object({
9+
observation_environment_quantitative_id: z.number(),
10+
survey_observation_id: z.number(),
11+
environment_quantitative_id: z.string().uuid(),
12+
value: z.number(),
13+
create_date: z.string(),
14+
create_user: z.number(),
15+
update_date: z.string().nullable(),
16+
update_user: z.number().nullable(),
17+
revision_count: z.number()
18+
});
19+
20+
export type ObservationEnvironmentQuantitativeModel = z.infer<typeof ObservationEnvironmentQuantitativeModel>;
21+
22+
/**
23+
* Observation Environment Quantitative Record.
24+
*
25+
* @description Data record for `observation_environment_quantitative`.
26+
*/
27+
export const ObservationEnvironmentQuantitativeRecord = ObservationEnvironmentQuantitativeModel.omit({
28+
create_date: true,
29+
create_user: true,
30+
update_date: true,
31+
update_user: true,
32+
revision_count: true
33+
});
34+
35+
export type ObservationEnvironmentQuantitativeRecord = z.infer<typeof ObservationEnvironmentQuantitativeRecord>;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { z } from 'zod';
2+
3+
/**
4+
* Observation Sign Model.
5+
*
6+
* @description Data model for `observation_sign`.
7+
*/
8+
export const ObservationSignModel = z.object({
9+
observation_sign_id: z.number(),
10+
name: z.string(),
11+
description: z.string().nullable(),
12+
record_end_date: z.string().nullable(),
13+
create_date: z.string(),
14+
create_user: z.number(),
15+
update_date: z.string().nullable(),
16+
update_user: z.number().nullable(),
17+
revision_count: z.number()
18+
});
19+
20+
export type ObservationSignModel = z.infer<typeof ObservationSignModel>;
21+
22+
/**
23+
* Observation Sign Record.
24+
*
25+
* @description Data record for `observation_sign`.
26+
*/
27+
export const ObservationSignRecord = ObservationSignModel.omit({
28+
create_date: true,
29+
create_user: true,
30+
update_date: true,
31+
update_user: true,
32+
revision_count: true
33+
});
34+
35+
export type ObservationSignRecord = z.infer<typeof ObservationSignRecord>;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { z } from 'zod';
2+
3+
/**
4+
* Observation Subcount Model.
5+
*
6+
* @description Data model for `observation_subcount`.
7+
*/
8+
export const ObservationSubcountModel = z.object({
9+
observation_subcount_id: z.number(),
10+
survey_observation_id: z.number(),
11+
subcount: z.number(),
12+
comment: z.string().nullable(),
13+
create_date: z.string(),
14+
create_user: z.number(),
15+
update_date: z.string().nullable(),
16+
update_user: z.number().nullable(),
17+
revision_count: z.number()
18+
});
19+
20+
export type ObservationSubcountModel = z.infer<typeof ObservationSubcountModel>;
21+
22+
/**
23+
* Observation Subcount Record.
24+
*
25+
* @description Data record for `observation_subcount`.
26+
*/
27+
export const ObservationSubcountRecord = ObservationSubcountModel.omit({
28+
create_date: true,
29+
create_user: true,
30+
update_date: true,
31+
update_user: true,
32+
revision_count: true
33+
});
34+
35+
export type ObservationSubcountRecord = z.infer<typeof ObservationSubcountRecord>;
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { z } from 'zod';
2+
3+
/**
4+
* Subcount Critter Model.
5+
*
6+
* @description Data model for `subcount_critter`.
7+
*/
8+
export const SubcountCritterModel = z.object({
9+
subcount_critter_id: z.number(),
10+
observation_subcount_id: z.number(),
11+
critter_id: z.number(),
12+
create_date: z.string(),
13+
create_user: z.number(),
14+
update_date: z.string().nullable(),
15+
update_user: z.number().nullable(),
16+
revision_count: z.number()
17+
});
18+
19+
export type SubcountCritterModel = z.infer<typeof SubcountCritterModel>;
20+
21+
/**
22+
* Subcount Critter Record.
23+
*
24+
* @description Data record for `subcount_critter`.
25+
*/
26+
export const SubcountCritterRecord = SubcountCritterModel.omit({
27+
create_date: true,
28+
create_user: true,
29+
update_date: true,
30+
update_user: true,
31+
revision_count: true
32+
});
33+
34+
export type SubcountCritterRecord = z.infer<typeof SubcountCritterRecord>;

api/src/database-models/survey_observation.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export const SurveyObservationModel = z.object({
1616
count: z.number(),
1717
observation_time: z.string().nullable(),
1818
observation_date: z.string().nullable(),
19+
observation_sign_id: z.number().nullable(),
1920
create_date: z.string(),
2021
create_user: z.number(),
2122
update_date: z.string().nullable(),
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { z } from 'zod';
2+
3+
/**
4+
* Environment Unit Data Type.
5+
*
6+
* @description Data type for `environment_unit`.
7+
*/
8+
export const EnvironmentUnit = z.enum([
9+
'millimeter',
10+
'centimeter',
11+
'meter',
12+
'milligram',
13+
'gram',
14+
'kilogram',
15+
'percent',
16+
'celsius',
17+
'ppt',
18+
'SCF',
19+
'degrees',
20+
'pH'
21+
]);
22+
23+
export type EnvironmentUnit = z.infer<typeof EnvironmentUnit>;

api/src/models/biohub-create.test.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ describe('PostSurveyObservationToBiohubObject', () => {
2424
itis_tsn: 1,
2525
itis_scientific_name: 'itis_scientific_name',
2626
observation_time: 'observation_time',
27-
observation_date: 'observation_date'
27+
observation_date: 'observation_date',
28+
observation_sign_id: 1
2829
};
2930

3031
before(() => {
@@ -81,7 +82,8 @@ describe('PostSurveyToBiohubObject', () => {
8182
itis_tsn: 1,
8283
itis_scientific_name: 'itis_scientific_name',
8384
observation_time: 'observation_time',
84-
observation_date: 'observation_date'
85+
observation_date: 'observation_date',
86+
observation_sign_id: 1
8587
};
8688

8789
const survey_obj: GetSurveyData = {
@@ -153,7 +155,8 @@ describe('PostSurveySubmissionToBioHubObject', () => {
153155
itis_tsn: 2,
154156
itis_scientific_name: 'itis_scientific_name',
155157
observation_time: 'observation_time',
156-
observation_date: 'observation_date'
158+
observation_date: 'observation_date',
159+
observation_sign_id: 1
157160
}
158161
];
159162

0 commit comments

Comments
 (0)