Compare commits

...

15 Commits

Author SHA1 Message Date
Antoine PINAGOT d51484101c Ajout Tests
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII d01c538964 Update 'Sources/HeartTrack/Dockerfile'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 89cc3c41e3 Update '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII c4602a4b0e Update '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII d00c5198a3 Update '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII 0cf6cfcbff Update '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
Antoine PEREDERII a3ba1c9b15 🧪 Test deploying Web Site
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA 65eb8b9d95 Mise à jour de '.drone.yml'
continuous-integration/drone/push Build is failing Details
1 year ago
David D'ALMEIDA adb9655a87 Mise à jour de '.drone.yml'
1 year ago
Antoine PEREDERII ed8ed96133 🧪 Test CI/CD
1 year ago
Antoine PINAGOT bc87676131 Résolution erreur affichage Datagrid ticket
1 year ago
Antoine PINAGOT 207ac95462 Mise à jour de 'Sources/HeartTrack/Pages/Tickets.razor.cs'
1 year ago
Antoine PINAGOT bb7eb27e9d Test
1 year ago
Antoine PEREDERII 7052f5c3ee Update 'README.md'
1 year ago
Antoine PEREDERII 9139329c60 Merge pull request 'merge merged_APE into master for evaluation' (#2) from merged_APE into main
1 year ago

@ -0,0 +1,81 @@
kind: pipeline
type: docker
name: HeartTrack-Admin-CI
trigger:
event:
- push
steps:
- name: build
image: mcr.microsoft.com/dotnet/sdk:6.0
commands:
- cd Sources/HeartTrack/
- dotnet restore HeartTrack.sln
- dotnet build HeartTrack.sln -c Release --no-restore
- dotnet publish HeartTrack.sln -c Release --no-restore -o CI_PROJECT_DIR/build/release
- name: tests
image: mcr.microsoft.com/dotnet/sdk:6.0
commands:
- cd Sources/HeartTrack/
- dotnet restore HeartTrack.sln
- dotnet test HeartTrack.sln --no-restore
depends_on: [build]
- name: code-analysis
image: hub.codefirst.iut.uca.fr/marc.chevaldonne/codefirst-dronesonarplugin-dotnet8
secrets: [ SECRET_SONAR_LOGIN ]
settings:
sonar_host: https://codefirst.iut.uca.fr/sonar/
sonar_token:
from_secret: SECRET_SONAR_LOGIN
project_key: HeartTrack-API
coverage_exclusions: Tests/**, StubbedContextLib/**, StubAPI/**
duplication_exclusions: Tests/**, StubbedContextLib/**
commands:
- cd Sources/HeartTrack/
- dotnet restore HeartTrack.sln
- dotnet sonarscanner begin /k:HeartTrack-API /d:sonar.host.url=$${PLUGIN_SONAR_HOST} /d:sonar.login=$${PLUGIN_SONAR_TOKEN} /d:sonar.coverage.exclusions="Tests/**, StubbedContextLib/**, StubAPI/**, HeartTrackAPI/Utils/**" /d:sonar.cpd.exclusions="Tests/**, StubbedContextLib/**, StubAPI/**" /d:sonar.coverageReportPaths="coveragereport/SonarQube.xml"
- dotnet build HeartTrack.sln -c Release --no-restore
- dotnet test HeartTrack.sln --logger trx --no-restore /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura --collect "XPlat Code Coverage"
- reportgenerator -reports:"**/coverage.cobertura.xml" -reporttypes:SonarQube -targetdir:"coveragereport"
- dotnet publish HeartTrack.sln -c Release --no-restore -o $CI_PROJECT_DIR/build/release
- dotnet sonarscanner end /d:sonar.login=$${PLUGIN_SONAR_TOKEN}
depends_on: [ tests ]
---
kind: pipeline
type: docker
name: HeartTrack-Admin-CD
trigger:
event:
- push
steps:
- name: docker-build-and-push
image: plugins/docker
settings:
dockerfile: Sources/HeartTrack/Dockerfile
context: Sources/HeartTrack/
registry: hub.codefirst.iut.uca.fr
repo: hub.codefirst.iut.uca.fr/david.d_almeida/admin
username:
from_secret: SECRET_REGISTRY_USERNAME
password:
from_secret: SECRET_REGISTRY_PASSWORD
# database container admin
- name: deploy-container-admin
image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest
environment:
CODEFIRST_CLIENTDRONE_ENV_TYPE: ADMIN
IMAGENAME: hub.codefirst.iut.uca.fr/david.d_almeida/admin:latest
CONTAINERNAME: heart_track_admin
COMMAND: create
ADMINS: davidd_almeida,kevinmonteiro,antoineperederii,paullevrault,antoinepinagot,nicolasraymond,marcchevaldonne
OVERWRITE: true
depends_on: [ docker-build-and-push ]

@ -62,6 +62,7 @@ Ce dépôt contient une application Blazor conçue pour faciliter l'administrati
* [x] Merge request (2 points) * [x] Merge request (2 points)
## Ce que nous avons fait ## Ce que nous avons fait
Pour d'avantages d'informations, voir les branches `issue_auth` et `merged_APE`
* [x] Les listing dans la page de tickets et d'Activités * [x] Les listing dans la page de tickets et d'Activités
* [x] La modification dans la page de tickets * [x] La modification dans la page de tickets
* [x] La suppression dans la page de tickets * [x] La suppression dans la page de tickets

@ -0,0 +1,20 @@
# Utiliser l'image SDK .NET pour construire l'application
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /app
# Copier les fichiers du projet et restaurer les dépendances
COPY *.csproj .
RUN dotnet restore
# Copier tout le reste et construire l'application
COPY . .
RUN dotnet publish -c Release -o out
# Utiliser l'image runtime .NET pour exécuter l'application
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS runtime
WORKDIR /app
COPY --from=build /app/out .
EXPOSE 8080
ENTRYPOINT ["dotnet", "HeartTrack.dll"]

@ -15,6 +15,7 @@
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="6.0.1" /> <PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.1" /> <PackageReference Include="Microsoft.Extensions.Localization" Version="8.0.1" />
<PackageReference Include="MudBlazor" Version="6.12.0" /> <PackageReference Include="MudBlazor" Version="6.12.0" />
<PackageReference Include="xunit" Version="2.7.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

@ -6,7 +6,7 @@ namespace HeartTrack.Models
public class ReportModel public class ReportModel
{ {
[Required] [Required]
[Range(0, 121425711425541)] [Range(0, 2500000)]
public int Id { get; set; } public int Id { get; set; }
[Required] [Required]
[StringLength(50)] [StringLength(50)]

@ -6,7 +6,6 @@
public string Username { get; set; } public string Username { get; set; }
public string Contexte { get; set; } public string Contexte { get; set; }
public string Description { get; set; } public string Description { get; set; }
public string Urgence { get; set; }
public Boolean isCheck { get; set; } public Boolean isCheck { get; set; }
} }
} }

@ -7,7 +7,7 @@ namespace HeartTrack.Models
public class TicketModel public class TicketModel
{ {
[Required] [Required]
[Range(0, 121425711425541)] [Range(0, 2500000)]
public int Id { get; set; } public int Id { get; set; }
[Required] [Required]
@ -20,7 +20,6 @@ namespace HeartTrack.Models
[Required] [Required]
[StringLength(500, ErrorMessage = "Description must not exceed 500 characters.")] [StringLength(500, ErrorMessage = "Description must not exceed 500 characters.")]
public string Description { get; set; } public string Description { get; set; }
public Boolean Urgence { get; set; }
public Boolean isCheck { get; set; } = false; public Boolean isCheck { get; set; } = false;
} }
} }

@ -6,7 +6,7 @@ namespace HeartTrack.Models
public class UserModel public class UserModel
{ {
[Required] [Required]
[Range(0,121425711425541)] [Range(0,2500000)]
public int Id { get; set; } public int Id { get; set; }
[Required] [Required]

@ -25,13 +25,6 @@
</label> </label>
</p> </p>
<p>
<label for="urgence">
Urgence:
<InputCheckbox id="urgence" @bind-Value="ticketModel.Urgence" />
</label>
</p>
<button type="submit">Submit</button> <button type="submit">Submit</button>
</EditForm> </EditForm>

@ -26,9 +26,8 @@ This is the ticket list of users.
Responsive Responsive
Sortable Sortable
SortMode="DataGridSortMode.Single"> SortMode="DataGridSortMode.Single">
<DataGridColumn TItem="Ticket" Field="@nameof(Ticket.Username)" Caption="Username" /> <DataGridColumn TItem="Ticket" Field="@nameof(Ticket.Username)" Caption="Username" Width="200px"/>
<DataGridColumn TItem="Ticket" Field="@nameof(Ticket.Contexte)" Caption="Context" /> <DataGridColumn TItem="Ticket" Field="@nameof(Ticket.Contexte)" Caption="Context" />
<DataGridColumn TItem="Ticket" Field="@nameof(Ticket.Urgence)" Caption="Urgency" Width="150px" />
<DataGridColumn TItem="Ticket" Field="@nameof(Ticket.isCheck)" Caption="Status" SortField="@nameof( Ticket.isCheck )" SortDirection="Blazorise.SortDirection.Ascending" Width="150px" Editable> <DataGridColumn TItem="Ticket" Field="@nameof(Ticket.isCheck)" Caption="Status" SortField="@nameof( Ticket.isCheck )" SortDirection="Blazorise.SortDirection.Ascending" Width="150px" Editable>
<DisplayTemplate> <DisplayTemplate>
@if (context.isCheck) @if (context.isCheck)
@ -46,7 +45,7 @@ This is the ticket list of users.
<DisplayTemplate> <DisplayTemplate>
@if (context.isCheck) @if (context.isCheck)
{ {
<MudFab Color="Color.Tertiary" StartIcon="@Icons.Material.Filled.RemoveRedEye" Size="Size.Small" @onclick="() => OnView(context.Id)" /> <MudFab Color="Color.Tertiary" StartIcon="@Icons.Material.Filled.RemoveRedEye" Size="Size.Small" @onclick="(() => OnView(context.Id))"/>
<MudFab Color="Color.Secondary" StartIcon="@Icons.Material.Filled.Delete" Size="Size.Small" @onclick="() => OnDelete(context)" /> <MudFab Color="Color.Secondary" StartIcon="@Icons.Material.Filled.Delete" Size="Size.Small" @onclick="() => OnDelete(context)" />
} }
else else

@ -31,6 +31,9 @@ namespace HeartTrack.Pages
[Inject] [Inject]
public NavigationManager NavigationManager { get; set; } public NavigationManager NavigationManager { get; set; }
[Inject]
private ISnackbar Snackbar { get; set; }
protected override async Task OnAfterRenderAsync(bool firstRender) protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
// Do not treat this action if is not the first render // Do not treat this action if is not the first render
@ -45,7 +48,7 @@ namespace HeartTrack.Pages
if (currentData == null) if (currentData == null)
{ {
// this code add in the local storage the fake data (we load the data sync for initialize the data before load the OnReadData method) // this code add in the local storage the fake data (we load the data sync for initialize the data before load the OnReadData method)
var originalData = Http.GetFromJsonAsync<Ticket[]>($"{NavigationManager.BaseUri}data/fake-tickets.json").Result; var originalData = Http.GetFromJsonAsync<Ticket[]>($"{NavigationManager.BaseUri}fake-tickets.json").Result;
await LocalStorage.SetItemAsync("data", originalData); await LocalStorage.SetItemAsync("data", originalData);
} }
@ -71,11 +74,10 @@ namespace HeartTrack.Pages
private async void OnClose(int id) private async void OnClose(int id)
{ {
await TicketService.Close(id); await TicketService.Close(id);
// Reload the page
NavigationManager.NavigateTo("tickets", true); NavigationManager.NavigateTo("tickets", true);
Snackbar.Add("Ticket fermé !");
} }
private void OnView(int id) private void OnView(int id)

@ -13,9 +13,7 @@
<p> <p>
Description: @ticket.Description Description: @ticket.Description
</p> </p>
<p>
Urgence: @ticket.Urgence
</p>
<p> <p>
Status: @ticket.isCheck Status: @ticket.isCheck
</p> </p>
<MudButton @OnClick="OnNavigateOnReturnClicked">Return</MudButton>

@ -31,9 +31,13 @@ namespace HeartTrack.Pages
Username = item.Username, Username = item.Username,
Contexte = item.Contexte, Contexte = item.Contexte,
Description = item.Description, Description = item.Description,
Urgence = item.Urgence,
isCheck = item.isCheck isCheck = item.isCheck
}; };
} }
private void OnNavigateOnReturnClicked()
{
NavigationManager.NavigateTo("/tickets", true);
}
} }
} }

@ -10,11 +10,23 @@ using HeartTrack.Services.TicketDataService;
using MudBlazor.Services; using MudBlazor.Services;
using HeartTrack.Services.ActivityDataServiceFactice; using HeartTrack.Services.ActivityDataServiceFactice;
using HeartTrack.Services.TicketDataServiceFactice; using HeartTrack.Services.TicketDataServiceFactice;
using MudBlazor;
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
// Add Badge Component services // Add Badge Component services
builder.Services.AddMudServices(); builder.Services.AddMudServices(config =>
{
config.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomLeft;
config.SnackbarConfiguration.PreventDuplicates = false;
config.SnackbarConfiguration.NewestOnTop = false;
config.SnackbarConfiguration.ShowCloseIcon = true;
config.SnackbarConfiguration.VisibleStateDuration = 10000;
config.SnackbarConfiguration.HideTransitionDuration = 500;
config.SnackbarConfiguration.ShowTransitionDuration = 500;
config.SnackbarConfiguration.SnackbarVariant = Variant.Filled;
});
// Add services to the container. // Add services to the container.
builder.Services.AddRazorPages(); builder.Services.AddRazorPages();

@ -33,5 +33,10 @@ namespace HeartTrack.Shared
this.NavigationManager.NavigateTo("/Culture/SetCulture" + query, forceLoad: true); this.NavigationManager.NavigateTo("/Culture/SetCulture" + query, forceLoad: true);
} }
} }
public int getSizeCultures()
{
return supportedCultures.Length;
}
} }
} }

@ -17,20 +17,12 @@
<span class="navbat-toggler-icon"></span> <span class="navbat-toggler-icon"></span>
</MudIconButton> </MudIconButton>
<MudSpacer /> <MudSpacer />
<MudIconButton Icon="@Icons.Material.Filled.ManageAccounts" Color="Color.Inherit" Edge="Edge.End" @onclick="ToggleProfilMenu"/> <CultureSelector></CultureSelector>
<MudMenu Icon="@Icons.Material.Filled.AccountCircle" Color="Color.Inherit" Edge="Edge.End">
<MudMenuItem>Profile</MudMenuItem>
<MudButton type="button" class="btn btn-link ml-md-auto">Logout</MudButton>
</MudMenu>
</MudAppBar> </MudAppBar>
@* <div class="top-row px-4 auth">
@* <div class="container-fluid toggler-container">
<button title="Navigation menu" class="navbar-toggler custom-toggler" @onclick="ToggleNavMenu">
<span class="navbat-toggler-icon"></span>
</button>
</div> *@
@* Messages, notifs et pp compte à mettre *@
@* <div class="top-row px-4">
<CultureSelector />
<button type="button" class="btn btn-link ml-md-auto" @onclick="@LogoutClick">Logout</button>
</div>
</div> *@
<article class="content px-4"> <article class="content px-4">
@Body @Body

@ -13,13 +13,14 @@ namespace HeartTrack.Shared
private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null; private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;
private void ToggleNavMenu() public void ToggleNavMenu()
{ {
collapseNavMenu = !collapseNavMenu; collapseNavMenu = !collapseNavMenu;
} }
private void ToggleProfilMenu()
{
public bool getCollapseNavMenu()
{
return this.collapseNavMenu;
} }
} }
} }

@ -0,0 +1,25 @@
using HeartTrack.Controllers;
using Microsoft.AspNetCore.Mvc;
using Xunit;
namespace HeartTrack.Tests.Controller
{
public class CultureControllerTests
{
[Fact]
public void IsCultureControllerInstanceOfCultureController()
{
var culture = new CultureController();
Assert.IsType<CultureController>(culture);
}
[Fact]
public void IsSetCultureRedirecting()
{
var culture = new CultureController();
Assert.IsAssignableFrom<IActionResult>(culture.SetCulture("",""));
}
}
}

@ -0,0 +1,37 @@
using HeartTrack.Models;
using Xunit;
namespace HeartTrack.Tests.Models
{
public class ActivityTests
{
[Fact]
public void IsActivityInstanceOfActivity()
{
var activity = new Activity();
Assert.IsType<Activity>(activity);
}
[Fact]
public void HasActivityAttrivutesRightInstance()
{
var activity = new Activity();
Assert.IsType<int>(activity.IdActivity);
Assert.IsType<string>(activity.Type);
Assert.IsType<DateOnly>(activity.Date);
Assert.IsType<DateOnly>(activity.StartTime);
Assert.IsType<DateOnly>(activity.EndTime);
Assert.IsType<int>(activity.EffortRessenti);
Assert.IsType<float>(activity.Variability);
Assert.IsType<float>(activity.Variance);
Assert.IsType<float>(activity.StandardDeviation);
Assert.IsType<float>(activity.Average);
Assert.IsType<int>(activity.Maximum);
Assert.IsType<int>(activity.Minimum);
Assert.IsType<float>(activity.AvrTemperature);
Assert.IsType<bool>(activity.HasAutoPause);
}
}
}

@ -0,0 +1,42 @@
using Blazorise;
using HeartTrack.Models;
using Xunit;
namespace HeartTrack.Tests.Models
{
public class ReportTests
{
[Fact]
public void IsReportInstanceOfReport()
{
var report = new Report();
Assert.IsType<Report>(report);
}
[Fact]
public void HasReportAttributeRightInstace()
{
var report = new Report();
Assert.IsType<int>(report.Id);
Assert.IsType<string>(report.Username);
Assert.IsType<string>(report.ReportedUser);
Assert.IsType<string>(report.Raison);
Assert.IsType<string>(report.Description);
Assert.IsType<Image>(report.Image);
}
[Fact]
public void IsReportModelValidate()
{
var report = new ReportModel();
Assert.True(report.Id < 2500000);
Assert.True(report.Username.Length < 50 && report.Username.Length>0);
Assert.True(report.ReportedUser.Length < 50 && report.ReportedUser.Length > 0);
Assert.True(report.Raison.Length < 150 && report.Raison.Length > 0);
Assert.True(report.Description.Length < 500 && report.Description.Length > 0);
}
}
}

@ -0,0 +1,40 @@
using HeartTrack.Models;
using Xunit;
namespace HeartTrack.Tests.Models
{
public class TicketTests
{
[Fact]
public void IsTicketInstanceOfTicket()
{
var ticket = new Ticket();
Assert.IsType<Ticket>(ticket);
}
[Fact]
public void HasTicketAttributeRightInstance()
{
var ticket = new Ticket();
Assert.IsType<int>(ticket.Id);
Assert.IsType<string>(ticket.Username);
Assert.IsType<string>(ticket.Contexte);
Assert.IsType<string>(ticket.Description);
Assert.IsType<Boolean>(ticket.isCheck);
}
[Fact]
public void IsTicketModelValidate()
{
var ticket = new TicketModel();
Assert.True(ticket.Id < 2500000);
Assert.True(ticket.Username.Length > 0 && ticket.Username.Length < 50);
Assert.True(ticket.Contexte.Length > 0 && ticket.Contexte.Length < 25);
Assert.True(ticket.Description.Length > 0 && ticket.Description.Length < 500);
Assert.True(ticket.isCheck);
}
}
}

@ -0,0 +1,52 @@
using Xunit;
using HeartTrack.Models;
namespace HeartTrack.Tests.Models
{
public class UserTests
{
[Fact]
public void IsUserInstanceOfUser()
{
var user = new User();
Assert.IsType<User>(user);
}
[Fact]
public void HasUserAttributeRightInstance()
{
var user = new User();
Assert.IsType<int>(user.Id);
Assert.IsType<string>(user.Username);
Assert.IsType<string>(user.Nom);
Assert.IsType<string>(user.Prenom);
Assert.IsType<string>(user.Email);
Assert.IsType<string>(user.Password);
Assert.IsType<string>(user.Sexe);
Assert.IsType<float>(user.Taille);
Assert.IsType<float>(user.Poids);
Assert.IsType<DateTime>(user.BirthDate);
Assert.IsType<Boolean>(user.isBan);
}
[Fact]
public void IsUserModelValidate()
{
var user = new UserModel();
Assert.NotNull(user.Username);
Assert.NotNull(user.FirstName);
Assert.NotNull(user.LastName);
Assert.NotNull(user.Email);
Assert.NotNull(user.Password);
Assert.NotNull(user.Sexe);
Assert.True(user.Id<2500000);
Assert.True(user.Username.Length >= 0 && user.Username.Length < 50);
Assert.True(user.FirstName.Length >= 0 && user.FirstName.Length < 50);
Assert.True(user.LastName.Length >= 0 && user.LastName.Length < 25);
}
}
}

@ -0,0 +1,24 @@
using HeartTrack.Shared;
using Xunit;
namespace HeartTrack.Tests.Shared
{
public class CultureSelectorTests
{
[Fact]
public void IsCultureSelectorInstanceOfCultureSelector()
{
var culture = new CultureSelector();
Assert.IsType<CultureSelector>(culture);
}
[Fact]
public void HasCultureEnoughLanguages()
{
var culture = new CultureSelector();
Assert.Equal(2, culture.getSizeCultures());
}
}
}

@ -0,0 +1,25 @@
using HeartTrack.Shared;
using Xunit;
namespace HeartTrack.Tests.Shared
{
public class MainLayoutTests
{
[Fact]
public void IsMainLayoutInstanceOfMainLayout()
{
var main = new MainLayout();
Assert.IsType<MainLayout>(main);
}
[Fact]
public void StateChangeOnToggleNavMenu()
{
var main = new MainLayout();
Assert.True(main.getCollapseNavMenu());
main.ToggleNavMenu();
Assert.False(main.getCollapseNavMenu());
}
}
}

@ -5,8 +5,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
}, },
{ {
"id": 2, "id": 2,
@ -14,8 +13,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
}, },
{ {
"id": 3, "id": 3,
@ -23,8 +21,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": false
}, },
{ {
"id": 4, "id": 4,
@ -32,8 +29,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": false
}, },
{ {
"id": 5, "id": 5,
@ -41,8 +37,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
}, },
{ {
"id": 6, "id": 6,
@ -50,8 +45,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": false
}, },
{ {
"id": 7, "id": 7,
@ -59,8 +53,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
}, },
{ {
"id": 8, "id": 8,
@ -68,8 +61,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
}, },
{ {
"id": 9, "id": 9,
@ -78,7 +70,6 @@
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description",
"urgence": false
}, },
{ {
"id": 10, "id": 10,
@ -86,8 +77,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
}, },
{ {
"id": 11, "id": 11,
@ -95,8 +85,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": false
}, },
{ {
"id": 12, "id": 12,
@ -104,8 +93,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
}, },
{ {
"id": 13, "id": 13,
@ -113,8 +101,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
}, },
{ {
"id": 14, "id": 14,
@ -122,8 +109,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
}, },
{ {
"id": 15, "id": 15,
@ -131,8 +117,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": false
}, },
{ {
"id": 16, "id": 16,
@ -140,8 +125,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
}, },
{ {
"id": 17, "id": 17,
@ -149,8 +133,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": false
}, },
{ {
"id": 18, "id": 18,
@ -158,8 +141,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
}, },
{ {
"id": 19, "id": 19,
@ -167,8 +149,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
}, },
{ {
"id": 20, "id": 20,
@ -176,8 +157,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
}, },
{ {
"id": 21, "id": 21,
@ -185,8 +165,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
}, },
{ {
"id": 22, "id": 22,
@ -194,8 +173,7 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": false
}, },
{ {
"id": 23, "id": 23,
@ -203,7 +181,6 @@
"nom": "Doe", "nom": "Doe",
"prenom": "John", "prenom": "John",
"contexte": "Jvais dire wallah", "contexte": "Jvais dire wallah",
"description": "Wallah c`est la description", "description": "Wallah c`est la description"
"urgence": true
} }
] ]
Loading…
Cancel
Save