FocusFlow α Sprint Blog Series (Part 4) - Homepage check-in & Overview

FOCUS_2025_SE 2025-12-19 20:42:55

目录

  • 1. Overview
  • 2. Function Realization Demonstration
  • 2.1 Daily check-in system
  • 2.2 Data Overview Panel
  • 3. Code Check-in Records (GitHub Commits)
  • 4. Core Code Analysis
  • 5.Sprint Summary
  • 5.1 Completed Deliverables
  • 5.2Technical Challenges and Resolutions:

1. Overview

Coursehttps://bbs.csdn.net/forums/2501_MU_SE_FZU
Assignment Requirementhttps://bbs.csdn.net/topics/620061759
Team nameFocusFlow
AuthorHongzhi He(FZU:832302220 MU:23125390
Goal of this AssignmentShowcase the Alpha Sprint progress, including homepage check-in, homepage overview, etc.
Other ReferencesIEEE Std 830-1998, GB/T 8567-2006

Sprint Burndown Chart
We tracked our progress meticulously throughout the sprint. The chart below illustrates our team's velocity in completing the task management user stories against our estimated timeline.

img

2. Function Realization Demonstration

We have implemented functions such as homepage check-in and homepage overview

2.1 Daily check-in system

In FocusFlow, the check-in function is not only a record of user login, but also an important incentive mechanism for cultivating study habits. Users gain a sense of achievement through continuous check-in, forming a positive feedback loop.

img

img

img

2.2 Data Overview Panel

The data overview panel can visually display learning progress, making users' goals clearer and their actions faster

img

3. Code Check-in Records (GitHub Commits)

Our development process is backed by regular code commits ensuring version control and collaboration.

img

4. Core Code Analysis

This task involves some core code, and the key parts will be presented below for analysis.
Firstly, the core code of the check-in function belongs to the data layer design
models.py

class Checkin:
    def __init__(self, id=None, user_id=None, date=None, created_at=None):
        self.id = id
        self.user_id = user_id
        self.date = date
        self.created_at = created_at

The Checkin class follows the "single responsibility principle" and is only responsible for storing the core information of check-in records By associating the user_id field with the User table, a one to many relationship between users and check-in records can be achieved. The date field is specifically used to store check-in dates (excluding specific times), making it easy to perform statistics and queries based on dates. The created date record is used to record the specific time point of check-in for subsequent auditing and analysis

The next step is the implementation of the check-in logic in the control layer, mainly consisting of the app.py file:
app.py

@app.route('/checkin', methods=['POST'])
@login_required
def checkin():
    user_id = session['user_id']
    today = datetime.now().strftime('%Y-%m-%d')  # 关键:标准化日期格式
    
    conn = get_db_connection()
    try:
        # 防重签机制:检查今天是否已经签到
        existing_checkin = conn.execute(
            'SELECT * FROM checkins WHERE user_id = ? AND date = ?',
            (user_id, today)
        ).fetchone()

        if existing_checkin:
            flash('You have already signed in today!', 'info')
        else:
            # 执行签到:插入新记录
            conn.execute(
                'INSERT INTO checkins (user_id, date) VALUES (?, ?)',
                (user_id, today)
            )
            conn.commit()
            flash('Sign in successful! Keep up the good work!', 'success')
    finally:
        conn.close()
    
    return redirect(url_for('dashboard'))

Ensure that the same user can only check in once on the same day through UNIQUE (user_id, date) database constraints and pre checks Perform operations in database transactions to ensure data consistency Provide instant feedback through flash messages to enhance user experience Store dates in% Y -% m -% d format to avoid time zone issues.

In addition, we have also implemented the function of continuous check-in, and the key part of it is also in the app.py file:
app.py

# 获取连续签到天数
streak_days = 0
checkin_dates = conn.execute('''
    SELECT date FROM checkins WHERE user_id = ? ORDER BY date DESC
''', (user_id,)).fetchall()

if checkin_dates:
    current_date = datetime.now().date()
    for checkin_date in checkin_dates:
        checkin_date_obj = datetime.strptime(checkin_date['date'], '%Y-%m-%d').date()
        if (current_date - checkin_date_obj).days == streak_days:
            streak_days += 1
        else:
            break

Calculate the consecutive days by checking the most recent check-in records in a loop Use (Current_date checkin_date_obj). days to calculate the date interval Sort by date DESC in descending order, starting from the most recent Terminate the loop immediately when discontinuous dates are detected.

In order to achieve real-time display of today's check-in status and task completion percentage, provide weekly learning trends, highlight consecutive check-in days, and other homepage functions, we still implement homepage aggregation in app.py. Some of the code is as follows:
app.py

# 获取签到信息
today = datetime.now().strftime('%Y-%m-%d')
has_checked_in = conn.execute('SELECT * FROM checkins WHERE user_id = ? AND date = ?',
                              (user_id, today)).fetchone() is not None

# 获取本周专注时长
week_start = (datetime.now() - timedelta(days=datetime.now().weekday())).strftime('%Y-%m-%d')
focus_time_query = conn.execute('''
    SELECT SUM(duration) as total_minutes 
    FROM focus_sessions 
    WHERE user_id = ? AND date(start_time) >= ?
''', (user_id, week_start)).fetchone()

# 获取任务统计
completed_tasks_query = conn.execute('''
    SELECT COUNT(*) as count FROM tasks WHERE user_id = ? AND status = 'completed'
''', (user_id,)).fetchone()

Aggregate data from the checkins, foci sessions, and tasks tables Calculate using relative time (this week, today) Reduce application layer computation by utilizing built-in functions such as SUM and COUNT in databases Only query relevant data when needed to avoid unnecessary database access.

Finally, we present the key code of our database design pattern:

-- 签到表的核心设计
CREATE TABLE checkins (
    id INTEGER PRIMARY KEY,
    user_id INTEGER NOT NULL,
    date DATE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE(user_id, date)  -- 防止重复签到
);

The checkins table serves as the fact table, and the users table serves as the dimension table Store summary data such as stream_days in the users table to improve query performance Store check-in records by date partition for easy management of historical data.

5.Sprint Summary

5.1 Completed Deliverables

  1. Core Homepage Redesign – Implemented dynamic dashboard with real-time data widgets
  2. Daily Check-in System – Functional check-in button with streak tracking and calendar view
  3. User Data Overview Panel – Displays pending tasks, study duration, completion rate, and weekly stats
  4. Personalized Greetings – Time-based greetings (morning/afternoon/evening) with user name
  5. Weekly Learning Trends – 7-day visual trend chart integrating check-ins and focus sessions
  6. Database Schema Enhancement – Added checkins table and user statistics fields (current_streak, total_checkins, etc.)

5.2Technical Challenges and Resolutions:

  1. Consecutive Day Calculation Logic:
    Solution:Implemented date-difference iteration algorithm with early termination on break detection
  2. Preventing Duplicate Check-ins:
    Solution:Combined database UNIQUE constraint (user_id, date) with pre-check in application logic
  3. Real-time Data Synchronization:
    Solution:Used AJAX polling for stats updates and optimistic UI updates for check-in actions
  4. Timezone Handling:
    Solution:Stored all dates in UTC and converted to local time only for display purposes
  5. Database Performance with Aggregates:
    Solution:Added indexes on user_id, date fields and used SQL aggregation functions (SUM, COUNT)
  6. Responsive Dashboard Layout:
    Solution:Applied Bootstrap 5 grid system with conditional card stacking on mobile devices

The sprint successfully delivered a fully functional homepage with integrated check-in system and real-time learning analytics. All core acceptance criteria were met, with particular attention given to data accuracy, user experience, and system performance.

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

165

社区成员

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

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