Commit a00527a1 authored by Thushara Thiwanka's avatar Thushara Thiwanka

CREATE: assignment type based uml generation added on backend

parent 0e8af41d
......@@ -8,6 +8,7 @@ class Assignment(db.Model):
module_id = db.Column(db.Integer, db.ForeignKey('module.id'))
content = db.Column(db.String(800), nullable=False)
plagiarism_percentage = db.Column(db.Integer, nullable=False)
assignment_type = db.Column(db.Integer, nullable=False)
start_at = db.Column(db.DateTime, default=datetime.now())
end_at = db.Column(db.DateTime)
created_at = db.Column(db.DateTime, default=datetime.now())
......
......@@ -15,6 +15,7 @@ def create_assignment():
title = request.json.get('title', '')
content = request.json.get('content', '')
module_id = request.json.get('module_id', '')
assignment_type = request.json.get('assignment_type', '')
plagiarism_percentage = request.json.get('plagiarism_percentage', '')
start_at = datetime.strptime(request.json.get('start_at', ''), '%Y-%m-%d %H:%M:%S')
end_at = datetime.strptime(request.json.get('end_at', ''), '%Y-%m-%d %H:%M:%S')
......@@ -25,19 +26,21 @@ def create_assignment():
assignment_obj = Assignment(title=title, content=content,
module_id=module_id,
plagiarism_percentage=plagiarism_percentage,
assignment_type=assignment_type,
start_at=start_at,
end_at=end_at)
db.session.add(assignment_obj)
db.session.commit()
response = requests.post(url="http://127.0.0.1:5000/api/v1/diagrams/generate",
json={"scenario": content, "assignment_id": assignment_obj.id})
json={"scenario": content, "assignment_id": assignment_obj.id, "assignment_type": assignment_obj.assignment_type})
if response.ok:
return jsonify({'msg': 'Assignment created', 'assignment': {
'id': assignment_obj.id,
'title': assignment_obj.title,
'content': assignment_obj.content,
'assignment_type': assignment_obj.assignment_type,
'module_id': assignment_obj.module_id,
'plagiarism_percentage': assignment_obj.plagiarism_percentage,
'start_at': assignment_obj.start_at,
......@@ -58,7 +61,7 @@ def get_assignments():
for assignment, module in assignment_obj:
assignments.append(
{"id": assignment.id, "title": assignment.title, "module_id": assignment.module_id, "code": module.code, "name": module.name, "start_at": assignment.start_at, "end_at": assignment.end_at,
{"id": assignment.id, "title": assignment.title, "module_id": assignment.module_id, "code": module.code, "name": module.name, "start_at": assignment.start_at, "end_at": assignment.end_at, 'assignment_type': assignment.assignment_type,
"created_at": assignment.created_at, "updated_at": assignment.updated_at})
if assignment_obj is None:
......@@ -81,6 +84,7 @@ def get_assignment(assignment_id):
'id': assignment_obj.id,
"title": assignment_obj.title,
'content': assignment_obj.content,
'assignment_type': assignment_obj.assignment_type,
'module_id': assignment_obj.module_id,
'plagiarism_percentage': assignment_obj.plagiarism_percentage,
'start_at': assignment_obj.start_at,
......@@ -105,6 +109,7 @@ def delete_assignment(assignment_id):
'id': assignment_obj.id,
"title": assignment_obj.title,
'content': assignment_obj.content,
'assignment_type': assignment_obj.assignment_type,
'module_id': assignment_obj.module_id,
'plagiarism_percentage': assignment_obj.plagiarism_percentage,
'start_at': assignment_obj.start_at,
......@@ -117,6 +122,7 @@ def update_assignment(assignment_id):
content = request.json.get('content', '')
title = request.json.get('title', '')
module_id = request.json.get('module_id', '')
assignment_type = request.json.get('assignment_type', '')
plagiarism_percentage = request.json.get('plagiarism_percentage', '')
start_at = datetime.strptime(request.json.get('start_at', ''), '%Y-%m-%d %H:%M:%S')
end_at = datetime.strptime(request.json.get('end_at', ''), '%Y-%m-%d %H:%M:%S')
......@@ -130,12 +136,14 @@ def update_assignment(assignment_id):
assignment_obj.plagiarism_percentage = plagiarism_percentage
assignment_obj.start_at = start_at
assignment_obj.end_at = end_at
assignment_obj.assignment_type = assignment_type
db.session.commit()
return jsonify({'msg': 'Assignment updated', 'assignment': {
'id': assignment_obj.id,
"title": assignment_obj.title,
'content': assignment_obj.content,
'assignment_type': assignment_obj.assignment_type,
'module_id': assignment_obj.module_id,
'plagiarism_percentage': assignment_obj.plagiarism_percentage,
'start_at': assignment_obj.start_at,
......
......@@ -12,26 +12,49 @@ diagram = Blueprint('diagrams', __name__, url_prefix='/api/v1/diagrams')
@diagram.post('/generate')
def generate_diagrams():
try:
generated_usecase_diagram_path = None
generated_class_diagram_path = None
data = request.get_json(silent=True)
if data is None:
return jsonify('Please attach assignment details'), HTTP_400_BAD_REQUEST
generated_class_diagram_path, generated_usecase_diagram_path = services.question_preprocess_service.main(
data['scenario'])
if generated_usecase_diagram_path or generated_usecase_diagram_path:
if data['assignment_type'] == 1:
generated_usecase_diagram_path = services.question_preprocess_service.main(
data['scenario'], data['assignment_type'])
diagram_obj = Diagram(assignment_id=data['assignment_id'],
usecase_diagram_path=generated_usecase_diagram_path,
class_diagram_path=None)
elif data['assignment_type'] == 2:
generated_class_diagram_path = services.question_preprocess_service.main(
data['scenario'], data['assignment_type'])
diagram_obj = Diagram(assignment_id=data['assignment_id'],
usecase_diagram_path=None,
class_diagram_path=generated_class_diagram_path)
elif data['assignment_type'] == 3:
generated_class_diagram_path, generated_usecase_diagram_path = services.question_preprocess_service.main(
data['scenario'], data['assignment_type'])
diagram_obj = Diagram(assignment_id=data['assignment_id'],
usecase_diagram_path=generated_usecase_diagram_path,
class_diagram_path=generated_class_diagram_path)
db.session.add(diagram_obj)
db.session.commit()
else:
return jsonify('Something went wrong'), HTTP_500_INTERNAL_SERVER_ERROR
return jsonify(generated_class_diagram_path=generated_class_diagram_path,
generated_usecase_diagram_path=generated_usecase_diagram_path), HTTP_200_OK
if data['assignment_type'] == 1:
return jsonify(
generated_usecase_diagram_path=generated_usecase_diagram_path), HTTP_200_OK
if data['assignment_type'] == 2:
return jsonify(generated_class_diagram_path=generated_class_diagram_path,
), HTTP_200_OK
if data['assignment_type'] == 3:
return jsonify(generated_class_diagram_path=generated_class_diagram_path,
generated_usecase_diagram_path=generated_usecase_diagram_path), HTTP_200_OK
except Exception or BadRequestKeyError:
if BadRequestKeyError:
......@@ -46,4 +69,5 @@ def get_diagrams(assignment_id):
if diagram_obj is None:
return jsonify({"err": "No diagram found"}, HTTP_404_NOT_FOUND)
return jsonify({'msg': 'Diagrams found', 'diagrams': {'class_diagram': diagram_obj.class_diagram_path, 'usecase_diagram': diagram_obj.usecase_diagram_path}}), HTTP_200_OK
return jsonify({'msg': 'Diagrams found', 'diagrams': {'class_diagram': diagram_obj.class_diagram_path,
'usecase_diagram': diagram_obj.usecase_diagram_path}}), HTTP_200_OK
......@@ -23,8 +23,8 @@ def remove_punctuation(sentence):
return cleaned_sentence
# load the text
def main(scenario):
# load the text content and generating diagrams
def main(scenario, assignment_type):
requirement_text = scenario.replace("\n\n", " ").replace("\n", " ")
nlp = spacy.load("en_core_web_lg")
doc = nlp(requirement_text)
......@@ -57,10 +57,26 @@ def main(scenario):
# remove duplicates of the actors
nc = list(dict.fromkeys(nc))
data = remove_unwanted_values(nc)
generated_class_diagram_path = generate_class(data, cleaned_extracted_actions)
extracted_relationships = get_include_extend_relationships(splitted_actions_array)
actors_and_use_cases_array = identify_use_cases(cleaned_extracted_actions)
generated_usecase_diagram_path = generate_use_case_diagram(data, extracted_relationships,
actors_and_use_cases_array)
return generated_class_diagram_path, generated_usecase_diagram_path
if assignment_type == 1:
generated_usecase_diagram_path = generate_use_case_diagram(data, extracted_relationships,
actors_and_use_cases_array)
return generated_usecase_diagram_path
elif assignment_type == 2:
generated_class_diagram_path = generate_class(data, cleaned_extracted_actions)
return generated_class_diagram_path
elif assignment_type == 3:
generated_class_diagram_path = generate_class(data, cleaned_extracted_actions)
generated_usecase_diagram_path = generate_use_case_diagram(data, extracted_relationships,
actors_and_use_cases_array)
return generated_class_diagram_path, generated_usecase_diagram_path
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment