Implementation to have a favorite DZ by user.

This commit is contained in:
Sébastien André
2021-03-24 18:04:08 +01:00
parent beee601a57
commit 0a6dbf42e4
12 changed files with 255 additions and 194 deletions

View File

@@ -0,0 +1,9 @@
namespace skydiveLogs_api.Domain
{
public class FavoriteDropZone
{
public DropZone DropZone { get; set; }
public User User { get; set; }
}
}

View File

@@ -1,23 +0,0 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v5.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v5.0": {
"skydiveLogs-api.Domain/1.0.0": {
"runtime": {
"skydiveLogs-api.Domain.dll": {}
}
}
}
},
"libraries": {
"skydiveLogs-api.Domain/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

View File

@@ -4,15 +4,17 @@ using System.Collections.Generic;
using skydiveLogs_api.DomainBusiness.Interfaces; using skydiveLogs_api.DomainBusiness.Interfaces;
using skydiveLogs_api.DomainService.Repositories; using skydiveLogs_api.DomainService.Repositories;
using skydiveLogs_api.Domain; using skydiveLogs_api.Domain;
using System.Linq;
namespace skydiveLogs_api.DomainBusiness namespace skydiveLogs_api.DomainBusiness
{ {
public class DropZoneService : IDropZoneService public class DropZoneService : IDropZoneService
{ {
public DropZoneService(IDropZoneRepository dropZoneRepository) public DropZoneService(IDropZoneRepository dropZoneRepository,
IFavoriteDropZoneRepository favoriteDropZoneRepository)
{ {
_dropZoneRepository = dropZoneRepository; _dropZoneRepository = dropZoneRepository;
_favoriteDropZoneRepository = favoriteDropZoneRepository;
} }
public void AddNewDz(DropZone newdropZone) public void AddNewDz(DropZone newdropZone)
@@ -25,9 +27,31 @@ namespace skydiveLogs_api.DomainBusiness
throw new NotImplementedException(); throw new NotImplementedException();
} }
public IEnumerable<DropZone> GetAllDzs() public IEnumerable<DropZone> GetAllDzs(User connectedUser)
{ {
return _dropZoneRepository.GetAll(); var results = Enumerable.Empty<DropZone>();
var dropzones = _dropZoneRepository.GetAll();
var favorites = _favoriteDropZoneRepository.GetAll(connectedUser);
results = from dropZone in dropzones
join favorite in favorites on dropZone equals favorite.DropZone into tmp
from favoriteDz in tmp.DefaultIfEmpty()
select new DropZone
{
Id = dropZone.Id,
Address = dropZone.Address,
Email = dropZone.Email,
Latitude = dropZone.Latitude,
Longitude = dropZone.Longitude,
Name = dropZone.Name,
Type = dropZone.Type,
Website = dropZone.Website,
IsFavorite = !(favoriteDz == null)
};
return results.ToList();
} }
public DropZone GetDzById(int id) public DropZone GetDzById(int id)
@@ -42,6 +66,30 @@ namespace skydiveLogs_api.DomainBusiness
return _dropZoneRepository.Update(dropZone); return _dropZoneRepository.Update(dropZone);
} }
public bool AddToFavorite(int dzId, User connectedUser)
{
var dzToAddToFavorite = GetDzById(dzId);
var favoriteDz = new FavoriteDropZone
{
DropZone = dzToAddToFavorite,
User = connectedUser
};
var result = _favoriteDropZoneRepository.Add(favoriteDz);
return result > 0;
}
public bool RemoveToFavorite(int dzId, User connectedUser)
{
var result = _favoriteDropZoneRepository.Delete(dzId, connectedUser.Id);
return result > 0;
}
private readonly IDropZoneRepository _dropZoneRepository; private readonly IDropZoneRepository _dropZoneRepository;
private readonly IFavoriteDropZoneRepository _favoriteDropZoneRepository;
} }
} }

View File

@@ -7,7 +7,7 @@ namespace skydiveLogs_api.DomainBusiness.Interfaces
{ {
public interface IDropZoneService public interface IDropZoneService
{ {
IEnumerable<DropZone> GetAllDzs(); IEnumerable<DropZone> GetAllDzs(User connectedUser);
DropZone GetDzById(int id); DropZone GetDzById(int id);
@@ -16,5 +16,9 @@ namespace skydiveLogs_api.DomainBusiness.Interfaces
bool UpdateDz(int id, DropZone dropZone); bool UpdateDz(int id, DropZone dropZone);
void AddNewDz(DropZone dropZone); void AddNewDz(DropZone dropZone);
bool AddToFavorite(int dzId, User connectedUser);
bool RemoveToFavorite(int dzId, User connectedUser);
} }
} }

View File

@@ -0,0 +1,13 @@
using skydiveLogs_api.Domain;
using System.Collections.Generic;
namespace skydiveLogs_api.DomainService.Repositories
{
public interface IFavoriteDropZoneRepository : IRepository<FavoriteDropZone>
{
int Delete(int dropZoneId, int userId);
IEnumerable<FavoriteDropZone> GetAll(User user);
}
}

View File

@@ -6,7 +6,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\skydiveLogs-api.Model\skydiveLogs-api.Domain.csproj" /> <ProjectReference Include="..\skydiveLogs-api.Domain\skydiveLogs-api.Domain.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -0,0 +1,68 @@
using System.Collections.Generic;
using LiteDB;
using skydiveLogs_api.Domain;
using skydiveLogs_api.DomainService.Repositories;
using skydiveLogs_api.Infrastructure.Interfaces;
namespace skydiveLogs_api.Infrastructure
{
public class FavoriteDropZoneRepository : IFavoriteDropZoneRepository
{
public FavoriteDropZoneRepository(IDataProvider dataProvider)
{
_dataProvider = dataProvider;
_col = _dataProvider.CollOfFavoriteDropZone;
}
public int Delete(int dropZoneId, int userId)
{
return _col.DeleteMany(d => d.DropZone.Id == dropZoneId && d.User.Id == userId);
}
public int Add(FavoriteDropZone favoriteToAdd)
{
int result;
try
{
var tmp = _col.Insert(favoriteToAdd);
result = tmp.AsInt32;
}
catch
{
result = 0;
}
return result;
}
public IEnumerable<FavoriteDropZone> GetAll(User user)
{
return _col.Query()
.Where(j => j.User.Id == user.Id)
.ToList();
}
public FavoriteDropZone GetById(int id)
{
throw new System.NotImplementedException();
}
public bool Update(FavoriteDropZone updated)
{
throw new System.NotImplementedException();
}
public IEnumerable<FavoriteDropZone> GetAll()
{
throw new System.NotImplementedException();
}
private readonly IDataProvider _dataProvider;
private readonly ILiteCollection<FavoriteDropZone> _col;
}
}

View File

@@ -24,5 +24,7 @@ namespace skydiveLogs_api.Infrastructure.Interfaces
ILiteCollection<User> CollOfUser { get; } ILiteCollection<User> CollOfUser { get; }
ILiteCollection<UserImage> CollOfImage { get; } ILiteCollection<UserImage> CollOfImage { get; }
ILiteCollection<FavoriteDropZone> CollOfFavoriteDropZone { get; }
} }
} }

View File

@@ -23,7 +23,7 @@ namespace skydiveLogs_api.Infrastructure
.Include(x => x.DropZone) .Include(x => x.DropZone)
.Include(x => x.Gear) .Include(x => x.Gear)
.Include(x => x.JumpType) .Include(x => x.JumpType)
.Include(x => x.User) //.Include(x => x.User)
.Query() .Query()
.Where(j => j.User.Id == user.Id) .Where(j => j.User.Id == user.Id)
.ToList(); .ToList();

View File

@@ -21,6 +21,9 @@ namespace skydiveLogs_api.Infrastructure
BsonMapper.Global.Entity<UserImage>().DbRef(x => x.User, "User"); BsonMapper.Global.Entity<UserImage>().DbRef(x => x.User, "User");
BsonMapper.Global.Entity<Gear>().DbRef(x => x.User, "User"); BsonMapper.Global.Entity<Gear>().DbRef(x => x.User, "User");
BsonMapper.Global.Entity<FavoriteDropZone>().DbRef(x => x.User, "User");
BsonMapper.Global.Entity<FavoriteDropZone>().DbRef(x => x.DropZone, "DropZone");
} }
public ILiteCollection<T> GetCollection<T>() public ILiteCollection<T> GetCollection<T>()
@@ -48,5 +51,7 @@ namespace skydiveLogs_api.Infrastructure
public ILiteCollection<User> CollOfUser => _db.GetCollection<User>(); public ILiteCollection<User> CollOfUser => _db.GetCollection<User>();
public ILiteCollection<UserImage> CollOfImage => _db.GetCollection<UserImage>(); public ILiteCollection<UserImage> CollOfImage => _db.GetCollection<UserImage>();
public ILiteCollection<FavoriteDropZone> CollOfFavoriteDropZone => _db.GetCollection<FavoriteDropZone>();
} }
} }

View File

@@ -25,7 +25,7 @@ namespace skydiveLogs_api.Controllers
[EnableCors] [EnableCors]
public IEnumerable<DropZoneResp> Get() public IEnumerable<DropZoneResp> Get()
{ {
var result = _dropZoneService.GetAllDzs(); var result = _dropZoneService.GetAllDzs(ConnectedUser);
return _mapper.Map<IEnumerable<DropZoneResp>>(result); return _mapper.Map<IEnumerable<DropZoneResp>>(result);
} }
@@ -56,7 +56,7 @@ namespace skydiveLogs_api.Controllers
return _dropZoneService.UpdateDz(id, _mapper.Map<DropZone>(value)); return _dropZoneService.UpdateDz(id, _mapper.Map<DropZone>(value));
} }
// DELETE: api/ApiWithActions/5 // DELETE: api/ApiWithActions
[HttpDelete("{id}")] [HttpDelete("{id}")]
[EnableCors] [EnableCors]
public void Delete(int id) public void Delete(int id)
@@ -64,6 +64,22 @@ namespace skydiveLogs_api.Controllers
_dropZoneService.DeleteDzById(id); _dropZoneService.DeleteDzById(id);
} }
// PUT: api/DropZone/AddToFavorite/5
[HttpPut("{id}")]
[EnableCors]
public bool AddToFavorite(int id)
{
return _dropZoneService.AddToFavorite(id, ConnectedUser);
}
// PUT: api/DropZone/RemoveToFavorite/15
[HttpPut("{id}")]
[EnableCors]
public bool RemoveToFavorite(int id)
{
return _dropZoneService.RemoveToFavorite(id, ConnectedUser);
}
private readonly IDropZoneService _dropZoneService; private readonly IDropZoneService _dropZoneService;
private readonly IMapper _mapper; private readonly IMapper _mapper;
} }

View File

@@ -9,8 +9,7 @@
"email": "contact@iflyaixmarseille.fr", "email": "contact@iflyaixmarseille.fr",
"type": [ "type": [
"tunnel" "tunnel"
], ]
"isFavorite": false
}, },
{ {
"id": 3, "id": 3,
@@ -22,8 +21,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 4, "id": 4,
@@ -35,8 +33,7 @@
"email": "indoorskydiving@ice-mountain.com", "email": "indoorskydiving@ice-mountain.com",
"type": [ "type": [
"tunnel" "tunnel"
], ]
"isFavorite": false
}, },
{ {
"id": 5, "id": 5,
@@ -48,8 +45,7 @@
"email": "cepnc1@gmail.com", "email": "cepnc1@gmail.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 6, "id": 6,
@@ -61,8 +57,7 @@
"email": "info@skydivepujaut.com", "email": "info@skydivepujaut.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": true
}, },
{ {
"id": 7, "id": 7,
@@ -74,8 +69,7 @@
"email": null, "email": null,
"type": [ "type": [
"tunnel" "tunnel"
], ]
"isFavorite": false
}, },
{ {
"id": 8, "id": 8,
@@ -87,8 +81,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 9, "id": 9,
@@ -100,8 +93,7 @@
"email": "contact@rock-drop.com", "email": "contact@rock-drop.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 10, "id": 10,
@@ -113,8 +105,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 11, "id": 11,
@@ -126,8 +117,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 12, "id": 12,
@@ -139,8 +129,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 13, "id": 13,
@@ -152,8 +141,7 @@
"email": null, "email": null,
"type": [ "type": [
"tunnel" "tunnel"
], ]
"isFavorite": false
}, },
{ {
"id": 14, "id": 14,
@@ -165,8 +153,7 @@
"email": "cepb65@gmail.com", "email": "cepb65@gmail.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 15, "id": 15,
@@ -178,8 +165,7 @@
"email": "contact@sauterenparachute.com", "email": "contact@sauterenparachute.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 16, "id": 16,
@@ -189,8 +175,7 @@
"address": "Aéroport de Dijon Bourgogne</br>1925 Rue de l'aviation</br>21600 Ouges", "address": "Aéroport de Dijon Bourgogne</br>1925 Rue de l'aviation</br>21600 Ouges",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 17, "id": 17,
@@ -202,8 +187,7 @@
"email": "info@skydivecorsica.com", "email": "info@skydivecorsica.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 18, "id": 18,
@@ -215,8 +199,7 @@
"email": "contact@cieldav.com", "email": "contact@cieldav.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 19, "id": 19,
@@ -228,8 +211,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 20, "id": 20,
@@ -241,8 +223,7 @@
"email": "contact@paradise64.fr", "email": "contact@paradise64.fr",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 21, "id": 21,
@@ -254,8 +235,7 @@
"email": "max@parachutisme.nc", "email": "max@parachutisme.nc",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 22, "id": 22,
@@ -267,8 +247,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 23, "id": 23,
@@ -280,8 +259,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 24, "id": 24,
@@ -293,8 +271,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 25, "id": 25,
@@ -306,8 +283,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 26, "id": 26,
@@ -319,8 +295,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 27, "id": 27,
@@ -332,8 +307,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 28, "id": 28,
@@ -345,8 +319,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 29, "id": 29,
@@ -358,8 +331,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 30, "id": 30,
@@ -371,8 +343,7 @@
"email": "Proflyer@windoor-realfly.com", "email": "Proflyer@windoor-realfly.com",
"type": [ "type": [
"tunnel" "tunnel"
], ]
"isFavorite": false
}, },
{ {
"id": 31, "id": 31,
@@ -384,8 +355,7 @@
"email": null, "email": null,
"type": [ "type": [
"tunnel" "tunnel"
], ]
"isFavorite": false
}, },
{ {
"id": 32, "id": 32,
@@ -397,8 +367,7 @@
"email": "info@weembi.com", "email": "info@weembi.com",
"type": [ "type": [
"tunnel" "tunnel"
], ]
"isFavorite": false
}, },
{ {
"id": 33, "id": 33,
@@ -410,8 +379,7 @@
"email": "info.lyon@iflyworld.com", "email": "info.lyon@iflyworld.com",
"type": [ "type": [
"tunnel" "tunnel"
], ]
"isFavorite": true
}, },
{ {
"id": 34, "id": 34,
@@ -423,8 +391,7 @@
"email": null, "email": null,
"type": [ "type": [
"tunnel" "tunnel"
], ]
"isFavorite": false
}, },
{ {
"id": 35, "id": 35,
@@ -436,8 +403,7 @@
"email": "accueil@parachutisme-vannes.fr", "email": "accueil@parachutisme-vannes.fr",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 36, "id": 36,
@@ -449,8 +415,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 37, "id": 37,
@@ -462,8 +427,7 @@
"email": "info@alsace-para.com", "email": "info@alsace-para.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 38, "id": 38,
@@ -475,8 +439,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 39, "id": 39,
@@ -488,8 +451,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 40, "id": 40,
@@ -501,8 +463,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 41, "id": 41,
@@ -514,8 +475,7 @@
"email": "info@skydiveroanne.fr", "email": "info@skydiveroanne.fr",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 42, "id": 42,
@@ -527,8 +487,7 @@
"email": "skydive.peronne@gmail.com", "email": "skydive.peronne@gmail.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 43, "id": 43,
@@ -540,8 +499,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 44, "id": 44,
@@ -553,8 +511,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 45, "id": 45,
@@ -566,8 +523,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 46, "id": 46,
@@ -579,8 +535,7 @@
"email": "contact@demencielparachutisme.com", "email": "contact@demencielparachutisme.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 47, "id": 47,
@@ -592,8 +547,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 48, "id": 48,
@@ -605,8 +559,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 49, "id": 49,
@@ -618,8 +571,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 50, "id": 50,
@@ -631,8 +583,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 51, "id": 51,
@@ -644,8 +595,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 52, "id": 52,
@@ -657,8 +607,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 53, "id": 53,
@@ -670,8 +619,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 54, "id": 54,
@@ -683,8 +631,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 55, "id": 55,
@@ -696,8 +643,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 56, "id": 56,
@@ -709,8 +655,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 57, "id": 57,
@@ -722,8 +667,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 58, "id": 58,
@@ -735,8 +679,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 59, "id": 59,
@@ -748,8 +691,7 @@
"email": "info@efpleblanc.com", "email": "info@efpleblanc.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 60, "id": 60,
@@ -761,8 +703,7 @@
"email": "vendeechutelibre@orange.fr", "email": "vendeechutelibre@orange.fr",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 61, "id": 61,
@@ -774,8 +715,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 62, "id": 62,
@@ -787,8 +727,7 @@
"email": "epbaguiscriff@gmail.com", "email": "epbaguiscriff@gmail.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 63, "id": 63,
@@ -800,8 +739,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 64, "id": 64,
@@ -813,8 +751,7 @@
"email": "contact@skydivefretoy.com", "email": "contact@skydivefretoy.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 65, "id": 65,
@@ -826,8 +763,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 66, "id": 66,
@@ -839,8 +775,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 67, "id": 67,
@@ -851,8 +786,7 @@
"website": "www.parachutisme71.com", "website": "www.parachutisme71.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": true
}, },
{ {
"id": 68, "id": 68,
@@ -864,8 +798,7 @@
"email": "cep46@wanadoo.fr", "email": "cep46@wanadoo.fr",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 69, "id": 69,
@@ -877,8 +810,7 @@
"email": "infos@air65.fr", "email": "infos@air65.fr",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 70, "id": 70,
@@ -890,8 +822,7 @@
"email": "accueil@bouloc-skydive.com", "email": "accueil@bouloc-skydive.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 71, "id": 71,
@@ -903,8 +834,7 @@
"email": "contact@parachutisme-lille.fr", "email": "contact@parachutisme-lille.fr",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 72, "id": 72,
@@ -916,8 +846,7 @@
"email": "para.besac@wanadoo.fr", "email": "para.besac@wanadoo.fr",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 73, "id": 73,
@@ -929,8 +858,7 @@
"email": "info@arcachon-parachutisme.fr", "email": "info@arcachon-parachutisme.fr",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 74, "id": 74,
@@ -942,8 +870,7 @@
"email": "info@parachutisme74.com", "email": "info@parachutisme74.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 75, "id": 75,
@@ -955,8 +882,7 @@
"email": "info.paris@iflyworld.com", "email": "info.paris@iflyworld.com",
"type": [ "type": [
"tunnel" "tunnel"
], ]
"isFavorite": false
}, },
{ {
"id": 76, "id": 76,
@@ -968,8 +894,7 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 77, "id": 77,
@@ -981,8 +906,7 @@
"email": "contact@onairtunnel.com", "email": "contact@onairtunnel.com",
"type": [ "type": [
"tunnel" "tunnel"
], ]
"isFavorite": false
}, },
{ {
"id": 78, "id": 78,
@@ -994,8 +918,7 @@
"email": "planning@aerokart.com", "email": "planning@aerokart.com",
"type": [ "type": [
"tunnel" "tunnel"
], ]
"isFavorite": false
}, },
{ {
"id": 79, "id": 79,
@@ -1008,8 +931,7 @@
"type": [ "type": [
"dz", "dz",
"tunnel" "tunnel"
], ]
"isFavorite": false
}, },
{ {
"id": 80, "id": 80,
@@ -1021,8 +943,7 @@
"email": "cepcaleluc@gmail.com", "email": "cepcaleluc@gmail.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 81, "id": 81,
@@ -1034,8 +955,7 @@
"email": "resa@parachutisme-nord.com", "email": "resa@parachutisme-nord.com",
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
}, },
{ {
"id": 82, "id": 82,
@@ -1047,7 +967,6 @@
"email": null, "email": null,
"type": [ "type": [
"dz" "dz"
], ]
"isFavorite": false
} }
] ]