@ -1,61 +0,0 @@
|
|||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: HeartWave
|
|
||||||
|
|
||||||
trigger:
|
|
||||||
event:
|
|
||||||
- push
|
|
||||||
|
|
||||||
steps:
|
|
||||||
|
|
||||||
# Test ✔️
|
|
||||||
- name: test
|
|
||||||
image: composer:2.6
|
|
||||||
commands:
|
|
||||||
- cd Sources
|
|
||||||
# Installe les dépendances PHP si nécessaire
|
|
||||||
- composer install --no-interaction
|
|
||||||
- ./vendor/bin/phpunit tests
|
|
||||||
|
|
||||||
# Sonar static code analisis deployment
|
|
||||||
# TODO : use an image that already have unzip
|
|
||||||
- name: code-analysis
|
|
||||||
image: php:8.1-cli
|
|
||||||
environment:
|
|
||||||
SONAR_TOKEN:
|
|
||||||
from_secret: SONAR_TOKEN
|
|
||||||
commands:
|
|
||||||
- apt-get update && apt-get install -y curl unzip
|
|
||||||
- export SONAR_SCANNER_VERSION=4.7.0.2747
|
|
||||||
- export SONAR_SCANNER_HOME=$HOME/.sonar/sonar-scanner-$SONAR_SCANNER_VERSION-linux
|
|
||||||
- curl --create-dirs -sSLo $HOME/.sonar/sonar-scanner.zip https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-$SONAR_SCANNER_VERSION-linux.zip
|
|
||||||
- unzip -o $HOME/.sonar/sonar-scanner.zip -d $HOME/.sonar/
|
|
||||||
- export PATH=$SONAR_SCANNER_HOME/bin:$PATH
|
|
||||||
- export SONAR_SCANNER_OPTS="-server"
|
|
||||||
- cd Sources
|
|
||||||
- sonar-scanner -D sonar.projectKey=HeartTrack -D sonar.host.url=https://codefirst.iut.uca.fr/sonar
|
|
||||||
depends_on: [ test ]
|
|
||||||
|
|
||||||
# build image and push on the registry ✔️
|
|
||||||
- name: docker-build-and-push
|
|
||||||
image: plugins/docker
|
|
||||||
settings:
|
|
||||||
dockerfile: Sources/config/Dockerfile
|
|
||||||
context: Sources
|
|
||||||
registry: hub.codefirst.iut.uca.fr
|
|
||||||
repo: hub.codefirst.iut.uca.fr/david.d_almeida/web
|
|
||||||
username:
|
|
||||||
from_secret: SECRET_REGISTRY_USERNAME
|
|
||||||
password:
|
|
||||||
from_secret: SECRET_REGISTRY_PASSWORD
|
|
||||||
|
|
||||||
- name: notify
|
|
||||||
image: ruby:2.1
|
|
||||||
when:
|
|
||||||
status: [ success ]
|
|
||||||
ref:
|
|
||||||
include:
|
|
||||||
- refs/tags/*-demo
|
|
||||||
commands:
|
|
||||||
- sh ./notifymail.sh
|
|
||||||
depends_on: [ docker-build-and-push ]
|
|
@ -1,107 +0,0 @@
|
|||||||
<mxfile host="app.diagrams.net" modified="2023-09-25T06:43:46.406Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0" etag="e-4pS3rH9xNpreRilvi5" version="21.8.2" type="device">
|
|
||||||
<diagram name="Page-1" id="2OfyMqm8PIhWsBFCJvOv">
|
|
||||||
<mxGraphModel dx="2049" dy="1071" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
|
||||||
<root>
|
|
||||||
<mxCell id="0" />
|
|
||||||
<mxCell id="1" parent="0" />
|
|
||||||
<mxCell id="Ym5UIEUMnJ661rIFWdHi-1" value="Sportif<br>" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
|
|
||||||
<mxGeometry x="100" y="240" width="30" height="60" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="Ym5UIEUMnJ661rIFWdHi-6" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
|
||||||
<mxGeometry x="230" y="170" width="340" height="890" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="Ym5UIEUMnJ661rIFWdHi-7" value="Application FitWeb" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
|
||||||
<mxGeometry x="340" y="170" width="120" height="30" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="Ym5UIEUMnJ661rIFWdHi-8" value="" style="endArrow=none;html=1;rounded=0;exitX=-0.006;exitY=0.037;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="Ym5UIEUMnJ661rIFWdHi-6" edge="1">
|
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
||||||
<mxPoint x="230" y="201" as="sourcePoint" />
|
|
||||||
<mxPoint x="570" y="200" as="targetPoint" />
|
|
||||||
<Array as="points" />
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="Ym5UIEUMnJ661rIFWdHi-9" value="" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
|
||||||
<mxGeometry x="320" y="220" width="160" height="100" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="Ym5UIEUMnJ661rIFWdHi-10" value="Analyser la fréquence cardique" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
|
||||||
<mxGeometry x="332" y="255" width="136" height="30" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="Ym5UIEUMnJ661rIFWdHi-22" value="" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
|
||||||
<mxGeometry x="320" y="355" width="160" height="100" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="Ym5UIEUMnJ661rIFWdHi-23" value="Statistique condition physique&nbsp;&nbsp;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
|
||||||
<mxGeometry x="340" y="375" width="120" height="60" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="Ym5UIEUMnJ661rIFWdHi-26" value="Améliorer les entrainements" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
|
||||||
<mxGeometry x="320" y="485" width="158" height="100" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="gRiRGuH9TPFdmmPZYA_R-7" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="Ym5UIEUMnJ661rIFWdHi-9" edge="1">
|
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
||||||
<mxPoint x="130" y="270" as="sourcePoint" />
|
|
||||||
<mxPoint x="310" y="270" as="targetPoint" />
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="gRiRGuH9TPFdmmPZYA_R-9" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
|
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
||||||
<mxPoint x="130" y="280" as="sourcePoint" />
|
|
||||||
<mxPoint x="320" y="390" as="targetPoint" />
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="gRiRGuH9TPFdmmPZYA_R-10" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" target="Ym5UIEUMnJ661rIFWdHi-26" edge="1">
|
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
||||||
<mxPoint x="130" y="290" as="sourcePoint" />
|
|
||||||
<mxPoint x="320" y="485" as="targetPoint" />
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="gRiRGuH9TPFdmmPZYA_R-11" value="Développeur" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
|
|
||||||
<mxGeometry x="712" y="930" width="30" height="60" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="gRiRGuH9TPFdmmPZYA_R-13" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1" source="gRiRGuH9TPFdmmPZYA_R-11">
|
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
||||||
<mxPoint x="132" y="857.5" as="sourcePoint" />
|
|
||||||
<mxPoint x="480" y="960" as="targetPoint" />
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="gRiRGuH9TPFdmmPZYA_R-15" value="<font style="font-size: 16px;">Diagramme de cas d'utilisation de l'application Fit Web</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
|
||||||
<mxGeometry x="199" y="60" width="400" height="30" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="aGqo4vDs0eBD3chBgCWU-1" value="Coach Sportif" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1">
|
|
||||||
<mxGeometry x="712" y="630" width="30" height="60" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="aGqo4vDs0eBD3chBgCWU-5" value="Consulter les statistiques de son équipe" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
||||||
<mxGeometry x="318" y="610" width="158" height="100" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="aGqo4vDs0eBD3chBgCWU-6" value="Développer et maintenir l'application" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
||||||
<mxGeometry x="320" y="910" width="158" height="100" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="aGqo4vDs0eBD3chBgCWU-7" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
||||||
<mxPoint x="710" y="660" as="sourcePoint" />
|
|
||||||
<mxPoint x="480" y="660" as="targetPoint" />
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="aGqo4vDs0eBD3chBgCWU-8" value="&nbsp;Reporter un bug" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
|
||||||
<mxGeometry x="318" y="740" width="158" height="100" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="aGqo4vDs0eBD3chBgCWU-9" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.41;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" target="aGqo4vDs0eBD3chBgCWU-8">
|
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
||||||
<mxPoint x="710" y="670" as="sourcePoint" />
|
|
||||||
<mxPoint x="792" y="730" as="targetPoint" />
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="aGqo4vDs0eBD3chBgCWU-12" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="aGqo4vDs0eBD3chBgCWU-8">
|
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
||||||
<mxPoint x="140" y="330" as="sourcePoint" />
|
|
||||||
<mxPoint x="160" y="385" as="targetPoint" />
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="aGqo4vDs0eBD3chBgCWU-13" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="aGqo4vDs0eBD3chBgCWU-8" target="aGqo4vDs0eBD3chBgCWU-6">
|
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
|
||||||
<mxPoint x="268" y="930" as="sourcePoint" />
|
|
||||||
<mxPoint x="318" y="880" as="targetPoint" />
|
|
||||||
</mxGeometry>
|
|
||||||
</mxCell>
|
|
||||||
</root>
|
|
||||||
</mxGraphModel>
|
|
||||||
</diagram>
|
|
||||||
</mxfile>
|
|
@ -1,55 +0,0 @@
|
|||||||
@startuml
|
|
||||||
class User {
|
|
||||||
+ name : string
|
|
||||||
}
|
|
||||||
|
|
||||||
User "1" --> "*" User: friends
|
|
||||||
User "1" --> "*" Notification: notifications
|
|
||||||
User "1" --> "*" Ask: friendRequests
|
|
||||||
class Notification {
|
|
||||||
- text : string
|
|
||||||
}
|
|
||||||
|
|
||||||
interface INotifier {
|
|
||||||
+ notify() : void
|
|
||||||
}
|
|
||||||
|
|
||||||
INotifier --|> Observer
|
|
||||||
|
|
||||||
abstract class UserManager {
|
|
||||||
- currentUser : User
|
|
||||||
+ deleteFriend(userId : int) : void
|
|
||||||
+ addFriend(userId : int) : void
|
|
||||||
+ respondToFriendRequest(requestId : int, choice : bool) : void
|
|
||||||
+ getFriends(userId : int) : User[]
|
|
||||||
}
|
|
||||||
|
|
||||||
class Ask {
|
|
||||||
- fromUser : int
|
|
||||||
- toUser : int
|
|
||||||
}
|
|
||||||
|
|
||||||
Ask --|> Subject
|
|
||||||
|
|
||||||
abstract class Subject {
|
|
||||||
+ attach(o : Observer) : void
|
|
||||||
+ detach(o : Observer) : void
|
|
||||||
+ notify() : void
|
|
||||||
}
|
|
||||||
|
|
||||||
Subject "1" --> "*" Observer
|
|
||||||
interface Observer {
|
|
||||||
+ update() : void
|
|
||||||
}
|
|
||||||
|
|
||||||
UserManager ..> User
|
|
||||||
UserManager o-- IUserRepository
|
|
||||||
UserManager o-- INotifier
|
|
||||||
|
|
||||||
interface IUserRepository {
|
|
||||||
+ findByUsername(username : string) : User
|
|
||||||
+ addUser(user : User) : bool
|
|
||||||
}
|
|
||||||
|
|
||||||
IUserRepository ..> User
|
|
||||||
@enduml
|
|
@ -1,20 +0,0 @@
|
|||||||
@startuml
|
|
||||||
actor User as u
|
|
||||||
boundary View as v
|
|
||||||
control Controller as c
|
|
||||||
entity Model as m
|
|
||||||
|
|
||||||
m-->c: pendingRequests: Request[]
|
|
||||||
|
|
||||||
c-->v: DisplayPendingRequests(pendingRequests)
|
|
||||||
v-->u: Show Friend Requests
|
|
||||||
|
|
||||||
u->v: RespondToRequest(requestId, response)
|
|
||||||
v-->c: RecordResponse(requestId, response)
|
|
||||||
|
|
||||||
c->m: UpdateRequestStatus(requestId, response)
|
|
||||||
m-->c: updateStatus: success/failure
|
|
||||||
c-->v: NotifyUpdateResult(updateStatus)
|
|
||||||
v-->u: Show Response Result
|
|
||||||
|
|
||||||
@enduml
|
|
@ -1,28 +0,0 @@
|
|||||||
@startuml
|
|
||||||
actor User as u
|
|
||||||
boundary View as v
|
|
||||||
control Controller as c
|
|
||||||
entity Model as m
|
|
||||||
|
|
||||||
u->v: Request Friends Page
|
|
||||||
v->c: Get /Friends
|
|
||||||
c->m: getFriends(userId)
|
|
||||||
alt successful retrieval
|
|
||||||
m-->c: friendsList: User[]
|
|
||||||
else retrieval failed
|
|
||||||
m-->c: error
|
|
||||||
end
|
|
||||||
c-->v: renderView(friendsList)
|
|
||||||
v-->u: Display Friends
|
|
||||||
|
|
||||||
u->v: clickDeleteFriend(idUser)
|
|
||||||
v->c: Post: deleteFriend(idUser)
|
|
||||||
c->m: deleteFriend(idUser)
|
|
||||||
alt successful deletion
|
|
||||||
m-->c: updatedFriendsList: User[]
|
|
||||||
else deletion failed
|
|
||||||
m-->c: error
|
|
||||||
end
|
|
||||||
c-->v: renderView(updatedFriendsList)
|
|
||||||
v-->u: Display Updated Friends
|
|
||||||
@enduml
|
|
@ -0,0 +1,121 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# BDD
|
||||||
|
|
||||||
|
```plantuml
|
||||||
|
@startuml
|
||||||
|
skinparam classAttributeIconSize 0
|
||||||
|
package MLD{
|
||||||
|
entity "Athlète" as athlete {
|
||||||
|
{static} idAthlete
|
||||||
|
nom
|
||||||
|
prénom
|
||||||
|
email
|
||||||
|
sexe
|
||||||
|
taille
|
||||||
|
poids
|
||||||
|
motDePasse
|
||||||
|
dateNaissance
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "Amitié" as friendship{
|
||||||
|
{static}# idAthlete1
|
||||||
|
{static}# idAthlete2
|
||||||
|
début
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "Notification" as notif {
|
||||||
|
{static} idNotif
|
||||||
|
message
|
||||||
|
date
|
||||||
|
statut
|
||||||
|
urgence
|
||||||
|
#athleteId
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "Coach" as coach {
|
||||||
|
{static} idCoach
|
||||||
|
// attributs spécifiques au coach
|
||||||
|
#athleteId
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "Statistique" as stats {
|
||||||
|
{static} idStatistique
|
||||||
|
poids
|
||||||
|
fcMoyenne
|
||||||
|
fcMax
|
||||||
|
caloriesBrûléesMoy
|
||||||
|
date
|
||||||
|
#athleteId
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "Entraînement" as training {
|
||||||
|
{static} idEntrainement
|
||||||
|
date
|
||||||
|
description
|
||||||
|
// Exercices
|
||||||
|
latitude
|
||||||
|
longitude
|
||||||
|
feedback
|
||||||
|
#coachId
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "Participe" as takepart {
|
||||||
|
{static} #athleteId
|
||||||
|
{static} #entrainementId
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
entity "SourceDonnée" as source {
|
||||||
|
{static} idSource
|
||||||
|
type
|
||||||
|
modèle
|
||||||
|
précision
|
||||||
|
#athleteId
|
||||||
|
}
|
||||||
|
|
||||||
|
entity "Activité" as activity {
|
||||||
|
{static} idActivité
|
||||||
|
type
|
||||||
|
date
|
||||||
|
heureDeDébut
|
||||||
|
heureDeFin
|
||||||
|
effortRessent
|
||||||
|
variabilité
|
||||||
|
variance
|
||||||
|
ecartType
|
||||||
|
moyenne
|
||||||
|
maximum
|
||||||
|
minimum
|
||||||
|
temperatureMoyenne
|
||||||
|
#athleteId
|
||||||
|
#sourceId
|
||||||
|
}
|
||||||
|
entity "FréquenceCardiaque" as fc {
|
||||||
|
{static} idFc
|
||||||
|
altitude
|
||||||
|
temps : time
|
||||||
|
température
|
||||||
|
bpm
|
||||||
|
longitude
|
||||||
|
latitude
|
||||||
|
#activitéId
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
activity --> athlete
|
||||||
|
activity --> source
|
||||||
|
activity <-- fc
|
||||||
|
coach --> athlete
|
||||||
|
athlete <-- source
|
||||||
|
stats --> athlete
|
||||||
|
takepart --> athlete
|
||||||
|
takepart --> training
|
||||||
|
friendship --> athlete
|
||||||
|
notif --> athlete
|
||||||
|
coach <-- training
|
||||||
|
athlete <-- friendship
|
||||||
|
@enduml
|
||||||
|
```
|
@ -0,0 +1,56 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# Introduction au Cas d'utilisation : Suivi d'une Équipe Sportive
|
||||||
|
|
||||||
|
Bienvenue dans le monde dynamique du suivi d'équipe sportive, où notre application offre une plateforme complète pour les entraîneurs soucieux d'optimiser les performances de leurs athlètes. Ce diagramme de cas d'utilisation vous plonge dans les fonctionnalités clés qui facilitent la gestion d'une équipe sportive avec efficacité.
|
||||||
|
|
||||||
|
**Acteurs Principaux :**
|
||||||
|
|
||||||
|
- **Coach :** Le protagoniste central, utilisant l'application pour gérer et superviser son équipe.
|
||||||
|
|
||||||
|
**Fonctionnalités Clés :**
|
||||||
|
|
||||||
|
- **Ajouter un Athlète :** Permet au coach d'ajouter de nouveaux membres à son équipe, avec des étapes incluant la validation par l'athlète et l'authentification.
|
||||||
|
|
||||||
|
- **Supprimer un Athlète :** Offre la possibilité de retirer des athlètes de l'équipe, avec une authentification préalable pour garantir la légitimité de l'action.
|
||||||
|
|
||||||
|
- **Afficher ses Athlètes :** Permet au coach de visualiser la liste complète de ses athlètes, nécessitant une authentification pour accéder à ces informations sensibles.
|
||||||
|
|
||||||
|
- **Afficher les Activités de Tous les Athlètes :** Donne au coach un aperçu global des activités de toute l'équipe, nécessitant une authentification pour garantir la confidentialité des données.
|
||||||
|
|
||||||
|
**Flux d'Interaction :**
|
||||||
|
|
||||||
|
- Le processus d'ajout d'un athlète inclut des étapes telles que la validation par l'athlète et l'authentification, garantissant une intégration fluide.
|
||||||
|
|
||||||
|
- Les actions de suppression, affichage des athlètes et affichage des activités nécessitent une authentification préalable pour assurer la sécurité des données.
|
||||||
|
|
||||||
|
- Des extensions telles que la visualisation des activités d'un athlète et l'analyse des performances offrent des fonctionnalités avancées pour un suivi détaillé.
|
||||||
|
|
||||||
|
Explorez ce diagramme pour comprendre l'étendue des fonctionnalités que notre application offre aux entraîneurs, les aidant à gérer leurs équipes de manière efficace et à maximiser le potentiel de chaque athlète.
|
||||||
|
|
||||||
|
```plantuml
|
||||||
|
left to right direction
|
||||||
|
:Coach: as a
|
||||||
|
|
||||||
|
a --> (Ajouter un athlète)
|
||||||
|
a --> (Supprimer un athlète)
|
||||||
|
a --> (Afficher ses athlètes )
|
||||||
|
a --> (Afficher les activités de tous les athlètes)
|
||||||
|
(Ajouter un athlète).>(Validation par l'athlète) : <<include>>
|
||||||
|
(Ajouter un athlète)..>(S'authentifier) : <<include>>
|
||||||
|
(Supprimer un athlète)..>(S'authentifier) : <<include>>
|
||||||
|
(Afficher ses athlètes )..>(S'authentifier) : <<include>>
|
||||||
|
(Afficher les activités de tous les athlètes)..>(S'authentifier) : <<include>>
|
||||||
|
(S'authentifier)..>(S'inscrire) : <<extends>>
|
||||||
|
(S'inscrire).>(Inscription Coach) : <<include>>
|
||||||
|
(S'authentifier)..>(Se connecter) : <<include>>
|
||||||
|
(Afficher ses athlètes )..>(Voir les activités d'un athlète) : <<extends>>
|
||||||
|
(Afficher ses athlètes )..>(Voir les stats d'un athlète) : <<extends>>
|
||||||
|
(Afficher les activités de tous les athlètes)..>(Sélectionner une activité) : <<include>>
|
||||||
|
(Sélectionner une activité)..>(Voir l'analyse) : <<extends>>
|
||||||
|
(Sélectionner une activité)..>(Exporter l'analyse) : <<extends>>
|
||||||
|
(Voir les activités d'un athlète)..>(Voir l'analyse) : <<extends>>
|
||||||
|
(Voir les activités d'un athlète)..>(Exporter l'analyse) : <<extends>>
|
||||||
|
```
|
@ -0,0 +1,58 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# Introduction au Cas d'utilisation : Gestion d'Activités pour un Athlète
|
||||||
|
|
||||||
|
Bienvenue dans l'univers dédié à la gestion d'activités sportives personnalisées pour les athlètes ! Ce diagramme de cas d'utilisation explore les différentes fonctionnalités offertes aux utilisateurs, mettant en avant la flexibilité et la richesse d'interactions pour une expérience utilisateur optimale.
|
||||||
|
|
||||||
|
**Acteurs Principaux :**
|
||||||
|
|
||||||
|
- **Athlète :** Le protagoniste central, utilisant l'application pour importer, gérer et analyser ses activités sportives.
|
||||||
|
|
||||||
|
**Fonctionnalités Clés :**
|
||||||
|
|
||||||
|
- **Importer des Données :** Permet à l'athlète d'importer des données d'activités depuis différentes sources, avec la possibilité de spécifier la source pour une intégration transparente.
|
||||||
|
|
||||||
|
- **Exporter Mes Données :** Offre la possibilité d'exporter l'ensemble des activités, avec des extensions pour exporter une activité spécifique, le tout soumis à une authentification préalable.
|
||||||
|
|
||||||
|
- **Ajouter une Activité :** Permet à l'athlète d'ajouter de nouvelles activités, avec des étapes inclusives telles que la saisie du titre, du type d'activité, de la source, du matériel utilisé et de la visibilité, chacune accessible via l'authentification.
|
||||||
|
|
||||||
|
- **Voir une Activité :** Permet à l'athlète de visualiser en détail une activité particulière, avec la possibilité d'exporter une analyse et de gérer la visibilité, soumis à une authentification.
|
||||||
|
|
||||||
|
- **Supprimer une Activité :** Offre la possibilité de retirer une activité, requérant une authentification pour garantir la sécurité des données.
|
||||||
|
|
||||||
|
**Flux d'Interaction :**
|
||||||
|
|
||||||
|
- Les actions telles que l'importation, l'exportation, l'ajout et la visualisation d'activités impliquent une authentification préalable pour garantir la confidentialité des données personnelles.
|
||||||
|
|
||||||
|
- Des inclusions précises, telles que la saisie du titre, du type d'activité, de la source, du matériel utilisé et de la visibilité, sont incorporées dans le processus d'ajout d'une activité, offrant une expérience utilisateur détaillée et conviviale.
|
||||||
|
|
||||||
|
Explorez ce diagramme pour comprendre la manière dont notre application place la gestion d'activités entre les mains des athlètes, les encourageant à suivre, analyser et optimiser leurs performances sportives de manière personnalisée et efficace.
|
||||||
|
|
||||||
|
|
||||||
|
```plantuml
|
||||||
|
left to right direction
|
||||||
|
:Athlete: as a
|
||||||
|
|
||||||
|
a --> (Importer des données)
|
||||||
|
(Importer des données) .> (Saisir la source) : <<include>>
|
||||||
|
a --> (Exporter mes données)
|
||||||
|
(Exporter mes données) .>(Exporter toutes les activités): <<extends>>
|
||||||
|
(Exporter mes données) ..>(Exporter une activité): <<include>>
|
||||||
|
a --> (Ajouter une activité)
|
||||||
|
(Ajouter une activité) ..>(Saisir un titre et une description): <<include>>
|
||||||
|
(Ajouter une activité) ..>(Saisir le type d'activité): <<include>>
|
||||||
|
(Ajouter une activité) .>(Saisir la source): <<include>>
|
||||||
|
(Saisir la source) ..>(Saisir le matériel utilisé): <<include>>
|
||||||
|
(Ajouter une activité) ..>(Saisir la visibilité): <<include>>
|
||||||
|
a --> (Voir une activité)
|
||||||
|
(Voir une activité) ..>(Exporter l'analyse): <<extends>>
|
||||||
|
(Voir une activité) ..>(Saisir la visibilité): <<extends>>
|
||||||
|
a --> (Supprimer une activité)
|
||||||
|
(Supprimer une activité) ..>(S'authentifier): <<include>>
|
||||||
|
(Importer des données) ...>(S'authentifier): <<include>>
|
||||||
|
(Exporter mes données) ...>(S'authentifier): <<include>>
|
||||||
|
(Ajouter une activité) ...>(S'authentifier): <<include>>
|
||||||
|
(Voir une activité) ...>(S'authentifier): <<include>>
|
||||||
|
```
|
@ -0,0 +1,56 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# Introduction au Cas d'utilisation : Gestion des Relations Sociales pour un Athlète
|
||||||
|
|
||||||
|
Bienvenue dans la sphère sociale de notre application dédiée aux athlètes ! Ce diagramme de cas d'utilisation explore les fonctionnalités sociales clés offertes aux utilisateurs, mettant en lumière la connectivité et l'interaction sociale au sein de notre communauté sportive.
|
||||||
|
|
||||||
|
**Acteurs Principaux :**
|
||||||
|
|
||||||
|
- **Athlète :** Le protagoniste central, utilisant l'application pour gérer ses relations sociales et explorer les profils de ses pairs.
|
||||||
|
|
||||||
|
**Fonctionnalités Clés :**
|
||||||
|
|
||||||
|
- **Ajouter un Ami :** Permet à l'athlète d'ajouter de nouveaux amis, nécessitant la saisie du nom de l'ami et soumis à une authentification préalable.
|
||||||
|
|
||||||
|
- **Supprimer un Ami :** Offre la possibilité de retirer un ami, exigeant une authentification pour garantir la sécurité des données.
|
||||||
|
|
||||||
|
- **Voir Mes Amis :** Permet à l'athlète de visualiser la liste de ses amis, avec la possibilité d'accéder à des fonctionnalités supplémentaires comme la visualisation des profils.
|
||||||
|
|
||||||
|
- **Modifier Mes Informations :** Offre à l'athlète la possibilité de mettre à jour ses informations personnelles et de connexion, avec des extensions pour des détails plus spécifiques.
|
||||||
|
|
||||||
|
**Flux d'Interaction :**
|
||||||
|
|
||||||
|
- Le processus d'ajout d'un ami inclut la saisie du nom de l'ami, tandis que la suppression d'un ami et la visualisation de la liste des amis sont soumises à une authentification préalable pour protéger la confidentialité.
|
||||||
|
|
||||||
|
- Les modifications d'informations englobent deux extensions : la mise à jour des informations personnelles et la mise à jour des informations de connexion, offrant une personnalisation approfondie du profil athlétique.
|
||||||
|
|
||||||
|
- La visualisation du profil d'un ami s'étend à des fonctionnalités telles que la consultation des activités et des statistiques de l'ami, ajoutant une dimension sociale à l'expérience de suivi sportif.
|
||||||
|
|
||||||
|
Explorez ce diagramme pour découvrir comment notre application encourage l'interaction sociale entre les athlètes, favorisant une communauté engagée et collaborative au sein de laquelle les utilisateurs peuvent partager, interagir et se soutenir mutuellement dans leur parcours sportif.
|
||||||
|
|
||||||
|
|
||||||
|
```plantuml
|
||||||
|
left to right direction
|
||||||
|
:Athlete: as a
|
||||||
|
|
||||||
|
a --> (Ajouter un ami)
|
||||||
|
a --> (Supprimer un ami)
|
||||||
|
a --> (Voir mes amis)
|
||||||
|
a --> (Modifier mes informations)
|
||||||
|
(Ajouter un ami)->(Saisir le nom de l'ami)
|
||||||
|
(Supprimer un ami)..>(S'authentifier) : <<include>>
|
||||||
|
(Ajouter un ami)..>(S'authentifier) : <<include>>
|
||||||
|
(Voir mes amis)..>(S'authentifier) : <<include>>
|
||||||
|
(Voir mes amis)..>(Lister les amis) : <<include>>
|
||||||
|
(Modifier mes informations)..>(Informations personnelles) : <<extends>>
|
||||||
|
(Modifier mes informations)..>(Informations de connexion) : <<extends>>
|
||||||
|
(Modifier mes informations)..>(S'authentifier) : <<include>>
|
||||||
|
(Lister les amis)..>(Voir son profil) : <<include>>
|
||||||
|
(Voir son profil)..>(Voir ses activités) : <<extends>>
|
||||||
|
(Voir son profil)..>(Voir ses statistiques) : <<extends>>
|
||||||
|
(S'authentifier)..>(S'inscrire) : <<extends>>
|
||||||
|
(S'authentifier)..>(Se connecter) : <<include>>
|
||||||
|
(S'inscrire)..>(Inscription Athlète) : <<include>>
|
||||||
|
```
|
@ -0,0 +1,203 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# Introduction au Diagramme de Classes : Plateforme de Gestion d'Activités Sportives
|
||||||
|
|
||||||
|
Bienvenue dans l'écosystème dynamique de notre plateforme de gestion d'activités sportives ! Ce diagramme de classes offre une vision complète des entités et des relations qui façonnent l'expérience des utilisateurs au sein de notre système.
|
||||||
|
|
||||||
|
**Entités Principales :**
|
||||||
|
|
||||||
|
- **Utilisateur (User) :** Représente les individus inscrits sur notre plateforme, avec des détails personnels tels que le nom, le prénom, l'email, etc. Chaque utilisateur a un rôle spécifique (Athlete, Coach) qui détermine ses interactions au sein de l'application.
|
||||||
|
|
||||||
|
- **Rôle (Role) :** Classe abstraite qui définit les rôles spécifiques des utilisateurs (Athlete, Coach). Contient des méthodes pour gérer les amis, les entraînements, et les demandes.
|
||||||
|
|
||||||
|
- **Athlète (Athlete) :** Spécialisation de la classe Role, représentant les utilisateurs actifs qui enregistrent des activités sportives, des statistiques, et interagissent avec d'autres athlètes.
|
||||||
|
|
||||||
|
- **Activité (Activite) :** Contient des détails sur une activité sportive tels que le type, la date, la durée, la fréquence cardiaque, etc.
|
||||||
|
|
||||||
|
- **Notification (Notification) :** Messages pour informer les utilisateurs des actions importantes.
|
||||||
|
|
||||||
|
- **Entraînement (Entrainement) :** Sessions planifiées d'activités physiques avec des détails comme la date, la localisation, la description, et les retours.
|
||||||
|
|
||||||
|
- **Statistique (Statistique) :** Informations détaillées sur les performances sportives d'un athlète, comprenant la distance totale, le poids, le temps total, la fréquence cardiaque, etc.
|
||||||
|
|
||||||
|
- **Source de Données (SourceDonnees) :** Représente les sources utilisées pour collecter des données, telles que les montres connectées.
|
||||||
|
|
||||||
|
**Relations Clés :**
|
||||||
|
|
||||||
|
- Les Utilisateurs ont un rôle spécifique (Athlete, Coach) qui détermine leurs fonctionnalités.
|
||||||
|
|
||||||
|
- Un Athlète peut enregistrer plusieurs Activités, Statistiques, et interagir avec différentes Sources de Données.
|
||||||
|
|
||||||
|
- Les Entraînements sont liés aux Utilisateurs, permettant une planification efficace.
|
||||||
|
|
||||||
|
- Les Notifications informent les Utilisateurs des événements importants.
|
||||||
|
|
||||||
|
Explorez ce diagramme pour comprendre comment notre plateforme offre une expérience complète, de la gestion des utilisateurs à l'enregistrement des activités sportives et au suivi des performances.
|
||||||
|
|
||||||
|
|
||||||
|
```plantuml
|
||||||
|
@startuml
|
||||||
|
class User {
|
||||||
|
- id: int
|
||||||
|
- username: String
|
||||||
|
- nom: string
|
||||||
|
- prenom: string
|
||||||
|
- email: string
|
||||||
|
- motDePasse: string
|
||||||
|
- sexe: string
|
||||||
|
- taille: float
|
||||||
|
- poids: float
|
||||||
|
- dateNaissance: \DateTime
|
||||||
|
+ getId(): int
|
||||||
|
+ getUsername(): string
|
||||||
|
+ setUsername(string $username): void
|
||||||
|
+ setId(int $id): void
|
||||||
|
+ getNom(): string
|
||||||
|
+ setNom(string $nom): void
|
||||||
|
+ getPrenom(): string
|
||||||
|
+ setPrenom(string $prenom): void
|
||||||
|
+ getEmail(): string
|
||||||
|
+ setEmail(string $email): void
|
||||||
|
+ getMotDePasse(): string
|
||||||
|
+ setMotDePasse(string $motDePasse): void
|
||||||
|
+ getSexe(): string
|
||||||
|
+ setSexe(string $sexe): void
|
||||||
|
+ getTaille(): float
|
||||||
|
+ setTaille(float $taille): void
|
||||||
|
+ getPoids(): float
|
||||||
|
+ setPoids(float $poids): void
|
||||||
|
+ getDateNaissance(): \DateTime
|
||||||
|
+ setDateNaissance(\DateTime $dateNaissance): void
|
||||||
|
+ getRole(): Role
|
||||||
|
+ setRole(Role $role): void
|
||||||
|
+ addNotification($notification): void
|
||||||
|
+ deleteNotification($index): void
|
||||||
|
+ isValidPassword(string $password): bool
|
||||||
|
+ __toString(): string
|
||||||
|
}
|
||||||
|
abstract class Role {
|
||||||
|
- id: int
|
||||||
|
- usersRequests: array
|
||||||
|
+ getUsersList(): array
|
||||||
|
+ getUsersRequests(): array
|
||||||
|
+ addUsersRequests(RelationshipRequest $request): void
|
||||||
|
+ removeRequest(RelationshipRequest $req): bool
|
||||||
|
+ CheckAdd(User $user): bool
|
||||||
|
+ addUser(User $user): bool
|
||||||
|
+ removeUser(User $user): bool
|
||||||
|
+ addTraining(Training $training): bool
|
||||||
|
+ getTrainingsList(): array
|
||||||
|
}
|
||||||
|
abstract class Coach extends Role {
|
||||||
|
}
|
||||||
|
class CoachAthlete extends Coach {
|
||||||
|
+ CheckAdd(User $user): bool
|
||||||
|
}
|
||||||
|
class Athlete extends Role {
|
||||||
|
+ getActivities(): array
|
||||||
|
+ addActivity(Activity $myActivity): bool
|
||||||
|
+ CheckAdd(User $user): bool
|
||||||
|
}
|
||||||
|
class Activite {
|
||||||
|
- idActivity: int
|
||||||
|
- type: String
|
||||||
|
- date: \DateTime
|
||||||
|
- heureDebut: \DateTime
|
||||||
|
- heureFin: \DateTime
|
||||||
|
- effortRessenti: int
|
||||||
|
- variability: float
|
||||||
|
- variance: float
|
||||||
|
- standardDeviation: float
|
||||||
|
- average: int
|
||||||
|
- maximum: int
|
||||||
|
- minimum: int
|
||||||
|
- avrTemperature: float
|
||||||
|
- hasAutoPause: bool
|
||||||
|
+ getIdActivity(): int
|
||||||
|
+ getType(): String
|
||||||
|
+ getDate(): \DateTime
|
||||||
|
+ getHeureDebut(): \DateTime
|
||||||
|
+ getHeureFin(): \DateTime
|
||||||
|
+ getEffortRessenti(): int
|
||||||
|
+ getVariability(): float
|
||||||
|
+ getVariance(): float
|
||||||
|
+ getStandardDeviation(): float
|
||||||
|
+ getAverage(): float
|
||||||
|
+ getMaximum(): int
|
||||||
|
+ getMinimum(): int
|
||||||
|
+ getAvrTemperature(): float
|
||||||
|
+ setType(String $type): void
|
||||||
|
+ setEffortRessenti(int $effortRessenti): void
|
||||||
|
+ __toString(): String
|
||||||
|
}
|
||||||
|
class Notification {
|
||||||
|
- type: string
|
||||||
|
- message: string
|
||||||
|
- toUserId: int
|
||||||
|
+ getType(): string
|
||||||
|
+ setType(string $type): void
|
||||||
|
+ getMessage(): string
|
||||||
|
+ setMessage(string $message): void
|
||||||
|
+ getToUserId(): int
|
||||||
|
+ setToUserId(int $toUserId): void
|
||||||
|
+ __construct(int $toUserId,string $type, string $message)
|
||||||
|
+ __toString(): string
|
||||||
|
}
|
||||||
|
class Entrainement {
|
||||||
|
- idTraining: int
|
||||||
|
- date: \DateTime
|
||||||
|
- latitude: float
|
||||||
|
- longitude: float
|
||||||
|
- description: String
|
||||||
|
- feedback: String
|
||||||
|
+ getId(): int
|
||||||
|
+ getDate(): \DateTime
|
||||||
|
+ getLocation(): String
|
||||||
|
+ getDescription(): String
|
||||||
|
+ getFeedback(): String
|
||||||
|
+ __toString(): String
|
||||||
|
}
|
||||||
|
class Statistique {
|
||||||
|
- idStat: int
|
||||||
|
- distanceTotale: float
|
||||||
|
- poids: float
|
||||||
|
- tempsTotal: time
|
||||||
|
- FCmoyenne: int
|
||||||
|
- FCmin: int
|
||||||
|
- FCmax: int
|
||||||
|
- cloriesBrulees: int
|
||||||
|
+ getIdStat(): int
|
||||||
|
+ getDistanceTotale(): float
|
||||||
|
+ getPoids(): float
|
||||||
|
+ getTempsTotal(): time
|
||||||
|
+ getFCmoyenne(): int
|
||||||
|
+ getFCmin(): int
|
||||||
|
+ getFCmax(): int
|
||||||
|
+ getCloriesBrulees(): int
|
||||||
|
+ __toString(): String
|
||||||
|
}
|
||||||
|
class SourceDonnees {
|
||||||
|
- idSource: int
|
||||||
|
- nom: String
|
||||||
|
- type: String
|
||||||
|
- precision: enum
|
||||||
|
- dateDerniereUtilisation: \DateTime
|
||||||
|
+ getIdSource(): int
|
||||||
|
+ getNom(): String
|
||||||
|
+ getType(): String
|
||||||
|
+ getPrecision(): enum
|
||||||
|
+ getDateDerniereUtilisation(): \DateTime
|
||||||
|
+ __toString(): String
|
||||||
|
}
|
||||||
|
User -> Role : role
|
||||||
|
Role -> User : usersList
|
||||||
|
Athlete -> Statistique : statsList
|
||||||
|
Athlete -> Activite : activityList
|
||||||
|
Athlete -> SourceDonnees : sdList
|
||||||
|
User -> Notification : notificationList
|
||||||
|
User -> Entrainement : trainingsList
|
||||||
|
Activite -> SourceDonnees : maSource
|
||||||
|
@enduml
|
||||||
|
```
|
@ -0,0 +1,91 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# Introduction au Diagramme de la Couche d'Accès aux Données
|
||||||
|
|
||||||
|
Bienvenue dans le cœur de notre système, où les données prennent vie à travers des ensembles de données (repositories) structurés et performants. Ce diagramme met en lumière la conception de la couche d'accès aux données de notre application, offrant un aperçu clair de la gestion des entités clées telles que les utilisateurs, les notifications, les demandes de relations et les entraînements.
|
||||||
|
|
||||||
|
**Principes Fondamentaux :**
|
||||||
|
|
||||||
|
- **IGenericRepository :** Une abstraction générique établissant les contrats essentiels pour l'accès aux données. Définissant des opérations standardisées telles que la récupération, la mise à jour, l'ajout et la suppression d'entités.
|
||||||
|
|
||||||
|
- **Interfaces Spécialisées :** Des interfaces telles que `IUserRepository`, `INotificationRepository`, `IRelationshipRequestRepository` et `ITrainingRepository` étendent les fonctionnalités génériques pour répondre aux besoins spécifiques de chaque entité.
|
||||||
|
|
||||||
|
**Repositories Concrets :**
|
||||||
|
|
||||||
|
- **UserRepository :** Gère les données relatives aux utilisateurs, permettant des opérations de récupération, de mise à jour et de suppression avec une efficacité optimale.
|
||||||
|
|
||||||
|
- **NotificationRepository :** Responsable de la gestion des notifications, assurant un accès structuré et une manipulation sécurisée de ces informations cruciales.
|
||||||
|
|
||||||
|
- **RelationshipRequestRepository :** Facilite la gestion des demandes de relations entre utilisateurs, garantissant une interaction claire et ordonnée.
|
||||||
|
|
||||||
|
- **TrainingRepository :** Permet l'accès et la manipulation des données liées aux entraînements, facilitant le suivi des performances athlétiques.
|
||||||
|
|
||||||
|
Explorez ce diagramme pour découvrir la robustesse de notre architecture de gestion des données, mettant en œuvre des pratiques de développement SOLID pour assurer une expérience utilisateur fiable et évolutive.
|
||||||
|
|
||||||
|
```plantuml
|
||||||
|
@startuml couche_acces_aux_donnees
|
||||||
|
abstract class IGenericRepository {
|
||||||
|
+ getItemById(int id) : object
|
||||||
|
+ getNbItems() : int
|
||||||
|
+ getItems(int index, int count, string orderingPropertyName, bool descending) : array
|
||||||
|
+ getItemsByName(string substring, int index, int count, string orderingPropertyName, bool descending) : array
|
||||||
|
+ getItemByName(string substring, int index, int count, string orderingPropertyName, bool descending) : object
|
||||||
|
+ updateItem(oldItem, newItem) : void
|
||||||
|
+ addItem(item) : void
|
||||||
|
+ deleteItem(item) : bool
|
||||||
|
}
|
||||||
|
interface IUserRepository extends IGenericRepository {
|
||||||
|
}
|
||||||
|
interface INotificationRepository extends IGenericRepository {
|
||||||
|
}
|
||||||
|
interface IRelationshipRequestRepository extends IGenericRepository {
|
||||||
|
}
|
||||||
|
interface ITrainingRepository extends IGenericRepository {
|
||||||
|
}
|
||||||
|
class NotificationRepository implements INotificationRepository {
|
||||||
|
- notifications : array
|
||||||
|
+ getItemById(int id) : object
|
||||||
|
+ getNbItems() : int
|
||||||
|
+ getItems(int index, int count, string orderingPropertyName, bool descending) : array
|
||||||
|
+ getItemsByName(string substring, int index, int count, string orderingPropertyName, bool descending) : array
|
||||||
|
+ getItemByName(string substring, int index, int count, string orderingPropertyName, bool descending) : object
|
||||||
|
+ updateItem(oldItem, newItem) : void
|
||||||
|
+ addItem(item) : void
|
||||||
|
+ deleteItem(item) : bool
|
||||||
|
}
|
||||||
|
class RelationshipRequestRepository implements IRelationshipRequestRepository {
|
||||||
|
- requests : array
|
||||||
|
+ getItemById(int id) : object
|
||||||
|
+ getNbItems() : int
|
||||||
|
+ getItems(int index, int count, string orderingPropertyName, bool descending) : array
|
||||||
|
+ getItemsByName(string substring, int index, int count, string orderingPropertyName, bool descending) : array
|
||||||
|
+ getItemByName(string substring, int index, int count, string orderingPropertyName, bool descending) : object
|
||||||
|
+ updateItem(oldItem, newItem) : void
|
||||||
|
+ addItem(item) : void
|
||||||
|
+ deleteItem(item) : bool
|
||||||
|
}
|
||||||
|
class TrainingRepository implements ITrainingRepository {
|
||||||
|
- trainings : array
|
||||||
|
+ getItemById(int id) : object
|
||||||
|
+ getNbItems() : int
|
||||||
|
+ getItems(int index, int count, string orderingPropertyName, bool descending) : array
|
||||||
|
+ getItemsByDate(date, int index, int count, string orderingPropertyName, bool descending) : array
|
||||||
|
+ updateItem(oldItem, newItem) : void
|
||||||
|
+ addItem(item) : void
|
||||||
|
+ deleteItem(item) : bool
|
||||||
|
}
|
||||||
|
class UserRepository implements IUserRepository {
|
||||||
|
- users : array
|
||||||
|
+ getItemById(int id) : object
|
||||||
|
+ getNbItems() : int
|
||||||
|
+ getItems(int index, int count, string orderingPropertyName, bool descending) : array
|
||||||
|
+ getItemsByName(string substring, int index, int count, string orderingPropertyName, bool descending) : array
|
||||||
|
+ getItemByName(string substring, int index, int count, string orderingPropertyName, bool descending) : object
|
||||||
|
+ updateItem(oldItem, newItem) : void
|
||||||
|
+ addItem(item) : void
|
||||||
|
+ deleteItem(item) : bool
|
||||||
|
}
|
||||||
|
@enduml
|
||||||
|
```
|
@ -0,0 +1,139 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# Introduction au Diagramme de Classes : Statistiques pour Coach
|
||||||
|
|
||||||
|
Bienvenue dans l'univers captivant de notre système de gestion d'activités sportives avec une mise au point spéciale sur les statistiques destinées aux coaches. Ce diagramme de classes offre une vue approfondie de la manière dont les utilisateurs, en particulier les athlètes et les coaches, interagissent avec les données de performance.
|
||||||
|
|
||||||
|
**Entités Principales :**
|
||||||
|
|
||||||
|
- **Utilisateur (User) :** Représente les individus inscrits sur notre plateforme, avec des détails personnels et un rôle spécifique dans l'écosystème sportif.
|
||||||
|
|
||||||
|
- **Athlète (Athlete) :** Un type spécialisé d'utilisateur qui peut enregistrer des statistiques liées à ses activités sportives.
|
||||||
|
|
||||||
|
- **Coach (Coach) :** Un rôle qui s'étend à partir de la classe abstraite Role, dédié à la gestion des athlètes et de leurs statistiques.
|
||||||
|
|
||||||
|
- **Statistique (Statistique) :** Contient des informations détaillées sur les performances sportives d'un athlète, telles que la distance totale, le poids, le temps total, la fréquence cardiaque moyenne, minimale et maximale, ainsi que les calories brûlées.
|
||||||
|
|
||||||
|
**Relations Clés :**
|
||||||
|
|
||||||
|
- Les Utilisateurs ont un rôle spécifique (Athlete, Coach) qui influence leurs interactions au sein de la plateforme.
|
||||||
|
|
||||||
|
- Un Coach peut gérer une liste d'athlètes et avoir accès à leurs statistiques.
|
||||||
|
|
||||||
|
- Un Athlète peut enregistrer plusieurs statistiques liées à ses activités.
|
||||||
|
|
||||||
|
**Objectif Principal :**
|
||||||
|
|
||||||
|
- Permettre aux coaches d'accéder et de surveiller les statistiques détaillées de leurs athlètes, offrant ainsi un aperçu complet de leurs performances sportives.
|
||||||
|
|
||||||
|
Explorez ce diagramme pour découvrir comment notre application crée une synergie entre les utilisateurs, les rôles, et les statistiques, contribuant ainsi à une expérience enrichissante dans le suivi des activités sportives.
|
||||||
|
|
||||||
|
|
||||||
|
```plantuml
|
||||||
|
@startuml
|
||||||
|
class Athlete {
|
||||||
|
+ getAthlete(): Athlete
|
||||||
|
+ getStatistic(): ?array
|
||||||
|
+ getUsersList(): array
|
||||||
|
+ getUserList(user: User): User
|
||||||
|
+ CheckAdd(user: User): bool
|
||||||
|
+ addUser(user: User): bool
|
||||||
|
+ removeUser(user: User): bool
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class Coach {
|
||||||
|
+ abstract getUsersList(): ?array
|
||||||
|
+ abstract getUserList(user: User): User
|
||||||
|
}
|
||||||
|
|
||||||
|
class CoachAthlete {
|
||||||
|
+ getUsersList(): ?array
|
||||||
|
+ getUserList(user: User): User
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class Role {
|
||||||
|
- int id
|
||||||
|
- array usersList
|
||||||
|
- TrainingRepository trainingRepository
|
||||||
|
+ abstract __construct(trainingRepository: ?TrainingRepository)
|
||||||
|
+ abstract getUsersList(): ?array
|
||||||
|
+ abstract getUserList(user: User): User
|
||||||
|
+ abstract getTraining(): ?TrainingRepository
|
||||||
|
+ abstract getTrainingsList(): ?array
|
||||||
|
+ abstract getTrainingList(training: Training): ?Training
|
||||||
|
+ abstract CheckAdd(user: User): bool
|
||||||
|
+ abstract CheckAddTraining(training: Training): bool
|
||||||
|
+ abstract addUser(user: User): bool
|
||||||
|
+ abstract removeUser(user: User): bool
|
||||||
|
+ abstract addTraining(training: Training): bool
|
||||||
|
+ abstract removeTraining(training: Training): bool
|
||||||
|
}
|
||||||
|
|
||||||
|
class User {
|
||||||
|
- int id
|
||||||
|
- String username
|
||||||
|
- string nom
|
||||||
|
- string prenom
|
||||||
|
- string email
|
||||||
|
- string motDePasse
|
||||||
|
- string sexe
|
||||||
|
- float taille
|
||||||
|
- float poids
|
||||||
|
- DateTime dateNaissance
|
||||||
|
+ __construct(id: int, username: String, nom: string, prenom: string, email: string, motDePasse: string, sexe: string, taille: float, poids: float, dateNaissance: DateTime, role: Role)
|
||||||
|
+ getId(): int
|
||||||
|
+ setId(id: int): void
|
||||||
|
+ getUsername(): String
|
||||||
|
+ setUsername(username: int): void
|
||||||
|
+ getNom(): string
|
||||||
|
+ setNom(nom: string): void
|
||||||
|
+ getPrenom(): string
|
||||||
|
+ setPrenom(prenom: string): void
|
||||||
|
+ getEmail(): string
|
||||||
|
+ setEmail(email: string): void
|
||||||
|
+ getMotDePasse(): string
|
||||||
|
+ setMotDePasse(motDePasse: string): void
|
||||||
|
+ getSexe(): string
|
||||||
|
+ setSexe(sexe: string): void
|
||||||
|
+ getTaille(): float
|
||||||
|
+ setTaille(taille: float): void
|
||||||
|
+ getPoids(): float
|
||||||
|
+ setPoids(poids: float): void
|
||||||
|
+ getDateNaissance(): DateTime
|
||||||
|
+ setDateNaissance(dateNaissance: DateTime): void
|
||||||
|
+ getRole(): Role
|
||||||
|
+ setRole(role: Role): void
|
||||||
|
+ isValidPassword(password: string): bool
|
||||||
|
+ __toString(): String
|
||||||
|
}
|
||||||
|
|
||||||
|
class Statistique {
|
||||||
|
- idStat: int
|
||||||
|
- distanceTotale: float
|
||||||
|
- poids: float
|
||||||
|
- tempsTotal: time
|
||||||
|
- FCmoyenne: int
|
||||||
|
- FCmin: int
|
||||||
|
- FCmax: int
|
||||||
|
- cloriesBrulees: int
|
||||||
|
+ getIdStat(): int
|
||||||
|
+ getDistanceTotale(): float
|
||||||
|
+ getPoids(): float
|
||||||
|
+ getTempsTotal(): time
|
||||||
|
+ getFCmoyenne(): int
|
||||||
|
+ getFCmin(): int
|
||||||
|
+ getFCmax(): int
|
||||||
|
+ getCloriesBrulees(): int
|
||||||
|
+ __toString(): String
|
||||||
|
}
|
||||||
|
|
||||||
|
CoachAthlete --|> Coach
|
||||||
|
Coach --|> Role
|
||||||
|
Athlete --|> Role
|
||||||
|
User -> Role : role
|
||||||
|
Role -> User : usersList
|
||||||
|
Athlete -> Statistique : statsList
|
||||||
|
@enduml
|
||||||
|
````
|
@ -0,0 +1,92 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# Diagramme de Classes : Gestion des Utilisateurs et Notifications
|
||||||
|
|
||||||
|
Bienvenue dans le cœur de notre système, où la gestion des utilisateurs et des notifications prend vie à travers ce diagramme de classes. Explorez les relations et les fonctionnalités essentielles qui orchestrent l'interaction entre les utilisateurs, les demandes d'amis, et les notifications.
|
||||||
|
|
||||||
|
**Entités Principales :**
|
||||||
|
|
||||||
|
- **Utilisateur (User) :** Représente les individus inscrits sur notre plateforme, caractérisés par leur nom et établissant des liens d'amitié avec d'autres utilisateurs.
|
||||||
|
|
||||||
|
- **Notification (Notification) :** Contient le texte informatif des notifications qui peuvent être émises par le système.
|
||||||
|
|
||||||
|
- **Demande d'Ami (Ask) :** Modélise une demande d'amitié émise par un utilisateur en direction d'un autre.
|
||||||
|
|
||||||
|
**Interfaces et Classes Abstraites :**
|
||||||
|
|
||||||
|
- **INotifier :** Interface définissant la méthode `notify()`, implémentée par des classes concrètes pour gérer la notification aux observateurs.
|
||||||
|
|
||||||
|
- **Observer :** Interface définissant la méthode `update()`, implémentée par les classes qui souhaitent être informées des changements dans un sujet observé.
|
||||||
|
|
||||||
|
- **UserManager :** Classe abstraite gérant la logique métier liée aux utilisateurs, tels que l'ajout ou la suppression d'amis, la réponse aux demandes d'amis, et la récupération de la liste d'amis.
|
||||||
|
|
||||||
|
- **IUserRepository :** Interface définissant les méthodes pour la recherche d'utilisateurs et l'ajout d'un nouvel utilisateur.
|
||||||
|
|
||||||
|
**Relations Clés :**
|
||||||
|
|
||||||
|
- Les utilisateurs peuvent avoir plusieurs amis et plusieurs notifications.
|
||||||
|
|
||||||
|
- La classe UserManager est connectée à IUserRepository pour gérer les opérations liées aux utilisateurs.
|
||||||
|
|
||||||
|
- Observer et Subject sont des composants du modèle de conception "Observer", permettant la notification efficace des changements dans le système.
|
||||||
|
|
||||||
|
Plongez-vous dans ce diagramme pour découvrir comment notre application crée un écosystème social dynamique, permettant aux utilisateurs d'interagir, de rester informés et de développer des liens significatifs au sein de la communauté.
|
||||||
|
|
||||||
|
|
||||||
|
```plantuml
|
||||||
|
class User {
|
||||||
|
+ name : string
|
||||||
|
}
|
||||||
|
|
||||||
|
User "1" --> "*" User: friends
|
||||||
|
User "1" --> "*" Notification: notifications
|
||||||
|
User "1" --> "*" Ask: friendRequests
|
||||||
|
class Notification {
|
||||||
|
- text : string
|
||||||
|
}
|
||||||
|
|
||||||
|
interface INotifier {
|
||||||
|
+ notify() : void
|
||||||
|
}
|
||||||
|
|
||||||
|
INotifier --|> Observer
|
||||||
|
|
||||||
|
abstract class UserManager {
|
||||||
|
- currentUser : User
|
||||||
|
+ deleteFriend(userId : int) : void
|
||||||
|
+ addFriend(userId : int) : void
|
||||||
|
+ respondToFriendRequest(requestId : int, choice : bool) : void
|
||||||
|
+ getFriends(userId : int) : User[]
|
||||||
|
}
|
||||||
|
|
||||||
|
class Ask {
|
||||||
|
- fromUser : int
|
||||||
|
- toUser : int
|
||||||
|
}
|
||||||
|
|
||||||
|
Ask --|> Subject
|
||||||
|
|
||||||
|
abstract class Subject {
|
||||||
|
+ attach(o : Observer) : void
|
||||||
|
+ detach(o : Observer) : void
|
||||||
|
+ notify() : void
|
||||||
|
}
|
||||||
|
|
||||||
|
Subject "1" --> "*" Observer
|
||||||
|
interface Observer {
|
||||||
|
+ update() : void
|
||||||
|
}
|
||||||
|
|
||||||
|
UserManager ..> User
|
||||||
|
UserManager o-- IUserRepository
|
||||||
|
UserManager o-- INotifier
|
||||||
|
|
||||||
|
interface IUserRepository {
|
||||||
|
+ findByUsername(username : string) : User
|
||||||
|
+ addUser(user : User) : bool
|
||||||
|
}
|
||||||
|
|
||||||
|
IUserRepository ..> User
|
||||||
|
```
|
@ -0,0 +1,201 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# Introduction au Modèle de Données de l'Application
|
||||||
|
|
||||||
|
L'architecture de données de notre application de suivi d'activités sportives repose sur un modèle robuste, avec des entités clés pour représenter les activités, les athlètes et les coachs. Découvrez les composants principaux de notre modèle de données :
|
||||||
|
|
||||||
|
## Activité
|
||||||
|
L'entité Activité représente une session d'activité sportive avec des détails variés tels que le type d'activité, la date, la durée, l'effort ressenti, etc. Le `ActiviteEntity` encapsule ces données, tandis que le `ActiviteGateway` gère la communication avec la base de données pour les activités.
|
||||||
|
|
||||||
|
## Athlète
|
||||||
|
L'entité Athlète représente un utilisateur de l'application qui participe à des activités sportives. Le `AthleteEntity` stocke les détails de l'athlète, et le `AtheletGateway` facilite l'accès et la gestion des données des athlètes.
|
||||||
|
|
||||||
|
## Coach
|
||||||
|
L'entité Coach représente un utilisateur qui peut superviser et coacher d'autres athlètes. Le `CoachEntity` stocke les détails du coach, tandis que le `CoachGateway` gère les interactions avec la base de données.
|
||||||
|
|
||||||
|
## Mapper
|
||||||
|
Les mappers, tels que `ActiviteMapper`, `AthleteMapper`, et `CoachMapper`, facilitent la conversion entre les entités et les modèles utilisés dans l'application.
|
||||||
|
|
||||||
|
## Connexion à la Base de Données
|
||||||
|
La classe `Connection` étend de `PDO` et assure la connexion à la base de données. Chaque Gateway utilise cette connexion pour interagir avec la base de données.
|
||||||
|
|
||||||
|
|
||||||
|
```plantuml
|
||||||
|
@startuml
|
||||||
|
class ActiviteEntity {
|
||||||
|
- idActivite: int
|
||||||
|
- type: string
|
||||||
|
- date: string
|
||||||
|
- heureDebut: string
|
||||||
|
- heureFin: string
|
||||||
|
- effortRessenti: int
|
||||||
|
- variabilite: int
|
||||||
|
- variance: int
|
||||||
|
- ecartType: int
|
||||||
|
- moyenne: int
|
||||||
|
- maximum: int
|
||||||
|
- minimum: int
|
||||||
|
- temperatureMoyenne: int
|
||||||
|
+ getIdActivite(): int
|
||||||
|
+ getType(): string
|
||||||
|
+ getDate(): string
|
||||||
|
+ getHeureDebut(): string
|
||||||
|
+ getHeureFin(): string
|
||||||
|
+ getEffortRessenti(): int
|
||||||
|
+ getVariabilite(): int
|
||||||
|
+ getVariance(): int
|
||||||
|
+ getEcartType(): int
|
||||||
|
+ getMoyenne(): int
|
||||||
|
+ getMaximum(): int
|
||||||
|
+ getMinimum(): int
|
||||||
|
+ getTemperatureMoyenne(): int
|
||||||
|
+ setIdActivite(idActivite: int): void
|
||||||
|
+ setType(type: string): void
|
||||||
|
+ setDate(date: string): void
|
||||||
|
+ setHeureDebut(heureDebut: string): void
|
||||||
|
+ setHeureFin(heureFin: string): void
|
||||||
|
+ setEffortRessenti(effortRessenti: int): void
|
||||||
|
+ setVariabilite(variabilite: int): void
|
||||||
|
+ setVariance(variance: int): void
|
||||||
|
+ setEcartType(ecartType: int): void
|
||||||
|
+ setMoyenne(moyenne: int): void
|
||||||
|
+ setMaximum(maximum: int): void
|
||||||
|
+ setMinimum(minimum: int): void
|
||||||
|
+ setTemperatureMoyenne(temperatureMoyenne: int): void
|
||||||
|
}
|
||||||
|
class ActiviteGateway {
|
||||||
|
+ __construct(connection: Connection)
|
||||||
|
+ getActivite(): ?array
|
||||||
|
+ getActiviteById(activiteId: int): ?array
|
||||||
|
+ getActiviteByType(type: string): ?array
|
||||||
|
+ getActiviteByDate(date: string): ?array
|
||||||
|
+ getActiviteByTimeRange(startTime: string, endTime: string): ?array
|
||||||
|
+ getActiviteByEffort(effortRessenti: int): ?array
|
||||||
|
+ getActiviteByVariability(variabilite: int): ?array
|
||||||
|
+ getActiviteByTemperature(temperatureMoyenne: int): ?array
|
||||||
|
+ addActivite(activite: ActiviteEntity): bool
|
||||||
|
+ updateActivite(oldActivite: ActiviteEntity, newActivite: ActiviteEntity): bool
|
||||||
|
+ deleteActivite(idActivite: int): bool
|
||||||
|
}
|
||||||
|
class ActiviteMapper {
|
||||||
|
+ map(data: array): ActiviteEntity
|
||||||
|
+ ActiviteEntityToModel(activiteEntity: ActiviteEntity): Activite
|
||||||
|
}
|
||||||
|
class AthleteEntity {
|
||||||
|
- idAthlete: int
|
||||||
|
- nom: string
|
||||||
|
- prenom: string
|
||||||
|
- email: string
|
||||||
|
- sexe: string
|
||||||
|
- taille: float
|
||||||
|
- poids: float
|
||||||
|
- motDePasse: string
|
||||||
|
- dateNaissance: string
|
||||||
|
+ getIdAthlete(): int
|
||||||
|
+ getNom(): string
|
||||||
|
+ getPrenom(): string
|
||||||
|
+ getEmail(): string
|
||||||
|
+ getSexe(): string
|
||||||
|
+ getTaille(): float
|
||||||
|
+ getPoids(): float
|
||||||
|
+ getMotDePasse(): string
|
||||||
|
+ getDateNaissance(): string
|
||||||
|
+ setIdAthlete(idAthlete: int): void
|
||||||
|
+ setNom(nom: string): void
|
||||||
|
+ setPrenom(prenom: string): void
|
||||||
|
+ setEmail(email: string): void
|
||||||
|
+ setSexe(sexe: string): void
|
||||||
|
+ setTaille(taille: float): void
|
||||||
|
+ setPoids(poids: float): void
|
||||||
|
+ setMotDePasse(motDePasse: string): void
|
||||||
|
+ setDateNaissance(dateNaissance: string): void
|
||||||
|
}
|
||||||
|
class AtheletGateway {
|
||||||
|
+ __construct(connection: Connection)
|
||||||
|
+ getAthlete(): ?array
|
||||||
|
+ getAthleteById(userId: int): ?array
|
||||||
|
+ getAthleteByName(name: string): ?array
|
||||||
|
+ getAthleteByFirstName(firstName: string): ?array
|
||||||
|
+ getAthleteByEmail(email: string): ?array
|
||||||
|
+ getAthleteByGender(gender: string): ?array
|
||||||
|
+ getAthleteByHeight(height: int): ?array
|
||||||
|
+ getAthleteByWeight(weight: int): ?array
|
||||||
|
+ getAthleteByBirthDate(birthdate: string): ?array
|
||||||
|
+ addAthlete(athlete: AthleteEntity): bool
|
||||||
|
+ updateAthlete(oldAthlete: AthleteEntity, newAthlete: AthleteEntity): bool
|
||||||
|
+ deleteAthlete(idAthlete: int): bool
|
||||||
|
}
|
||||||
|
class AthleteMapper {
|
||||||
|
+ fromSqlToEntity(data: array): array
|
||||||
|
+ athleteEntityToModel(athleteEntity: AthleteEntity): User
|
||||||
|
+ athleteToEntity(user: User): AthleteEntity
|
||||||
|
}
|
||||||
|
class CoachEntity {
|
||||||
|
- idCoach: int
|
||||||
|
- nom: string
|
||||||
|
- prenom: string
|
||||||
|
- email: string
|
||||||
|
- sexe: string
|
||||||
|
- taille: float
|
||||||
|
- poids: float
|
||||||
|
- motDePasse: string
|
||||||
|
- dateNaissance: string
|
||||||
|
+ getIdCoach(): int
|
||||||
|
+ getNom(): string
|
||||||
|
+ getPrenom(): string
|
||||||
|
+ getEmail(): string
|
||||||
|
+ getSexe(): string
|
||||||
|
+ getTaille(): float
|
||||||
|
+ getPoids(): float
|
||||||
|
+ getMotDePasse(): string
|
||||||
|
+ getDateNaissance(): string
|
||||||
|
+ setIdCoach(idCoach: int): void
|
||||||
|
+ setNom(nom: string): void
|
||||||
|
+ setPrenom(prenom: string): void
|
||||||
|
+ setEmail(email: string): void
|
||||||
|
+ setSexe(sexe: string): void
|
||||||
|
+ setTaille(taille: float): void
|
||||||
|
+ setPoids(poids: float): void
|
||||||
|
+ setMotDePasse(motDePasse: string): void
|
||||||
|
+ setDateNaissance(dateNaissance: string): void
|
||||||
|
}
|
||||||
|
class CoachGateway {
|
||||||
|
+ __construct(connection: Connection)
|
||||||
|
+ getCoach(): ?array
|
||||||
|
+ getCoachById(userId: int): ?array
|
||||||
|
+ getCoachByName(name: string): ?array
|
||||||
|
+ getCoachByFirstName(firstName: string): ?array
|
||||||
|
+ getCoachByEmail(email: string): ?array
|
||||||
|
+ getCoachByGender(gender : string): ?array
|
||||||
|
+ getCoachByHeight(height: int): ?array
|
||||||
|
+ getCoachByBirthDate(birthdate: string): ?array
|
||||||
|
+ addCoach(coach: CoachEntity): bool
|
||||||
|
+ updateCoach(oldCoach: CoachEntity, newCoach: CoachEntity): bool
|
||||||
|
+ deleteCoach(idCoach: int): bool
|
||||||
|
}
|
||||||
|
class CoachMapper {
|
||||||
|
+ map(data: array): CoachEntity
|
||||||
|
+ CoachEntityToModel(coachEntity: CoachEntity): User
|
||||||
|
+ CoachToEntity(user: User): CoachEntity
|
||||||
|
}
|
||||||
|
class Connection extends PDO {
|
||||||
|
- stmt
|
||||||
|
+ __construct(dsn: string, username: string, password: string)
|
||||||
|
+ executeQuery(query: string, parameters: array): bool
|
||||||
|
+ executeWithErrorHandling(query: string, params: array): array
|
||||||
|
+ getResults(): array
|
||||||
|
}
|
||||||
|
|
||||||
|
Connection <- ActiviteGateway : connection
|
||||||
|
Connection <- AtheletGateway : connection
|
||||||
|
Connection <- CoachGateway : connection
|
||||||
|
AthleteMapper -> AthleteEntity
|
||||||
|
CoachMapper -> CoachEntity
|
||||||
|
ActiviteMapper -> ActiviteEntity
|
||||||
|
ActiviteMapper -> ActiviteGateway
|
||||||
|
CoachMapper -> CoachGateway
|
||||||
|
AthleteMapper -> AtheletGateway
|
||||||
|
@enduml
|
||||||
|
```
|
@ -0,0 +1,137 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# Diagramme de classes pour l'importation de fichiers .fit
|
||||||
|
|
||||||
|
Bienvenue dans le monde de la gestion d'activités sportives avec notre application innovante ! Cette user story se concentre sur une fonctionnalité essentielle qui améliorera l'expérience des utilisateurs : l'importation de fichiers .fit. Nous avons conçu un diagramme de classes pour vous offrir une vision claire et structurée de la manière dont cette fonctionnalité est implémentée au sein de notre application.
|
||||||
|
|
||||||
|
**Acteurs Principaux :**
|
||||||
|
|
||||||
|
- Utilisateur (User) : Représente un individu inscrit sur notre plateforme, avec la capacité d'importer des fichiers .fit.
|
||||||
|
- Athlète (Athlete) : Un type spécialisé d'utilisateur, bénéficiant de fonctionnalités supplémentaires liées à la gestion d'activités sportives.
|
||||||
|
|
||||||
|
**Entités Clés :**
|
||||||
|
|
||||||
|
- Activité (Activity) : Représente une session d'activité physique, avec des détails tels que le type, la date, la durée, et plus encore.
|
||||||
|
- Gestionnaires (Managers) : Gérant différentes facettes de l'application, notamment les utilisateurs, les activités et les fichiers.
|
||||||
|
|
||||||
|
**Fonctionnalité Clé :**
|
||||||
|
|
||||||
|
- Importation de fichiers .fit : Permet aux utilisateurs de charger des données provenant de fichiers .fit, générés par des dispositifs de suivi d'activité. Ces fichiers contiennent des informations précieuses telles que la fréquence cardiaque, la distance parcourue et d'autres métriques essentielles.
|
||||||
|
|
||||||
|
**Architecture :**
|
||||||
|
|
||||||
|
- AuthService (Service d'Authentification) : Gère l'authentification des utilisateurs, garantissant un accès sécurisé à la fonction d'importation.
|
||||||
|
- UserManager (Gestionnaire d'Utilisateurs) : Gère les opérations liées aux utilisateurs, y compris l'importation de fichiers .fit.
|
||||||
|
ActivityManager (Gestionnaire d'Activités) : Responsable du stockage et de la gestion des activités importées.
|
||||||
|
|
||||||
|
**Objectif :**
|
||||||
|
|
||||||
|
Offrir aux utilisateurs, en particulier aux athlètes, la possibilité d'enrichir leur profil et de suivre leur performance en important des données détaillées à partir de fichiers .fit.
|
||||||
|
|
||||||
|
|
||||||
|
```plantuml
|
||||||
|
@startuml issue028_DiagrammeDeClasses
|
||||||
|
class Activite {
|
||||||
|
-idActivite:int
|
||||||
|
-type:String
|
||||||
|
-date:Date
|
||||||
|
-heureDebut:Date
|
||||||
|
-heureFin:Date
|
||||||
|
-effortRessenti:int
|
||||||
|
-variability:float
|
||||||
|
-variance:float
|
||||||
|
-standardDeviation:float
|
||||||
|
-average:float
|
||||||
|
-maximum:int
|
||||||
|
-minimum:int
|
||||||
|
-avrTemperature:float
|
||||||
|
-hasAutoPause:boolean
|
||||||
|
+getIdActivite():int
|
||||||
|
+getType():String
|
||||||
|
+getDate():Date
|
||||||
|
+getHeureDebut():Date
|
||||||
|
+getHeureFin():Date
|
||||||
|
+getEffortRessenti():int
|
||||||
|
+getVariability():float
|
||||||
|
+getVariance():float
|
||||||
|
+getStandardDeviation():float
|
||||||
|
+getAverage():float
|
||||||
|
+getMaximum():int
|
||||||
|
+getMinimum():int
|
||||||
|
+getAvrTemperature():float
|
||||||
|
+setType(type:String):void
|
||||||
|
+setEffortRessenti(effortRessenti:int):void
|
||||||
|
+__toString():String
|
||||||
|
}
|
||||||
|
class Role {
|
||||||
|
-id:int
|
||||||
|
}
|
||||||
|
class Athlete {
|
||||||
|
+getActivities():array
|
||||||
|
+addActivity(myActivity:Activity):boolean
|
||||||
|
}
|
||||||
|
class User {
|
||||||
|
-id:int
|
||||||
|
-username:String
|
||||||
|
-nom:String
|
||||||
|
-prenom:String
|
||||||
|
-email:String
|
||||||
|
-motDePasse:String
|
||||||
|
-sexe:String
|
||||||
|
-taille:float
|
||||||
|
-poids:float
|
||||||
|
-dateNaissance:Date
|
||||||
|
+getId():int
|
||||||
|
+setId(id:int):void
|
||||||
|
+getUsername():String
|
||||||
|
+setUsername(username:String):void
|
||||||
|
+getNom():String
|
||||||
|
+setNom(nom:String):void
|
||||||
|
+getPrenom():String
|
||||||
|
+setPrenom(prenom:String):void
|
||||||
|
+getEmail():String
|
||||||
|
+setEmail(email:String):void
|
||||||
|
+getMotDePasse():String
|
||||||
|
+setMotDePasse(motDePasse:String):void
|
||||||
|
+getSexe():String
|
||||||
|
+setSexe(sexe:String):void
|
||||||
|
+getTaille():float
|
||||||
|
+setTaille(taille:float):void
|
||||||
|
+getPoids():float
|
||||||
|
+setPoids(poids:float):void
|
||||||
|
+getDateNaissance():Date
|
||||||
|
+setDateNaissance(dateNaissance:Date):void
|
||||||
|
+getRole():Role
|
||||||
|
+setRole(role:Role):void
|
||||||
|
+isValidPassword(password:String):boolean
|
||||||
|
+__toString():String
|
||||||
|
}
|
||||||
|
class AthleteManager {
|
||||||
|
+getActivities():array
|
||||||
|
}
|
||||||
|
class ActivityManager {
|
||||||
|
+saveFitFileToJSON(monFichierFit:object):boolean
|
||||||
|
+uploadFile(type:string, effortRessenti:int, file_path_or_data:string|resource, options:array):boolean
|
||||||
|
}
|
||||||
|
class DataManager {
|
||||||
|
}
|
||||||
|
class UserManager {
|
||||||
|
+login(loginUser:string, passwordUser:string):boolean
|
||||||
|
+register(loginUser:string, passwordUser:string, data:array):boolean
|
||||||
|
+deconnecter():boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
User -> Role: role
|
||||||
|
Athlete -|> Role
|
||||||
|
DataManager -> UserManager: -userMgr
|
||||||
|
DataManager -> AthleteManager: -athleteMgr
|
||||||
|
DataManager -> ActivityManager: -activityMgr
|
||||||
|
UserManager -> AuthService: -authService
|
||||||
|
UserManager -> User: -currentUser
|
||||||
|
ActivityManager -> AuthService: -authService
|
||||||
|
Athlete -> Activite: listActivite
|
||||||
|
AthleteManager -> AuthService: -authService
|
||||||
|
@enduml
|
||||||
|
```
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
@ -0,0 +1,50 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# Introduction au Diagramme de Séquence : Gestion des Demandes d'Amis
|
||||||
|
|
||||||
|
Bienvenue dans le processus dynamique de gestion des demandes d'amis au sein de notre application ! Ce diagramme de séquence met en évidence les étapes clés impliquées dans la gestion des demandes d'amis entre utilisateurs.
|
||||||
|
|
||||||
|
**Acteurs Principaux :**
|
||||||
|
|
||||||
|
- **Utilisateur (u) :** L'individu interagissant avec l'application, recevant et répondant aux demandes d'amis.
|
||||||
|
|
||||||
|
**Flux d'Interaction :**
|
||||||
|
|
||||||
|
1. **Réception d'une Demande d'Ami :** Lorsqu'un utilisateur reçoit une demande d'ami, le modèle (Model) notifie le contrôleur (Controller) de la nouvelle demande, spécifiant l'identifiant de l'utilisateur émetteur.
|
||||||
|
|
||||||
|
2. **Affichage de la Demande d'Ami :** Le contrôleur transmet l'information à la vue (View), qui affiche la demande d'ami à l'utilisateur.
|
||||||
|
|
||||||
|
3. **Affichage de la Page des Demandes d'Amis :** L'utilisateur visualise la page des demandes d'amis dans l'interface utilisateur.
|
||||||
|
|
||||||
|
4. **Réponse à la Demande d'Ami :** L'utilisateur prend une décision quant à la demande d'ami, en répondant par un choix binaire (accepter ou refuser).
|
||||||
|
|
||||||
|
5. **Enregistrement de la Réponse :** La vue (View) transmet la réponse de l'utilisateur au contrôleur, qui enregistre cette réponse.
|
||||||
|
|
||||||
|
6. **Envoi de la Réponse :** Le contrôleur communique avec le modèle pour envoyer la réponse, indiquant si la demande a été acceptée (true) ou refusée (false).
|
||||||
|
|
||||||
|
À travers ce diagramme de séquence, découvrez comment notre application gère efficacement le processus de gestion des demandes d'amis, offrant aux utilisateurs une expérience transparente et réactive lors de l'établissement de connexions sociales au sein de la plateforme.
|
||||||
|
|
||||||
|
````plantuml
|
||||||
|
@startuml
|
||||||
|
actor User as u
|
||||||
|
boundary View as v
|
||||||
|
control Controller as c
|
||||||
|
entity Model as m
|
||||||
|
|
||||||
|
m-->c: pendingRequests: Request[]
|
||||||
|
|
||||||
|
c-->v: DisplayPendingRequests(pendingRequests)
|
||||||
|
v-->u: Show Friend Requests
|
||||||
|
|
||||||
|
u->v: RespondToRequest(requestId, response)
|
||||||
|
v-->c: RecordResponse(requestId, response)
|
||||||
|
|
||||||
|
c->m: UpdateRequestStatus(requestId, response)
|
||||||
|
m-->c: updateStatus: success/failure
|
||||||
|
c-->v: NotifyUpdateResult(updateStatus)
|
||||||
|
v-->u: Show Response Result
|
||||||
|
|
||||||
|
@enduml
|
||||||
|
``````
|
@ -0,0 +1,31 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# Introduction au Diagramme de Séquence : Recherche d'Amis
|
||||||
|
|
||||||
|
Bienvenue dans le processus dynamique de recherche d'amis au sein de notre application ! Ce diagramme de séquence met en lumière les étapes clés impliquées lorsque les utilisateurs recherchent des amis en utilisant un pseudo spécifique.
|
||||||
|
|
||||||
|
**Acteurs Principaux :**
|
||||||
|
|
||||||
|
- **Utilisateur (u) :** L'individu interagissant avec l'application, initié à la recherche d'amis.
|
||||||
|
|
||||||
|
**Flux d'Interaction :**
|
||||||
|
|
||||||
|
1. **Accès à la Fonctionnalité de Recherche :** L'utilisateur déclenche la fonctionnalité de recherche d'amis depuis son interface utilisateur.
|
||||||
|
|
||||||
|
2. **Saisie du Pseudo :** L'utilisateur entre le pseudo de l'ami qu'il souhaite rechercher.
|
||||||
|
|
||||||
|
3. **Requête de Recherche :** La vue (View) transmet la demande de recherche au contrôleur (Controller), qui déclenche une requête GET au serveur pour récupérer la liste des amis correspondant au pseudo saisi.
|
||||||
|
|
||||||
|
4. **Traitement de la Requête :** Le modèle (Model) récupère la liste d'amis correspondante en utilisant l'identifiant de l'utilisateur et notifie le contrôleur du résultat.
|
||||||
|
|
||||||
|
5. **Notification des Utilisateurs :** Le modèle informe également les utilisateurs concernés (émetteur et destinataire) de l'action de recherche effectuée.
|
||||||
|
|
||||||
|
6. **Rendu de la Vue :** Le contrôleur reçoit la liste d'amis du modèle et rend cette liste à la vue.
|
||||||
|
|
||||||
|
7. **Affichage des Résultats :** La vue affiche les résultats de la recherche à l'utilisateur, montrant les amis qui correspondent au pseudo saisi.
|
||||||
|
|
||||||
|
À travers ce diagramme de séquence, découvrez comment notre application facilite le processus de recherche d'amis, fournissant aux utilisateurs une interface conviviale et réactive pour élargir leur réseau social au sein de la plateforme.
|
||||||
|
|
||||||
|
<img src="AjouterAmis.png" alt="Diagramme de Séquence : Recherche d'Amis" width="1000"/>
|
@ -0,0 +1,41 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# Introduction au Processus de Connexion sur la Plateforme
|
||||||
|
|
||||||
|
Bienvenue sur notre plateforme de gestion d'activités sportives ! Pour offrir une expérience fluide et sécurisée, nous avons mis en place un processus de connexion intuitif. Découvrez comment accéder à votre compte ou créer un nouveau compte en quelques étapes simples.
|
||||||
|
|
||||||
|
**Étapes du Processus :**
|
||||||
|
|
||||||
|
1. **Demande de Page de Connexion :** L'utilisateur démarre en exprimant le désir de se connecter à la plateforme.
|
||||||
|
|
||||||
|
2. **Vérification de la Connexion Préexistante :** Le système vérifie si l'utilisateur est déjà connecté. En cas de connexion active, l'utilisateur est redirigé directement vers sa page de compte.
|
||||||
|
|
||||||
|
3. **Page de Connexion :** Si l'utilisateur n'est pas encore connecté, il est dirigé vers la page de connexion, où il peut saisir ses informations d'identification.
|
||||||
|
|
||||||
|
4. **Choix pour les Utilisateurs Possédant un Compte :** Si l'utilisateur a déjà un compte, il peut fournir ses informations de connexion existantes.
|
||||||
|
|
||||||
|
5. **Création de Compte pour les Nouveaux Utilisateurs :** Pour ceux qui n'ont pas encore de compte, l'option de création de compte est disponible. L'utilisateur peut fournir les détails nécessaires pour créer son compte.
|
||||||
|
|
||||||
|
6. **Page de Création de Compte :** Une page dédiée guide l'utilisateur tout au long du processus de création de compte, lui permettant de saisir les informations nécessaires.
|
||||||
|
|
||||||
|
7. **Validation et Connexion :** Une fois que les informations de connexion ou de création de compte sont fournies, le système procède à la vérification et connecte l'utilisateur à son compte.
|
||||||
|
|
||||||
|
|
||||||
|
```plantuml
|
||||||
|
actor User as u
|
||||||
|
u->Systeme : demandePageConnexion()
|
||||||
|
alt User déjà connecté
|
||||||
|
Systeme-->u : redirectionPageCompte()
|
||||||
|
end
|
||||||
|
Systeme-->u : PageConnexion()
|
||||||
|
alt User possède déjà un compte
|
||||||
|
u->Systeme:InfosConnexion()
|
||||||
|
else
|
||||||
|
u->Systeme:CreerCompte()
|
||||||
|
Systeme-->u :PageCreationCompte()
|
||||||
|
u->Systeme:InfosCreationCompte()
|
||||||
|
end
|
||||||
|
Systeme-->u :Connecter()
|
||||||
|
```
|
@ -0,0 +1,64 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour au diagramme de classes](../README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# Introduction au Diagramme de Séquence : Gestion des Amis
|
||||||
|
|
||||||
|
Bienvenue dans le processus dynamique de gestion des amis au sein de notre application ! Ce diagramme de séquence met en lumière les interactions entre l'utilisateur et l'application, ainsi que le flux d'informations entre les différentes composantes du système.
|
||||||
|
|
||||||
|
**Acteurs Principaux :**
|
||||||
|
|
||||||
|
- **Utilisateur (u) :** L'individu interagissant avec l'application, souhaitant consulter et gérer sa liste d'amis.
|
||||||
|
|
||||||
|
**Flux d'Interaction :**
|
||||||
|
|
||||||
|
1. **Demande de la Page d'Amis :** L'utilisateur déclenche la demande de la page d'amis, amorçant le processus d'affichage de sa liste d'amis.
|
||||||
|
|
||||||
|
2. **Récupération des Amis :** Le contrôleur (Controller) reçoit la demande et interagit avec le modèle (Model) pour récupérer la liste d'amis associée à l'identifiant de l'utilisateur.
|
||||||
|
|
||||||
|
- *Cas de Récupération Réussi :* Si la récupération est réussie, le modèle transmet la liste d'amis au contrôleur.
|
||||||
|
|
||||||
|
- *Cas d'Échec de Récupération :* En cas d'échec, une notification d'erreur est renvoyée.
|
||||||
|
|
||||||
|
3. **Affichage de la Liste d'Amis :** Le contrôleur rend la vue (View) en utilisant la liste d'amis récupérée, qui est ensuite affichée à l'utilisateur.
|
||||||
|
|
||||||
|
4. **Suppression d'un Ami :** L'utilisateur décide de supprimer un ami spécifique en cliquant sur l'option correspondante.
|
||||||
|
|
||||||
|
5. **Traitement de la Suppression :** Le contrôleur, en réponse à la demande de suppression, envoie une requête au modèle pour effectuer la suppression de l'ami identifié par son identifiant utilisateur (idUser).
|
||||||
|
|
||||||
|
- *Cas de Suppression Réussie :* Si la suppression est réussie, le modèle renvoie la liste d'amis mise à jour.
|
||||||
|
|
||||||
|
- *Cas d'Échec de Suppression :* En cas d'échec, une notification d'erreur est renvoyée.
|
||||||
|
|
||||||
|
6. **Affichage de la Liste d'Amis Mise à Jour :** La vue est mise à jour avec la nouvelle liste d'amis, qui est ensuite affichée à l'utilisateur.
|
||||||
|
|
||||||
|
À travers ce diagramme de séquence, découvrez comment notre application gère de manière fluide et réactive les interactions de l'utilisateur avec sa liste d'amis, garantissant une expérience utilisateur cohérente et sans heurts.
|
||||||
|
|
||||||
|
```plantuml
|
||||||
|
actor User as u
|
||||||
|
boundary View as v
|
||||||
|
control Controller as c
|
||||||
|
entity Model as m
|
||||||
|
|
||||||
|
u->v: Request Friends Page
|
||||||
|
v->c: Get /Friends
|
||||||
|
c->m: getFriends(userId)
|
||||||
|
alt successful retrieval
|
||||||
|
m-->c: friendsList: User[]
|
||||||
|
else retrieval failed
|
||||||
|
m-->c: error
|
||||||
|
end
|
||||||
|
c-->v: renderView(friendsList)
|
||||||
|
v-->u: Display Friends
|
||||||
|
|
||||||
|
u->v: clickDeleteFriend(idUser)
|
||||||
|
v->c: Post: deleteFriend(idUser)
|
||||||
|
c->m: deleteFriend(idUser)
|
||||||
|
alt successful deletion
|
||||||
|
m-->c: updatedFriendsList: User[]
|
||||||
|
else deletion failed
|
||||||
|
m-->c: error
|
||||||
|
end
|
||||||
|
c-->v: renderView(updatedFriendsList)
|
||||||
|
v-->u: Display Updated Friends
|
||||||
|
```
|
@ -0,0 +1,23 @@
|
|||||||
|
[retour au README.md](../../README.md)
|
||||||
|
[Retour aux Documents](../README_DOCUMENTS.md)
|
||||||
|
|
||||||
|
# Diagrammes nécéssaires à notre projet
|
||||||
|
|
||||||
|
## Diagrammes de classes
|
||||||
|
- [issue016 - Statistiques coach ](DiagrammeDeClasses/README_issue016.md)
|
||||||
|
- [issue022 - Ajout des amis ](DiagrammeDeClasses/README_issue022.md)
|
||||||
|
- [issue023 - User Gateway ](DiagrammeDeClasses/README_issue023.md)
|
||||||
|
- [issue028 - Importation de fichiers .fit](DiagrammeDeClasses/README_issue028.md)
|
||||||
|
- [couche d'accès aux données](DiagrammeDeClasses/README_accesDonnees.md)
|
||||||
|
- [Diagramme général](DiagrammeDeClasses/README_DIAGRAMME.md)
|
||||||
|
|
||||||
|
## Diagrammes de séquence
|
||||||
|
- [Envoi de demande d'ami](DiagrammeDeSequence/README_demandeAmi.md)
|
||||||
|
- [Accepter une demande d'ami](DiagrammeDeSequence/README_accepterAmi.md)
|
||||||
|
- [Supprimer un ami](DiagrammeDeSequence/README_suppressionAmi.md)
|
||||||
|
- [issue021 - Authentification ](DiagrammeDeSequence/README_issue021.md)
|
||||||
|
|
||||||
|
## Diagrammes de cas d'utilisation
|
||||||
|
- [Cas d'utilisation pour la gestion du compte et des amitiés](CasUtilisations/README_gestionCompteAmitie.md)
|
||||||
|
- [Cas d'utilisation pour la gestion des activités et données](CasUtilisations/README_gestionActivites.md)
|
||||||
|
- [Cas d'utilisation pour la suivi d'une équipe sportive](CasUtilisations/README_coachSuiviSportif.md)
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
@ -0,0 +1,13 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour à la Gestion](../README_GESTION.md)
|
||||||
|
|
||||||
|
# GANTT
|
||||||
|
## Comparaison GANTT
|
||||||
|
- [Comparaison GANTT - Excel](CompraraisonGANTT.xlsx)
|
||||||
|
|
||||||
|
<img src="ComparaisonGANTT.png">
|
||||||
|
|
||||||
|
## Gestion de projet - MSProject
|
||||||
|
- [Gestion de projet - MSProject](Gantt.mpp)
|
||||||
|
- [GANTT - PDF](Gantt.pdf)
|
After Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
@ -0,0 +1,10 @@
|
|||||||
|
[retour au README.md](../../../README.md)
|
||||||
|
[Retour aux Documents](../../README_DOCUMENTS.md)
|
||||||
|
[Retour à la Gestion](../README_GESTION.md)
|
||||||
|
|
||||||
|
## PERT
|
||||||
|
- [PERT - Excel](PERT.xlsx)
|
||||||
|
|
||||||
|
### PERT - Image
|
||||||
|
<img src="PERT1.png">
|
||||||
|
<img src="PERT2.png">
|
@ -0,0 +1,10 @@
|
|||||||
|
[retour au README.md](../../README.md)
|
||||||
|
[Retour aux Documents](../README_DOCUMENTS.md)
|
||||||
|
|
||||||
|
# Gestion de projet
|
||||||
|
|
||||||
|
## PERT
|
||||||
|
- [PERT](PERT/README_PERT.md)
|
||||||
|
|
||||||
|
## GANTT
|
||||||
|
- [GANTT](GANTT/README_GANTT.md)
|
@ -0,0 +1,8 @@
|
|||||||
|
[retour au README.md](../../README.md)
|
||||||
|
[Retour aux Documents](../README_DOCUMENTS.md)
|
||||||
|
|
||||||
|
|
||||||
|
# Personas
|
||||||
|
- [Personas Elsa Justin - PDF](ElsaJustin.pdf)
|
||||||
|
- [Personas Ethan Hulist - PDF](EthanHulist.pdf)
|
||||||
|
- [Personas Jules Gerdoli - PDF](JulesGerdoli.pdf)
|
@ -0,0 +1,11 @@
|
|||||||
|
[README.md](../README.md)
|
||||||
|
## SOMMAIRE
|
||||||
|
# Diagrammes
|
||||||
|
- [Diagrammes](Diagramme/README_DIAGRAMMES.md)
|
||||||
|
|
||||||
|
# Personnas
|
||||||
|
- [Personnas](Personnas/README_PERSONNAS.md)
|
||||||
|
|
||||||
|
|
||||||
|
# Gestion de projet
|
||||||
|
- [Gestion de projet](Gestion/README_GESTION.md)
|
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2023 antoine.perederii
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
After Width: | Height: | Size: 136 KiB |
After Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 692 B |
@ -0,0 +1,34 @@
|
|||||||
|
/*!
|
||||||
|
* Start Bootstrap - New Age v6.0.7 (https://startbootstrap.com/theme/new-age)
|
||||||
|
* Copyright 2013-2023 Start Bootstrap
|
||||||
|
* Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-new-age/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
//
|
||||||
|
// Scripts
|
||||||
|
//
|
||||||
|
|
||||||
|
window.addEventListener('DOMContentLoaded', event => {
|
||||||
|
|
||||||
|
// Activate Bootstrap scrollspy on the main nav element
|
||||||
|
const mainNav = document.body.querySelector('#mainNav');
|
||||||
|
if (mainNav) {
|
||||||
|
new bootstrap.ScrollSpy(document.body, {
|
||||||
|
target: '#mainNav',
|
||||||
|
offset: 74,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Collapse responsive navbar when toggler is visible
|
||||||
|
const navbarToggler = document.body.querySelector('.navbar-toggler');
|
||||||
|
const responsiveNavItems = [].slice.call(
|
||||||
|
document.querySelectorAll('#navbarResponsive .nav-link')
|
||||||
|
);
|
||||||
|
responsiveNavItems.map(function (responsiveNavItem) {
|
||||||
|
responsiveNavItem.addEventListener('click', () => {
|
||||||
|
if (window.getComputedStyle(navbarToggler).display !== 'none') {
|
||||||
|
navbarToggler.click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
@ -0,0 +1,34 @@
|
|||||||
|
/*!
|
||||||
|
* Start Bootstrap - New Age v6.0.7 (https://startbootstrap.com/theme/new-age)
|
||||||
|
* Copyright 2013-2023 Start Bootstrap
|
||||||
|
* Licensed under MIT (https://github.com/StartBootstrap/startbootstrap-new-age/blob/master/LICENSE)
|
||||||
|
*/
|
||||||
|
//
|
||||||
|
// Scripts
|
||||||
|
//
|
||||||
|
|
||||||
|
window.addEventListener('DOMContentLoaded', event => {
|
||||||
|
|
||||||
|
// Activate Bootstrap scrollspy on the main nav element
|
||||||
|
const mainNav = document.body.querySelector('#mainNav');
|
||||||
|
if (mainNav) {
|
||||||
|
new bootstrap.ScrollSpy(document.body, {
|
||||||
|
target: '#mainNav',
|
||||||
|
offset: 74,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Collapse responsive navbar when toggler is visible
|
||||||
|
const navbarToggler = document.body.querySelector('.navbar-toggler');
|
||||||
|
const responsiveNavItems = [].slice.call(
|
||||||
|
document.querySelectorAll('#navbarResponsive .nav-link')
|
||||||
|
);
|
||||||
|
responsiveNavItems.map(function (responsiveNavItem) {
|
||||||
|
responsiveNavItem.addEventListener('click', () => {
|
||||||
|
if (window.getComputedStyle(navbarToggler).display !== 'none') {
|
||||||
|
navbarToggler.click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
vdn-ssh root@web '
|
||||||
|
'
|
||||||
|
|
@ -1,19 +1,45 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
// namespace App\Controller;
|
namespace App\Controller;
|
||||||
|
|
||||||
// use App\Container;
|
use App\Container;
|
||||||
// use App\Router\Request\IRequest;
|
use App\Router\Request\IRequest;
|
||||||
// use App\Router\Response\Response;
|
use App\Router\Response\Response;
|
||||||
// use App\Router\Response\IResponse;
|
use Shared\Attributes\Route;
|
||||||
|
use Twig\Environment;
|
||||||
|
use Data\Core\Preferences;
|
||||||
|
use Shared\Log;
|
||||||
|
|
||||||
// use Shared\Attributes\Route;
|
class SocialController extends BaseController
|
||||||
// use Twig\Environment;
|
{
|
||||||
// use Data\Core\Preferences;
|
|
||||||
// use Shared\Log;
|
|
||||||
|
|
||||||
|
private Environment $twig;
|
||||||
|
protected Preferences $preference;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
session_start();
|
||||||
|
$this->preference = new Preferences();
|
||||||
|
}
|
||||||
|
|
||||||
// #[Route(path: '/coach', name: 'coach')]
|
|
||||||
// class CoachController extends BaseController
|
#[Route(path: '/mail', name: 'mail', methods: ['GET'])]
|
||||||
// {
|
public function mail(): Response
|
||||||
|
{
|
||||||
|
return $this->render('./page/mail.html.twig',[
|
||||||
|
'css' => $this->preference->getCookie(),
|
||||||
|
'pp' => "test2",
|
||||||
|
'user' => "Doe",
|
||||||
|
'role' => "Athlète",
|
||||||
|
'friendship' => [],
|
||||||
|
'analyzes' => [],
|
||||||
|
'mails' => [],
|
||||||
|
'users' => [],
|
||||||
|
'infoUser' => [],
|
||||||
|
'exos' => [],
|
||||||
|
'member' => []
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,127 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database;
|
||||||
|
|
||||||
|
class ActivityEntity {
|
||||||
|
private $idActivity;
|
||||||
|
private $type;
|
||||||
|
private $date;
|
||||||
|
private $heureDebut;
|
||||||
|
private $heureFin;
|
||||||
|
private $effortRessenti;
|
||||||
|
private $variabilite;
|
||||||
|
private $variance;
|
||||||
|
private $ecartType;
|
||||||
|
private $moyenne;
|
||||||
|
private $maximum;
|
||||||
|
private $minimum;
|
||||||
|
private $temperatureMoyenne;
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
public function getIdActivity() {
|
||||||
|
return $this->idActivity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getType() {
|
||||||
|
return $this->type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDate() {
|
||||||
|
return $this->date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHeureDebut() {
|
||||||
|
return $this->heureDebut;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getHeureFin() {
|
||||||
|
return $this->heureFin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getEffortRessenti() {
|
||||||
|
return $this->effortRessenti;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getVariabilite() {
|
||||||
|
return $this->variabilite;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getVariance() {
|
||||||
|
return $this->variance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getEcartType() {
|
||||||
|
return $this->ecartType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMoyenne() {
|
||||||
|
return $this->moyenne;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMaximum() {
|
||||||
|
return $this->maximum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMinimum() {
|
||||||
|
return $this->minimum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTemperatureMoyenne() {
|
||||||
|
return $this->temperatureMoyenne;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setters
|
||||||
|
public function setIdActivity($idActivity) {
|
||||||
|
$this->idActivity = $idActivity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setType($type) {
|
||||||
|
$this->type = $type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setDate($date) {
|
||||||
|
$this->date = $date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setHeureDebut($heureDebut) {
|
||||||
|
$this->heureDebut = $heureDebut;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setHeureFin($heureFin) {
|
||||||
|
$this->heureFin = $heureFin;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setEffortRessenti($effortRessenti) {
|
||||||
|
$this->effortRessenti = $effortRessenti;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setVariabilite($variabilite) {
|
||||||
|
$this->variabilite = $variabilite;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setVariance($variance) {
|
||||||
|
$this->variance = $variance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setEcartType($ecartType) {
|
||||||
|
$this->ecartType = $ecartType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setMoyenne($moyenne) {
|
||||||
|
$this->moyenne = $moyenne;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setMaximum($maximum) {
|
||||||
|
$this->maximum = $maximum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setMinimum($minimum) {
|
||||||
|
$this->minimum = $minimum;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setTemperatureMoyenne($temperatureMoyenne) {
|
||||||
|
$this->temperatureMoyenne = $temperatureMoyenne;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -0,0 +1,121 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database;
|
||||||
|
use \PDO;
|
||||||
|
|
||||||
|
class ActivityGateway {
|
||||||
|
private Connexion $connection;
|
||||||
|
|
||||||
|
public function __construct(Connexion $connection) {
|
||||||
|
$this->connection = $connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getActivity() {
|
||||||
|
$query = "SELECT * FROM Activite";
|
||||||
|
return $this->connection->executeWithErrorHandling($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getActivityById(int $activityId) {
|
||||||
|
$query = "SELECT * FROM Activite WHERE idActivite = :id";
|
||||||
|
$params = [':id' => [$activityId, PDO::PARAM_INT]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getActivityByType(string $type) {
|
||||||
|
$query = "SELECT * FROM Activite WHERE type = :type";
|
||||||
|
$params = [':type' => [$type, PDO::PARAM_STR]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getActivityByDate(string $date) {
|
||||||
|
$query = "SELECT * FROM Activite WHERE date = :date";
|
||||||
|
$params = [':date' => [$date, PDO::PARAM_STR]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getActivityByTimeRange(string $startTime, string $endTime) {
|
||||||
|
$query = "SELECT * FROM Activite WHERE heureDebut >= :startTime AND heureFin <= :endTime";
|
||||||
|
$params = [
|
||||||
|
':startTime' => [$startTime, PDO::PARAM_STR],
|
||||||
|
':endTime' => [$endTime, PDO::PARAM_STR]
|
||||||
|
];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getActivityByEffort(int $effortRessenti) {
|
||||||
|
$query = "SELECT * FROM Activite WHERE effortRessenti = :effort";
|
||||||
|
$params = [':effort' => [$effortRessenti, PDO::PARAM_INT]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getActivityByVariability(int $variabilite) {
|
||||||
|
$query = "SELECT * FROM Activite WHERE variabilite = :variability";
|
||||||
|
$params = [':variability' => [$variabilite, PDO::PARAM_INT]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getActivityByTemperature(int $temperatureMoyenne) {
|
||||||
|
$query = "SELECT * FROM Activite WHERE temperatureMoyenne = :temperature";
|
||||||
|
$params = [':temperature' => [$temperatureMoyenne, PDO::PARAM_INT]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addActivity(ActivityEntity $activity) {
|
||||||
|
$query = "INSERT INTO Activite (type, date, heureDebut, heureDeFin, effortRessenti, variabilite, variance, ecartType, moyenne, maximum, minimum, temperatureMoyenne)
|
||||||
|
VALUES (:type, :date, :heureDebut, :heureDeFin, :effortRessenti, :variabilite, :variance, :ecartType, :moyenne, :maximum, :minimum, :temperatureMoyenne)";
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
':type' => $activity->getType(),
|
||||||
|
':date' => $activity->getDate()->format('Y-m-d'), // Format date pour SQL
|
||||||
|
':heureDebut' => $activity->getHeureDebut()->format('H:i:s'), // Format heure pour SQL
|
||||||
|
':heureDeFin' => $activity->getHeureFin()->format('H:i:s'), // Format heure pour SQL
|
||||||
|
':effortRessenti' => $activity->getEffortRessenti(),
|
||||||
|
':variabilite' => $activity->getVariabilite(),
|
||||||
|
':variance' => $activity->getVariance(),
|
||||||
|
':ecartType' => $activity->getEcartType(),
|
||||||
|
':moyenne' => $activity->getMoyenne(),
|
||||||
|
':maximum' => $activity->getMaximum(),
|
||||||
|
':minimum' => $activity->getMinimum(),
|
||||||
|
':temperatureMoyenne' => $activity->getTemperatureMoyenne(),
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateActivity(ActivityEntity $oldActivity, ActivityEntity $newActivity) {
|
||||||
|
$query = "UPDATE Activite
|
||||||
|
SET type = :type, date = :date, heureDebut = :heureDebut, heureDeFin = :heureDeFin,
|
||||||
|
effortRessenti = :effortRessenti, variabilite = :variabilite, variance = :variance, ecartType = :ecartType, moyenne = :moyenne, maximum = :maximum, minimum = :minimum, temperatureMoyenne = :temperatureMoyenne
|
||||||
|
WHERE idActivite = :idActivite";
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
':idActivite' => $oldActivity->getIdActivity(),
|
||||||
|
':type' => $newActivity->getType(),
|
||||||
|
':date' => $newActivity->getDate()->format('Y-m-d'), // Format date pour SQL
|
||||||
|
':heureDebut' => $newActivity->getHeureDebut()->format('H:i:s'), // Format heure pour SQL
|
||||||
|
':heureDeFin' => $newActivity->getHeureFin()->format('H:i:s'), // Format heure pour SQL
|
||||||
|
':effortRessenti' => $newActivity->getEffortRessenti(),
|
||||||
|
':variabilite' => $newActivity->getVariabilite(),
|
||||||
|
':variance' => $newActivity->getVariance(),
|
||||||
|
':ecartType' => $newActivity->getEcartType(),
|
||||||
|
':moyenne' => $newActivity->getMoyenne(),
|
||||||
|
':maximum' => $newActivity->getMaximum(),
|
||||||
|
':minimum' => $newActivity->getMinimum(),
|
||||||
|
':temperatureMoyenne' => $newActivity->getTemperatureMoyenne(),
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteActivity(int $idActivity) {
|
||||||
|
$query = "DELETE FROM Activite WHERE idActivite = :idActivity";
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
':idActivity' => $idActivity,
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -0,0 +1,118 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database;
|
||||||
|
use Model\Activity;
|
||||||
|
|
||||||
|
class ActivityMapper {
|
||||||
|
public function activitySqlToEntity(array $data):array
|
||||||
|
{
|
||||||
|
$activityEntities = [];
|
||||||
|
|
||||||
|
foreach ($data as $activityData) {
|
||||||
|
$activity = new ActivityEntity();
|
||||||
|
|
||||||
|
if (isset($activityData['idActivity'])) {
|
||||||
|
$activity->setIdActivity($data['idActivity']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($activityData['type'])) {
|
||||||
|
$activity->setType($data['type']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($activityData['date'])) {
|
||||||
|
$activity->setDate($data['date']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($activityData['heureDebut'])) {
|
||||||
|
$activity->setHeureDebut($data['heureDebut']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($activityData['heureFin'])) {
|
||||||
|
$activity->setHeureFin($data['heureFin']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($activityData['effortRessenti'])) {
|
||||||
|
$activity->setEffortRessenti($data['effortRessenti']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($activityData['variabilite'])) {
|
||||||
|
$activity->setVariabilite($data['variabilite']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($activityData['variance'])) {
|
||||||
|
$activity->setVariance($data['variance']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($activityData['ecartType'])) {
|
||||||
|
$activity->setEcartType($data['ecartType']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($activityData['moyenne'])) {
|
||||||
|
$activity->setMoyenne($data['moyenne']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($activityData['maximum'])) {
|
||||||
|
$activity->setMaximum($data['maximum']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($activityData['minimum'])) {
|
||||||
|
$activity->setMinimum($data['minimum']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($activityData['temperatureMoyenne'])) {
|
||||||
|
$activity->setTemperatureMoyenne($data['temperatureMoyenne']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$activityEntities[] = $activity;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $activityEntities;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public function ActivityEntityToModel(ActivityEntity $activiteEntity):Activity{
|
||||||
|
|
||||||
|
$act = new Activity(
|
||||||
|
$activiteEntity->getIdActivity(),
|
||||||
|
$activiteEntity->getType(),
|
||||||
|
$activiteEntity->getDate(),
|
||||||
|
$activiteEntity->getHeureDebut(),
|
||||||
|
$activiteEntity->getHeureFin(),
|
||||||
|
$activiteEntity->getEffortRessenti(),
|
||||||
|
$activiteEntity->getVariabilite(),
|
||||||
|
$activiteEntity->getVariance(),
|
||||||
|
$activiteEntity->getEcartType(),
|
||||||
|
$activiteEntity->getMoyenne(),
|
||||||
|
$activiteEntity->getMaximum(),
|
||||||
|
$activiteEntity->getMinimum(),
|
||||||
|
$activiteEntity->getTemperatureMoyenne()
|
||||||
|
);
|
||||||
|
|
||||||
|
return $act;
|
||||||
|
}
|
||||||
|
//public function ActivityToEntity(Activity model): ActivityEntity;
|
||||||
|
|
||||||
|
public function activityToEntity(Activity $act):ActivityEntity{
|
||||||
|
|
||||||
|
$act = new ActivityEntity();
|
||||||
|
$act->setIdActivity($act->getIdActivity()());
|
||||||
|
$act->setType($act->getType());
|
||||||
|
$act->setDate($act->getDate());
|
||||||
|
$act->setHeureDebut($act->getHeureDebut());
|
||||||
|
$act->setHeureFin($act->getHeureFin());
|
||||||
|
$act->setEffortRessenti($act->getEffortRessenti());
|
||||||
|
$act->setVariabilite($act->getVariabilite());
|
||||||
|
$act->setVariance($act->getVariance());
|
||||||
|
$act->setEcartType($act->getEcartType());
|
||||||
|
$act->setMoyenne($act->getMoyenne());
|
||||||
|
$act->setMaximum($act->getMaximum());
|
||||||
|
$act->setMinimum($act->getMinimum());
|
||||||
|
$act->setTemperatureMoyenne($act->getTemperatureMoyenne());
|
||||||
|
|
||||||
|
return $act;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -0,0 +1,100 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database;
|
||||||
|
|
||||||
|
class AthleteEntity {
|
||||||
|
private $idAthlete;
|
||||||
|
private $nom;
|
||||||
|
private $prenom;
|
||||||
|
private $email;
|
||||||
|
private $sexe;
|
||||||
|
private $taille;
|
||||||
|
private $poids;
|
||||||
|
private $motDePasse;
|
||||||
|
private $dateNaissance;
|
||||||
|
private $isCoach;
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
public function getIdAthlete() {
|
||||||
|
return $this->idAthlete;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getNom() {
|
||||||
|
return $this->nom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPrenom() {
|
||||||
|
return $this->prenom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getEmail() {
|
||||||
|
return $this->email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSexe() {
|
||||||
|
return $this->sexe;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTaille() {
|
||||||
|
return $this->taille;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPoids() {
|
||||||
|
return $this->poids;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getMotDePasse() {
|
||||||
|
return $this->motDePasse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDateNaissance() {
|
||||||
|
return $this->dateNaissance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIsCoach(){
|
||||||
|
return $this->isCoach;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setters
|
||||||
|
public function setIdAthlete($idAthlete) {
|
||||||
|
$this->idAthlete = $idAthlete;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setNom($nom) {
|
||||||
|
$this->nom = $nom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPrenom($prenom) {
|
||||||
|
$this->prenom = $prenom;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setEmail($email) {
|
||||||
|
$this->email = $email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setSexe($sexe) {
|
||||||
|
$this->sexe = $sexe;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setTaille($taille) {
|
||||||
|
$this->taille = $taille;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPoids($poids) {
|
||||||
|
$this->poids = $poids;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setMotDePasse($motDePasse) {
|
||||||
|
$this->motDePasse = $motDePasse;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setDateNaissance($dateNaissance) {
|
||||||
|
$this->dateNaissance = $dateNaissance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setIsCoach($isCoach){
|
||||||
|
$this->isCoach = $isCoach;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -0,0 +1,159 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database;
|
||||||
|
use \PDO;
|
||||||
|
use Shared\Log;
|
||||||
|
|
||||||
|
class AthleteGateway {
|
||||||
|
private Connexion $connection;
|
||||||
|
|
||||||
|
public function __construct(Connexion $connection) {
|
||||||
|
$this->connection = $connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAthlete(): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Athlete WHERE isCoach=FALSE";
|
||||||
|
$res = $this->connection->executeWithErrorHandling($query);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAthleteById(int $userId): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Athlete WHERE idAthlete = :id AND isCoach=FALSE";
|
||||||
|
$params = [':id' => [$userId, PDO::PARAM_INT]];
|
||||||
|
$res = $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAthleteByName(string $name): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Athlete WHERE nom = :name AND isCoach=FALSE";
|
||||||
|
$params = [':name' => [$name, PDO::PARAM_STR]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAthleteByFirstName(string $firstName): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Athlete WHERE prenom = :firstName AND isCoach=FALSE";
|
||||||
|
$params = [':firstName' => [$firstName, PDO::PARAM_STR]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAthleteByEmail(string $email): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Athlete WHERE email = :email AND isCoach=FALSE";
|
||||||
|
$params = [':email' => [$email, PDO::PARAM_STR]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAthleteByGender(string $gender): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Athlete WHERE sexe = :gender AND isCoach=FALSE";
|
||||||
|
$params = [':gender' => [$gender, PDO::PARAM_STR]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAthleteByHeight(int $height): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Athlete WHERE taille = :height AND isCoach=FALSE";
|
||||||
|
$params = [':height' => [$height, PDO::PARAM_INT]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAthleteByWeight(int $weight): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Athlete WHERE poids = :weight AND isCoach=FALSE";
|
||||||
|
$params = [':weight' => [$weight, PDO::PARAM_INT]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAthleteByBirthDate(string $birthdate): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Athlete WHERE dateNaissance = :birthdate AND isCoach=FALSE";
|
||||||
|
$params = [':birthdate' => [$birthdate, PDO::PARAM_STR]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getListIdFriends(int $idAthlete): array
|
||||||
|
{
|
||||||
|
$query = "SELECT idAthlete1, idAthlete2 FROM Friendship WHERE idAthlete1 = :idAthlete OR idAthlete2= :idAthlete";
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
':idAthlete' => $idAthlete,
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addAthlete(AthleteEntity $athlete): array
|
||||||
|
{
|
||||||
|
$query = "INSERT INTO Athlete (nom, prenom, email, sexe, taille, poids, motDePasse, dateNaissance, isCoach)
|
||||||
|
VALUES (:nom, :prenom, :email, :sexe, :taille, :poids, :motDePasse, :dateNaissance, :isCoach)";
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
':nom' => $athlete->getNom(),
|
||||||
|
':prenom' => $athlete->getPrenom(),
|
||||||
|
':email' => $athlete->getEmail(),
|
||||||
|
':sexe' => $athlete->getSexe(),
|
||||||
|
':taille' => $athlete->getTaille(),
|
||||||
|
':poids' => $athlete->getPoids(),
|
||||||
|
':motDePasse' => $athlete->getMotDePasse(),
|
||||||
|
':dateNaissance' => $athlete->getDateNaissance(),
|
||||||
|
':isCoach' => $athlete->getIsCoach(),
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateAthlete(AthleteEntity $oldAthlete, AthleteEntity $newAthlete): array
|
||||||
|
{
|
||||||
|
$query = "UPDATE Athlete
|
||||||
|
SET nom = :nom, prenom = :prenom, email = :email, sexe = :sexe,
|
||||||
|
taille = :taille, poids = :poids, motDePasse = :motDePasse, dateNaissance = :dateNaissance, isCoach = :isCoach
|
||||||
|
WHERE idAthlete = :idAthlete";
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
':idAthlete' => $oldAthlete->getIdAthlete(),
|
||||||
|
':nom' => $newAthlete->getNom(),
|
||||||
|
':prenom' => $newAthlete->getPrenom(),
|
||||||
|
':email' => $newAthlete->getEmail(),
|
||||||
|
':sexe' => $newAthlete->getSexe(),
|
||||||
|
':taille' => $newAthlete->getTaille(),
|
||||||
|
':poids' => $newAthlete->getPoids(),
|
||||||
|
':motDePasse' => $newAthlete->getMotDePasse(),
|
||||||
|
':dateNaissance' => $newAthlete->getDateNaissance(),
|
||||||
|
':isCoach' => $newAthlete->getIsCoach(),
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteAthlete(int $idAthlete): array
|
||||||
|
{
|
||||||
|
$query = "DELETE FROM Athlete WHERE idAthlete = :idAthlete";
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
':idAthlete' => $idAthlete,
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Exemple d'utilisation
|
||||||
|
//$dsn = "pgsql:host=localhost;port=5432;dbname=mydatabase;user=myuser;password=mypassword";
|
||||||
|
//$connection = new Connection($dsn);
|
||||||
|
//$gateway = new AthleteGateway($connection);
|
||||||
|
|
||||||
|
//$allAth = $gateway->getAthlete();
|
||||||
|
//print_r($allAth);
|
||||||
|
|
||||||
|
//$singleAth = $gateway->getAthleteById(1);
|
||||||
|
//print_r($singleAth);
|
||||||
|
|
||||||
|
?>
|
@ -0,0 +1,103 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database;
|
||||||
|
use Model\User;
|
||||||
|
use \PDO;
|
||||||
|
use \DateTime;
|
||||||
|
use Model\Role;
|
||||||
|
use Model\Athlete;
|
||||||
|
use Shared\Log;
|
||||||
|
|
||||||
|
class AthleteMapper {
|
||||||
|
public function athleteSqlToEntity(array $data): array {
|
||||||
|
$athleteEntities = [];
|
||||||
|
|
||||||
|
foreach ($data as $athleteData) {
|
||||||
|
$athlete = new AthleteEntity();
|
||||||
|
if (isset($athleteData['idathlete'])) {
|
||||||
|
$athlete->setIdAthlete($athleteData['idathlete']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($athleteData['nom'])) {
|
||||||
|
$athlete->setNom($athleteData['nom']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($athleteData['prenom'])) {
|
||||||
|
$athlete->setPrenom($athleteData['prenom']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($athleteData['email'])) {
|
||||||
|
$athlete->setEmail($athleteData['email']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($athleteData['sexe'])) {
|
||||||
|
$athlete->setSexe($athleteData['sexe']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($athleteData['taille'])) {
|
||||||
|
$athlete->setTaille($athleteData['taille']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($athleteData['poids'])) {
|
||||||
|
$athlete->setPoids($athleteData['poids']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($athleteData['motdepasse'])) {
|
||||||
|
$athlete->setMotDePasse($athleteData['motdepasse']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($athleteData['datenaissance'])) {
|
||||||
|
$athlete->setDateNaissance($athleteData['datenaissance']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($athleteData['iscoach'])) {
|
||||||
|
$athlete->setIsCoach($athleteData['iscoach']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$athleteEntities[] = $athlete;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $athleteEntities;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function athleteEntityToModel(AthleteEntity $athleteEntity): User {
|
||||||
|
$role = new Athlete(); // Utilisez la classe Athlete
|
||||||
|
$date = new DateTime($athleteEntity->getDateNaissance());
|
||||||
|
$user = new User(
|
||||||
|
$athleteEntity->getIdAthlete(),
|
||||||
|
$athleteEntity->getNom(),
|
||||||
|
$athleteEntity->getPrenom(),
|
||||||
|
"myUsername",
|
||||||
|
$athleteEntity->getEmail(),
|
||||||
|
$athleteEntity->getMotDePasse(),
|
||||||
|
$athleteEntity->getSexe(),
|
||||||
|
$athleteEntity->getTaille(),
|
||||||
|
$athleteEntity->getPoids(),
|
||||||
|
$date,
|
||||||
|
$role
|
||||||
|
);
|
||||||
|
|
||||||
|
return $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function athleteToEntity(User $user):AthleteEntity{
|
||||||
|
|
||||||
|
$ath = new AthleteEntity();
|
||||||
|
$ath->setIdAthlete($user->getId());
|
||||||
|
$ath->setNom($user->getNom());
|
||||||
|
$ath->setPrenom($user->getPrenom());
|
||||||
|
$ath->setEmail($user->getEmail());
|
||||||
|
$ath->setSexe($user->getSexe());
|
||||||
|
$ath->setTaille($user->getTaille());
|
||||||
|
$ath->setPoids($user->getPoids());
|
||||||
|
$ath->setMotDePasse($user->getMotDePasse());
|
||||||
|
$ath->setDateNaissance($user->getDateNaissance());
|
||||||
|
$ath->setIsCoach(FALSE);
|
||||||
|
$ath->setCoachId(NULL);
|
||||||
|
|
||||||
|
return $ath;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -0,0 +1,29 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database;
|
||||||
|
|
||||||
|
class CoachEntity {
|
||||||
|
private $idCoach;
|
||||||
|
private $athleteId;
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
public function getIdCoach() {
|
||||||
|
return $this->idCoach;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAthleteId() {
|
||||||
|
return $this->athleteId;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setters
|
||||||
|
public function setIdCoach($idCoach) {
|
||||||
|
$this->idCoach = $idCoach;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setAthleteId($athleteId) {
|
||||||
|
$this->athleteId = $athleteId;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
@ -0,0 +1,112 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database;
|
||||||
|
use \PDO;
|
||||||
|
|
||||||
|
class CoachGateway {
|
||||||
|
private $connection;
|
||||||
|
|
||||||
|
public function __construct(Connexion $connection) {
|
||||||
|
$this->connection = $connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCoach(): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Coach";
|
||||||
|
return $this->connection->executeWithErrorHandling($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCoachById(int $userId): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Coach WHERE idCoach = :id";
|
||||||
|
$params = [':id' => [$userId, PDO::PARAM_INT]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAthleteByCoachId(int $coachId): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Athlete a, Coach c WHERE a.coachId = :id AND a.isCoach = TRUE";
|
||||||
|
$params = [':id' => [$coachId, PDO::PARAM_INT]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCoachByName(string $name): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Coach c, Athlete a WHERE c.athleteId = a.idAthlete AND a.nom = :name";
|
||||||
|
$params = [':name' => [$name, PDO::PARAM_STR]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCoachByFirstName(string $firstName): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Coach c, Athlete a WHERE c.athleteId = a.idAthlete AND a.prenom = :firstName";
|
||||||
|
$params = [':firstName' => [$firstName, PDO::PARAM_STR]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCoachByEmail(string $email): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Coach c, Athlete a WHERE c.athleteId = a.idAthlete AND a.email = :email";
|
||||||
|
$params = [':email' => [$email, PDO::PARAM_STR]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCoachByGender(string $gender): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Coach c, Athlete a WHERE c.athleteId = a.idAthlete AND a.sexe = :gender";
|
||||||
|
$params = [':gender' => [$gender, PDO::PARAM_STR]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCoachByHeight(int $height): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Coach c, Athlete a WHERE c.athleteId = a.idAthlete AND a.taille = :height";
|
||||||
|
$params = [':height' => [$height, PDO::PARAM_INT]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getCoachByBirthDate(string $birthdate): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Coach c, Athlete a WHERE c.athleteId = a.idAthlete AND a.dateNaissance = :birthdate";
|
||||||
|
$params = [':birthdate' => [$birthdate, PDO::PARAM_STR]];
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addCoach(CoachEntity $coach): array
|
||||||
|
{
|
||||||
|
$query = "INSERT INTO Coach (athleteId)
|
||||||
|
VALUES (:athleteId)";
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
':athleteId' => $coach->getAthleteId(),
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function updateCoach(CoachEntity $oldCoach, CoachEntity $newCoach): array
|
||||||
|
{
|
||||||
|
$query = "UPDATE Coach
|
||||||
|
SET athleteId = :athleteId
|
||||||
|
WHERE idCoach = :idCoach";
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
':idCoach' => $oldCoach->getIdCoach(),
|
||||||
|
':athleteId' => $newCoach->getAthleteId(),
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function deleteCoach(int $idCoach): array
|
||||||
|
{
|
||||||
|
$query = "DELETE FROM Coach WHERE idCoach = :idCoach";
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
':idCoach' => $idCoach,
|
||||||
|
];
|
||||||
|
|
||||||
|
return $this->connection->executeWithErrorHandling($query, $params);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database;
|
||||||
|
use Model\CoachAthlete;
|
||||||
|
use Model\User;
|
||||||
|
use \PDO;
|
||||||
|
use \DateTime;
|
||||||
|
use Model\Role;
|
||||||
|
use Model\Coach;
|
||||||
|
|
||||||
|
class CoachMapper {
|
||||||
|
public function coachSqlToEntity(array $data): array {
|
||||||
|
$coachEntities = [];
|
||||||
|
|
||||||
|
foreach ($data as $coachData) {
|
||||||
|
$coach = new CoachEntity();
|
||||||
|
|
||||||
|
if (isset($coachData['idCoach'])) {
|
||||||
|
$coach->setIdCoach($coachData['idCoach']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($coachData['athleteId'])) {
|
||||||
|
$coach->setAthleteId($coachData['athleteId']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$coachEntities[] = $coach;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $coachEntities;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function CoachEntityToModel(CoachEntity $coachEntity):User{
|
||||||
|
$role = new CoachAthlete();
|
||||||
|
|
||||||
|
$idCoach = $coachEntity->getIdCoach();
|
||||||
|
|
||||||
|
$ath = getAthleteByCoachId($idCoach);
|
||||||
|
$athlete = athleteSqlToEntity($ath);
|
||||||
|
|
||||||
|
$dateSpecific = $athlete->getDateNaissance();
|
||||||
|
$date = new DateTime($dateSpecific);
|
||||||
|
|
||||||
|
$user = new User(
|
||||||
|
$coachEntity->getIdCoach(),
|
||||||
|
$athlete->getNom(),
|
||||||
|
$athlete->getPrenom(),
|
||||||
|
$athlete->getEmail(),
|
||||||
|
$athlete->getMotDePasse(),
|
||||||
|
$athlete->getSexe(),
|
||||||
|
$athlete->getTaille(),
|
||||||
|
$athlete->getPoids(),
|
||||||
|
$athlete->getDateNaissance(),
|
||||||
|
$date,
|
||||||
|
$role
|
||||||
|
);
|
||||||
|
|
||||||
|
return $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function CoachToEntity(User $user):CoachEntity{
|
||||||
|
|
||||||
|
$coach = new CoachEntity();
|
||||||
|
$coach->setIdCoach($user->getId());
|
||||||
|
$coach->setAthleteId($user->getId());
|
||||||
|
|
||||||
|
return $coach;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database;
|
||||||
|
|
||||||
|
use DateTime;
|
||||||
|
use Shared\Log;
|
||||||
|
|
||||||
|
class Connexion extends \PDO {
|
||||||
|
private $stmt;
|
||||||
|
|
||||||
|
public function __construct(string $dsn,string $username, string $password) {
|
||||||
|
try {
|
||||||
|
parent::__construct($dsn,$username,$password);
|
||||||
|
$this->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
|
||||||
|
} catch (\PDOException $e) {
|
||||||
|
// Log error or handle it as needed
|
||||||
|
throw new \PDOException("Error connecting to the database: " . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function executeQuery(string $query, array $parameters = []) {
|
||||||
|
$this->stmt = $this->prepare($query);
|
||||||
|
// foreach ($parameters as $name => $value) {
|
||||||
|
// $this->stmt->bindValue($name, $value[0], $value[1]);
|
||||||
|
// }
|
||||||
|
foreach ($parameters as $name => $value) {
|
||||||
|
$dataType = is_numeric($value) ? \PDO::PARAM_INT : \PDO::PARAM_STR;
|
||||||
|
$bindValueResult = $this->stmt->bindValue($name, $value, $dataType);
|
||||||
|
if (!$bindValueResult) {
|
||||||
|
// Gérez l'erreur, par exemple, en lançant une exception.
|
||||||
|
throw new \PDOException('Failed to bind value for parameter ' . $name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $this->stmt->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function executeWithErrorHandling(string $query, array $params = []): array {
|
||||||
|
try {
|
||||||
|
$this->beginTransaction();
|
||||||
|
$this->executeQuery($query, $params);
|
||||||
|
$this->commit();
|
||||||
|
return $this->getResults();
|
||||||
|
} catch (\PDOException $e) {
|
||||||
|
$this->rollBack();
|
||||||
|
throw new \PDOException('Unexpected error on database client: ' . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getResults(): array {
|
||||||
|
$results = $this->stmt->fetchAll(\PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
// Convertissez les colonnes "taille" et "poids" en nombres
|
||||||
|
foreach ($results as &$row) {
|
||||||
|
$row['taille'] = floatval($row['taille']);
|
||||||
|
$row['poids'] = floatval($row['poids']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database;
|
||||||
|
|
||||||
|
class EntrainementEntity
|
||||||
|
{
|
||||||
|
private $idEntrainement;
|
||||||
|
private $date;
|
||||||
|
private $description;
|
||||||
|
private $latitude;
|
||||||
|
private $longitude;
|
||||||
|
private $feedback;
|
||||||
|
private $coachId;
|
||||||
|
|
||||||
|
public function getIdEntrainement()
|
||||||
|
{
|
||||||
|
return $this->idEntrainement;
|
||||||
|
}
|
||||||
|
public function getDate()
|
||||||
|
{
|
||||||
|
return $this->date;
|
||||||
|
}
|
||||||
|
public function getDescription()
|
||||||
|
{
|
||||||
|
return $this->description;
|
||||||
|
}
|
||||||
|
public function getLatitude()
|
||||||
|
{
|
||||||
|
return $this->latitude;
|
||||||
|
}
|
||||||
|
public function getLongitude()
|
||||||
|
{
|
||||||
|
return $this->longitude;
|
||||||
|
}
|
||||||
|
public function getFeedback()
|
||||||
|
{
|
||||||
|
return $this->feedback;
|
||||||
|
}
|
||||||
|
public function getCoachId()
|
||||||
|
{
|
||||||
|
return $this->coachId;
|
||||||
|
}
|
||||||
|
public function setIdEntrainement($idEntrainement)
|
||||||
|
{
|
||||||
|
$this->idEntrainement = $idEntrainement;
|
||||||
|
}
|
||||||
|
public function setDate($date)
|
||||||
|
{
|
||||||
|
$this->date = $date;
|
||||||
|
}
|
||||||
|
public function setDescription($description)
|
||||||
|
{
|
||||||
|
$this->description = $description;
|
||||||
|
}
|
||||||
|
public function setLatitude($latitude)
|
||||||
|
{
|
||||||
|
$this->latitude = $latitude;
|
||||||
|
}
|
||||||
|
public function setLongitude($longitude)
|
||||||
|
{
|
||||||
|
$this->longitude = $longitude;
|
||||||
|
}
|
||||||
|
public function setFeedback($feedback)
|
||||||
|
{
|
||||||
|
$this->feedback = $feedback;
|
||||||
|
}
|
||||||
|
public function setCoachId($coachId)
|
||||||
|
{
|
||||||
|
$this->coachId = $coachId;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database;
|
||||||
|
|
||||||
|
class EntrainementGateway
|
||||||
|
{
|
||||||
|
private Connexion $connection;
|
||||||
|
|
||||||
|
public function __construct(Connexion $connection) {
|
||||||
|
$this->connection = $connection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getEntrainements(): array
|
||||||
|
{
|
||||||
|
$query = "SELECT * FROM Entrainement";
|
||||||
|
$res = $this->connection->executeWithErrorHandling($query);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,74 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Database;
|
||||||
|
|
||||||
|
use Model\Athlete;
|
||||||
|
use Model\Training;
|
||||||
|
use Model\User;
|
||||||
|
|
||||||
|
class EntrainementMapper
|
||||||
|
{
|
||||||
|
public function entrainementSqlToEntity(array $data): array {
|
||||||
|
$entrainementEntities = [];
|
||||||
|
|
||||||
|
foreach ($data as $entrainementData) {
|
||||||
|
$entrainement = new EntrainementEntity();
|
||||||
|
if (isset($entrainementData['idEntrainement'])) {
|
||||||
|
$entrainement->setIdEntrainement($entrainementData['idEntrainement']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($entrainementData['date'])) {
|
||||||
|
$entrainement->setDate($entrainementData['date']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($entrainementData['description'])) {
|
||||||
|
$entrainement->setDescription($entrainementData['description']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($entrainementData['latitude'])) {
|
||||||
|
$entrainement->setLatitude($entrainementData['latitude']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($entrainementData['longitude'])) {
|
||||||
|
$entrainement->setLongitude($entrainementData['longitude']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($entrainementData['feedback'])) {
|
||||||
|
$entrainement->setFeedback($entrainementData['feedback']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($entrainementData['coachId'])) {
|
||||||
|
$entrainement->setCoachId($entrainementData['coachId']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$entrainementEntities[] = $entrainement;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $entrainementEntities;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function entrainementEntityToModel(EntrainementEntity $entrainementEntity): Training {
|
||||||
|
return new Training(
|
||||||
|
$entrainementEntity->getIdEntrainement(),
|
||||||
|
$entrainementEntity->getDate(),
|
||||||
|
$entrainementEntity->getDescription(),
|
||||||
|
$entrainementEntity->getLatitude(),
|
||||||
|
$entrainementEntity->getLongitude(),
|
||||||
|
$entrainementEntity->getFeedback()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function entrainementToEntity(Training $training):EntrainementEntity{
|
||||||
|
|
||||||
|
$train = new EntrainementEntity();
|
||||||
|
$train->setIdEntrainement($training->getId());
|
||||||
|
$train->setDate($training->getDate());
|
||||||
|
$train->setDescription($training->getDescription());
|
||||||
|
$train->setLatitude($training->getLatitude());
|
||||||
|
$train->setLongitude($training->getLongitude());
|
||||||
|
$train->setFeedback($training->getFeedback());
|
||||||
|
$train->setCoachId(1);
|
||||||
|
|
||||||
|
return $train;
|
||||||
|
}
|
||||||
|
}
|
@ -1,158 +1,132 @@
|
|||||||
-- Athlete Table
|
DROP TABLE IF EXISTS Athlete, Friendship, Notification, Statistique, Entrainement, Participe, SourceDonnee, Activite, FrequenceCardiaque CASCADE;
|
||||||
|
|
||||||
CREATE TABLE Athlete (
|
CREATE TABLE Athlete (
|
||||||
idAthlete SERIAL PRIMARY KEY,
|
idAthlete SERIAL PRIMARY KEY,
|
||||||
nom VARCHAR(255),
|
nom VARCHAR(255),
|
||||||
prenom VARCHAR(255),
|
prenom VARCHAR(255),
|
||||||
email VARCHAR(255) UNIQUE,
|
email VARCHAR(255) UNIQUE,
|
||||||
sexe CHAR(1),
|
sexe CHAR(1),
|
||||||
taille DECIMAL,
|
taille DECIMAL,
|
||||||
poids DECIMAL,
|
poids DECIMAL,
|
||||||
motDePasse VARCHAR(255),
|
motDePasse VARCHAR(255),
|
||||||
dateNaissance DATE
|
dateNaissance DATE,
|
||||||
|
isCoach BOOLEAN
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Friendship Table
|
|
||||||
CREATE TABLE Friendship (
|
CREATE TABLE Friendship (
|
||||||
idAthlete1 INT,
|
idAthlete1 INT,
|
||||||
idAthlete2 INT,
|
idAthlete2 INT,
|
||||||
debut DATE,
|
debut DATE,
|
||||||
PRIMARY KEY (idAthlete1, idAthlete2),
|
PRIMARY KEY (idAthlete1, idAthlete2),
|
||||||
FOREIGN KEY (idAthlete1) REFERENCES Athlete (idAthlete),
|
FOREIGN KEY (idAthlete1) REFERENCES Athlete(idAthlete),
|
||||||
FOREIGN KEY (idAthlete2) REFERENCES Athlete (idAthlete)
|
FOREIGN KEY (idAthlete2) REFERENCES Athlete(idAthlete)
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Notification Table
|
|
||||||
CREATE TABLE Notification (
|
CREATE TABLE Notification (
|
||||||
idNotif SERIAL PRIMARY KEY,
|
idNotif INT PRIMARY KEY,
|
||||||
message TEXT,
|
message TEXT,
|
||||||
date DATE,
|
date DATE,
|
||||||
statut BOOLEAN,
|
statut BOOLEAN,
|
||||||
urgence INT,
|
urgence INT,
|
||||||
athleteId INT,
|
athleteId INT,
|
||||||
FOREIGN KEY (athleteId) REFERENCES Athlete (idAthlete)
|
FOREIGN KEY (athleteId) REFERENCES Athlete(idAthlete)
|
||||||
);
|
|
||||||
|
|
||||||
-- Coach Table
|
|
||||||
CREATE TABLE Coach (
|
|
||||||
idCoach SERIAL PRIMARY KEY,
|
|
||||||
athleteId INT,
|
|
||||||
FOREIGN KEY (athleteId) REFERENCES Athlete (idAthlete)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Statistique Table
|
|
||||||
CREATE TABLE Statistique (
|
CREATE TABLE Statistique (
|
||||||
idStatistique SERIAL PRIMARY KEY,
|
idStatistique INT PRIMARY KEY,
|
||||||
poids DECIMAL,
|
poids DECIMAL,
|
||||||
fcMoyenne DECIMAL,
|
fcMoyenne DECIMAL,
|
||||||
fcMax DECIMAL,
|
fcMax DECIMAL,
|
||||||
caloriesBruleesMoy DECIMAL,
|
caloriesBruleesMoy DECIMAL,
|
||||||
date DATE,
|
date DATE,
|
||||||
athleteId INT,
|
athleteId INT,
|
||||||
FOREIGN KEY (athleteId) REFERENCES Athlete (idAthlete)
|
FOREIGN KEY (athleteId) REFERENCES Athlete(idAthlete)
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Entrainement Table
|
|
||||||
CREATE TABLE Entrainement (
|
CREATE TABLE Entrainement (
|
||||||
idEntrainement SERIAL PRIMARY KEY,
|
idEntrainement INT PRIMARY KEY,
|
||||||
date DATE,
|
date DATE,
|
||||||
description TEXT,
|
description TEXT,
|
||||||
latitude DECIMAL,
|
latitude DECIMAL,
|
||||||
longitude DECIMAL,
|
longitude DECIMAL,
|
||||||
feedback TEXT,
|
feedback TEXT,
|
||||||
coachId INT,
|
athleteId INT,
|
||||||
FOREIGN KEY (coachId) REFERENCES Coach (idCoach)
|
FOREIGN KEY (athleteId) REFERENCES Athlete(idAthlete)
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Participe Table
|
|
||||||
CREATE TABLE Participe (
|
CREATE TABLE Participe (
|
||||||
athleteId INT,
|
athleteId INT,
|
||||||
entrainementId INT,
|
entrainementId INT,
|
||||||
PRIMARY KEY (athleteId, entrainementId),
|
PRIMARY KEY (athleteId, entrainementId),
|
||||||
FOREIGN KEY (athleteId) REFERENCES Athlete (idAthlete),
|
FOREIGN KEY (athleteId) REFERENCES Athlete(idAthlete),
|
||||||
FOREIGN KEY (entrainementId) REFERENCES Entrainement (idEntrainement)
|
FOREIGN KEY (entrainementId) REFERENCES Entrainement(idEntrainement)
|
||||||
);
|
);
|
||||||
|
|
||||||
-- SourceDonnee Table
|
|
||||||
CREATE TABLE SourceDonnee (
|
CREATE TABLE SourceDonnee (
|
||||||
idSource SERIAL PRIMARY KEY,
|
idSource INT PRIMARY KEY,
|
||||||
type VARCHAR(255),
|
type VARCHAR(255),
|
||||||
modele VARCHAR(255),
|
modele VARCHAR(255),
|
||||||
precision DECIMAL,
|
precision2 DECIMAL,
|
||||||
athleteId INT,
|
athleteId INT,
|
||||||
FOREIGN KEY (athleteId) REFERENCES Athlete (idAthlete)
|
FOREIGN KEY (athleteId) REFERENCES Athlete(idAthlete)
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Activite Table
|
|
||||||
CREATE TABLE Activite (
|
CREATE TABLE Activite (
|
||||||
idActivite SERIAL PRIMARY KEY,
|
idActivite INT PRIMARY KEY,
|
||||||
type VARCHAR(255),
|
type VARCHAR(255),
|
||||||
date DATE,
|
date DATE,
|
||||||
heureDeDebut TIME,
|
heureDeDebut TIME,
|
||||||
heureDeFin TIME,
|
heureDeFin TIME,
|
||||||
effortRessent DECIMAL,
|
effortRessent DECIMAL,
|
||||||
variabilite DECIMAL,
|
variabilite DECIMAL,
|
||||||
variance DECIMAL,
|
variance DECIMAL,
|
||||||
ecartType DECIMAL,
|
ecartType DECIMAL,
|
||||||
moyenne DECIMAL,
|
moyenne DECIMAL,
|
||||||
maximum DECIMAL,
|
maximum DECIMAL,
|
||||||
minimum DECIMAL,
|
minimum DECIMAL,
|
||||||
temperatureMoyenne DECIMAL,
|
temperatureMoyenne DECIMAL,
|
||||||
athleteId INT,
|
athleteId INT,
|
||||||
sourceId INT,
|
sourceId INT,
|
||||||
FOREIGN KEY (athleteId) REFERENCES Athlete (idAthlete),
|
FOREIGN KEY (athleteId) REFERENCES Athlete(idAthlete),
|
||||||
FOREIGN KEY (sourceId) REFERENCES SourceDonnee (idSource)
|
FOREIGN KEY (sourceId) REFERENCES SourceDonnee(idSource)
|
||||||
);
|
);
|
||||||
|
|
||||||
-- FrequenceCardiaque Table
|
|
||||||
CREATE TABLE FrequenceCardiaque (
|
CREATE TABLE FrequenceCardiaque (
|
||||||
idFc SERIAL PRIMARY KEY,
|
idFc INT PRIMARY KEY,
|
||||||
altitude DECIMAL,
|
altitude DECIMAL,
|
||||||
temps TIME,
|
temps TIME,
|
||||||
temperature DECIMAL,
|
temperature DECIMAL,
|
||||||
bpm INT,
|
bpm INT,
|
||||||
longitude DECIMAL,
|
longitude DECIMAL,
|
||||||
latitude DECIMAL,
|
latitude DECIMAL,
|
||||||
activiteId INT,
|
activiteId INT,
|
||||||
FOREIGN KEY (activiteId) REFERENCES Activite (idActivite)
|
FOREIGN KEY (activiteId) REFERENCES Activite(idActivite)
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Insertion de données dans la table Athlete
|
INSERT INTO Athlete (idAthlete, nom, prenom, email, sexe, taille, poids, motDePasse, dateNaissance, isCoach) VALUES
|
||||||
INSERT INTO Athlete (nom, prenom, email, sexe, taille, poids, motDePasse, dateNaissance) VALUES
|
(1, 'Doe', 'John', 'john.doe@example.com', 'M', 1.80, 70, 'password123', '1990-01-01', FALSE),
|
||||||
('Doe', 'John', 'john.doe@example.com', 'M', 1.80, 70, 'password123', '1990-01-01'),
|
(2, 'Smith', 'Jane', 'jane.smith@example.com', 'F', 1.65, 60, 'password456', '1992-02-02', TRUE);
|
||||||
('Smith', 'Jane', 'jane.smith@example.com', 'F', 1.65, 60, 'password456', '1992-02-02');
|
|
||||||
|
|
||||||
-- Insertion de données dans la table Friendship
|
|
||||||
INSERT INTO Friendship (idAthlete1, idAthlete2, debut) VALUES
|
INSERT INTO Friendship (idAthlete1, idAthlete2, debut) VALUES
|
||||||
(1, 2, '2023-01-01');
|
(1, 2, '2023-01-01');
|
||||||
|
|
||||||
-- Insertion de données dans la table Notification
|
|
||||||
INSERT INTO Notification (message, date, statut, urgence, athleteId) VALUES
|
|
||||||
('Training session at 10 AM', '2023-03-10', TRUE, 1, 1);
|
|
||||||
|
|
||||||
-- Insertion de données dans la table Coach
|
INSERT INTO Notification (idNotif, message, date, statut, urgence, athleteId) VALUES
|
||||||
INSERT INTO Coach (athleteId) VALUES
|
(1, 'Training session at 10 AM', '2023-03-10', TRUE, 1, 1);
|
||||||
(1);
|
|
||||||
|
|
||||||
-- Insertion de données dans la table Statistique
|
INSERT INTO Statistique (idStatistique, poids, fcMoyenne, fcMax, caloriesBruleesMoy, date, athleteId) VALUES
|
||||||
INSERT INTO Statistique (poids, fcMoyenne, fcMax, caloriesBruleesMoy, date, athleteId) VALUES
|
(1, 70, 80, 150, 500, '2023-03-10', 1);
|
||||||
(70, 80, 150, 500, '2023-03-10', 1);
|
|
||||||
|
|
||||||
-- Insertion de données dans la table Entrainement
|
INSERT INTO Entrainement (idEntrainement, date, description, latitude, longitude, feedback, athleteId) VALUES
|
||||||
INSERT INTO Entrainement (date, description, latitude, longitude, feedback, coachId) VALUES
|
(1, '2023-03-12', 'Long run in the park', 40.7128, -74.0060, 'Good effort', 1);
|
||||||
('2023-03-12', 'Long run in the park', 40.7128, -74.0060, 'Good effort', 1);
|
|
||||||
|
|
||||||
-- Insertion de données dans la table Participe
|
|
||||||
INSERT INTO Participe (athleteId, entrainementId) VALUES
|
INSERT INTO Participe (athleteId, entrainementId) VALUES
|
||||||
(1, 1);
|
(1, 1);
|
||||||
|
|
||||||
-- Insertion de données dans la table SourceDonnee
|
INSERT INTO SourceDonnee (idSource, type, modele, precision2, athleteId) VALUES
|
||||||
INSERT INTO SourceDonnee (type, modele, precision, athleteId) VALUES
|
(1, 'Heart Rate Monitor', 'HRM-Pro', 98.5, 1);
|
||||||
('Heart Rate Monitor', 'HRM-Pro', 98.5, 1);
|
|
||||||
|
|
||||||
-- Insertion de données dans la table Activite
|
INSERT INTO Activite (idActivite, type, date, heureDeDebut, heureDeFin, effortRessent, variabilite, variance, ecartType, moyenne, maximum, minimum, temperatureMoyenne, athleteId, sourceId) VALUES
|
||||||
INSERT INTO Activite (type, date, heureDeDebut, heureDeFin, effortRessent, variabilite, variance, ecartType, moyenne, maximum, minimum, temperatureMoyenne, athleteId, sourceId) VALUES
|
(1, 'Running', '2023-03-10', '08:00:00', '09:00:00', 7, 0.5, 1, 0.1, 140, 160, 120, 20, 1, 1);
|
||||||
('Running', '2023-03-10', '08:00:00', '09:00:00', 7, 0.5, 1, 0.1, 140, 160, 120, 20, 1, 1);
|
|
||||||
|
|
||||||
-- Insertion de données dans la table FrequenceCardiaque
|
INSERT INTO FrequenceCardiaque (idFc, altitude, temps, temperature, bpm, longitude, latitude, activiteId) VALUES
|
||||||
INSERT INTO FrequenceCardiaque (altitude, temps, temperature, bpm, longitude, latitude, activiteId) VALUES
|
(1, 100, '08:15:00', 15, 130, -74.0060, 40.7128, 1);
|
||||||
(100, '08:15:00', 15, 130, -74.0060, 40.7128, 1);
|
|
||||||
|
@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace DataManager;
|
||||||
|
|
||||||
|
class CoachManager
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|