207 lines
6.8 KiB
C#
207 lines
6.8 KiB
C#
using Manager.DTOs;
|
|
using ManagerService.DTOs;
|
|
using ManagerService.Helpers;
|
|
using NetTopologySuite.Geometries;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.ComponentModel.DataAnnotations.Schema;
|
|
using System.Linq;
|
|
|
|
namespace ManagerService.Data.SubSection
|
|
{
|
|
/// <summary>
|
|
/// Section map
|
|
/// </summary>
|
|
public class SectionMap : Section
|
|
{
|
|
public int MapZoom { get; set; } // Default = 18
|
|
public MapTypeApp? MapMapType { get; set; } // Default = Hybrid for Google
|
|
public MapTypeMapBox? MapTypeMapbox { get; set; } // Default = standard for MapBox
|
|
public MapProvider? MapMapProvider { get; set; } // Default = Google
|
|
public List<GeoPoint> MapPoints { get; set; }
|
|
public string MapResourceId { get; set; }
|
|
public Resource MapResource { get; set; } // Icon
|
|
[Required]
|
|
[Column(TypeName = "jsonb")]
|
|
public List<CategorieDTO> MapCategories { get; set; }
|
|
public string MapCenterLatitude { get; set; } // Center on
|
|
public string MapCenterLongitude { get; set; } // Center on
|
|
|
|
|
|
public MapDTO ToDTO()
|
|
{
|
|
return new MapDTO()
|
|
{
|
|
id = Id,
|
|
label = Label,
|
|
title = Title.ToList(),
|
|
description = Description.ToList(),
|
|
order = Order,
|
|
type = Type,
|
|
imageId = ImageId,
|
|
imageSource = ImageSource,
|
|
configurationId = ConfigurationId,
|
|
isSubSection = IsSubSection,
|
|
parentId = ParentId,
|
|
dateCreation = DateCreation,
|
|
instanceId = InstanceId,
|
|
isBeacon = IsBeacon,
|
|
beaconId = BeaconId,
|
|
latitude = Latitude,
|
|
longitude = Longitude,
|
|
meterZoneGPS = MeterZoneGPS,
|
|
zoom = MapZoom,
|
|
mapType = MapMapType,
|
|
mapTypeMapbox = MapTypeMapbox,
|
|
mapProvider = MapMapProvider,
|
|
iconResourceId = MapResourceId,
|
|
categories = MapCategories,
|
|
centerLatitude = MapCenterLatitude,
|
|
centerLongitude = MapCenterLongitude
|
|
};
|
|
}
|
|
}
|
|
|
|
public class GeoPoint
|
|
{
|
|
[Required]
|
|
public int? Id { get; set; }
|
|
|
|
[Required]
|
|
[Column(TypeName = "jsonb")]
|
|
public List<TranslationDTO> Title { get; set; }
|
|
|
|
[Required]
|
|
[Column(TypeName = "jsonb")]
|
|
public List<TranslationDTO> Description { get; set; }
|
|
|
|
[Required]
|
|
[Column(TypeName = "jsonb")]
|
|
public List<ContentDTO> Contents { get; set; }
|
|
|
|
public int? CategorieId { get; set; }
|
|
|
|
public Geometry Geometry { get; set; }
|
|
|
|
public string PolyColor { get; set; } // color of the polyline or polygon
|
|
|
|
public string ImageResourceId { get; set; }
|
|
|
|
public string ImageUrl { get; set; }
|
|
|
|
[Required]
|
|
[Column(TypeName = "jsonb")]
|
|
public List<TranslationDTO> Schedules { get; set; }
|
|
|
|
[Required]
|
|
[Column(TypeName = "jsonb")]
|
|
public List<TranslationDTO> Prices { get; set; }
|
|
|
|
[Required]
|
|
[Column(TypeName = "jsonb")]
|
|
public List<TranslationDTO> Phone { get; set; }
|
|
|
|
[Required]
|
|
[Column(TypeName = "jsonb")]
|
|
public List<TranslationDTO> Email { get; set; }
|
|
|
|
[Required]
|
|
[Column(TypeName = "jsonb")]
|
|
public List<TranslationDTO> Site { get; set; }
|
|
|
|
public string? SectionMapId { get; set; }
|
|
|
|
[ForeignKey(nameof(SectionMapId))]
|
|
public SectionMap? SectionMap { get; set; }
|
|
|
|
public string? SectionEventId { get; set; }
|
|
|
|
[ForeignKey(nameof(SectionEventId))]
|
|
public SectionEvent? SectionEvent { get; set; }
|
|
|
|
public GeoPointDTO ToDTO()
|
|
{
|
|
return new GeoPointDTO
|
|
{
|
|
id = Id,
|
|
title = Title,
|
|
description = Description,
|
|
contents = Contents,
|
|
categorieId = CategorieId,
|
|
geometry = Geometry != null ? Geometry.ToDto() : null,
|
|
polyColor = PolyColor,
|
|
imageResourceId = ImageResourceId,
|
|
imageUrl = ImageUrl,
|
|
schedules = Schedules,
|
|
prices = Prices,
|
|
phone = Phone,
|
|
email = Email,
|
|
site = Site,
|
|
sectionMapId = SectionMapId,
|
|
sectionEventId = SectionEventId
|
|
};
|
|
}
|
|
|
|
}
|
|
|
|
// SectionMap "normal" comme avant => Via geopoints. Si il y a des guidedPath lié à la sectionMap alors il y a un parcours lié à la sectionMap, tu peux aussi avoir des geopoints classique mis là + des parcours. et aussi lier un guidedstep à un geopoint (pour le trigger et aussi pour "afficher plus")
|
|
|
|
// parcours libre
|
|
/*{
|
|
"IsLinear": false,
|
|
"RequireSuccessToAdvance": false,
|
|
"HideNextStepsUntilComplete": false,
|
|
"Steps": [
|
|
{ "Title": "La tour", "GeoPointId": "...", "IsOptional": false },
|
|
{ "Title": "Les jardins", "GeoPointId": "...", "IsOptional": false }
|
|
]
|
|
}*/
|
|
// Parcours escape game
|
|
/*{
|
|
"IsLinear": true,
|
|
"RequireSuccessToAdvance": true,
|
|
"HideNextStepsUntilComplete": true,
|
|
"Steps": [
|
|
{ "Title": "Enigme 1", "RiddleQuestion": "Quel est le code ?", "RiddleAnswer": "1234" },
|
|
{ "Title": "Enigme 2", "RiddleQuestion": "Combien de colonnes ?", "RiddleAnswer": "6" }
|
|
]
|
|
}*/
|
|
|
|
/*
|
|
* {
|
|
"Id": "escape001",
|
|
"IsLinear": true,
|
|
"RequireSuccessToAdvance": true,
|
|
"HideNextStepsUntilComplete": true,
|
|
"Steps": [
|
|
{
|
|
"Id": "step1",
|
|
"Title": [{ "Lang": "fr", "Text": "Enigme 1" }],
|
|
"TriggerGeoPoint": {
|
|
"GeometryType": "Circle",
|
|
"Coordinates": [{ "Latitude": 49.5, "Longitude": 5.9 }],
|
|
"ZoneRadiusMeters": 30
|
|
},
|
|
"ValidationQuestion": [{ "Lang": "fr", "Text": "Quel est le code secret ?" }],
|
|
"ExpectedAnswer": [{ "Lang": "fr", "Text": "1234" }],
|
|
"IsStepTimer": true,
|
|
"TimerSeconds": 300,
|
|
"IsStepLocked": true
|
|
},
|
|
{
|
|
"Id": "step2",
|
|
"Title": [{ "Lang": "fr", "Text": "Enigme 2" }],
|
|
"TriggerGeoPoint": {
|
|
"GeometryType": "Point",
|
|
"Coordinates": [{ "Latitude": 49.51, "Longitude": 5.91 }]
|
|
},
|
|
"ValidationQuestion": [{ "Lang": "fr", "Text": "Combien de colonnes ?" }],
|
|
"ExpectedAnswer": [{ "Lang": "fr", "Text": "6" }],
|
|
"IsStepTimer": false,
|
|
"IsStepLocked": true
|
|
}
|
|
]
|
|
}
|
|
*/
|
|
}
|