diff --git a/Changelog.md b/Changelog.md index 9978a7964e8bd9c7f508b373a21c847d3128cb17..df185b620a76c08ebd6e157c6a8097a63ebd8e48 100644 --- a/Changelog.md +++ b/Changelog.md @@ -2,6 +2,9 @@ All notable changes to this project will be documented in this file. +## [0.44] - 2023-12-07 +- COMP-329: User getting redirected with wrong year of survey + ## [0.43] - 2023-12-07 - COMP-306: Renamed PIONEER to PSNC - COMP-268: Renamed ANAS to AzScienceNet diff --git a/compendium_v2/routes/survey.py b/compendium_v2/routes/survey.py index 35766d19748433c9c1e82a547cf6bb25011f2d7b..f11c28e55fa7d6ff3cc77cdc164dabde57ff69ef 100644 --- a/compendium_v2/routes/survey.py +++ b/compendium_v2/routes/survey.py @@ -46,6 +46,42 @@ LIST_SURVEYS_RESPONSE_SCHEMA = { 'items': {'$ref': '#/definitions/survey'} } +SURVEY_ACTIVE_YEAR_RESPONSE_SCHEMA = { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": { + "year": { + "type": "string" + } + }, + "required": ["year"], + "additionalProperties": False +} + + +@routes.route('/active/year', methods=['GET']) +@common.require_accepts_json +@login_required +def get_active_survey_year() -> Any: + """ + retrieve a year of latest active survey + + response will be formatted as: + + .. asjson:: + compendium_v2.routes.survey.SURVEY_ACTIVE_YEAR_RESPONSE_SCHEMA + + """ + + survey_record = db.session.query(Survey.year).filter( + Survey.status == SurveyStatus.open + ).order_by(Survey.year.desc()).first() + if survey_record: + year = survey_record.year + return {'year': year} + else: + return {'message': 'No open survey found.'}, 404 + @routes.route('/list', methods=['GET']) @common.require_accepts_json diff --git a/setup.py b/setup.py index dd4fdc87ff4a5364c141b2ab7307a6beac6ef64d..e84798caaa2ecbbd0741971f6bfedc08c4024dbd 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name='compendium-v2', - version="0.43", + version="0.44", author='GEANT', author_email='swd@geant.org', description='Flask and React project for displaying ' diff --git a/survey-frontend/src/Landing.tsx b/survey-frontend/src/Landing.tsx index c57e21ec39253d08d896b8c0c9ff2a201b62c08d..b18d24640302a06b5b2cd1d581010147cabb809d 100644 --- a/survey-frontend/src/Landing.tsx +++ b/survey-frontend/src/Landing.tsx @@ -2,7 +2,7 @@ import React, { ReactElement, useContext, useState, useEffect } from "react"; import { useNavigate, Link } from "react-router-dom"; import { Table, Container, Row } from "react-bootstrap"; import { userContext } from "./providers/UserProvider"; -import { fetchSurveys } from "./api/survey"; +import { fetchSurveys, fetchActiveSurveyYear } from "./api/survey"; import { Survey } from "./api/types"; @@ -16,9 +16,14 @@ function Landing(): ReactElement { const isAdmin = loggedIn ? user.permissions.admin : false; const isObserver = loggedIn ? user.role === 'observer' : false; - const moveToSurvey = () => { - const currentYear = new Date().getFullYear(); - navigate(`/survey/response/${currentYear}/${activeNren}`); + const moveToSurvey = () => { + const [activeSurveyYear, setActiveSurveyYear] = useState<string>() + useEffect(() => { + fetchActiveSurveyYear().then((year) => { + setActiveSurveyYear(year); + }); + }, []); + navigate(`/survey/response/${activeSurveyYear}/${activeNren}`); return <></> } diff --git a/survey-frontend/src/api/survey.ts b/survey-frontend/src/api/survey.ts index 5f4eff5a2194154f5411405badb9114b1ec96111..d0762be27a138138daf20d5c78e0de2807defffa 100644 --- a/survey-frontend/src/api/survey.ts +++ b/survey-frontend/src/api/survey.ts @@ -9,4 +9,21 @@ export async function fetchSurveys(): Promise<Survey[]> { console.log('failed fetching survey list..'); return []; } -} \ No newline at end of file +} + +export async function fetchActiveSurveyYear(): Promise<string> { + try { + const response = await fetch('/api/survey/active/year'); + const data = await response.json(); + if ('year' in data) { + const year = data.year; + return year.toString(); + } else { + console.log('Invalid response format: Failed fetching active survey year.'); + return ""; + } + } catch (error) { + console.error('Failed fetching active survey year:', error); + return ""; + } +}