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.

...全文
117 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文介绍了SB200工业级单芯片RS232转RS422/RS485转换收发器的技术特性与优势。该器件采用QFN-40封装,具备端口供电功能,无需外接电源即可工作,支持RS422与RS485多节点组网,并实现自动方向控制,无需额外的DTR或RTS控制信号。SB200最高支持921.6 Kbps的波特率,在1.2km长距离传输下仍能稳定运行,显著优于传统低价转换器。文档还展示了SB200在不同模式下的性能表现,包括RS422、RS485回显与非回显模式,并提供与其他产品的详细对比,突出其在速率、多点通信、终端电阻配置和工业级温度范围等方面的优势。 适合人群:从事工业通信、嵌入式系统开发及相关硬件设计的研发人员,特别是对串行通信接口有应用需求的工程师;适用于有一定电子技术基础的技术支持或产品选型人员。 使用场景及目标:①用于工业现场长距离、高可靠性的串行通信部署;②替代传统需外部供电和手动方向控制的转换器,简化系统布线与维护;③应用于支持多点组网、高速数据传输的RS485/RS422网络中,提升通信效率与稳定性。 阅读建议:在阅读过程中应重点关注SB200的自动方向控制机制、端口供电能力及其在不同通信模式下的性能参数,结合实际应用场景进行器件选型评估,并参考对比表格识别其相对于低端产品的综合优势。 如需SB300数据手册与其他详细资料,欢迎随时咨询北京博控自动化技术有限公司索取。
内容概要:本文围绕基于二阶扩展卡尔曼滤波(Second-order Extended Kalman Filter, Second-order EKF)的锂电池荷电状态(State of Charge, SOC)估计方法开展系统性研究,采用Matlab平台进行建模与仿真分析,旨在提升锂电池SOC估算的精度与动态适应能力。文章深入阐述了二阶EKF相较于传统一阶EKF在处理电池非线性动态特性方面的理论优势,通过引入更高阶泰勒展开项,有效降低线性化误差,从而提高状态估计的准确性。研究构建了适用于锂电池的等效电路模型(ECM),结合实测充放电实验数据,在多种动态工况下验证了该方法在SOC估计中的有效性与鲁棒性。同时,论文系统比较了卡尔曼滤波家族中多种算法(如标准卡尔曼滤波KF、无迹卡尔曼滤波UKF、扩展卡尔曼滤波EKF、粒子滤波PF等)在电池状态估计中的性能差异,突出二阶EKF在兼顾计算效率与估计精度方面的优越性,尤其适用于强非线性电池系统的实时SOC估计任务。; 适合人群:具备控制理论、现代信号处理、非线性系统建模或电池管理系统(BMS)相关基础知识,从事新能源汽车、储能系统、电力电子与智能电网等领域研究的硕士/博士研究生、科研人员及工程技术人员。; 使用场景及目标:①在锂电池管理系统中实现高精度、高稳定性的实时SOC在线估计;②为电池健康状态(SOH)、剩余使用寿命(RUL)等关键状态参数的联合估计提供可靠的初始状态与误差协方差信息;③作为科研与工程实践的重要参考,用于复现、改进或优化现有非线性滤波算法,推动其在复杂电化学系统状态估计中的应用发展。; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,重点剖析二阶EKF的数学推导过程、系统状态空间模型的构建方法、过程与观测噪声的合理设定,并通过与UKF、EKF等算法的仿真结果对比,深入理解其在不同工况下的适用边界与优化潜力,进而掌握非线性滤波器在工程应用中的设计要点与调参技巧。

164

社区成员

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

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