refactor: move backend in apps/backend

This commit is contained in:
Giovanni committed 2026-10-03 18:35:36 +02:00
1 parent cf529278bd
commit e2b471312c
178 files changed
+210 -193

No files matched your search

+49
View File
@@ -0,0 +1,49 @@
meta {
name: Create event
type: http
seq: 1
}
post {
url: {{url}}/api/events/create
body: json
auth: inherit
}
body:json {
{
"name": "{{name}}",
"description": "{{description}}",
"start": "{{start}}",
"end": "{{end}}"
}
}
vars:pre-request {
name: Plage
description: La rochelle
start: 2025-01-15T13:45
end: 2025-03-15T13:00
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /events/create -- POST
Permet de créer un événement.
La connexion est obligatoire, les cookies de connexions/XSRF doivent être présents.
L'utilisateur doit être admin pour créer un événement
Entrée: nom, description
}
+24
View File
@@ -0,0 +1,24 @@
meta {
name: Delete event
type: http
seq: 6
}
delete {
url: {{url}}/api/events/{{id}}
body: none
auth: inherit
}
vars:pre-request {
id: 1
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+20
View File
@@ -0,0 +1,20 @@
meta {
name: Get all events
type: http
seq: 5
}
get {
url: {{url}}/api/events
body: none
auth: inherit
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+24
View File
@@ -0,0 +1,24 @@
meta {
name: Get event tasks
type: http
seq: 3
}
get {
url: {{url}}/api/events/{{id}}/tasks
body: none
auth: inherit
}
vars:pre-request {
id: 1
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+24
View File
@@ -0,0 +1,24 @@
meta {
name: Get event
type: http
seq: 7
}
get {
url: {{url}}/api/events/{{id}}
body: none
auth: inherit
}
vars:pre-request {
id: 1
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+24
View File
@@ -0,0 +1,24 @@
meta {
name: Search events
type: http
seq: 8
}
get {
url: {{url}}/api/events/search
body: none
auth: inherit
}
params:query {
query: vile
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+33
View File
@@ -0,0 +1,33 @@
meta {
name: Update event
type: http
seq: 4
}
post {
url: {{url}}/api/events/{{id}}/update
body: json
auth: inherit
}
body:json {
{
"name": "{{name}}",
"description": "{{description}}"
}
}
vars:pre-request {
id: 1
name: BLAAHHHH
description: DADADADADDA
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+8
View File
@@ -0,0 +1,8 @@
meta {
name: Events
seq: 7
}
auth {
mode: inherit
}
+31
View File
@@ -0,0 +1,31 @@
meta {
name: Assign task to user
type: http
seq: 3
}
post {
url: {{url}}/api/events/task/assign/{{id}}
body: json
auth: inherit
}
body:json {
{
"task_id": "{{task_id}}"
}
}
vars:pre-request {
id: 3
task_id: 2
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+30
View File
@@ -0,0 +1,30 @@
meta {
name: Assign task
type: http
seq: 2
}
post {
url: {{url}}/api/events/task/assign
body: json
auth: inherit
}
body:json {
{
"task_id": "{{taskId}}"
}
}
vars:pre-request {
taskId: 1
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+24
View File
@@ -0,0 +1,24 @@
meta {
name: Delete task
type: http
seq: 8
}
delete {
url: {{url}}/api/events/tasks/{{id}}
body: none
auth: inherit
}
vars:pre-request {
id: 1
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+34
View File
@@ -0,0 +1,34 @@
meta {
name: Is user assigned
type: http
seq: 9
}
get {
url: {{url}}/api/events/tasks/{{id}}/assigned
body: none
auth: inherit
}
vars:pre-request {
id: 1
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /events/tasks/{id}/assigned -- GET
Vérifie si l'utilisateur connecté est assigné à une tâche spécifique.
Authentification requise.
Entrée: id (identifiant de la tâche)
}
+31
View File
@@ -0,0 +1,31 @@
meta {
name: Unassign task to user
type: http
seq: 7
}
post {
url: {{url}}/api/events/task/unassign/{{id}}
body: json
auth: inherit
}
body:json {
{
"task_id": "{{task_id}}"
}
}
vars:pre-request {
id: 3
task_id: 2
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+30
View File
@@ -0,0 +1,30 @@
meta {
name: Unassign task
type: http
seq: 6
}
post {
url: {{url}}/api/events/task/unassign
body: json
auth: inherit
}
body:json {
{
"task_id": "{{taskId}}"
}
}
vars:pre-request {
taskId: 1
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+41
View File
@@ -0,0 +1,41 @@
meta {
name: Update Task
type: http
seq: 5
}
post {
url: {{url}}/api/events/tasks/{{id}}/update
body: json
auth: inherit
}
body:json {
{
"name": "{{name}}",
"description": "{{description}}",
"location": "{{location}}",
"start": "{{start}}",
"end": "{{end}}",
"max_participants": "{{max_participants}}"
}
}
vars:pre-request {
id: 1
name: Organisation plage
description: il faut organiser la sortie
location: La Rochelle
start: 2025-01-15T13:45
end: 2025-03-15T13:00
max_participants: 5
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+42
View File
@@ -0,0 +1,42 @@
meta {
name: create event task
type: http
seq: 1
}
post {
url: {{url}}/api/events/task
body: json
auth: inherit
}
body:json {
{
"event_id": "{{event_id}}",
"name": "{{name}}",
"location": "{{location}}",
"description": "{{description}}",
"start": "{{start}}",
"end": "{{end}}",
"max_participants": "{{max_participants}}"
}
}
vars:pre-request {
event_id: 1
name: Organisation plage
location: la rochelle
description: il faut organiser la sortie
start: 2025-01-15T13:45
end: 2025-03-15T13:00
max_participants: 5
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+8
View File
@@ -0,0 +1,8 @@
meta {
name: tasks
seq: 2
}
auth {
mode: inherit
}
+35
View File
@@ -0,0 +1,35 @@
meta {
name: Export ICS
type: http
seq: 1
}
get {
url: {{url}}/api/export/ics/{{userId}}
body: none
auth: inherit
}
vars:pre-request {
userId: 2398
}
assert {
res.status: eq 200
res.headers.content-type: contains "text/calendar"
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /export/ics/{userId} -- GET
Exporte les tâches d'un utilisateur au format iCalendar (.ics).
Retourne un fichier téléchargeable agenda_user_{id}.ics.
Entrée: userId (identifiant de l'utilisateur)
}
+8
View File
@@ -0,0 +1,8 @@
meta {
name: Export
seq: 11
}
auth {
mode: inherit
}
+20
View File
@@ -0,0 +1,20 @@
meta {
name: Get all roles
type: http
seq: 9
}
get {
url: {{url}}/api/roles
body: none
auth: inherit
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+46
View File
@@ -0,0 +1,46 @@
meta {
name: Login
type: http
seq: 5
}
post {
url: {{url}}/api/users/login
body: json
auth: none
}
body:json {
{
"email": "{{email}}",
"password": "{{password}}"
}
}
vars:pre-request {
email: gio@gmail.com
password: 12345678
}
assert {
res.status: eq 200
res.body.message: eq ok
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users/login -- POST
Permet de se connecter
Le header X-XSRF-TOKEN est obligatoire.
Pour le récupérer:
- Lancer la requête get CSR
- Prendre la valeur XSRF-TOKEN du Set-Cookie des Header
- Mettre la valeur dans le script extractCSRF.js
- Copier la valeur de retour
}
+27
View File
@@ -0,0 +1,27 @@
meta {
name: Logout
type: http
seq: 8
}
post {
url: {{url}}/api/users/logout
body: none
auth: inherit
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users/logout -- POST
Permet de se déconnecter.
Supprime le remember_token et cookies de connexions.
}
@@ -0,0 +1,24 @@
meta {
name: Delete user notification
type: http
seq: 3
}
delete {
url: {{url}}/api/users/delete/notification/{{notificationId}}
body: none
auth: inherit
}
vars:pre-request {
notificationId: 3
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
@@ -0,0 +1,20 @@
meta {
name: Get user notifications
type: http
seq: 2
}
get {
url: {{url}}/api/users/notifications
body: none
auth: inherit
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+20
View File
@@ -0,0 +1,20 @@
meta {
name: Read notifications
type: http
seq: 4
}
post {
url: {{url}}/api/users/notifications/read
body: none
auth: inherit
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+8
View File
@@ -0,0 +1,8 @@
meta {
name: Notifications
seq: 8
}
auth {
mode: inherit
}
+29
View File
@@ -0,0 +1,29 @@
meta {
name: Delete profile photo
type: http
seq: 3
}
delete {
url: {{url}}/api/profile-photo
body: none
auth: inherit
}
assert {
res.status: eq 200
res.body.message: eq "Photo supprimée"
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /profile-photo -- DELETE
Supprime la photo de profil de l'utilisateur connecté.
Authentification requise.
}
+29
View File
@@ -0,0 +1,29 @@
meta {
name: Get profile photo
type: http
seq: 1
}
get {
url: {{url}}/api/profile-photo
body: none
auth: inherit
}
assert {
res.status: eq 200
res.body.profile_photo_path: isDefined
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /profile-photo -- GET
Retourne le chemin de la photo de profil de l'utilisateur connecté.
Authentification requise.
}
+36
View File
@@ -0,0 +1,36 @@
meta {
name: Update profile photo
type: http
seq: 2
}
post {
url: {{url}}/api/profile-photo
body: multipartForm
auth: inherit
}
body:multipart-form {
photo: @file(photo.jpg)
}
assert {
res.status: eq 200
res.body.profile_photo_path: isDefined
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /profile-photo -- POST
Met à jour la photo de profil de l'utilisateur connecté.
L'ancienne photo est supprimée si elle existe.
Authentification requise.
Entrée: photo (fichier image jpeg/png/jpg/gif, max 2MB)
}
+8
View File
@@ -0,0 +1,8 @@
meta {
name: Profile photo
seq: 10
}
auth {
mode: inherit
}
+49
View File
@@ -0,0 +1,49 @@
meta {
name: Create user by admin
type: http
seq: 13
}
post {
url: {{url}}/api/users/create
body: json
auth: inherit
}
body:json {
{
"name": "{{name}}",
"lastname": "{{lastname}}",
"email": "{{email}}",
"phone": "{{phone}}"
}
}
vars:pre-request {
name: Jean
lastname: Dupont
email: jean.dupont@example.com
phone: 0607080910
}
assert {
res.status: eq 200
res.body.message: eq "User created successfully"
res.body.password: isDefined
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users/create -- POST
Permet à un admin de créer un compte utilisateur directement validé.
Un mot de passe aléatoire est généré et retourné dans la réponse.
Authentification requise. L'utilisateur doit être admin.
Entrées: name, lastname, email, phone
}
+46
View File
@@ -0,0 +1,46 @@
meta {
name: Create user
type: http
seq: 5
}
post {
url: {{url}}/api/users/register
body: json
auth: inherit
}
body:json {
{
"name": "{{name}}",
"lastname": "{{lastname}}",
"email": "{{email}}",
"password": "{{password}}",
"phone": "{{phone}}"
}
}
vars:pre-request {
name: test
email: test@gmail.com
password: 12345678
lastname: test
phone: 0607070707
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users/register -- POST
Permet de créer un compte utilisateur.
Entrées: name, lastname, email, password
}
+35
View File
@@ -0,0 +1,35 @@
meta {
name: Deactivate user
type: http
seq: 14
}
post {
url: {{url}}/api/users/{{id}}/deactivate
body: none
auth: inherit
}
vars:pre-request {
id: 13
}
assert {
res.status: eq 200
res.body.message: eq "User deactivated successfully"
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users/{id}/deactivate -- POST
Permet de désactiver le compte d'un utilisateur (validate = 0).
Authentification requise. L'utilisateur doit être admin.
Entrée: id (identifiant de l'utilisateur à désactiver)
}
+38
View File
@@ -0,0 +1,38 @@
meta {
name: Delete user by id
type: http
seq: 7
}
delete {
url: {{url}}/api/users/{{id}}
body: none
auth: inherit
}
vars:pre-request {
id: 15
}
assert {
res.status: eq 200
res.body.message: eq "User deleted successfully"
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users/id -- DELETE
Permet de supprimer un compte utilisateur
La connexion est obligatoire, les cookies de connexions/XSRF doivent être présents.
L'utilisateur doit être admin poir supprimer un autre compte utilisateur.
Entrée: id
}
+29
View File
@@ -0,0 +1,29 @@
meta {
name: Delete user
type: http
seq: 6
}
delete {
url: {{url}}/api/users
body: none
auth: inherit
}
assert {
res.status: eq 200
res.body.message: eq "User deleted successfully"
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users -- DELETE
Permet de supprimer le compte de l'utilisateur actuellement connecté.
La connexion est obligatoire, les cookies de connexions/XSRF doivent être présents.
}
+36
View File
@@ -0,0 +1,36 @@
meta {
name: Get User
type: http
seq: 1
}
get {
url: {{url}}/api/users/{{id}}
body: none
auth: inherit
}
vars:pre-request {
id: 2398
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users/id -- GET
Permet de récupérer les informations d'un utilisateur.
Authetification demandée
Cookies de connexion/XSRF requis.
/api/users/{ID}
ID = Identifiant de l'utilisateur cible
}
+28
View File
@@ -0,0 +1,28 @@
meta {
name: Get invalid user
type: http
seq: 12
}
get {
url: {{url}}/api/users/invalid
body: none
auth: inherit
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users/invalid -- GET
Retourne les IDs des utilisateurs en attente de validation (validate = 0).
Authentification requise. L'utilisateur doit être admin.
}
+35
View File
@@ -0,0 +1,35 @@
meta {
name: Get user task by task id
type: http
seq: 15
}
get {
url: {{url}}/api/users/tasks/{{taskId}}
body: none
auth: inherit
}
vars:pre-request {
taskId: 1
}
assert {
res.status: eq 200
res.body.data: isDefined
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users/tasks/{idTask} -- GET
Retourne une tâche spécifique de l'utilisateur connecté par l'ID de la tâche.
Authentification requise.
Entrée: taskId (identifiant de la tâche)
}
+35
View File
@@ -0,0 +1,35 @@
meta {
name: Get user tasks by id
type: http
seq: 10
}
get {
url: {{url}}/api/users/{{id}}/tasks
body: none
auth: inherit
}
vars:pre-request {
id: 2398
}
assert {
res.status: eq 200
res.body.data: isDefined
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users/{id}/tasks -- GET
Retourne les tâches d'un utilisateur spécifique par son ID.
Authentification requise.
Entrée: id (identifiant de l'utilisateur)
}
+21
View File
@@ -0,0 +1,21 @@
meta {
name: Get user tasks
type: http
seq: 9
}
get {
url: {{url}}/api/users/tasks
body: none
auth: inherit
}
assert {
res.status: eq 200
res.body.data: isDefined
}
settings {
encodeUrl: true
timeout: 0
}
+43
View File
@@ -0,0 +1,43 @@
meta {
name: Modify user role
type: http
seq: 3
}
post {
url: {{url}}/api/users/{{id}}/role
body: json
auth: inherit
}
body:json {
{
"role": {{role}}
}
}
vars:pre-request {
role: 1
id: 12
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users/id/role -- POST
Permet de modifier le rôle d'un utilisateur.
La connexion est obligatoire, les cookies de connexions/XSRF doivent être présents.
L'utilisateur doit être admin pour modifier le rôle d'un utilisateur.
Entrées: id, role
}
+24
View File
@@ -0,0 +1,24 @@
meta {
name: Search users
type: http
seq: 11
}
get {
url: {{url}}/api/users/search
body: none
auth: inherit
}
params:query {
query: test
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
+46
View File
@@ -0,0 +1,46 @@
meta {
name: Update User
type: http
seq: 2
}
post {
url: {{url}}/api/users/update
body: json
auth: inherit
}
body:json {
{
"name": "{{name}}",
"lastname": "{{lastname}}",
"phone": "{{phone}}"
}
}
vars:pre-request {
name:
lastname:
phone:
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users/update -- POST
Permet de modifier les données de l'utilisateur actuellement connecté.
La connexion est obligatoire, les cookies de connexions/XSRF doivent être présents.
Entrées: name, lastname, phone
Toutes les données d'entrées sont requises, même celles non modifiées.
}
+37
View File
@@ -0,0 +1,37 @@
meta {
name: Validate User
type: http
seq: 4
}
post {
url: {{url}}/api/users/{{id}}/validate
body: none
auth: inherit
}
vars:pre-request {
id: 13
}
assert {
res.status: eq 200
res.body.message: eq "User validated successfully"
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users/id/validate -- POST
Permet de valider l'inscription d'un nouvel utilisateur.
La connexion est obligatoire, les cookies de connexions/XSRF doivent être présents.
L'utilisateur doit être admin pour valider un autre utilisateur
Entrée: id: identifiant de l'utilisateur qui va être validé.
}
+8
View File
@@ -0,0 +1,8 @@
meta {
name: Users
seq: 9
}
auth {
mode: inherit
}
+26
View File
@@ -0,0 +1,26 @@
meta {
name: get all users
type: http
seq: 8
}
get {
url: {{url}}/api/users
body: none
auth: inherit
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /users -- GET
Permet de récupérer tous les IDs des utilisateurs.
}
+9
View File
@@ -0,0 +1,9 @@
{
"version": "1",
"name": "test-sae-backend",
"type": "collection",
"ignore": [
"node_modules",
".git"
]
}
+4
View File
@@ -0,0 +1,4 @@
headers {
Accept: application/json
X-XSRF-TOKEN: eyJpdiI6ImVGRmdjSGtkUUtUT2E3TVE0RVM3c0E9PSIsInZhbHVlIjoiTkNldWpJb0I3T1dQMVJmTm43ekRPa2ZocFRZc25jYVlyZ0RBVDV3UjJVVDdpQkI1MUtkNWZROS9xbHdPUElHNTlrcjh2TUIxaTNtL20wYXZpdnltRGhNTGpsSGZETFV3VUtNd200OWcwUXFiYU9Eamd1VmFxRzVBNVNZVHBxMEEiLCJtYWMiOiJiMTM1OGVhOGRjM2VjMTg5ZDk4MzMwMjBmNjBkZjQ4OGIzODcwZjMzYzZkOTQxY2E5YjYyMDUxNGY5MzFjNjA1IiwidGFnIjoiIn0=
}
+3
View File
@@ -0,0 +1,3 @@
vars:secret [
url
]
+30
View File
@@ -0,0 +1,30 @@
import readline from "readline";
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
function askToken() {
console.clear();
rl.question("👉 Entrez un token à décoder (ou 'exit' pour quitter) : ", (input) => {
if (input.toLowerCase() === "exit") {
console.log("👋 Fin du programme.");
rl.close();
return;
}
try {
const decoded = decodeURIComponent(input);
console.log("\n✅ Token décodé :", decoded);
} catch (err) {
console.log("\n❌ Erreur : le token n'est pas valide.");
}
console.log("\nAppuyez sur Entrée pour continuer...");
rl.once("line", askToken);
});
}
askToken();
+26
View File
@@ -0,0 +1,26 @@
meta {
name: get CSRF
type: http
seq: 4
}
get {
url: {{url}}/sanctum/csrf-cookie
body: none
auth: inherit
}
assert {
res.status: eq 204
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /csrf-cookie -- GET
Renvoi le cookie XSRF permettant de se connecter et de faire des requêtes afin d'éviter les failles CSRF.
}
+25
View File
@@ -0,0 +1,25 @@
meta {
name: hello
type: http
seq: 3
}
get {
url: {{url}}/api/hello
body: none
auth: inherit
}
assert {
res.status: eq 200
res.body: eq Hello
}
settings {
encodeUrl: true
timeout: 0
}
docs {
Permet de tester la route hello et verifier si le serveur laravel backend est bien allumé
}
+30
View File
@@ -0,0 +1,30 @@
meta {
name: me
type: http
seq: 6
}
get {
url: {{url}}/api/users/me
body: none
auth: inherit
}
assert {
res.status: eq 200
}
settings {
encodeUrl: true
timeout: 0
}
docs {
# /me -- GET
Renvoi l'utilisateur acutllement connecté.
La connexion est obligatoire, les cookies de connexions/XSRF doivent être présents.
Renvoi un objet avec les informations de l'utilisateur
}