diff --git a/api/blueprints/RoadmapAPI.py b/api/blueprints/RoadmapAPI.py index e6ab3f1045234f0bb0e05ddd09b11c8294da87c7..629d8565b2e41ada12ed8b38469bc4a5a7cc5969 100644 --- a/api/blueprints/RoadmapAPI.py +++ b/api/blueprints/RoadmapAPI.py @@ -11,6 +11,20 @@ class RoadmapParameters(Enum): ID = 'ID' PROJECT_NAME = 'Projectname' HIDDEN = 'Hidden' + START_DATE = 'StartDate' + + +def format_roadmaps(roadmaps): + result = [] + for roadmap in roadmaps: + result.append(prepare_roadmap(roadmap)) + return result + + +def prepare_roadmap(roadmap): + roadmap[RoadmapParameters.START_DATE.value] = DateFormatter.format( + roadmap[RoadmapParameters.START_DATE.value]) + return roadmap def construct_blueprint(database): @@ -21,9 +35,9 @@ def construct_blueprint(database): def get_visible_roadmaps(): user = get_jwt_identity() if user is None: - return jsonify(database.get_visible_roadmaps()) + return jsonify(format_roadmaps(database.get_visible_roadmaps())) else: - return jsonify(database.get_roadmaps()) + return jsonify(format_roadmaps(database.get_roadmaps())) @roadmap_api.route('/roadmap/<int:roadmapID>', methods=['GET']) @jwt_optional @@ -33,12 +47,12 @@ def construct_blueprint(database): user = get_jwt_identity() if roadmap['Hidden'] and user is None: return jsonify({'success': False, 'msg': 'A roadmap with this id not exist'}), 404 - return jsonify(roadmap) + return jsonify(prepare_roadmap(roadmap)) @roadmap_api.route('/roadmap/<int:roadmapID>/full', methods=['GET']) @jwt_optional def get_roadmap_full(roadmapID): - roadmap = database.get_roadmap(roadmapID) + roadmap = prepare_roadmap(database.get_roadmap(roadmapID)) roadmap['milestones'] = database.get_milestones(roadmapID) user = get_jwt_identity() @@ -76,14 +90,16 @@ def construct_blueprint(database): @jwt_required def add_roadmap(): try: - parameters = RequestValidator.validate(request, [RoadmapParameters.PROJECT_NAME.value]) + parameters = RequestValidator.validate(request, [RoadmapParameters.PROJECT_NAME.value, + RoadmapParameters.START_DATE.value]) except ValidationError as e: return e.response, 400 if __name_already_used(parameters[RoadmapParameters.PROJECT_NAME.value]): return jsonify({'success': False, 'msg': 'A roadmap with this name already exists'}), 400 - database.add_roadmap(parameters[RoadmapParameters.PROJECT_NAME.value]) + database.add_roadmap(parameters[RoadmapParameters.PROJECT_NAME.value], + parameters[RoadmapParameters.START_DATE.value]) return jsonify({'success': True}) @roadmap_api.route('/roadmap/<int:roadmapID>', methods=['DELETE']) @@ -102,7 +118,8 @@ def construct_blueprint(database): parameters = RequestValidator.validate(request, [ RoadmapParameters.ID.value, RoadmapParameters.PROJECT_NAME.value, - RoadmapParameters.HIDDEN.value + RoadmapParameters.HIDDEN.value, + RoadmapParameters.START_DATE.value ]) except ValidationError as e: return e.response, 400 @@ -113,7 +130,8 @@ def construct_blueprint(database): database.update_roadmap(parameters[RoadmapParameters.ID.value], parameters[RoadmapParameters.PROJECT_NAME.value], - parameters[RoadmapParameters.HIDDEN.value]) + parameters[RoadmapParameters.HIDDEN.value], + parameters[RoadmapParameters.START_DATE.value]) return jsonify({'success': True}) def __roadmaps_exists(roadmapID): diff --git a/api/logic/Database.py b/api/logic/Database.py index a7c2d480334cc7aac0acd5cb2421258d45633c6b..c225d8bfc981aa26a4348930dd92c80621742444 100644 --- a/api/logic/Database.py +++ b/api/logic/Database.py @@ -18,7 +18,7 @@ class FetchType(Enum): class Database: - VERSION = 2 + VERSION = 3 def __init__(self, database_settings): self.__host = database_settings["host"] @@ -162,13 +162,13 @@ class Database: query = f'SELECT * FROM roadmaps WHERE "{RoadmapParameters.ID.value}"=%s;' return self._query(query, roadmapID, fetch_type=FetchType.ONE) - def add_roadmap(self, name): - query = f'INSERT INTO roadmaps ("{RoadmapParameters.PROJECT_NAME.value}") VALUES (%s);' - self._query(query, name, fetch_type=FetchType.NONE) + def add_roadmap(self, name, startDate): + query = f'INSERT INTO roadmaps ("{RoadmapParameters.PROJECT_NAME.value}", "{RoadmapParameters.START_DATE.value}") VALUES (%s, %s);' + self._query(query, name, startDate, fetch_type=FetchType.NONE) - def update_roadmap(self, roadmapID, name, hidden): - query = f'UPDATE roadmaps SET "{RoadmapParameters.PROJECT_NAME.value}"=%s, "{RoadmapParameters.HIDDEN.value}"=%s WHERE "{RoadmapParameters.ID.value}"=%s;' - self._query(query, name, hidden, roadmapID, fetch_type=FetchType.NONE) + def update_roadmap(self, roadmapID, name, hidden, startDate): + query = f'UPDATE roadmaps SET "{RoadmapParameters.PROJECT_NAME.value}"=%s, "{RoadmapParameters.HIDDEN.value}"=%s,"{RoadmapParameters.START_DATE.value}"=%s WHERE "{RoadmapParameters.ID.value}"=%s;' + self._query(query, name, hidden, startDate, roadmapID, fetch_type=FetchType.NONE) def delete_roadmap(self, roadmapID): query = f'DELETE FROM roadmaps WHERE "{RoadmapParameters.ID.value}"=%s;' diff --git a/api/logic/DatabaseMigrator.py b/api/logic/DatabaseMigrator.py index 88cb1abacf65dfa7982f17882022129b6545b4c7..fe1f4da1de0b71cc0876570d37dcff083c60fb17 100644 --- a/api/logic/DatabaseMigrator.py +++ b/api/logic/DatabaseMigrator.py @@ -45,4 +45,18 @@ class DatabaseMigrator: self._database.update_version(2) return + if currentVersion == 2: + LOGGER.debug('Migrating database from version 2 to 3...') + + queryColumnExists = f'SELECT EXISTS (SELECT 1 FROM information_schema.columns ' \ + f'WHERE table_name=\'roadmaps\' AND column_name=\'{RoadmapParameters.START_DATE.value}\');' + exists = self._database._query(queryColumnExists, fetch_type=FetchType.ONE) + + if not exists['exists']: + query = f'ALTER TABLE "roadmaps" ADD "{RoadmapParameters.START_DATE.value}" date NOT NULL default \'01.01.2000\';' + self._database._query(query, fetch_type=FetchType.NONE) + + self._database.update_version(3) + return + raise ValueError(f'No migration handler for version {currentVersion} defined') diff --git a/api/version.json b/api/version.json index 49c77e67beb10c4c6c882d5953acde5063fcbedf..2bf2e0391f131f4ba72250fcf4b9e3f5f04542f6 100644 --- a/api/version.json +++ b/api/version.json @@ -1,7 +1,7 @@ { "version": { - "name": "v2.9.1", - "code": 23, - "date": "12.11.20" + "name": "v2.10.0", + "code": 24, + "date": "13.11.20" } } \ No newline at end of file