Skip to content
Snippets Groups Projects
Commit ca123a7c authored by Remco Tukker's avatar Remco Tukker
Browse files

add status columns to survey and response

parent eca64cbf
No related branches found
No related tags found
1 merge request!52Feature/admin workflow surveys page
......@@ -19,7 +19,7 @@ from compendium_v2.db import db
from compendium_v2.config import load
from compendium_v2.survey_db import model as survey_model
from compendium_v2.db.model import NREN
from compendium_v2.db.survey_model import Survey, SurveyResponse
from compendium_v2.db.survey_model import Survey, SurveyResponse, SurveyStatus, ResponseStatus
from compendium_v2.conversion import mapping
......@@ -120,7 +120,7 @@ def _cli(app):
Survey.year == 2022
))
survey = Survey(year=2022, survey={})
survey = Survey(year=2022, survey={}, status=SurveyStatus.published)
db.session.add(survey)
for nren, answers in nren_surveys.items():
......@@ -130,7 +130,8 @@ def _cli(app):
nren_id=nren.id,
survey_year=2022,
survey=survey,
answers=survey_dict
answers=survey_dict,
status=ResponseStatus.checked
)
db.session.add(response)
......
......@@ -3,7 +3,8 @@ from __future__ import annotations
import logging
from typing import Dict, Any
from enum import Enum
from typing import Dict, Any, List
from typing_extensions import Annotated
from sqlalchemy.orm import Mapped, mapped_column, relationship
......@@ -28,11 +29,24 @@ json = Annotated[Dict[str, Any], mapped_column(JSON)]
# See https://github.com/pallets-eco/flask-sqlalchemy/issues/1140
# mypy: disable-error-code="name-defined"
class SurveyStatus(Enum):
closed = "closed"
open = "open"
published = "published"
class ResponseStatus(Enum):
started = "started"
completed = "completed"
checked = "checked"
class Survey(db.Model):
__tablename__ = 'survey'
year: Mapped[int_pk]
survey: Mapped[json]
# status column?
responses: Mapped[List[SurveyResponse]] = relationship(lazy='joined', back_populates="survey")
status: Mapped[SurveyStatus]
class SurveyResponse(db.Model):
......@@ -40,6 +54,6 @@ class SurveyResponse(db.Model):
nren_id: Mapped[int_pk_fkNREN]
nren: Mapped[NREN] = relationship(lazy='joined')
survey_year: Mapped[int_pk_fkSurvey]
survey: Mapped[Survey] = relationship(lazy='joined')
survey: Mapped[Survey] = relationship(lazy='joined', back_populates="responses")
answers: Mapped[json]
# completed column?? I think we need that..
status: Mapped[ResponseStatus]
"""add status to survey and responses
Revision ID: e40b450835b1
Revises: 030134b436a9
Create Date: 2023-07-14 16:07:27.688251
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = 'e40b450835b1'
down_revision = '030134b436a9'
branch_labels = None
depends_on = None
def upgrade():
op.execute("DELETE FROM survey_response")
op.execute("DELETE FROM survey")
op.execute("CREATE TYPE surveystatus AS ENUM ('closed', 'open', 'published')")
op.execute("CREATE TYPE responsestatus AS ENUM ('started', 'completed', 'checked')")
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('survey', schema=None) as batch_op:
batch_op.add_column(sa.Column('status', sa.Enum('closed', 'open', 'published', name='surveystatus'), nullable=False))
with op.batch_alter_table('survey_response', schema=None) as batch_op:
batch_op.add_column(sa.Column('status', sa.Enum('started', 'completed', 'checked', name='responsestatus'), nullable=False))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('survey_response', schema=None) as batch_op:
batch_op.drop_column('status')
with op.batch_alter_table('survey', schema=None) as batch_op:
batch_op.drop_column('status')
# ### end Alembic commands ###
if op.get_context().dialect.name == 'postgresql':
op.execute("DROP TYPE surveystatus")
op.execute("DROP TYPE responsestatus")
......@@ -6,10 +6,11 @@ from typing import Any, Optional
from flask import Blueprint, jsonify, request
from sqlalchemy import select
from sqlalchemy.orm import joinedload, load_only
from compendium_v2.db import db
from compendium_v2.db.model import NREN
from compendium_v2.db.survey_model import Survey, SurveyResponse
from compendium_v2.db.survey_model import Survey, SurveyResponse, SurveyStatus, ResponseStatus
from compendium_v2.routes import common
......@@ -97,14 +98,14 @@ def save_survey(nren_name) -> Any:
year = 1989
survey = db.session.scalar(select(Survey).where(Survey.year == year))
if survey is None:
survey = Survey(year=year, survey={})
survey = Survey(year=year, survey={}, status=SurveyStatus.open)
db.session.add(survey)
response = db.session.scalar(
select(SurveyResponse).where(SurveyResponse.survey_year == year).where(SurveyResponse.nren_id == nren.id)
)
if response is None:
response = SurveyResponse(survey_year=year, nren_id=nren.id)
response = SurveyResponse(survey_year=year, nren_id=nren.id, status=ResponseStatus.started)
db.session.add(response)
save_survey = request.json
......@@ -117,6 +118,8 @@ def save_survey(nren_name) -> Any:
"verification_status": save_survey["verification_status"]
}
# TODO set status on complete or checked when necessary
db.session.commit()
return {'success': True}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment