progression 50% pour evolution des joueurs
CI - Security, Lint & Tests / validate (push) Failing after 1m13s
CI - Security, Lint & Tests / validate (push) Failing after 1m13s
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
"""Player evolution objective — individual or team KPI-based goal."""
|
||||
|
||||
from app.extensions import db
|
||||
from app.time_utils import utc_now_naive
|
||||
|
||||
|
||||
class Objective(db.Model):
|
||||
"""Player evolution objective — a KPI-driven plan for individual players
|
||||
or teams, created and tracked by coaching staff.
|
||||
|
||||
Covers the full lifecycle: draft (pending), active, completed, overdue.
|
||||
Supports arbitrary KPI metrics, optional tags, and verifiable progress.
|
||||
"""
|
||||
|
||||
__tablename__ = 'objectives'
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
title = db.Column(db.String(200), nullable=False)
|
||||
description = db.Column(db.Text, nullable=True)
|
||||
|
||||
# Category
|
||||
type = db.Column(
|
||||
db.String(20),
|
||||
nullable=False,
|
||||
default='individual',
|
||||
)
|
||||
status = db.Column(
|
||||
db.String(20),
|
||||
nullable=False,
|
||||
default='active',
|
||||
)
|
||||
priority = db.Column(
|
||||
db.String(20),
|
||||
nullable=False,
|
||||
default='medium',
|
||||
)
|
||||
category = db.Column(db.String(50), nullable=True)
|
||||
is_template = db.Column(db.Boolean, default=False, nullable=False)
|
||||
|
||||
# Assignment (individual player / org team)
|
||||
player_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=True)
|
||||
team_id = db.Column(db.Integer, db.ForeignKey('org_teams.id'), nullable=True)
|
||||
|
||||
# KPI fields
|
||||
kpi_metric = db.Column(db.String(120), nullable=True)
|
||||
kpi_target = db.Column(db.Numeric(10, 2), nullable=True)
|
||||
kpi_unit = db.Column(db.String(20), nullable=True)
|
||||
kpi_precision = db.Column(db.Integer, nullable=True)
|
||||
|
||||
# Timeline
|
||||
start_date = db.Column(db.Date, nullable=True)
|
||||
due_date = db.Column(db.Date, nullable=False)
|
||||
check_frequency = db.Column(db.String(30), nullable=True)
|
||||
|
||||
# Progress tracking (0–100)
|
||||
progress = db.Column(db.Integer, default=0, nullable=False)
|
||||
|
||||
# Misc
|
||||
tags = db.Column(db.String(255), nullable=True)
|
||||
|
||||
# Who created it
|
||||
created_by = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
|
||||
|
||||
# Timestamps
|
||||
created_at = db.Column(db.DateTime, default=utc_now_naive)
|
||||
updated_at = db.Column(db.DateTime, default=utc_now_naive, onupdate=utc_now_naive)
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
# Relationships
|
||||
# -----------------------------------------------------------------------
|
||||
player = db.relationship(
|
||||
'User',
|
||||
foreign_keys=[player_id],
|
||||
backref=db.backref('objectives', lazy='dynamic'),
|
||||
)
|
||||
team = db.relationship(
|
||||
'OrgTeam',
|
||||
foreign_keys=[team_id],
|
||||
backref=db.backref('objectives', lazy='dynamic'),
|
||||
)
|
||||
creator = db.relationship(
|
||||
'User',
|
||||
foreign_keys=[created_by],
|
||||
)
|
||||
Reference in New Issue
Block a user