FocusFlow α Sprint Blog Series (Part 2) - Tasks Creation, Deletion and Modification Report

FOCUS_2025_SE 2025-12-15 21:30:19

目录

  • Overview
  • 1. Sprint Burndown Chart
  • 2. Function realization demonstration
  • 2.1 Task Creation, Editing, and Deletion
  • 2.2 Task Completion and Categorization
  • 3. Code Check-in Records (GitHub Commits)
  • 4. Core Code Analysis
  • 4.1 Task CRUD and Status Update (app.py)
  • Task Listing with Tags
  • Creating and Editing Tasks
  • Creating and Editing Tasks
  • 4.2 Marking Tasks as Completed
  • 4.3 Tag-Based Categorization During Task Creation/Editing
  • 5. Sprint Summary
  • Completed Deliverables
  • Technical Challenges and Resolutions

Overview

Coursehttps://bbs.csdn.net/forums/2501_MU_SE_FZU
Assignment Requirementhttps://bbs.csdn.net/topics/620061759
Team NameFocus_2025
AuthorChenhe Zhu FZU: 832301108 MU: 23125047
Goal of this assignmentClarify Code Standards, Sprint Tasks, and Plans for the team Alpha Sprint
Other referencesIEEE Std 830-1998, GB/T 8567-2006

1. Sprint Burndown Chart

img

2. Function realization demonstration

This sprint, I implemented the Task Management Module, which allows users to organize their study goals efficiently. Below are key feature demonstrations.

2.1 Task Creation, Editing, and Deletion

Users can add new tasks via the “+ New Task” button, specifying title, description, due date, and category. Tasks can be edited inline or deleted permanently with confirmation.

在这里插入图片描述

在这里插入图片描述

2.2 Task Completion and Categorization

Each task includes a checkbox to mark it as completed. Completed tasks are visually dimmed and moved to a separate “Already-done” section.
Tasks are grouped by user-defined subjects, enabling structured planning.

在这里插入图片描述


在这里插入图片描述

3. Code Check-in Records (GitHub Commits)

请添加图片描述


As the co-developer of the Task Management Module, I assisted in implementing both frontend templates and backend logic. All changes were committed to the main branch of our repository.

4. Core Code Analysis

The task management system in FocusFlow is built around three key operations: CRUD (Create, Read, Update, Delete), status tracking, and tag-based organization. All logic is implemented in app.py using Flask routes and SQLite queries.

4.1 Task CRUD and Status Update (app.py)

Task Listing with Tags

The /tasks route fetches all user tasks and enriches each with its associated tags from the task_tags table:

@app.route('/tasks')
@login_required
def tasks():
    user_id = session['user_id']
    conn = get_db_connection()
    try:
        tasks = conn.execute(
            'SELECT * FROM tasks WHERE user_id = ? ORDER BY due_date ASC',
            (user_id,)
        ).fetchall()

        tasks_with_tags = []
        today = datetime.now().date()
        for task in tasks:
            # Fetch tags for this task
            tags = conn.execute(
                'SELECT tag FROM task_tags WHERE task_id = ?',
                (task['id'],)
            ).fetchall()
            task_dict = dict(task)
            task_dict['tags'] = [tag['tag'] for tag in tags]
            # ... (date formatting logic)
            tasks_with_tags.append(task_dict)
    finally:
        conn.close()
    return render_template('tasks.html', tasks=tasks_with_tags)

This ensures every task displayed includes its dynamic tag list, enabling flexible categorization without a fixed "category" column.

Creating and Editing Tasks

The /tasks add endpoint handles both creation and editing via a single POST route. It uses task_id to distinguish between modes:

@app.route('/tasks/add', methods=['POST'])
@login_required
def add_task():
    task_id = request.form.get('task_id')  # None for new tasks
    # ... (form data extraction)

    if task_id:
        # Edit existing task
        conn.execute('''
            UPDATE tasks SET title = ?, description = ?, ..., status = ?
            WHERE id = ? AND user_id = ?
        ''', (title, ..., status, task_id, user_id))
        # Clear old tags
        conn.execute('DELETE FROM task_tags WHERE task_id = ?', (task_id,))
    else:
        # Create new task
        cursor = conn.cursor()
        cursor.execute('''
            INSERT INTO tasks (user_id, title, description, ...)
            VALUES (?, ?, ?, ...)
        ''', (user_id, title, description, ...))
        task_id = cursor.lastrowid  # Get new ID

    # Re-insert tags (for both create/edit)
    if tags:
        for tag in [t.strip() for t in tags.split(',') if t.strip()]:
            conn.execute(
                'INSERT INTO task_tags (task_id, tag) VALUES (?, ?)',
                (task_id, tag)
            )
    conn.commit()

Creating and Editing Tasks

The delete operation first validates ownership, then removes both the task and its tags:

@app.route('/tasks/delete/<int:task_id>', methods=['POST'])
@login_required
def delete_task(task_id):
    user_id = session['user_id']
    conn = get_db_connection()
    try:
        # Verify ownership
        task = conn.execute(
            'SELECT * FROM tasks WHERE id = ? AND user_id = ?',
            (task_id, user_id)
        ).fetchone()
        if not task:
            flash('Permission denied!')
            return redirect(url_for('tasks'))

        # Clean up: delete tags first, then task
        conn.execute('DELETE FROM task_tags WHERE task_id = ?', (task_id,))
        conn.execute('DELETE FROM tasks WHERE id = ?', (task_id,))
        conn.commit()
        flash('Task deleted successfully!')
    except Exception as e:
        conn.rollback()
        flash('Delete failed!')
    finally:
        conn.close()
    return redirect(url_for('tasks'))

4.2 Marking Tasks as Completed

Task completion is handled by a dedicated JSON API endpoint (/tasks/update_status/int:task_id). This allows frontend components to trigger status changes without page reloads:

@app.route('/tasks/update_status/<int:task_id>', methods=['POST'])
@login_required
def update_task_status(task_id):
    user_id = session['user_id']
    data = request.get_json()
    new_status = data.get('status', 'completed')

    conn = get_db_connection()
    try:
        # Ensure the task belongs to the current user
        task = conn.execute(
            'SELECT * FROM tasks WHERE id = ? AND user_id = ?',
            (task_id, user_id)
        ).fetchone()
        if not task:
            return jsonify({'success': False}), 403

        # Update status and timestamp
        conn.execute('''
            UPDATE tasks SET status = ?, updated_at = CURRENT_TIMESTAMP
            WHERE id = ?
        ''', (new_status, task_id))
        conn.commit()
        return jsonify({'success': True})
    finally:
        conn.close()

The status field in the tasks table stores either 'pending' or 'completed', enabling filtering and progress tracking.

4.3 Tag-Based Categorization During Task Creation/Editing

When a user creates or edits a task, tags are parsed from a comma-separated string and stored in the task_tags table:

# In /tasks/add route
if tags:
    tag_list = [tag.strip() for tag in tags.split(',') if tag.strip()]
    for tag in tag_list:
        conn.execute(
            'INSERT INTO task_tags (task_id, tag) VALUES (?, ?)',
            (task_id, tag)
        )

5. Sprint Summary

Completed Deliverables

The Alpha Sprint deliverables for the task management module include the following functionalities, all implemented in the Flask backend (app.py) with SQLite persistence:

  • Full CRUD operations for user tasks, including creation, retrieval, in-place editing, and deletion.
  • Task status tracking, supporting two states: pending and completed, with updates handled via a dedicated RESTful endpoint.
  • Dynamic categorization through user-defined tags, stored in a normalized task_tags table to support many-to-many relationships between tasks and labels.
  • Strict access control: All write operations validate task ownership by verifying the user_id against the session context, preventing cross-user data manipulation.
  • Atomic database transactions: Each mutating operation uses explicit commit() on success and rollback() on exception to ensure data consistency.

The module is fully integrated with the dashboard view, where task lists and completion metrics are rendered based on the same underlying data model.

Technical Challenges and Resolutions

1. Tag Consistency During Task Updates
Initial implementations appended new tags without removing existing ones, resulting in tag duplication upon repeated edits.

Resolution: Prior to inserting new tags, all records associated with the task ID are purged from the task_tags table:

conn.execute('DELETE FROM task_tags WHERE task_id = ?', (task_id,))

This guarantees that the tag set reflects exactly the user’s current input.

2. Unauthorized Task Manipulation
Without explicit ownership verification, malicious users could modify or delete tasks by supplying arbitrary task IDs.

Resolution: Every mutating endpoint includes a pre-check query:

SELECT id FROM tasks WHERE id = ? AND user_id = ?

Operations proceed only if a matching record exists, thereby enforcing data isolation at the application layer.
Planned Enhancements for Beta Sprint

  • Introduce task priority levels and due-date validation logic.
  • Implement client-side filtering by tag, status, or date range.
  • Establish data pipelines from task completions to the reporting and
    focus analytics modules.
  • Add server-side input sanitization and structured error responses for
    invalid form submissions.

The task management module now constitutes a secure, maintainable, and extensible component of the FocusFlow system, fulfilling all Alpha Sprint requirements.

...全文
196 回复 打赏 收藏 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文介绍了基于Matlab代码实现的电力系统机组组合优化调度方法,适用于IEEE14、IEEE30和IEEE118节点标准测试系统。该资源聚焦于电力系统中发电机组的优化调度问题,通过智能优化算法实现对机组启停、出力分配等决策的最优化,旨在降低运行成本、提升系统可靠性和经济性。文中系统阐述了从数学模型构建、多类型约束处理到优化算法设计与仿真实验验证的完整研究流程,并提供了可复现的Matlab代码,涵盖目标函数设定、约束条件建模及算法求解过程,适用于电力系统调度、能源优化等相关领域的科研与教学实践。; 适合人群:具备电力系统分析、运筹学基础及Matlab编程能力的高校学生、科研人员和工程技术人员,尤其适合从事电力系统优化、智能算法应用研究的研究生与青年学者。; 使用场景及目标:①用于电力系统机组组合(UC)问题的教学实验与课程设计;②支撑科研工作中对遗传算法、粒子群算法等智能优化算法在电力系统调度中应用的研究;③为含可再生能源接入的现代电网调度提供仿真平台与技术参考,助力低碳电力系统规划与运行。; 阅读建议:建议读者结合电力系统调度理论与优化建模知识,深入理解机组组合问题的数学本质与物理约束,再通过Matlab代码进行仿真实践,重点关注算法收敛性、多目标权衡策略与不同测试系统间的性能对比,以实现理论与实践的深度融合。
内容概要:本文研究了一种基于TCN-BiGRU-Attention混合神经网络模型的风电功率预测方法,旨在提升预测精度。该模型融合了时间卷积网络(TCN)对局部时序特征的强大提取能力、双向门控循环单元(BiGRU)对时间序列前后依赖关系的双向捕捉能力,以及注意力(Attention)机制对关键时间步特征的自适应加权聚焦能力。研究采用多变量输入方式,综合纳入风速、风向、温度等多种气象因素作为输入特征,实现风电功率的单步预测。通过对实际风电场数据的实验验证,该模型在预测精度方面相较于单一模型或其他组合模型展现出显著优势,有效降低了预测误差。; 适合人群:具备一定机器学习与深度学习基础,从事新能源预测、电力系统调度或相关领域研究的科研人员与工程技术人员。; 使用场景及目标:①应用于风电场功率实时预测,提升电网调度的稳定性与安全性;②为电力市场交易、储能配置和可再生能源消纳提供高精度数据支持;③作为深度学习模型融合设计的参考案例,推动时序预测技术的发展。; 阅读建议:此资源提供了完整的Matlab代码实现,读者在学习时应重点关注模型结构的设计原理、多变量特征的处理方式以及Attention机制的融入方法,建议结合代码进行复现实验,调整参数以深入理解各组件对最终预测性能的影响。

165

社区成员

发帖
与我相关
我的任务
社区描述
2501_MU_SE_FZU
软件工程 高校
社区管理员
  • FZU_SE_LQF
  • 助教_林日臻
  • 朱仕君
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧