Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 18 additions & 14 deletions lib/model/query/forms.js
Original file line number Diff line number Diff line change
Expand Up @@ -105,20 +105,24 @@ const _insertFormFields = (fields, formId, schemaId) => async ({ run }) => {

const _createNew = (form, def, project) => ({ oneFirst, Forms }) =>
oneFirst(sql`
with sch as
(insert into form_schemas (id)
values (default)
returning *),
def as
(insert into form_defs ("formId", "schemaId", xml, name, hash, sha, sha256, version, "keyId", "xlsBlobId", "draftToken", "enketoId", "createdAt")
select nextval(pg_get_serial_sequence('forms', 'id')), sch.id, ${form.xml}, ${def.name}, ${def.hash}, ${def.sha}, ${def.sha256}, ${def.version}, ${def.keyId}, ${form.xls.xlsBlobId || null}, ${def.draftToken || null}, ${def.enketoId || null}, clock_timestamp()
from sch
returning *),
form as
(insert into forms (id, "xmlFormId", state, "projectId", "draftDefId", "acteeId", "enketoId", "enketoOnceId", "createdAt", "webformsEnabled")
select def."formId", ${form.xmlFormId}, ${form.state || 'open'}, ${project.id}, def.id, ${form.acteeId}, ${form.enketoId || null}, ${form.enketoOnceId || null}, def."createdAt", ${form.webformsEnabled || false} from def
returning forms.*)
select id from form`)
WITH
shared AS (
SELECT nextval(pg_get_serial_sequence('forms', 'id')) AS form_id
, nextval(pg_get_serial_sequence('form_defs', 'id')) AS form_def_id
, clock_timestamp() AS created_at
),
sch AS (INSERT INTO form_schemas DEFAULT VALUES RETURNING id),
def AS (
INSERT INTO form_defs (id, "formId", "schemaId", xml, name, hash, sha, sha256, version, "keyId", "xlsBlobId", "draftToken", "enketoId", "createdAt")
SELECT form_def_id, form_id, sch.id, ${form.xml}, ${def.name}, ${def.hash}, ${def.sha}, ${def.sha256}, ${def.version}, ${def.keyId}, ${form.xls.xlsBlobId || null}, ${def.draftToken || null}, ${def.enketoId || null}, created_at
FROM shared, sch
RETURNING *
)
INSERT INTO forms (id, "xmlFormId", state, "projectId", "draftDefId", "acteeId", "enketoId", "enketoOnceId", "createdAt", "webformsEnabled")
SELECT form_id, ${form.xmlFormId}, ${form.state || 'open'}, ${project.id}, form_def_id, ${form.acteeId}, ${form.enketoId || null}, ${form.enketoOnceId || null}, created_at, ${form.webformsEnabled || false}
FROM shared
RETURNING id
`)
.then(() => Forms.getByProjectAndXmlFormId(project.id, form.xmlFormId, Form.DraftVersion))
.then((option) => option.get());

Expand Down