You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Implement all 11 DataStreams methods in url_builder.ts and add DataStreams method tests to url_builder.spec.ts. DataStreams is the sixth Phase 2 resource type, the first Part 2 resource, and introduces temporal query parameters (phenomenonTime, resultTime) and schema retrieval.
Add 11 DataStreams methods with resource validation
src/ogc-api/csapi/url_builder.spec.ts
Modify
~45–55 added
Add DataStreams method tests
Blueprint Reference
Follow the Systems methods pattern established in Issue #5 (same file). Also reference the EDR pattern in src/ogc-api/edr/url_builder.ts (562 lines) for resource validation, URL construction, and query parameter appending. The schema endpoint (getDataStreamSchema) and observation creation (createObservation) are new patterns not present in Part 1 resources.
Scope — What to Implement
11 DataStreams Methods
Each method validates resource availability (~2 lines), builds a URL using buildResourceUrl(), appends query parameters using buildQueryString(), and returns the constructed URL string.
Collection query:
getDataStreams(options?: DataStreamQueryOptions): string — GET /datastreams with pagination, filtering, temporal params, sorting
Single resource:
getDataStream(id: string, options?): string — GET /datastreams/{id}
CRUD operations:
createDataStream(body: object): string — POST /datastreams
updateDataStream(id: string, body: object): string — PUT /datastreams/{id}
getDataStreamSchema(id: string, options?): string — GET /datastreams/{id}/schema (note: obsFormat parameter is required per Part 2, Req 11; omitting it returns 400)
Observation sub-resource:
getDataStreamObservations(id: string, options?): string — GET /datastreams/{id}/observations (supports cursor-based pagination)
createObservation(datastreamId: string, body: object): string — POST /datastreams/{datastreamId}/observations
Association links:
getDataStreamSystems(id: string, options?): string — GET /datastreams/{id}/systems (systems producing this stream)
getDataStreamProcedures(id: string, options?): string — GET /datastreams/{id}/procedures (procedures for this stream)
History:
getDataStreamHistory(id: string, options?): string — GET /datastreams/{id}/history
Additionally, the getDataStreamObservations sub-resource method supports Part 2 temporal parameters: phenomenonTime, resultTime (including the latest special value for resultTime), and cursor-based pagination (cursor instead of offset).
All parameters are serialised by the shared buildQueryString() helper (Issue #3). Temporal support: datetime (validTime), phenomenonTime, resultTime — see Guide §6 temporal applicability matrix.
JSDoc Requirements
Document each method with @param for all parameters, @returns description, and usage example
Add @see links to OGC CSAPI Part 2 specification sections for DataStreams endpoints
Document the obsFormat requirement on getDataStreamSchema
Document temporal query patterns (phenomenonTime, resultTime, latest special value)
Follow the JSDoc style in src/ogc-api/edr/url_builder.ts and the Systems methods from Issue Phase 2.1: Systems Methods #5
Task
Implement all 11 DataStreams methods in
url_builder.tsand add DataStreams method tests tourl_builder.spec.ts. DataStreams is the sixth Phase 2 resource type, the first Part 2 resource, and introduces temporal query parameters (phenomenonTime,resultTime) and schema retrieval.ROADMAP Reference: Phase 2, Task 6 — DataStreams Methods (~2–2.5 hours implementation + ~0.5 hour testing, Medium-High complexity)
Files to Create or Modify
src/ogc-api/csapi/url_builder.tssrc/ogc-api/csapi/url_builder.spec.tsBlueprint Reference
Follow the Systems methods pattern established in Issue #5 (same file). Also reference the EDR pattern in
src/ogc-api/edr/url_builder.ts(562 lines) for resource validation, URL construction, and query parameter appending. The schema endpoint (getDataStreamSchema) and observation creation (createObservation) are new patterns not present in Part 1 resources.Scope — What to Implement
11 DataStreams Methods
Each method validates resource availability (~2 lines), builds a URL using
buildResourceUrl(), appends query parameters usingbuildQueryString(), and returns the constructed URL string.Collection query:
getDataStreams(options?: DataStreamQueryOptions): string—GET /datastreamswith pagination, filtering, temporal params, sortingSingle resource:
getDataStream(id: string, options?): string—GET /datastreams/{id}CRUD operations:
createDataStream(body: object): string—POST /datastreamsupdateDataStream(id: string, body: object): string—PUT /datastreams/{id}deleteDataStream(id: string): string—DELETE /datastreams/{id}Schema retrieval:
getDataStreamSchema(id: string, options?): string—GET /datastreams/{id}/schema(note:obsFormatparameter is required per Part 2, Req 11; omitting it returns 400)Observation sub-resource:
getDataStreamObservations(id: string, options?): string—GET /datastreams/{id}/observations(supports cursor-based pagination)createObservation(datastreamId: string, body: object): string—POST /datastreams/{datastreamId}/observationsAssociation links:
getDataStreamSystems(id: string, options?): string—GET /datastreams/{id}/systems(systems producing this stream)getDataStreamProcedures(id: string, options?): string—GET /datastreams/{id}/procedures(procedures for this stream)History:
getDataStreamHistory(id: string, options?): string—GET /datastreams/{id}/historyDataStreams Query Parameters
DataStreams support:
system,observedProperty,foi,samplingFeature,procedure,datetime,id,uid,q, property filters,limit,offset,f,sortBy,sortOrder.Additionally, the
getDataStreamObservationssub-resource method supports Part 2 temporal parameters:phenomenonTime,resultTime(including thelatestspecial value forresultTime), and cursor-based pagination (cursorinstead ofoffset).All parameters are serialised by the shared
buildQueryString()helper (Issue #3). Temporal support:datetime(validTime),phenomenonTime,resultTime— see Guide §6 temporal applicability matrix.JSDoc Requirements
@paramfor all parameters,@returnsdescription, and usage example@seelinks to OGC CSAPI Part 2 specification sections for DataStreams endpointsobsFormatrequirement ongetDataStreamSchemaphenomenonTime,resultTime,latestspecial value)src/ogc-api/edr/url_builder.tsand the Systems methods from Issue Phase 2.1: Systems Methods #5Testing Requirements
src/ogc-api/csapi/url_builder.spec.ts(~45–55 lines)getDataStreamswithphenomenonTime,resultTimeparameters)getDataStreamSchemawithobsFormatparameter)createObservationwith datastream ID)getDataStreamObservationsdatastreamsis not inavailableResourcesthrows an errorsrc/ogc-api/edr/url_builder.spec.tsScope — What NOT to Touch
model.ts— type definitions belong to Issue Phase 1.1: Create Type System (csapi/model.ts) #1helpers.ts— helper utilities belong to Issue Phase 1.2: Create Helper Utilities (csapi/helpers.ts) #2buildResourceUrl(),buildQueryString(),extractAvailableResources(), oravailableResources— those belong to Issue Phase 1.3: Create Stub QueryBuilder (csapi/url_builder.ts) #3endpoint.ts,info.ts, orsrc/index.ts— integration belongs to Issue Phase 1.4: Integrate with OgcApiEndpoint #4Acceptance Criteria
url_builder.tscontains all 11 DataStreams methods listed abovebuildResourceUrl()andbuildQueryString()helpersgetDataStreamSchemacorrectly includes theobsFormatparameter@param,@returns,@seeurl_builder.spec.tscontains DataStreams tests covering temporal filtering, schema retrieval, observation creation, cursor pagination, CRUD, and resource validation (~45–55 lines)npm test)Dependencies
Blocked by: Issue #1 (Type System — provides
DataStreamQueryOptionsand resource types), Issue #2 (Helper Utilities — provides encoding helpers includingencodeDateTime), Issue #3 (Stub QueryBuilder — provides constructor,buildResourceUrl,buildQueryString,availableResources), Issue #5 (Systems Methods — establishes the pattern)Blocks: Issue #11 (Observations Methods — observes through DataStreams), Issues #12–#13 (Control Streams and Commands)
Operational Constraints
Key constraints for this task:
References
Read these documents before starting implementation. They are ordered by priority.
Primary References (must read)
docs/planning/csapi-implementation-guide.mddocs/planning/csapi-implementation-guide.mddocs/planning/csapi-implementation-guide.mdsrc/ogc-api/edr/url_builder.tssrc/ogc-api/edr/url_builder.spec.tsdocs/planning/ROADMAP.mdUpstream Type/Import References (files this task imports from)
src/ogc-api/csapi/model.tsDataStreamQueryOptions,ObservationQueryOptions,CSAPIResourceType(created by Issue #1)src/ogc-api/csapi/helpers.tsencodeDateTime,encodeArray(created by Issue #2)Research References (context, not required reading)
docs/research/requirements/csapi-part2-requirements.mddocs/research/requirements/csapi-query-parameters.mddocs/research/upstream/pr114-analysis.mdSpecification References (for
@seelinks and field accuracy)Convention Quick Reference
.jsextension for relative importsimport { X } from './file.js'import typefor interfaces/typesimport type { Y } from './model.js'export interface Z { ... }as constarrays for enum-like valuesexport const XTypes = [...] as constglobalThis.fetch = jest.fn()