@@ -3,14 +3,58 @@ package com.ctrlhub.core.datacapture
33import com.ctrlhub.core.Api
44import com.ctrlhub.core.datacapture.resource.FormSubmissionVersion
55import com.ctrlhub.core.datacapture.response.FormSchema
6+ import com.ctrlhub.core.datacapture.response.Form
7+ import com.ctrlhub.core.iam.response.User
8+ import com.ctrlhub.core.media.response.Image
69import com.ctrlhub.core.router.Router
710import io.ktor.client.HttpClient
811import io.ktor.http.ContentType
912import com.ctrlhub.core.api.response.PaginatedList
13+ import com.ctrlhub.core.router.request.FilterOption
14+ import com.ctrlhub.core.router.request.JsonApiIncludes
15+ import com.ctrlhub.core.router.request.RequestParametersWithIncludes
16+
17+ @Suppress(" unused" )
18+ enum class FormSubmissionVersionIncludes (val key : String ) : JsonApiIncludes {
19+ Author (" author" ),
20+ Form (" form" ),
21+ Organisation (" organisation" ),
22+ Schema (" schema" ),
23+ Submission (" submission" ),
24+ PayloadImages (" payload_images" ),
25+ PayloadOperations (" payload_operations" ),
26+ PayloadProperties (" payload_properties" ),
27+ PayloadUsers (" payload_users" ),
28+ PayloadWorkOrders (" payload_work_orders" ),
29+ PayloadSchemes (" payload_schemes" );
30+
31+ override fun value (): String = key
32+ }
33+
34+ class FormSubmissionVersionRequestParameters (
35+ offset : Int = 0 ,
36+ limit : Int = 100 ,
37+ filterOptions : List <FilterOption > = emptyList(),
38+ includes : List <FormSubmissionVersionIncludes > = emptyList()
39+ ) : RequestParametersWithIncludes<FormSubmissionVersionIncludes>(
40+ offset = offset,
41+ limit = limit,
42+ filterOptions = filterOptions,
43+ includes = includes,
44+ )
1045
1146class FormSubmissionVersionsRouter (httpClient : HttpClient ) : Router(httpClient) {
1247 /* *
13- * Create a new form submission version
48+ * Create a new form submission version.
49+ *
50+ * Sends a POST request to create a submission (and implicitly its version) for the given form.
51+ *
52+ * @param organisationId the organisation UUID the form belongs to
53+ * @param formId the form UUID to create a submission for
54+ * @param schemaId the schema UUID to associate with the created version
55+ * @param payload arbitrary map representing the submission payload (field id -> value)
56+ * @return the created and hydrated FormSubmissionVersion instance
57+ * @throws Exception on network or parsing errors
1458 */
1559 suspend fun create (organisationId : String , formId : String , schemaId : String , payload : Map <String , Any >): FormSubmissionVersion {
1660 return postJsonApiResource(
@@ -31,26 +75,136 @@ class FormSubmissionVersionsRouter(httpClient: HttpClient) : Router(httpClient)
3175 }
3276
3377 /* *
34- * Get all submission versions for a given form (paginated)
78+ * Get all submission versions for a given form (paginated).
79+ *
80+ * Returns a paginated list of FormSubmissionVersion resources. Supports JSON:API include options
81+ * to hydrate related resources (author, form, schema, images, etc.) via the requestParameters.
82+ *
83+ * @param organisationId the organisation UUID
84+ * @param formId the form UUID
85+ * @param submissionId the submission UUID to list versions for
86+ * @param requestParameters optional paging, filter and include parameters
87+ * @return PaginatedList containing FormSubmissionVersion items and pagination meta
3588 */
36- suspend fun all (organisationId : String , formId : String , submissionId : String ): PaginatedList <FormSubmissionVersion > {
89+ suspend fun all (
90+ organisationId : String ,
91+ formId : String ,
92+ submissionId : String ,
93+ requestParameters : FormSubmissionVersionRequestParameters = FormSubmissionVersionRequestParameters ()
94+ ): PaginatedList <FormSubmissionVersion > {
3795 return fetchPaginatedJsonApiResources(
3896 " /v3/orgs/$organisationId /data-capture/forms/$formId /submissions/$submissionId /versions" ,
39- queryParameters = emptyMap(),
40- FormSubmissionVersion ::class .java,
41- FormSchema ::class .java
97+ requestParameters.toMap(),
98+ User ::class .java,
99+ Form ::class .java,
100+ FormSchema ::class .java,
101+ Image ::class .java
102+ )
103+ }
104+
105+ /* *
106+ * Get all submission versions for a specific submission (paginated).
107+ *
108+ * Overload that lists versions by submission id without a form id in the path.
109+ *
110+ * @param organisationId the organisation UUID
111+ * @param submissionId the submission UUID to list versions for
112+ * @param requestParameters optional paging, filter and include parameters
113+ * @return PaginatedList containing FormSubmissionVersion items and pagination meta
114+ */
115+ suspend fun all (
116+ organisationId : String ,
117+ submissionId : String ,
118+ requestParameters : FormSubmissionVersionRequestParameters = FormSubmissionVersionRequestParameters ()
119+ ): PaginatedList <FormSubmissionVersion > {
120+ return fetchPaginatedJsonApiResources(
121+ " /v3/orgs/$organisationId /data-capture/submissions/$submissionId /versions" ,
122+ requestParameters.toMap(),
123+ User ::class .java,
124+ Form ::class .java,
125+ FormSchema ::class .java,
126+ Image ::class .java
127+ )
128+ }
129+
130+ /* *
131+ * Get all form submission versions across an organisation (paginated).
132+ *
133+ * Useful for admin-style listing of all submission versions. Supports includes via requestParameters.
134+ *
135+ * @param organisationId the organisation UUID
136+ * @param requestParameters optional paging, filter and include parameters
137+ * @return PaginatedList containing FormSubmissionVersion items and pagination meta
138+ */
139+ suspend fun all (
140+ organisationId : String ,
141+ requestParameters : FormSubmissionVersionRequestParameters = FormSubmissionVersionRequestParameters ()
142+ ): PaginatedList <FormSubmissionVersion > {
143+ return fetchPaginatedJsonApiResources(
144+ " /v3/orgs/$organisationId /data-capture/form-submission-versions" ,
145+ requestParameters.toMap(),
146+ User ::class .java,
147+ Form ::class .java,
148+ FormSchema ::class .java,
149+ Image ::class .java
42150 )
43151 }
44152
45153 /* *
46- * Get a single submission version
154+ * Get a single submission version.
155+ *
156+ * Fetches and hydrates a single FormSubmissionVersion resource by id. Supports JSON:API include
157+ * parameters via requestParameters to hydrate related resources.
158+ *
159+ * @param organisationId the organisation UUID
160+ * @param formId the form UUID the submission belongs to
161+ * @param submissionId the submission UUID
162+ * @param versionId the version UUID to fetch
163+ * @param requestParameters optional paging, filter and include parameters
164+ * @return the hydrated FormSubmissionVersion
47165 */
48- suspend fun one (organisationId : String , formId : String , submissionId : String , versionId : String ): FormSubmissionVersion {
166+ suspend fun one (
167+ organisationId : String ,
168+ formId : String ,
169+ submissionId : String ,
170+ versionId : String ,
171+ requestParameters : FormSubmissionVersionRequestParameters = FormSubmissionVersionRequestParameters ()
172+ ): FormSubmissionVersion {
49173 return fetchJsonApiResource(
50174 " /v3/orgs/$organisationId /data-capture/forms/$formId /submissions/$submissionId /versions/$versionId " ,
51- queryParameters = emptyMap(),
52- FormSubmissionVersion ::class .java,
53- FormSchema ::class .java
175+ requestParameters.toMap(),
176+ User ::class .java,
177+ Form ::class .java,
178+ FormSchema ::class .java,
179+ Image ::class .java
180+ )
181+ }
182+
183+ /* *
184+ * Get a single submission version by submission id (no form in path).
185+ *
186+ * Fetches and hydrates a single FormSubmissionVersion resource by id using the endpoint that does
187+ * not include the form id in the path.
188+ *
189+ * @param organisationId the organisation UUID
190+ * @param submissionId the submission UUID
191+ * @param versionId the version UUID to fetch
192+ * @param requestParameters optional paging, filter and include parameters
193+ * @return the hydrated FormSubmissionVersion
194+ */
195+ suspend fun one (
196+ organisationId : String ,
197+ submissionId : String ,
198+ versionId : String ,
199+ requestParameters : FormSubmissionVersionRequestParameters = FormSubmissionVersionRequestParameters ()
200+ ): FormSubmissionVersion {
201+ return fetchJsonApiResource(
202+ " /v3/orgs/$organisationId /data-capture/submissions/$submissionId /versions/$versionId " ,
203+ requestParameters.toMap(),
204+ User ::class .java,
205+ Form ::class .java,
206+ FormSchema ::class .java,
207+ Image ::class .java
54208 )
55209 }
56210}
0 commit comments