From 76889c82c5ab72fc482bea00c009a2af523ebb29 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Wed, 14 Jun 2017 12:28:08 +0200 Subject: [PATCH] refactoring --- LICENSE | 2 +- Yavsc/AuthorizationServer/GoogleHelper.cs | 19 + Yavsc/Controllers/HomeController.cs | 4 + Yavsc/Controllers/ManageController.cs | 25 +- Yavsc/Helpers/GoogleHelpers.cs | 23 +- ...611141231_BrusherCalendarModel.Designer.cs | 1593 +++++++++++++++++ .../20170611141231_BrusherCalendarModel.cs | 759 ++++++++ .../ApplicationDbContextModelSnapshot.cs | 48 +- Yavsc/Models/Calendar/Availability.cs | 9 - Yavsc/Models/Calendar/IScheduledEvent.cs | 34 + Yavsc/Models/Calendar/Periodicity.cs | 2 +- Yavsc/Models/Calendar/PositionAndKeyphrase.cs | 2 +- Yavsc/Models/Calendar/Schedule.cs | 52 +- Yavsc/Models/Calendar/ScheduledEvent.cs | 45 + Yavsc/Models/Chat/Connection.cs | 21 + Yavsc/Models/Drawing/Color.cs | 21 + Yavsc/Models/Edition/IDocument.cs | 24 + Yavsc/Models/FileSystem/FileRecievedInfo.cs | 23 + Yavsc/Models/Google/Calendar/CalendarList.cs | 2 +- .../Google/Calendar/CalendarListEntry.cs | 15 +- Yavsc/Models/Google/Calendar/Reminder.cs | 15 + Yavsc/Models/HairCut/BrusherProfile.cs | 28 +- .../Models/HairCut/Views/HaircutQueryInfo.cs | 22 + .../GoogleApis/CalendarManager.cs} | 76 +- Yavsc/{ => Services}/GoogleApis/MapTracks.cs | 2 +- Yavsc/{ => Services}/GoogleApis/PeopleApi.cs | 0 .../Calendar => Services}/ICalendarManager.cs | 31 +- Yavsc/Settings/GoogleAuthSettings.cs | 17 +- Yavsc/Startup/Startup.OAuth.cs | 20 +- Yavsc/Startup/Startup.cs | 9 +- Yavsc/ViewComponents/CalendarViewComponent.cs | 51 + .../Calendar/DateTimeChooserViewModel.cs | 14 + .../Calendar/UpcomingEventsViewModel.cs | 2 +- Yavsc/Views/BrusherProfile/Index.cshtml | 4 +- Yavsc/Views/HairCutCommand/HairCut.cshtml | 18 +- Yavsc/Views/Home/CGV.cshtml | 13 + Yavsc/Views/Home/Privacy.cshtml | 14 + .../Shared/Components/Calendar/Default.cshtml | 11 + .../EditorTemplates/Availability.cshtml | 1 - .../Shared/_ValidationScriptsPartial.cshtml | 1 + Yavsc/Views/_ViewImports.cshtml | 2 + Yavsc/project.json | 328 ++-- Yavsc/project.lock.json | 227 --- Yavsc/wwwroot/images/yavsc.png | Bin 0 -> 16040 bytes Yavsc/wwwroot/js/input-lib.js | 28 + Yavsc/wwwroot/js/site.js | 26 +- 46 files changed, 3130 insertions(+), 553 deletions(-) create mode 100644 Yavsc/Migrations/20170611141231_BrusherCalendarModel.Designer.cs create mode 100644 Yavsc/Migrations/20170611141231_BrusherCalendarModel.cs delete mode 100644 Yavsc/Models/Calendar/Availability.cs create mode 100644 Yavsc/Models/Calendar/IScheduledEvent.cs create mode 100644 Yavsc/Models/Calendar/ScheduledEvent.cs create mode 100644 Yavsc/Models/Google/Calendar/Reminder.cs rename Yavsc/{GoogleApis/CalendarApi.cs => Services/GoogleApis/CalendarManager.cs} (61%) rename Yavsc/{ => Services}/GoogleApis/MapTracks.cs (99%) rename Yavsc/{ => Services}/GoogleApis/PeopleApi.cs (100%) rename Yavsc/{Models/Calendar => Services}/ICalendarManager.cs (58%) create mode 100644 Yavsc/ViewComponents/CalendarViewComponent.cs create mode 100644 Yavsc/ViewModels/Calendar/DateTimeChooserViewModel.cs create mode 100644 Yavsc/Views/Home/CGV.cshtml create mode 100644 Yavsc/Views/Home/Privacy.cshtml create mode 100644 Yavsc/Views/Shared/Components/Calendar/Default.cshtml create mode 100644 Yavsc/wwwroot/images/yavsc.png create mode 100644 Yavsc/wwwroot/js/input-lib.js diff --git a/LICENSE b/LICENSE index 21fc049f..7850559e 100644 --- a/LICENSE +++ b/LICENSE @@ -18,7 +18,7 @@ For example, if you distribute copies of such a program, whether gratis or for a Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. -For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. +For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' aVVnd authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. diff --git a/Yavsc/AuthorizationServer/GoogleHelper.cs b/Yavsc/AuthorizationServer/GoogleHelper.cs index 82648248..aca7394d 100644 --- a/Yavsc/AuthorizationServer/GoogleHelper.cs +++ b/Yavsc/AuthorizationServer/GoogleHelper.cs @@ -101,6 +101,25 @@ public static class GoogleHelper return null; } +#if GoogleApisAuthOAuth2 + public static ServiceAccountCredential GetGoogleApiCredentials (string[] scopes) + { + String serviceAccountEmail = "SERVICE_ACCOUNT_EMAIL_HERE"; + + string private_key = Startup.GoogleSettings.Account.private_key; + + string secret = Startup.GoogleSettings.ClientSecret; + + + var certificate = new X509Certificate2(@"key.p12", secret, X509KeyStorageFlags.Exportable); + + return new ServiceAccountCredential( + new ServiceAccountCredential.Initializer(serviceAccountEmail) + { + Scopes = scopes + }.FromCertificate(certificate)); + } +#endif // Get the given subProperty from a list property. private static string TryGetFirstValue(JObject user, string propertyName, string subProperty) { diff --git a/Yavsc/Controllers/HomeController.cs b/Yavsc/Controllers/HomeController.cs index 2668da72..84692ad1 100644 --- a/Yavsc/Controllers/HomeController.cs +++ b/Yavsc/Controllers/HomeController.cs @@ -82,6 +82,10 @@ namespace Yavsc.Controllers { return View(); } + public IActionResult Privacy() + { + return View(); + } public IActionResult AboutMarkdown() { return View(); diff --git a/Yavsc/Controllers/ManageController.cs b/Yavsc/Controllers/ManageController.cs index c057be99..91270017 100644 --- a/Yavsc/Controllers/ManageController.cs +++ b/Yavsc/Controllers/ManageController.cs @@ -6,15 +6,10 @@ using Microsoft.AspNet.Authorization; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Mvc; using Microsoft.Extensions.Logging; -using Yavsc.Models; -using Yavsc.Services; -using Yavsc.ViewModels.Manage; using Microsoft.Extensions.OptionsModel; using Microsoft.Data.Entity; using System; using System.Collections.Generic; -using Yavsc.Helpers; -using Yavsc.ViewModels.Calendar; using System.Net; using Microsoft.Extensions.Localization; using Yavsc.Models.Workflow; @@ -22,8 +17,14 @@ using Yavsc.Models.Identity; namespace Yavsc.Controllers { + using Yavsc.Helpers; using Models.Relationship; - using Yavsc.Models.Bank; + using Models.Bank; + using ViewModels.Calendar; + using Yavsc.Models; + using Yavsc.Services; + using Yavsc.ViewModels.Manage; + using Yavsc.Models.Calendar; [Authorize] public class ManageController : Controller @@ -43,6 +44,8 @@ namespace Yavsc.Controllers private SIRENChecker _cchecker; private IStringLocalizer _SR; private CompanyInfoSettings _cinfoSettings; + ICalendarManager _calendarManager; + public ManageController( ApplicationDbContext context, @@ -55,6 +58,7 @@ namespace Yavsc.Controllers IOptions paypalSettings, IOptions cinfoSettings, IStringLocalizer SR, + ICalendarManager calendarManager, ILoggerFactory loggerFactory) { _dbContext = context; @@ -68,6 +72,7 @@ namespace Yavsc.Controllers _cinfoSettings = cinfoSettings.Value; _cchecker = new SIRENChecker(cinfoSettings.Value); _SR = SR; + _calendarManager = calendarManager; _logger = loggerFactory.CreateLogger(); } @@ -269,15 +274,9 @@ namespace Yavsc.Controllers [HttpGet] public async Task SetGoogleCalendar(string returnUrl) { - var credential = await _userManager.GetCredentialForGoogleApiAsync( - _dbContext, User.GetUserId()); - if (credential == null) - return RedirectToAction("LinkLogin", new { provider = "Google" }); - try { - ViewBag.Calendars = new GoogleApis.CalendarApi(_googleSettings.ApiKey) - .GetCalendars(credential); + ViewBag.Calendars = await _calendarManager.GetCalendarsAsync(User.GetUserId()); } catch (WebException ex) { diff --git a/Yavsc/Helpers/GoogleHelpers.cs b/Yavsc/Helpers/GoogleHelpers.cs index cd6de3ff..f541de6e 100644 --- a/Yavsc/Helpers/GoogleHelpers.cs +++ b/Yavsc/Helpers/GoogleHelpers.cs @@ -23,6 +23,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNet.Identity; + namespace Yavsc.Helpers { using Models.Auth; @@ -30,7 +31,8 @@ namespace Yavsc.Helpers using Models.Messaging; using Models; using Interfaces.Workflow; - + using Yavsc.Models.Google; + using Yavsc.Models.Calendar; /// /// Google helpers. @@ -109,13 +111,30 @@ namespace Yavsc.Helpers { var user = await userManager.FindByIdAsync(uid); var googleId = context.UserLogins.FirstOrDefault( - x => x.UserId == uid + x => x.UserId == uid && x.LoginProvider == "Google" ).ProviderKey; if (string.IsNullOrEmpty(googleId)) throw new InvalidOperationException("No Google login"); var token = await context.GetTokensAsync(googleId); return new UserCredential(uid, token); } + static string evStatusDispo = "Dispo"; + + public static async Task GetFreeTime (this ICalendarManager manager, string userId, string calId, DateTime startDate, DateTime endDate) + { + CalendarEventList evlist = await manager.GetCalendarAsync(calId, startDate, endDate, userId) ; + var result = evlist.items + .Where( + ev => ev.status == evStatusDispo + ) + .Select( + ev => new Period { + Start = ev.start.datetime, + End = ev.end.datetime + } + ); + return result.ToArray(); + } } } diff --git a/Yavsc/Migrations/20170611141231_BrusherCalendarModel.Designer.cs b/Yavsc/Migrations/20170611141231_BrusherCalendarModel.Designer.cs new file mode 100644 index 00000000..095729a6 --- /dev/null +++ b/Yavsc/Migrations/20170611141231_BrusherCalendarModel.Designer.cs @@ -0,0 +1,1593 @@ +using System; +using Microsoft.Data.Entity; +using Microsoft.Data.Entity.Infrastructure; +using Microsoft.Data.Entity.Migrations; +using Yavsc.Models; + +namespace Yavsc.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20170611141231_BrusherCalendarModel")] + partial class BrusherCalendarModel + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { + modelBuilder + .HasAnnotation("ProductVersion", "7.0.0-rc1-16348"); + + modelBuilder.Entity("Microsoft.AspNet.Identity.EntityFramework.IdentityRole", b => + { + b.Property("Id"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("Name") + .HasAnnotation("MaxLength", 256); + + b.Property("NormalizedName") + .HasAnnotation("MaxLength", 256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .HasAnnotation("Relational:Name", "RoleNameIndex"); + + b.HasAnnotation("Relational:TableName", "AspNetRoles"); + }); + + modelBuilder.Entity("Microsoft.AspNet.Identity.EntityFramework.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("RoleId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasAnnotation("Relational:TableName", "AspNetRoleClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNet.Identity.EntityFramework.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ClaimType"); + + b.Property("ClaimValue"); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("Id"); + + b.HasAnnotation("Relational:TableName", "AspNetUserClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin", b => + { + b.Property("LoginProvider"); + + b.Property("ProviderKey"); + + b.Property("ProviderDisplayName"); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasAnnotation("Relational:TableName", "AspNetUserLogins"); + }); + + modelBuilder.Entity("Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole", b => + { + b.Property("UserId"); + + b.Property("RoleId"); + + b.HasKey("UserId", "RoleId"); + + b.HasAnnotation("Relational:TableName", "AspNetUserRoles"); + }); + + modelBuilder.Entity("Yavsc.Models.Access.Ban", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("DateCreated"); + + b.Property("DateModified"); + + b.Property("UserCreated"); + + b.Property("UserModified"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Access.BlackListed", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("OwnerId") + .IsRequired(); + + b.Property("UserId") + .IsRequired(); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Access.CircleAuthorizationToBlogPost", b => + { + b.Property("CircleId"); + + b.Property("BlogPostId"); + + b.HasKey("CircleId", "BlogPostId"); + }); + + modelBuilder.Entity("Yavsc.Models.AccountBalance", b => + { + b.Property("UserId"); + + b.Property("ContactCredits"); + + b.Property("Credits"); + + b.HasKey("UserId"); + }); + + modelBuilder.Entity("Yavsc.Models.ApplicationUser", b => + { + b.Property("Id"); + + b.Property("AccessFailedCount"); + + b.Property("Avatar") + .HasAnnotation("MaxLength", 512) + .HasAnnotation("Relational:DefaultValue", "/images/Users/icon_user.png") + .HasAnnotation("Relational:DefaultValueType", "System.String"); + + b.Property("BankInfoId"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken(); + + b.Property("DedicatedGoogleCalendar"); + + b.Property("DiskQuota") + .HasAnnotation("Relational:DefaultValue", "524288000") + .HasAnnotation("Relational:DefaultValueType", "System.Int64"); + + b.Property("DiskUsage"); + + b.Property("Email") + .HasAnnotation("MaxLength", 256); + + b.Property("EmailConfirmed"); + + b.Property("FullName") + .HasAnnotation("MaxLength", 512); + + b.Property("LockoutEnabled"); + + b.Property("LockoutEnd"); + + b.Property("NormalizedEmail") + .HasAnnotation("MaxLength", 256); + + b.Property("NormalizedUserName") + .HasAnnotation("MaxLength", 256); + + b.Property("PasswordHash"); + + b.Property("PhoneNumber"); + + b.Property("PhoneNumberConfirmed"); + + b.Property("PostalAddressId"); + + b.Property("SecurityStamp"); + + b.Property("TwoFactorEnabled"); + + b.Property("UserName") + .HasAnnotation("MaxLength", 256); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasAnnotation("Relational:Name", "EmailIndex"); + + b.HasIndex("NormalizedUserName") + .HasAnnotation("Relational:Name", "UserNameIndex"); + + b.HasAnnotation("Relational:TableName", "AspNetUsers"); + }); + + modelBuilder.Entity("Yavsc.Models.Auth.Client", b => + { + b.Property("Id"); + + b.Property("Active"); + + b.Property("DisplayName"); + + b.Property("LogoutRedirectUri") + .HasAnnotation("MaxLength", 100); + + b.Property("RedirectUri"); + + b.Property("RefreshTokenLifeTime"); + + b.Property("Secret"); + + b.Property("Type"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Auth.RefreshToken", b => + { + b.Property("Id"); + + b.Property("ClientId") + .IsRequired() + .HasAnnotation("MaxLength", 50); + + b.Property("ExpiresUtc"); + + b.Property("IssuedUtc"); + + b.Property("ProtectedTicket") + .IsRequired(); + + b.Property("Subject") + .IsRequired() + .HasAnnotation("MaxLength", 50); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.BalanceImpact", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("BalanceId") + .IsRequired(); + + b.Property("ExecDate"); + + b.Property("Impact"); + + b.Property("Reason") + .IsRequired(); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Bank.BankIdentity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AccountNumber") + .HasAnnotation("MaxLength", 15); + + b.Property("BIC") + .HasAnnotation("MaxLength", 15); + + b.Property("BankCode") + .HasAnnotation("MaxLength", 5); + + b.Property("BankedKey"); + + b.Property("IBAN") + .HasAnnotation("MaxLength", 33); + + b.Property("WicketCode") + .HasAnnotation("MaxLength", 5); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Billing.CommandLine", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Count"); + + b.Property("Currency"); + + b.Property("Description") + .IsRequired() + .HasAnnotation("MaxLength", 512); + + b.Property("EstimateId"); + + b.Property("EstimateTemplateId"); + + b.Property("Name") + .IsRequired() + .HasAnnotation("MaxLength", 256); + + b.Property("UnitaryCost"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Billing.Estimate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AttachedFilesString"); + + b.Property("AttachedGraphicsString"); + + b.Property("ClientId") + .IsRequired(); + + b.Property("ClientValidationDate"); + + b.Property("CommandId"); + + b.Property("CommandType") + .IsRequired(); + + b.Property("Description"); + + b.Property("OwnerId") + .IsRequired(); + + b.Property("ProviderValidationDate"); + + b.Property("Title"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Billing.EstimateTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Description"); + + b.Property("OwnerId") + .IsRequired(); + + b.Property("Title"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Billing.ExceptionSIREN", b => + { + b.Property("SIREN"); + + b.HasKey("SIREN"); + }); + + modelBuilder.Entity("Yavsc.Models.Blog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("AuthorId"); + + b.Property("Content"); + + b.Property("DateCreated"); + + b.Property("DateModified"); + + b.Property("Photo"); + + b.Property("Rate"); + + b.Property("Title"); + + b.Property("UserCreated"); + + b.Property("UserModified"); + + b.Property("Visible"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Calendar.Period", b => + { + b.Property("Start"); + + b.Property("End"); + + b.HasKey("Start", "End"); + }); + + modelBuilder.Entity("Yavsc.Models.Calendar.Schedule", b => + { + b.Property("OwnerId"); + + b.HasKey("OwnerId"); + }); + + modelBuilder.Entity("Yavsc.Models.Calendar.ScheduledEvent", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("PeriodEnd"); + + b.Property("PeriodStart"); + + b.Property("Reccurence"); + + b.Property("ScheduleOwnerId"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Chat.Connection", b => + { + b.Property("ConnectionId"); + + b.Property("ApplicationUserId") + .IsRequired(); + + b.Property("Connected"); + + b.Property("UserAgent"); + + b.HasKey("ConnectionId"); + }); + + modelBuilder.Entity("Yavsc.Models.Drawing.Color", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Blue"); + + b.Property("Green"); + + b.Property("Name"); + + b.Property("Red"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Forms.Form", b => + { + b.Property("Id"); + + b.Property("Summary"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Haircut.BrusherProfile", b => + { + b.Property("UserId"); + + b.Property("ActionDistance"); + + b.Property("CarePrice"); + + b.Property("FlatFeeDiscount"); + + b.Property("HalfBalayagePrice"); + + b.Property("HalfBrushingPrice"); + + b.Property("HalfColorPrice"); + + b.Property("HalfDefrisPrice"); + + b.Property("HalfFoldingPrice"); + + b.Property("HalfMechPrice"); + + b.Property("HalfMultiColorPrice"); + + b.Property("HalfPermanentPrice"); + + b.Property("KidCutPrice"); + + b.Property("LongBalayagePrice"); + + b.Property("LongBrushingPrice"); + + b.Property("LongColorPrice"); + + b.Property("LongDefrisPrice"); + + b.Property("LongFoldingPrice"); + + b.Property("LongMechPrice"); + + b.Property("LongMultiColorPrice"); + + b.Property("LongPermanentPrice"); + + b.Property("ManBrushPrice"); + + b.Property("ManCutPrice"); + + b.Property("ScheduleOwnerId"); + + b.Property("ShampooPrice"); + + b.Property("ShortBalayagePrice"); + + b.Property("ShortBrushingPrice"); + + b.Property("ShortColorPrice"); + + b.Property("ShortDefrisPrice"); + + b.Property("ShortFoldingPrice"); + + b.Property("ShortMechPrice"); + + b.Property("ShortMultiColorPrice"); + + b.Property("ShortPermanentPrice"); + + b.Property("WomenHalfCutPrice"); + + b.Property("WomenLongCutPrice"); + + b.Property("WomenShortCutPrice"); + + b.HasKey("UserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Haircut.HairCutQuery", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ActivityCode") + .IsRequired(); + + b.Property("AdditionalInfo") + .HasAnnotation("MaxLength", 512); + + b.Property("ClientId") + .IsRequired(); + + b.Property("Consent"); + + b.Property("DateCreated"); + + b.Property("DateModified"); + + b.Property("EventDate"); + + b.Property("LocationId"); + + b.Property("PaymentId"); + + b.Property("PerformerId") + .IsRequired(); + + b.Property("PrestationId"); + + b.Property("Previsional"); + + b.Property("SelectedProfileUserId"); + + b.Property("Status"); + + b.Property("UserCreated"); + + b.Property("UserModified"); + + b.Property("ValidationDate"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Haircut.HairMultiCutQuery", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ActivityCode") + .IsRequired(); + + b.Property("ClientId") + .IsRequired(); + + b.Property("Consent"); + + b.Property("DateCreated"); + + b.Property("DateModified"); + + b.Property("EventDate"); + + b.Property("LocationId"); + + b.Property("PaymentId"); + + b.Property("PerformerId") + .IsRequired(); + + b.Property("Previsional"); + + b.Property("Status"); + + b.Property("UserCreated"); + + b.Property("UserModified"); + + b.Property("ValidationDate"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Haircut.HairPrestation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Cares"); + + b.Property("Cut"); + + b.Property("Dressing"); + + b.Property("Gender"); + + b.Property("Length"); + + b.Property("Shampoo"); + + b.Property("Tech"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Haircut.HairPrestationCollectionItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("PrestationId"); + + b.Property("QueryId"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Haircut.HairTaint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Brand"); + + b.Property("ColorId"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Haircut.HairTaintInstance", b => + { + b.Property("TaintId"); + + b.Property("PrestationId"); + + b.HasKey("TaintId", "PrestationId"); + }); + + modelBuilder.Entity("Yavsc.Models.Identity.GoogleCloudMobileDeclaration", b => + { + b.Property("DeviceId"); + + b.Property("DeclarationDate") + .ValueGeneratedOnAdd() + .HasAnnotation("Relational:GeneratedValueSql", "LOCALTIMESTAMP"); + + b.Property("DeviceOwnerId"); + + b.Property("GCMRegistrationId") + .IsRequired(); + + b.Property("Model"); + + b.Property("Platform"); + + b.Property("Version"); + + b.HasKey("DeviceId"); + }); + + modelBuilder.Entity("Yavsc.Models.Market.Product", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Depth"); + + b.Property("Description"); + + b.Property("Height"); + + b.Property("Name"); + + b.Property("Price"); + + b.Property("Public"); + + b.Property("Weight"); + + b.Property("Width"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Market.Service", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ContextId"); + + b.Property("Description"); + + b.Property("Name"); + + b.Property("Public"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Messaging.ClientProviderInfo", b => + { + b.Property("UserId"); + + b.Property("Avatar"); + + b.Property("BillingAddressId"); + + b.Property("EMail"); + + b.Property("Phone"); + + b.Property("UserName"); + + b.HasKey("UserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Messaging.DimissClicked", b => + { + b.Property("UserId"); + + b.Property("NotificationId"); + + b.HasKey("UserId", "NotificationId"); + }); + + modelBuilder.Entity("Yavsc.Models.Messaging.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Target"); + + b.Property("body") + .IsRequired(); + + b.Property("click_action") + .IsRequired(); + + b.Property("color"); + + b.Property("icon"); + + b.Property("sound"); + + b.Property("tag"); + + b.Property("title") + .IsRequired(); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Musical.Instrument", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Name") + .IsRequired() + .HasAnnotation("MaxLength", 255); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Musical.MusicalPreference", b => + { + b.Property("OwnerProfileId"); + + b.Property("DjSettingsUserId"); + + b.Property("GeneralSettingsUserId"); + + b.Property("Rate"); + + b.Property("TendencyId"); + + b.HasKey("OwnerProfileId"); + }); + + modelBuilder.Entity("Yavsc.Models.Musical.MusicalTendency", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Name") + .IsRequired() + .HasAnnotation("MaxLength", 255); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Musical.Profiles.DjSettings", b => + { + b.Property("UserId"); + + b.Property("SoundCloudId"); + + b.HasKey("UserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Musical.Profiles.GeneralSettings", b => + { + b.Property("UserId"); + + b.HasKey("UserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Musical.Profiles.Instrumentation", b => + { + b.Property("InstrumentId"); + + b.Property("UserId"); + + b.HasKey("InstrumentId", "UserId"); + }); + + modelBuilder.Entity("Yavsc.Models.OAuth.OAuth2Tokens", b => + { + b.Property("UserId"); + + b.Property("AccessToken"); + + b.Property("Expiration"); + + b.Property("ExpiresIn"); + + b.Property("RefreshToken"); + + b.Property("TokenType"); + + b.HasKey("UserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Payment.PayPalPayment", b => + { + b.Property("CreationToken"); + + b.Property("DateCreated"); + + b.Property("DateModified"); + + b.Property("ExecutorId") + .IsRequired(); + + b.Property("OrderReference"); + + b.Property("PaypalPayerId"); + + b.Property("State"); + + b.Property("UserCreated"); + + b.Property("UserModified"); + + b.HasKey("CreationToken"); + }); + + modelBuilder.Entity("Yavsc.Models.Relationship.Circle", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ApplicationUserId"); + + b.Property("Name"); + + b.Property("OwnerId"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Relationship.CircleMember", b => + { + b.Property("MemberId"); + + b.Property("CircleId"); + + b.HasKey("MemberId", "CircleId"); + }); + + modelBuilder.Entity("Yavsc.Models.Relationship.Contact", b => + { + b.Property("OwnerId"); + + b.Property("UserId"); + + b.Property("ApplicationUserId"); + + b.HasKey("OwnerId", "UserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Relationship.HyperLink", b => + { + b.Property("HRef"); + + b.Property("Method"); + + b.Property("BrusherProfileUserId"); + + b.Property("ContentType"); + + b.Property("PayPalPaymentCreationToken"); + + b.Property("Rel"); + + b.HasKey("HRef", "Method"); + }); + + modelBuilder.Entity("Yavsc.Models.Relationship.Location", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Address") + .IsRequired() + .HasAnnotation("MaxLength", 512); + + b.Property("Latitude"); + + b.Property("Longitude"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Relationship.LocationType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Name"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Relationship.PostTag", b => + { + b.Property("PostId"); + + b.Property("TagId"); + + b.HasKey("PostId", "TagId"); + }); + + modelBuilder.Entity("Yavsc.Models.Relationship.Tag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Name") + .IsRequired(); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Skill", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("Name"); + + b.Property("Rate"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Workflow.Activity", b => + { + b.Property("Code") + .HasAnnotation("MaxLength", 512); + + b.Property("DateCreated"); + + b.Property("DateModified"); + + b.Property("Description"); + + b.Property("Hidden"); + + b.Property("ModeratorGroupName"); + + b.Property("Name") + .IsRequired() + .HasAnnotation("MaxLength", 512); + + b.Property("ParentCode") + .HasAnnotation("MaxLength", 512); + + b.Property("Photo"); + + b.Property("Rate"); + + b.Property("SettingsClassName"); + + b.Property("UserCreated"); + + b.Property("UserModified"); + + b.HasKey("Code"); + }); + + modelBuilder.Entity("Yavsc.Models.Workflow.CommandForm", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ActionName"); + + b.Property("ActivityCode") + .IsRequired(); + + b.Property("Title"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Workflow.CoWorking", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("FormationSettingsUserId"); + + b.Property("PerformerId"); + + b.Property("WorkingForId"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Workflow.PerformerProfile", b => + { + b.Property("PerformerId"); + + b.Property("AcceptNotifications"); + + b.Property("AcceptPublicContact"); + + b.Property("Active"); + + b.Property("MaxDailyCost"); + + b.Property("MinDailyCost"); + + b.Property("OrganizationAddressId"); + + b.Property("Rate"); + + b.Property("SIREN") + .IsRequired() + .HasAnnotation("MaxLength", 14); + + b.Property("UseGeoLocalizationToReduceDistanceWithClients"); + + b.Property("WebSite"); + + b.HasKey("PerformerId"); + }); + + modelBuilder.Entity("Yavsc.Models.Workflow.Profiles.FormationSettings", b => + { + b.Property("UserId"); + + b.HasKey("UserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Workflow.RdvQuery", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("ActivityCode") + .IsRequired(); + + b.Property("ClientId") + .IsRequired(); + + b.Property("Consent"); + + b.Property("DateCreated"); + + b.Property("DateModified"); + + b.Property("EventDate"); + + b.Property("LocationId"); + + b.Property("LocationTypeId"); + + b.Property("PaymentId"); + + b.Property("PerformerId") + .IsRequired(); + + b.Property("Previsional"); + + b.Property("Reason"); + + b.Property("Status"); + + b.Property("UserCreated"); + + b.Property("UserModified"); + + b.Property("ValidationDate"); + + b.HasKey("Id"); + }); + + modelBuilder.Entity("Yavsc.Models.Workflow.UserActivity", b => + { + b.Property("DoesCode"); + + b.Property("UserId"); + + b.Property("Weight"); + + b.HasKey("DoesCode", "UserId"); + }); + + modelBuilder.Entity("Microsoft.AspNet.Identity.EntityFramework.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNet.Identity.EntityFramework.IdentityRole") + .WithMany() + .HasForeignKey("RoleId"); + }); + + modelBuilder.Entity("Microsoft.AspNet.Identity.EntityFramework.IdentityUserClaim", b => + { + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("UserId"); + }); + + modelBuilder.Entity("Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin", b => + { + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("UserId"); + }); + + modelBuilder.Entity("Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNet.Identity.EntityFramework.IdentityRole") + .WithMany() + .HasForeignKey("RoleId"); + + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("UserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Access.BlackListed", b => + { + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("OwnerId"); + }); + + modelBuilder.Entity("Yavsc.Models.Access.CircleAuthorizationToBlogPost", b => + { + b.HasOne("Yavsc.Models.Blog") + .WithMany() + .HasForeignKey("BlogPostId"); + + b.HasOne("Yavsc.Models.Relationship.Circle") + .WithMany() + .HasForeignKey("CircleId"); + }); + + modelBuilder.Entity("Yavsc.Models.AccountBalance", b => + { + b.HasOne("Yavsc.Models.ApplicationUser") + .WithOne() + .HasForeignKey("Yavsc.Models.AccountBalance", "UserId"); + }); + + modelBuilder.Entity("Yavsc.Models.ApplicationUser", b => + { + b.HasOne("Yavsc.Models.Bank.BankIdentity") + .WithMany() + .HasForeignKey("BankInfoId"); + + b.HasOne("Yavsc.Models.Relationship.Location") + .WithMany() + .HasForeignKey("PostalAddressId"); + }); + + modelBuilder.Entity("Yavsc.Models.BalanceImpact", b => + { + b.HasOne("Yavsc.Models.AccountBalance") + .WithMany() + .HasForeignKey("BalanceId"); + }); + + modelBuilder.Entity("Yavsc.Models.Billing.CommandLine", b => + { + b.HasOne("Yavsc.Models.Billing.Estimate") + .WithMany() + .HasForeignKey("EstimateId"); + + b.HasOne("Yavsc.Models.Billing.EstimateTemplate") + .WithMany() + .HasForeignKey("EstimateTemplateId"); + }); + + modelBuilder.Entity("Yavsc.Models.Billing.Estimate", b => + { + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("ClientId"); + + b.HasOne("Yavsc.Models.Workflow.RdvQuery") + .WithMany() + .HasForeignKey("CommandId"); + + b.HasOne("Yavsc.Models.Workflow.PerformerProfile") + .WithMany() + .HasForeignKey("OwnerId"); + }); + + modelBuilder.Entity("Yavsc.Models.Blog", b => + { + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("AuthorId"); + }); + + modelBuilder.Entity("Yavsc.Models.Calendar.Schedule", b => + { + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("OwnerId"); + }); + + modelBuilder.Entity("Yavsc.Models.Calendar.ScheduledEvent", b => + { + b.HasOne("Yavsc.Models.Calendar.Schedule") + .WithMany() + .HasForeignKey("ScheduleOwnerId"); + + b.HasOne("Yavsc.Models.Calendar.Period") + .WithMany() + .HasForeignKey("PeriodStart", "PeriodEnd"); + }); + + modelBuilder.Entity("Yavsc.Models.Chat.Connection", b => + { + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("ApplicationUserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Haircut.BrusherProfile", b => + { + b.HasOne("Yavsc.Models.Calendar.Schedule") + .WithMany() + .HasForeignKey("ScheduleOwnerId"); + + b.HasOne("Yavsc.Models.Workflow.PerformerProfile") + .WithMany() + .HasForeignKey("UserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Haircut.HairCutQuery", b => + { + b.HasOne("Yavsc.Models.Workflow.Activity") + .WithMany() + .HasForeignKey("ActivityCode"); + + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("ClientId"); + + b.HasOne("Yavsc.Models.Relationship.Location") + .WithMany() + .HasForeignKey("LocationId"); + + b.HasOne("Yavsc.Models.Payment.PayPalPayment") + .WithMany() + .HasForeignKey("PaymentId"); + + b.HasOne("Yavsc.Models.Workflow.PerformerProfile") + .WithMany() + .HasForeignKey("PerformerId"); + + b.HasOne("Yavsc.Models.Haircut.HairPrestation") + .WithMany() + .HasForeignKey("PrestationId"); + + b.HasOne("Yavsc.Models.Haircut.BrusherProfile") + .WithMany() + .HasForeignKey("SelectedProfileUserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Haircut.HairMultiCutQuery", b => + { + b.HasOne("Yavsc.Models.Workflow.Activity") + .WithMany() + .HasForeignKey("ActivityCode"); + + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("ClientId"); + + b.HasOne("Yavsc.Models.Relationship.Location") + .WithMany() + .HasForeignKey("LocationId"); + + b.HasOne("Yavsc.Models.Payment.PayPalPayment") + .WithMany() + .HasForeignKey("PaymentId"); + + b.HasOne("Yavsc.Models.Workflow.PerformerProfile") + .WithMany() + .HasForeignKey("PerformerId"); + }); + + modelBuilder.Entity("Yavsc.Models.Haircut.HairPrestationCollectionItem", b => + { + b.HasOne("Yavsc.Models.Haircut.HairPrestation") + .WithMany() + .HasForeignKey("PrestationId"); + + b.HasOne("Yavsc.Models.Haircut.HairMultiCutQuery") + .WithMany() + .HasForeignKey("QueryId"); + }); + + modelBuilder.Entity("Yavsc.Models.Haircut.HairTaint", b => + { + b.HasOne("Yavsc.Models.Drawing.Color") + .WithMany() + .HasForeignKey("ColorId"); + }); + + modelBuilder.Entity("Yavsc.Models.Haircut.HairTaintInstance", b => + { + b.HasOne("Yavsc.Models.Haircut.HairPrestation") + .WithMany() + .HasForeignKey("PrestationId"); + + b.HasOne("Yavsc.Models.Haircut.HairTaint") + .WithMany() + .HasForeignKey("TaintId"); + }); + + modelBuilder.Entity("Yavsc.Models.Identity.GoogleCloudMobileDeclaration", b => + { + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("DeviceOwnerId"); + }); + + modelBuilder.Entity("Yavsc.Models.Market.Service", b => + { + b.HasOne("Yavsc.Models.Workflow.Activity") + .WithMany() + .HasForeignKey("ContextId"); + }); + + modelBuilder.Entity("Yavsc.Models.Messaging.ClientProviderInfo", b => + { + b.HasOne("Yavsc.Models.Relationship.Location") + .WithMany() + .HasForeignKey("BillingAddressId"); + }); + + modelBuilder.Entity("Yavsc.Models.Messaging.DimissClicked", b => + { + b.HasOne("Yavsc.Models.Messaging.Notification") + .WithMany() + .HasForeignKey("NotificationId"); + + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("UserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Musical.MusicalPreference", b => + { + b.HasOne("Yavsc.Models.Musical.Profiles.DjSettings") + .WithMany() + .HasForeignKey("DjSettingsUserId"); + + b.HasOne("Yavsc.Models.Musical.Profiles.GeneralSettings") + .WithMany() + .HasForeignKey("GeneralSettingsUserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Musical.Profiles.Instrumentation", b => + { + b.HasOne("Yavsc.Models.Musical.Instrument") + .WithMany() + .HasForeignKey("InstrumentId"); + + b.HasOne("Yavsc.Models.Workflow.PerformerProfile") + .WithMany() + .HasForeignKey("UserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Payment.PayPalPayment", b => + { + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("ExecutorId"); + }); + + modelBuilder.Entity("Yavsc.Models.Relationship.Circle", b => + { + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("ApplicationUserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Relationship.CircleMember", b => + { + b.HasOne("Yavsc.Models.Relationship.Circle") + .WithMany() + .HasForeignKey("CircleId"); + + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("MemberId"); + }); + + modelBuilder.Entity("Yavsc.Models.Relationship.Contact", b => + { + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("ApplicationUserId"); + }); + + modelBuilder.Entity("Yavsc.Models.Relationship.HyperLink", b => + { + b.HasOne("Yavsc.Models.Haircut.BrusherProfile") + .WithMany() + .HasForeignKey("BrusherProfileUserId"); + + b.HasOne("Yavsc.Models.Payment.PayPalPayment") + .WithMany() + .HasForeignKey("PayPalPaymentCreationToken"); + }); + + modelBuilder.Entity("Yavsc.Models.Relationship.PostTag", b => + { + b.HasOne("Yavsc.Models.Blog") + .WithMany() + .HasForeignKey("PostId"); + }); + + modelBuilder.Entity("Yavsc.Models.Workflow.Activity", b => + { + b.HasOne("Yavsc.Models.Workflow.Activity") + .WithMany() + .HasForeignKey("ParentCode"); + }); + + modelBuilder.Entity("Yavsc.Models.Workflow.CommandForm", b => + { + b.HasOne("Yavsc.Models.Workflow.Activity") + .WithMany() + .HasForeignKey("ActivityCode"); + }); + + modelBuilder.Entity("Yavsc.Models.Workflow.CoWorking", b => + { + b.HasOne("Yavsc.Models.Workflow.Profiles.FormationSettings") + .WithMany() + .HasForeignKey("FormationSettingsUserId"); + + b.HasOne("Yavsc.Models.Workflow.PerformerProfile") + .WithMany() + .HasForeignKey("PerformerId"); + + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("WorkingForId"); + }); + + modelBuilder.Entity("Yavsc.Models.Workflow.PerformerProfile", b => + { + b.HasOne("Yavsc.Models.Relationship.Location") + .WithMany() + .HasForeignKey("OrganizationAddressId"); + + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("PerformerId"); + }); + + modelBuilder.Entity("Yavsc.Models.Workflow.RdvQuery", b => + { + b.HasOne("Yavsc.Models.Workflow.Activity") + .WithMany() + .HasForeignKey("ActivityCode"); + + b.HasOne("Yavsc.Models.ApplicationUser") + .WithMany() + .HasForeignKey("ClientId"); + + b.HasOne("Yavsc.Models.Relationship.Location") + .WithMany() + .HasForeignKey("LocationId"); + + b.HasOne("Yavsc.Models.Relationship.LocationType") + .WithMany() + .HasForeignKey("LocationTypeId"); + + b.HasOne("Yavsc.Models.Payment.PayPalPayment") + .WithMany() + .HasForeignKey("PaymentId"); + + b.HasOne("Yavsc.Models.Workflow.PerformerProfile") + .WithMany() + .HasForeignKey("PerformerId"); + }); + + modelBuilder.Entity("Yavsc.Models.Workflow.UserActivity", b => + { + b.HasOne("Yavsc.Models.Workflow.Activity") + .WithMany() + .HasForeignKey("DoesCode"); + + b.HasOne("Yavsc.Models.Workflow.PerformerProfile") + .WithMany() + .HasForeignKey("UserId"); + }); + } + } +} diff --git a/Yavsc/Migrations/20170611141231_BrusherCalendarModel.cs b/Yavsc/Migrations/20170611141231_BrusherCalendarModel.cs new file mode 100644 index 00000000..b0ab99d6 --- /dev/null +++ b/Yavsc/Migrations/20170611141231_BrusherCalendarModel.cs @@ -0,0 +1,759 @@ +using System; +using Microsoft.Data.Entity.Migrations; + +namespace Yavsc.Migrations +{ + public partial class BrusherCalendarModel : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey(name: "FK_IdentityRoleClaim_IdentityRole_RoleId", table: "AspNetRoleClaims"); + migrationBuilder.DropForeignKey(name: "FK_IdentityUserClaim_ApplicationUser_UserId", table: "AspNetUserClaims"); + migrationBuilder.DropForeignKey(name: "FK_IdentityUserLogin_ApplicationUser_UserId", table: "AspNetUserLogins"); + migrationBuilder.DropForeignKey(name: "FK_IdentityUserRole_IdentityRole_RoleId", table: "AspNetUserRoles"); + migrationBuilder.DropForeignKey(name: "FK_IdentityUserRole_ApplicationUser_UserId", table: "AspNetUserRoles"); + migrationBuilder.DropForeignKey(name: "FK_BlackListed_ApplicationUser_OwnerId", table: "BlackListed"); + migrationBuilder.DropForeignKey(name: "FK_CircleAuthorizationToBlogPost_Blog_BlogPostId", table: "CircleAuthorizationToBlogPost"); + migrationBuilder.DropForeignKey(name: "FK_CircleAuthorizationToBlogPost_Circle_CircleId", table: "CircleAuthorizationToBlogPost"); + migrationBuilder.DropForeignKey(name: "FK_AccountBalance_ApplicationUser_UserId", table: "AccountBalance"); + migrationBuilder.DropForeignKey(name: "FK_BalanceImpact_AccountBalance_BalanceId", table: "BalanceImpact"); + migrationBuilder.DropForeignKey(name: "FK_CommandLine_Estimate_EstimateId", table: "CommandLine"); + migrationBuilder.DropForeignKey(name: "FK_Estimate_ApplicationUser_ClientId", table: "Estimate"); + migrationBuilder.DropForeignKey(name: "FK_Estimate_PerformerProfile_OwnerId", table: "Estimate"); + migrationBuilder.DropForeignKey(name: "FK_Period_BrusherProfile_BrusherProfileUserId", table: "Period"); + migrationBuilder.DropForeignKey(name: "FK_Connection_ApplicationUser_ApplicationUserId", table: "Connection"); + migrationBuilder.DropForeignKey(name: "FK_BrusherProfile_PerformerProfile_UserId", table: "BrusherProfile"); + migrationBuilder.DropForeignKey(name: "FK_HairCutQuery_Activity_ActivityCode", table: "HairCutQuery"); + migrationBuilder.DropForeignKey(name: "FK_HairCutQuery_ApplicationUser_ClientId", table: "HairCutQuery"); + migrationBuilder.DropForeignKey(name: "FK_HairCutQuery_PerformerProfile_PerformerId", table: "HairCutQuery"); + migrationBuilder.DropForeignKey(name: "FK_HairCutQuery_HairPrestation_PrestationId", table: "HairCutQuery"); + migrationBuilder.DropForeignKey(name: "FK_HairMultiCutQuery_Activity_ActivityCode", table: "HairMultiCutQuery"); + migrationBuilder.DropForeignKey(name: "FK_HairMultiCutQuery_ApplicationUser_ClientId", table: "HairMultiCutQuery"); + migrationBuilder.DropForeignKey(name: "FK_HairMultiCutQuery_PerformerProfile_PerformerId", table: "HairMultiCutQuery"); + migrationBuilder.DropForeignKey(name: "FK_HairPrestationCollectionItem_HairPrestation_PrestationId", table: "HairPrestationCollectionItem"); + migrationBuilder.DropForeignKey(name: "FK_HairPrestationCollectionItem_HairMultiCutQuery_QueryId", table: "HairPrestationCollectionItem"); + migrationBuilder.DropForeignKey(name: "FK_HairTaint_Color_ColorId", table: "HairTaint"); + migrationBuilder.DropForeignKey(name: "FK_HairTaintInstance_HairPrestation_PrestationId", table: "HairTaintInstance"); + migrationBuilder.DropForeignKey(name: "FK_HairTaintInstance_HairTaint_TaintId", table: "HairTaintInstance"); + migrationBuilder.DropForeignKey(name: "FK_DimissClicked_Notification_NotificationId", table: "DimissClicked"); + migrationBuilder.DropForeignKey(name: "FK_DimissClicked_ApplicationUser_UserId", table: "DimissClicked"); + migrationBuilder.DropForeignKey(name: "FK_Instrumentation_Instrument_InstrumentId", table: "Instrumentation"); + migrationBuilder.DropForeignKey(name: "FK_PayPalPayment_ApplicationUser_ExecutorId", table: "PayPalPayment"); + migrationBuilder.DropForeignKey(name: "FK_CircleMember_Circle_CircleId", table: "CircleMember"); + migrationBuilder.DropForeignKey(name: "FK_CircleMember_ApplicationUser_MemberId", table: "CircleMember"); + migrationBuilder.DropForeignKey(name: "FK_PostTag_Blog_PostId", table: "PostTag"); + migrationBuilder.DropForeignKey(name: "FK_CommandForm_Activity_ActivityCode", table: "CommandForm"); + migrationBuilder.DropForeignKey(name: "FK_PerformerProfile_Location_OrganizationAddressId", table: "PerformerProfile"); + migrationBuilder.DropForeignKey(name: "FK_PerformerProfile_ApplicationUser_PerformerId", table: "PerformerProfile"); + migrationBuilder.DropForeignKey(name: "FK_RdvQuery_Activity_ActivityCode", table: "RdvQuery"); + migrationBuilder.DropForeignKey(name: "FK_RdvQuery_ApplicationUser_ClientId", table: "RdvQuery"); + migrationBuilder.DropForeignKey(name: "FK_RdvQuery_PerformerProfile_PerformerId", table: "RdvQuery"); + migrationBuilder.DropForeignKey(name: "FK_UserActivity_Activity_DoesCode", table: "UserActivity"); + migrationBuilder.DropForeignKey(name: "FK_UserActivity_PerformerProfile_UserId", table: "UserActivity"); + migrationBuilder.DropColumn(name: "BrusherProfileUserId", table: "Period"); + migrationBuilder.CreateTable( + name: "Schedule", + columns: table => new + { + OwnerId = table.Column(nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Schedule", x => x.OwnerId); + table.ForeignKey( + name: "FK_Schedule_ApplicationUser_OwnerId", + column: x => x.OwnerId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + migrationBuilder.CreateTable( + name: "ScheduledEvent", + columns: table => new + { + Id = table.Column(nullable: false) + .Annotation("Npgsql:Serial", true), + PeriodEnd = table.Column(nullable: true), + PeriodStart = table.Column(nullable: true), + Reccurence = table.Column(nullable: false), + ScheduleOwnerId = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_ScheduledEvent", x => x.Id); + table.ForeignKey( + name: "FK_ScheduledEvent_Schedule_ScheduleOwnerId", + column: x => x.ScheduleOwnerId, + principalTable: "Schedule", + principalColumn: "OwnerId", + onDelete: ReferentialAction.Restrict); + table.ForeignKey( + name: "FK_ScheduledEvent_Period_PeriodStart_PeriodEnd", + columns: x => new { x.PeriodStart, x.PeriodEnd }, + principalTable: "Period", + principalColumns: new[] { "Start", "End" }, + onDelete: ReferentialAction.Restrict); + }); + migrationBuilder.AddColumn( + name: "ScheduleOwnerId", + table: "BrusherProfile", + nullable: true); + migrationBuilder.AddForeignKey( + name: "FK_IdentityRoleClaim_IdentityRole_RoleId", + table: "AspNetRoleClaims", + column: "RoleId", + principalTable: "AspNetRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_IdentityUserClaim_ApplicationUser_UserId", + table: "AspNetUserClaims", + column: "UserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_IdentityUserLogin_ApplicationUser_UserId", + table: "AspNetUserLogins", + column: "UserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_IdentityUserRole_IdentityRole_RoleId", + table: "AspNetUserRoles", + column: "RoleId", + principalTable: "AspNetRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_IdentityUserRole_ApplicationUser_UserId", + table: "AspNetUserRoles", + column: "UserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_BlackListed_ApplicationUser_OwnerId", + table: "BlackListed", + column: "OwnerId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_CircleAuthorizationToBlogPost_Blog_BlogPostId", + table: "CircleAuthorizationToBlogPost", + column: "BlogPostId", + principalTable: "Blog", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_CircleAuthorizationToBlogPost_Circle_CircleId", + table: "CircleAuthorizationToBlogPost", + column: "CircleId", + principalTable: "Circle", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_AccountBalance_ApplicationUser_UserId", + table: "AccountBalance", + column: "UserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_BalanceImpact_AccountBalance_BalanceId", + table: "BalanceImpact", + column: "BalanceId", + principalTable: "AccountBalance", + principalColumn: "UserId", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_CommandLine_Estimate_EstimateId", + table: "CommandLine", + column: "EstimateId", + principalTable: "Estimate", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_Estimate_ApplicationUser_ClientId", + table: "Estimate", + column: "ClientId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_Estimate_PerformerProfile_OwnerId", + table: "Estimate", + column: "OwnerId", + principalTable: "PerformerProfile", + principalColumn: "PerformerId", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_Connection_ApplicationUser_ApplicationUserId", + table: "Connection", + column: "ApplicationUserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_BrusherProfile_Schedule_ScheduleOwnerId", + table: "BrusherProfile", + column: "ScheduleOwnerId", + principalTable: "Schedule", + principalColumn: "OwnerId", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_BrusherProfile_PerformerProfile_UserId", + table: "BrusherProfile", + column: "UserId", + principalTable: "PerformerProfile", + principalColumn: "PerformerId", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_HairCutQuery_Activity_ActivityCode", + table: "HairCutQuery", + column: "ActivityCode", + principalTable: "Activity", + principalColumn: "Code", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_HairCutQuery_ApplicationUser_ClientId", + table: "HairCutQuery", + column: "ClientId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_HairCutQuery_PerformerProfile_PerformerId", + table: "HairCutQuery", + column: "PerformerId", + principalTable: "PerformerProfile", + principalColumn: "PerformerId", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_HairCutQuery_HairPrestation_PrestationId", + table: "HairCutQuery", + column: "PrestationId", + principalTable: "HairPrestation", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_HairMultiCutQuery_Activity_ActivityCode", + table: "HairMultiCutQuery", + column: "ActivityCode", + principalTable: "Activity", + principalColumn: "Code", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_HairMultiCutQuery_ApplicationUser_ClientId", + table: "HairMultiCutQuery", + column: "ClientId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_HairMultiCutQuery_PerformerProfile_PerformerId", + table: "HairMultiCutQuery", + column: "PerformerId", + principalTable: "PerformerProfile", + principalColumn: "PerformerId", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_HairPrestationCollectionItem_HairPrestation_PrestationId", + table: "HairPrestationCollectionItem", + column: "PrestationId", + principalTable: "HairPrestation", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_HairPrestationCollectionItem_HairMultiCutQuery_QueryId", + table: "HairPrestationCollectionItem", + column: "QueryId", + principalTable: "HairMultiCutQuery", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_HairTaint_Color_ColorId", + table: "HairTaint", + column: "ColorId", + principalTable: "Color", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_HairTaintInstance_HairPrestation_PrestationId", + table: "HairTaintInstance", + column: "PrestationId", + principalTable: "HairPrestation", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_HairTaintInstance_HairTaint_TaintId", + table: "HairTaintInstance", + column: "TaintId", + principalTable: "HairTaint", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_DimissClicked_Notification_NotificationId", + table: "DimissClicked", + column: "NotificationId", + principalTable: "Notification", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_DimissClicked_ApplicationUser_UserId", + table: "DimissClicked", + column: "UserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_Instrumentation_Instrument_InstrumentId", + table: "Instrumentation", + column: "InstrumentId", + principalTable: "Instrument", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_PayPalPayment_ApplicationUser_ExecutorId", + table: "PayPalPayment", + column: "ExecutorId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_CircleMember_Circle_CircleId", + table: "CircleMember", + column: "CircleId", + principalTable: "Circle", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_CircleMember_ApplicationUser_MemberId", + table: "CircleMember", + column: "MemberId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_PostTag_Blog_PostId", + table: "PostTag", + column: "PostId", + principalTable: "Blog", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_CommandForm_Activity_ActivityCode", + table: "CommandForm", + column: "ActivityCode", + principalTable: "Activity", + principalColumn: "Code", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_PerformerProfile_Location_OrganizationAddressId", + table: "PerformerProfile", + column: "OrganizationAddressId", + principalTable: "Location", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_PerformerProfile_ApplicationUser_PerformerId", + table: "PerformerProfile", + column: "PerformerId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_RdvQuery_Activity_ActivityCode", + table: "RdvQuery", + column: "ActivityCode", + principalTable: "Activity", + principalColumn: "Code", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_RdvQuery_ApplicationUser_ClientId", + table: "RdvQuery", + column: "ClientId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_RdvQuery_PerformerProfile_PerformerId", + table: "RdvQuery", + column: "PerformerId", + principalTable: "PerformerProfile", + principalColumn: "PerformerId", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_UserActivity_Activity_DoesCode", + table: "UserActivity", + column: "DoesCode", + principalTable: "Activity", + principalColumn: "Code", + onDelete: ReferentialAction.Cascade); + migrationBuilder.AddForeignKey( + name: "FK_UserActivity_PerformerProfile_UserId", + table: "UserActivity", + column: "UserId", + principalTable: "PerformerProfile", + principalColumn: "PerformerId", + onDelete: ReferentialAction.Cascade); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey(name: "FK_IdentityRoleClaim_IdentityRole_RoleId", table: "AspNetRoleClaims"); + migrationBuilder.DropForeignKey(name: "FK_IdentityUserClaim_ApplicationUser_UserId", table: "AspNetUserClaims"); + migrationBuilder.DropForeignKey(name: "FK_IdentityUserLogin_ApplicationUser_UserId", table: "AspNetUserLogins"); + migrationBuilder.DropForeignKey(name: "FK_IdentityUserRole_IdentityRole_RoleId", table: "AspNetUserRoles"); + migrationBuilder.DropForeignKey(name: "FK_IdentityUserRole_ApplicationUser_UserId", table: "AspNetUserRoles"); + migrationBuilder.DropForeignKey(name: "FK_BlackListed_ApplicationUser_OwnerId", table: "BlackListed"); + migrationBuilder.DropForeignKey(name: "FK_CircleAuthorizationToBlogPost_Blog_BlogPostId", table: "CircleAuthorizationToBlogPost"); + migrationBuilder.DropForeignKey(name: "FK_CircleAuthorizationToBlogPost_Circle_CircleId", table: "CircleAuthorizationToBlogPost"); + migrationBuilder.DropForeignKey(name: "FK_AccountBalance_ApplicationUser_UserId", table: "AccountBalance"); + migrationBuilder.DropForeignKey(name: "FK_BalanceImpact_AccountBalance_BalanceId", table: "BalanceImpact"); + migrationBuilder.DropForeignKey(name: "FK_CommandLine_Estimate_EstimateId", table: "CommandLine"); + migrationBuilder.DropForeignKey(name: "FK_Estimate_ApplicationUser_ClientId", table: "Estimate"); + migrationBuilder.DropForeignKey(name: "FK_Estimate_PerformerProfile_OwnerId", table: "Estimate"); + migrationBuilder.DropForeignKey(name: "FK_Connection_ApplicationUser_ApplicationUserId", table: "Connection"); + migrationBuilder.DropForeignKey(name: "FK_BrusherProfile_Schedule_ScheduleOwnerId", table: "BrusherProfile"); + migrationBuilder.DropForeignKey(name: "FK_BrusherProfile_PerformerProfile_UserId", table: "BrusherProfile"); + migrationBuilder.DropForeignKey(name: "FK_HairCutQuery_Activity_ActivityCode", table: "HairCutQuery"); + migrationBuilder.DropForeignKey(name: "FK_HairCutQuery_ApplicationUser_ClientId", table: "HairCutQuery"); + migrationBuilder.DropForeignKey(name: "FK_HairCutQuery_PerformerProfile_PerformerId", table: "HairCutQuery"); + migrationBuilder.DropForeignKey(name: "FK_HairCutQuery_HairPrestation_PrestationId", table: "HairCutQuery"); + migrationBuilder.DropForeignKey(name: "FK_HairMultiCutQuery_Activity_ActivityCode", table: "HairMultiCutQuery"); + migrationBuilder.DropForeignKey(name: "FK_HairMultiCutQuery_ApplicationUser_ClientId", table: "HairMultiCutQuery"); + migrationBuilder.DropForeignKey(name: "FK_HairMultiCutQuery_PerformerProfile_PerformerId", table: "HairMultiCutQuery"); + migrationBuilder.DropForeignKey(name: "FK_HairPrestationCollectionItem_HairPrestation_PrestationId", table: "HairPrestationCollectionItem"); + migrationBuilder.DropForeignKey(name: "FK_HairPrestationCollectionItem_HairMultiCutQuery_QueryId", table: "HairPrestationCollectionItem"); + migrationBuilder.DropForeignKey(name: "FK_HairTaint_Color_ColorId", table: "HairTaint"); + migrationBuilder.DropForeignKey(name: "FK_HairTaintInstance_HairPrestation_PrestationId", table: "HairTaintInstance"); + migrationBuilder.DropForeignKey(name: "FK_HairTaintInstance_HairTaint_TaintId", table: "HairTaintInstance"); + migrationBuilder.DropForeignKey(name: "FK_DimissClicked_Notification_NotificationId", table: "DimissClicked"); + migrationBuilder.DropForeignKey(name: "FK_DimissClicked_ApplicationUser_UserId", table: "DimissClicked"); + migrationBuilder.DropForeignKey(name: "FK_Instrumentation_Instrument_InstrumentId", table: "Instrumentation"); + migrationBuilder.DropForeignKey(name: "FK_PayPalPayment_ApplicationUser_ExecutorId", table: "PayPalPayment"); + migrationBuilder.DropForeignKey(name: "FK_CircleMember_Circle_CircleId", table: "CircleMember"); + migrationBuilder.DropForeignKey(name: "FK_CircleMember_ApplicationUser_MemberId", table: "CircleMember"); + migrationBuilder.DropForeignKey(name: "FK_PostTag_Blog_PostId", table: "PostTag"); + migrationBuilder.DropForeignKey(name: "FK_CommandForm_Activity_ActivityCode", table: "CommandForm"); + migrationBuilder.DropForeignKey(name: "FK_PerformerProfile_Location_OrganizationAddressId", table: "PerformerProfile"); + migrationBuilder.DropForeignKey(name: "FK_PerformerProfile_ApplicationUser_PerformerId", table: "PerformerProfile"); + migrationBuilder.DropForeignKey(name: "FK_RdvQuery_Activity_ActivityCode", table: "RdvQuery"); + migrationBuilder.DropForeignKey(name: "FK_RdvQuery_ApplicationUser_ClientId", table: "RdvQuery"); + migrationBuilder.DropForeignKey(name: "FK_RdvQuery_PerformerProfile_PerformerId", table: "RdvQuery"); + migrationBuilder.DropForeignKey(name: "FK_UserActivity_Activity_DoesCode", table: "UserActivity"); + migrationBuilder.DropForeignKey(name: "FK_UserActivity_PerformerProfile_UserId", table: "UserActivity"); + migrationBuilder.DropColumn(name: "ScheduleOwnerId", table: "BrusherProfile"); + migrationBuilder.DropTable("ScheduledEvent"); + migrationBuilder.DropTable("Schedule"); + migrationBuilder.AddColumn( + name: "BrusherProfileUserId", + table: "Period", + nullable: true); + migrationBuilder.AddForeignKey( + name: "FK_IdentityRoleClaim_IdentityRole_RoleId", + table: "AspNetRoleClaims", + column: "RoleId", + principalTable: "AspNetRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_IdentityUserClaim_ApplicationUser_UserId", + table: "AspNetUserClaims", + column: "UserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_IdentityUserLogin_ApplicationUser_UserId", + table: "AspNetUserLogins", + column: "UserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_IdentityUserRole_IdentityRole_RoleId", + table: "AspNetUserRoles", + column: "RoleId", + principalTable: "AspNetRoles", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_IdentityUserRole_ApplicationUser_UserId", + table: "AspNetUserRoles", + column: "UserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_BlackListed_ApplicationUser_OwnerId", + table: "BlackListed", + column: "OwnerId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_CircleAuthorizationToBlogPost_Blog_BlogPostId", + table: "CircleAuthorizationToBlogPost", + column: "BlogPostId", + principalTable: "Blog", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_CircleAuthorizationToBlogPost_Circle_CircleId", + table: "CircleAuthorizationToBlogPost", + column: "CircleId", + principalTable: "Circle", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_AccountBalance_ApplicationUser_UserId", + table: "AccountBalance", + column: "UserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_BalanceImpact_AccountBalance_BalanceId", + table: "BalanceImpact", + column: "BalanceId", + principalTable: "AccountBalance", + principalColumn: "UserId", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_CommandLine_Estimate_EstimateId", + table: "CommandLine", + column: "EstimateId", + principalTable: "Estimate", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_Estimate_ApplicationUser_ClientId", + table: "Estimate", + column: "ClientId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_Estimate_PerformerProfile_OwnerId", + table: "Estimate", + column: "OwnerId", + principalTable: "PerformerProfile", + principalColumn: "PerformerId", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_Period_BrusherProfile_BrusherProfileUserId", + table: "Period", + column: "BrusherProfileUserId", + principalTable: "BrusherProfile", + principalColumn: "UserId", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_Connection_ApplicationUser_ApplicationUserId", + table: "Connection", + column: "ApplicationUserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_BrusherProfile_PerformerProfile_UserId", + table: "BrusherProfile", + column: "UserId", + principalTable: "PerformerProfile", + principalColumn: "PerformerId", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_HairCutQuery_Activity_ActivityCode", + table: "HairCutQuery", + column: "ActivityCode", + principalTable: "Activity", + principalColumn: "Code", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_HairCutQuery_ApplicationUser_ClientId", + table: "HairCutQuery", + column: "ClientId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_HairCutQuery_PerformerProfile_PerformerId", + table: "HairCutQuery", + column: "PerformerId", + principalTable: "PerformerProfile", + principalColumn: "PerformerId", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_HairCutQuery_HairPrestation_PrestationId", + table: "HairCutQuery", + column: "PrestationId", + principalTable: "HairPrestation", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_HairMultiCutQuery_Activity_ActivityCode", + table: "HairMultiCutQuery", + column: "ActivityCode", + principalTable: "Activity", + principalColumn: "Code", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_HairMultiCutQuery_ApplicationUser_ClientId", + table: "HairMultiCutQuery", + column: "ClientId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_HairMultiCutQuery_PerformerProfile_PerformerId", + table: "HairMultiCutQuery", + column: "PerformerId", + principalTable: "PerformerProfile", + principalColumn: "PerformerId", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_HairPrestationCollectionItem_HairPrestation_PrestationId", + table: "HairPrestationCollectionItem", + column: "PrestationId", + principalTable: "HairPrestation", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_HairPrestationCollectionItem_HairMultiCutQuery_QueryId", + table: "HairPrestationCollectionItem", + column: "QueryId", + principalTable: "HairMultiCutQuery", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_HairTaint_Color_ColorId", + table: "HairTaint", + column: "ColorId", + principalTable: "Color", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_HairTaintInstance_HairPrestation_PrestationId", + table: "HairTaintInstance", + column: "PrestationId", + principalTable: "HairPrestation", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_HairTaintInstance_HairTaint_TaintId", + table: "HairTaintInstance", + column: "TaintId", + principalTable: "HairTaint", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_DimissClicked_Notification_NotificationId", + table: "DimissClicked", + column: "NotificationId", + principalTable: "Notification", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_DimissClicked_ApplicationUser_UserId", + table: "DimissClicked", + column: "UserId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_Instrumentation_Instrument_InstrumentId", + table: "Instrumentation", + column: "InstrumentId", + principalTable: "Instrument", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_PayPalPayment_ApplicationUser_ExecutorId", + table: "PayPalPayment", + column: "ExecutorId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_CircleMember_Circle_CircleId", + table: "CircleMember", + column: "CircleId", + principalTable: "Circle", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_CircleMember_ApplicationUser_MemberId", + table: "CircleMember", + column: "MemberId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_PostTag_Blog_PostId", + table: "PostTag", + column: "PostId", + principalTable: "Blog", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_CommandForm_Activity_ActivityCode", + table: "CommandForm", + column: "ActivityCode", + principalTable: "Activity", + principalColumn: "Code", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_PerformerProfile_Location_OrganizationAddressId", + table: "PerformerProfile", + column: "OrganizationAddressId", + principalTable: "Location", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_PerformerProfile_ApplicationUser_PerformerId", + table: "PerformerProfile", + column: "PerformerId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_RdvQuery_Activity_ActivityCode", + table: "RdvQuery", + column: "ActivityCode", + principalTable: "Activity", + principalColumn: "Code", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_RdvQuery_ApplicationUser_ClientId", + table: "RdvQuery", + column: "ClientId", + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_RdvQuery_PerformerProfile_PerformerId", + table: "RdvQuery", + column: "PerformerId", + principalTable: "PerformerProfile", + principalColumn: "PerformerId", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_UserActivity_Activity_DoesCode", + table: "UserActivity", + column: "DoesCode", + principalTable: "Activity", + principalColumn: "Code", + onDelete: ReferentialAction.Restrict); + migrationBuilder.AddForeignKey( + name: "FK_UserActivity_PerformerProfile_UserId", + table: "UserActivity", + column: "UserId", + principalTable: "PerformerProfile", + principalColumn: "PerformerId", + onDelete: ReferentialAction.Restrict); + } + } +} diff --git a/Yavsc/Migrations/ApplicationDbContextModelSnapshot.cs b/Yavsc/Migrations/ApplicationDbContextModelSnapshot.cs index 856c00cf..6adfe527 100644 --- a/Yavsc/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/Yavsc/Migrations/ApplicationDbContextModelSnapshot.cs @@ -413,11 +413,32 @@ namespace Yavsc.Migrations b.Property("End"); - b.Property("BrusherProfileUserId"); - b.HasKey("Start", "End"); }); + modelBuilder.Entity("Yavsc.Models.Calendar.Schedule", b => + { + b.Property("OwnerId"); + + b.HasKey("OwnerId"); + }); + + modelBuilder.Entity("Yavsc.Models.Calendar.ScheduledEvent", b => + { + b.Property("Id") + .ValueGeneratedOnAdd(); + + b.Property("PeriodEnd"); + + b.Property("PeriodStart"); + + b.Property("Reccurence"); + + b.Property("ScheduleOwnerId"); + + b.HasKey("Id"); + }); + modelBuilder.Entity("Yavsc.Models.Chat.Connection", b => { b.Property("ConnectionId"); @@ -505,6 +526,8 @@ namespace Yavsc.Migrations b.Property("ManCutPrice"); + b.Property("ScheduleOwnerId"); + b.Property("ShampooPrice"); b.Property("ShortBalayagePrice"); @@ -1263,11 +1286,22 @@ namespace Yavsc.Migrations .HasForeignKey("AuthorId"); }); - modelBuilder.Entity("Yavsc.Models.Calendar.Period", b => + modelBuilder.Entity("Yavsc.Models.Calendar.Schedule", b => { - b.HasOne("Yavsc.Models.Haircut.BrusherProfile") + b.HasOne("Yavsc.Models.ApplicationUser") .WithMany() - .HasForeignKey("BrusherProfileUserId"); + .HasForeignKey("OwnerId"); + }); + + modelBuilder.Entity("Yavsc.Models.Calendar.ScheduledEvent", b => + { + b.HasOne("Yavsc.Models.Calendar.Schedule") + .WithMany() + .HasForeignKey("ScheduleOwnerId"); + + b.HasOne("Yavsc.Models.Calendar.Period") + .WithMany() + .HasForeignKey("PeriodStart", "PeriodEnd"); }); modelBuilder.Entity("Yavsc.Models.Chat.Connection", b => @@ -1279,6 +1313,10 @@ namespace Yavsc.Migrations modelBuilder.Entity("Yavsc.Models.Haircut.BrusherProfile", b => { + b.HasOne("Yavsc.Models.Calendar.Schedule") + .WithMany() + .HasForeignKey("ScheduleOwnerId"); + b.HasOne("Yavsc.Models.Workflow.PerformerProfile") .WithMany() .HasForeignKey("UserId"); diff --git a/Yavsc/Models/Calendar/Availability.cs b/Yavsc/Models/Calendar/Availability.cs deleted file mode 100644 index b3270b7c..00000000 --- a/Yavsc/Models/Calendar/Availability.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections.Generic; - -namespace Yavsc.Models.Calendar -{ - public class Availability: List - { - - } -} diff --git a/Yavsc/Models/Calendar/IScheduledEvent.cs b/Yavsc/Models/Calendar/IScheduledEvent.cs new file mode 100644 index 00000000..1043ac4d --- /dev/null +++ b/Yavsc/Models/Calendar/IScheduledEvent.cs @@ -0,0 +1,34 @@ +// +// IScheduledEvent.cs +// +// Author: +// Paul Schneider +// +// Copyright (c) 2015 - 2017 Paul Schneider +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +namespace Yavsc.Models.Calendar +{ + public interface IScheduledEvent + { + /// + /// Gets or sets the period. + /// + /// The period. + Periodicity Reccurence { get; set; } + Period Period { get; set; } + + } +} \ No newline at end of file diff --git a/Yavsc/Models/Calendar/Periodicity.cs b/Yavsc/Models/Calendar/Periodicity.cs index 63b03bb7..80b81358 100644 --- a/Yavsc/Models/Calendar/Periodicity.cs +++ b/Yavsc/Models/Calendar/Periodicity.cs @@ -4,7 +4,7 @@ // Author: // Paul Schneider // -// Copyright (c) 2015 Paul Schneider +// Copyright (c) 2015 - 2017 Paul Schneider // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by diff --git a/Yavsc/Models/Calendar/PositionAndKeyphrase.cs b/Yavsc/Models/Calendar/PositionAndKeyphrase.cs index 094e40bf..a4f45240 100644 --- a/Yavsc/Models/Calendar/PositionAndKeyphrase.cs +++ b/Yavsc/Models/Calendar/PositionAndKeyphrase.cs @@ -4,7 +4,7 @@ // Author: // Paul Schneider // -// Copyright (c) 2015 Paul Schneider +// Copyright (c) 2015 - 2017 Paul Schneider // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by diff --git a/Yavsc/Models/Calendar/Schedule.cs b/Yavsc/Models/Calendar/Schedule.cs index 18acd9ff..0f3418e9 100644 --- a/Yavsc/Models/Calendar/Schedule.cs +++ b/Yavsc/Models/Calendar/Schedule.cs @@ -19,32 +19,46 @@ // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . +// +// Calendar.cs +// +// Author: +// Paul Schneider +// +// Copyright (c) 2015 - 2017 Paul Schneider +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + + using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; namespace Yavsc.Models.Calendar { /// - /// Schedule. + /// Le calendrier, l'emploi du temps. /// public class Schedule { - /// - /// Gets or sets the period. - /// - /// The period. - public Periodicity Period { get; set; } - - /// - /// Gets or sets the schedule of an open week. - /// One item by bay in the week, - /// - /// The weekly workdays. - public OpenDay [] WeekDays { get; set; } - /// - /// Gets or sets the hollydays. - /// - /// The hollydays. - [Required] - public Period [] Validity { get; set; } + + [Key,Required] + public string OwnerId { get; set; } + + [ForeignKey("OwnerId")] + [Display(Name="Professionnel")] + public virtual ApplicationUser Owner { get ; set; } + + public ScheduledEvent [] Events { get ; set; } } } diff --git a/Yavsc/Models/Calendar/ScheduledEvent.cs b/Yavsc/Models/Calendar/ScheduledEvent.cs new file mode 100644 index 00000000..dfeb1431 --- /dev/null +++ b/Yavsc/Models/Calendar/ScheduledEvent.cs @@ -0,0 +1,45 @@ +// +// ScheduledEvent.cs +// +// Author: +// Paul Schneider +// +// Copyright (c) 2015 - 2017 Paul Schneider +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Yavsc.Models.Calendar +{ + public class ScheduledEvent : IScheduledEvent + { + [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)] + public long Id { get; set; } + public Period Period + { + get; + + set; + } + + public Periodicity Reccurence + { + get; + + set; + } + } +} \ No newline at end of file diff --git a/Yavsc/Models/Chat/Connection.cs b/Yavsc/Models/Chat/Connection.cs index 7eba1860..80bf542c 100644 --- a/Yavsc/Models/Chat/Connection.cs +++ b/Yavsc/Models/Chat/Connection.cs @@ -1,3 +1,24 @@ +// +// Connection.cs +// +// Author: +// Paul Schneider +// +// Copyright (c) 2015 - 2017 Paul Schneider +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Newtonsoft.Json; diff --git a/Yavsc/Models/Drawing/Color.cs b/Yavsc/Models/Drawing/Color.cs index cb00ee91..1493d329 100644 --- a/Yavsc/Models/Drawing/Color.cs +++ b/Yavsc/Models/Drawing/Color.cs @@ -1,3 +1,24 @@ +// +// Color.cs +// +// Author: +// Paul Schneider +// +// Copyright (c) 2015 - 2017 Paul Schneider +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; diff --git a/Yavsc/Models/Edition/IDocument.cs b/Yavsc/Models/Edition/IDocument.cs index c8985a43..396e4eba 100644 --- a/Yavsc/Models/Edition/IDocument.cs +++ b/Yavsc/Models/Edition/IDocument.cs @@ -1,4 +1,26 @@ +// +// IDocument.cs +// +// Author: +// Paul Schneider +// +// Copyright (c) 2015 - 2017 Paul Schneider +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + +using System; namespace Yavsc.Models { @@ -6,6 +28,8 @@ namespace Yavsc.Models { public string Name { get; set; } public string Value { get; set; } } + + [Obsolete("Templates are ala Razor")] public interface IDocument { string Template { get; set; } Parameter [] Parameters { get; set; } diff --git a/Yavsc/Models/FileSystem/FileRecievedInfo.cs b/Yavsc/Models/FileSystem/FileRecievedInfo.cs index 1d341533..2760b181 100644 --- a/Yavsc/Models/FileSystem/FileRecievedInfo.cs +++ b/Yavsc/Models/FileSystem/FileRecievedInfo.cs @@ -1,3 +1,26 @@ + +// +// FileRecievedInfo.cs +// +// Author: +// Paul Schneider +// +// Copyright (c) 2015 - 2017 Paul Schneider +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + + namespace Yavsc.Models.FileSystem { public class FileRecievedInfo diff --git a/Yavsc/Models/Google/Calendar/CalendarList.cs b/Yavsc/Models/Google/Calendar/CalendarList.cs index d839af28..12200ff4 100644 --- a/Yavsc/Models/Google/Calendar/CalendarList.cs +++ b/Yavsc/Models/Google/Calendar/CalendarList.cs @@ -19,7 +19,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . -namespace Yavsc.Models.Google +namespace Yavsc.Models.Google.Calendar { /// /// Calendar list. diff --git a/Yavsc/Models/Google/Calendar/CalendarListEntry.cs b/Yavsc/Models/Google/Calendar/CalendarListEntry.cs index 665dbaf2..b3cb0d2a 100644 --- a/Yavsc/Models/Google/Calendar/CalendarListEntry.cs +++ b/Yavsc/Models/Google/Calendar/CalendarListEntry.cs @@ -19,7 +19,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . -namespace Yavsc.Models.Google +namespace Yavsc.Models.Google.Calendar { /// /// Calendar list entry. @@ -105,17 +105,6 @@ namespace Yavsc.Models.Google /// /// Reminder. /// -public class Reminder { - /// - /// Gets or sets the method. - /// - /// The method. - public string method { get; set; } - /// - /// Gets or sets the minutes. - /// - /// The minutes. - public int minutes { get; set; } -} + } diff --git a/Yavsc/Models/Google/Calendar/Reminder.cs b/Yavsc/Models/Google/Calendar/Reminder.cs new file mode 100644 index 00000000..6e725ea3 --- /dev/null +++ b/Yavsc/Models/Google/Calendar/Reminder.cs @@ -0,0 +1,15 @@ +namespace Yavsc.Models.Google.Calendar +{ + public class Reminder { + /// + /// Gets or sets the method. + /// + /// The method. + public string method { get; set; } + /// + /// Gets or sets the minutes. + /// + /// The minutes. + public int minutes { get; set; } +} +} \ No newline at end of file diff --git a/Yavsc/Models/HairCut/BrusherProfile.cs b/Yavsc/Models/HairCut/BrusherProfile.cs index 51d1ecfd..6a48c51f 100644 --- a/Yavsc/Models/HairCut/BrusherProfile.cs +++ b/Yavsc/Models/HairCut/BrusherProfile.cs @@ -1,3 +1,25 @@ + +// +// BrusherProfile.cs +// +// Author: +// Paul Schneider +// +// Copyright (c) 2015 - 2017 Paul Schneider +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using Newtonsoft.Json; @@ -36,9 +58,9 @@ namespace Yavsc.Models.Haircut /// /// - [DisplayFormat(ConvertEmptyStringToNull = true, NullDisplayText = "[Pas de lieu spécifié]")] - [Display(Name="Disponibilités")] - public virtual Availability Availability { get; set; } + [DisplayFormat(ConvertEmptyStringToNull = true, NullDisplayText = "[Pas d'emploi du temps spécifié]")] + [Display(Name="Emploi du temps")] + public virtual Schedule Schedule { get; set; } [Display(Name="Coupe femme cheveux longs"),DisplayFormat(DataFormatString="{0:C}")] diff --git a/Yavsc/Models/HairCut/Views/HaircutQueryInfo.cs b/Yavsc/Models/HairCut/Views/HaircutQueryInfo.cs index 0b3b7f48..8f53355a 100644 --- a/Yavsc/Models/HairCut/Views/HaircutQueryInfo.cs +++ b/Yavsc/Models/HairCut/Views/HaircutQueryInfo.cs @@ -1,3 +1,25 @@ + +// +// HaircutQueryInfo.cs +// +// Author: +// Paul Schneider +// +// Copyright (c) 2015 - 2017 Paul Schneider +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this program. If not, see . + using System; using System.ComponentModel.DataAnnotations; using Yavsc.Models.Auth; diff --git a/Yavsc/GoogleApis/CalendarApi.cs b/Yavsc/Services/GoogleApis/CalendarManager.cs similarity index 61% rename from Yavsc/GoogleApis/CalendarApi.cs rename to Yavsc/Services/GoogleApis/CalendarManager.cs index 4d3347f5..f05a4271 100644 --- a/Yavsc/GoogleApis/CalendarApi.cs +++ b/Yavsc/Services/GoogleApis/CalendarManager.cs @@ -1,10 +1,10 @@ // -// Calendar.cs +// CalendarApi.cs // // Author: // Paul Schneider // -// Copyright (c) 2015 Paul Schneider +// Copyright (c) 2015 - 2017 Paul Schneider // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by @@ -23,24 +23,46 @@ using System; using System.Net; using System.IO; using System.Web; -using Yavsc.Models.Google; using Yavsc.Models.Auth; using Newtonsoft.Json; -namespace Yavsc.GoogleApis +namespace Yavsc.Models.Google.Calendar { - /// - /// Google Calendar API client. - /// - public class CalendarApi + using System.Threading.Tasks; + using Microsoft.AspNet.Identity; + using Microsoft.Extensions.Logging; + using Microsoft.Extensions.OptionsModel; + using Models.Google; + using Yavsc.Helpers; + using Yavsc.Models.Calendar; + using Yavsc.ViewModels.Calendar; + + + + /// + /// Google Calendar API client. + /// + public class CalendarManager : ICalendarManager { - protected static string scopeCalendar = "https://www.googleapis.com/auth/calendar"; + // protected static string scopeCalendar = "https://www.googleapis.com/auth/calendar"; private string _ApiKey; - public CalendarApi(string ApiKey) + private readonly UserManager _userManager; + + ApplicationDbContext _dbContext; + ILogger _logger; + + public CalendarManager(IOptions settings, + UserManager userManager, + ApplicationDbContext dbContext, + ILoggerFactory loggerFactory) { - _ApiKey = ApiKey; + _ApiKey = settings.Value.ApiKey; + _userManager = userManager; + _dbContext = dbContext; + _logger = loggerFactory.CreateLogger(); } + /// /// The get cal list URI. /// @@ -65,8 +87,10 @@ namespace Yavsc.GoogleApis /// /// The calendars. /// Cred. - public CalendarList GetCalendars (UserCredential creds) + public async Task GetCalendarsAsync (string userId) { + UserCredential creds = await _userManager.GetCredentialForGoogleApiAsync( + _dbContext, userId); if (creds==null) throw new InvalidOperationException("No credential"); CalendarList res = null; @@ -95,8 +119,12 @@ namespace Yavsc.GoogleApis /// Mindate. /// Maxdate. /// credential string. - public CalendarEventList GetCalendar (string calid, DateTime mindate, DateTime maxdate,string cred) + public async Task GetCalendarAsync (string calid, DateTime mindate, DateTime maxdate,string userId) { + UserCredential creds = await _userManager.GetCredentialForGoogleApiAsync( + _dbContext, userId); + if (creds==null) + throw new InvalidOperationException("No credential"); if (string.IsNullOrWhiteSpace (calid)) throw new Exception ("the calendar identifier is not specified"); @@ -108,16 +136,18 @@ namespace Yavsc.GoogleApis HttpWebRequest webreq = WebRequest.CreateHttp (uri); - webreq.Headers.Add (HttpRequestHeader.Authorization, cred); + webreq.Headers.Add (HttpRequestHeader.Authorization, creds.GetHeader()); webreq.Method = "GET"; webreq.ContentType = "application/http"; CalendarEventList res = null; try { - using (WebResponse resp = webreq.GetResponse ()) { + using (WebResponse resp = await webreq.GetResponseAsync ()) { using (Stream respstream = resp.GetResponseStream ()) { try { using (var rdr = new StreamReader(respstream)) { - res= JsonConvert.DeserializeObject(rdr.ReadToEnd()); + string json = rdr.ReadToEnd(); + _logger.LogVerbose(">> Calendar: "+json); + res= JsonConvert.DeserializeObject(json); } } catch (Exception ) { respstream.Close (); @@ -135,6 +165,18 @@ namespace Yavsc.GoogleApis webreq.Abort (); return res; } - + public async Task CreateViewModel( + string inputId, + string calid, DateTime mindate, DateTime maxdate, string userId) + { + var eventList = await GetCalendarAsync(calid, mindate, maxdate, userId); + + return new DateTimeChooserViewModel { + InputId = inputId, + MinDate = mindate, + MaxDate = maxdate, + DisabledTimeIntervals = null + }; + } } } diff --git a/Yavsc/GoogleApis/MapTracks.cs b/Yavsc/Services/GoogleApis/MapTracks.cs similarity index 99% rename from Yavsc/GoogleApis/MapTracks.cs rename to Yavsc/Services/GoogleApis/MapTracks.cs index 9ce21ad6..1bc7abd2 100644 --- a/Yavsc/GoogleApis/MapTracks.cs +++ b/Yavsc/Services/GoogleApis/MapTracks.cs @@ -1,5 +1,5 @@ // -// Google.cs +// MapTracks.cs // // Author: // Paul Schneider diff --git a/Yavsc/GoogleApis/PeopleApi.cs b/Yavsc/Services/GoogleApis/PeopleApi.cs similarity index 100% rename from Yavsc/GoogleApis/PeopleApi.cs rename to Yavsc/Services/GoogleApis/PeopleApi.cs diff --git a/Yavsc/Models/Calendar/ICalendarManager.cs b/Yavsc/Services/ICalendarManager.cs similarity index 58% rename from Yavsc/Models/Calendar/ICalendarManager.cs rename to Yavsc/Services/ICalendarManager.cs index cf60bd13..cf1f74ed 100644 --- a/Yavsc/Models/Calendar/ICalendarManager.cs +++ b/Yavsc/Services/ICalendarManager.cs @@ -21,26 +21,19 @@ +using System; + namespace Yavsc.Models.Calendar { - using Models.Workflow; - using Models.Messaging; - /// - /// I calendar manager. - /// - public interface ICalendarManager { - /// - /// Gets the free dates. - /// - /// The free dates. - /// Username. - /// Req. - IFreeDateSet GetFreeDates(string username, RdvQuery req); - /// - /// Book the specified username and ev. - /// - /// Username. - /// Ev. - bool Book(string username, YaEvent ev); + using System.Threading.Tasks; + using Yavsc.Models.Google.Calendar; + using Yavsc.Models.Google; + + /// + /// I calendar manager. + /// + public interface ICalendarManager { + Task GetCalendarsAsync (string userId); + Task GetCalendarAsync (string calid, DateTime mindate, DateTime maxdate, string userId); } } diff --git a/Yavsc/Settings/GoogleAuthSettings.cs b/Yavsc/Settings/GoogleAuthSettings.cs index 036f02d7..462fa8cb 100644 --- a/Yavsc/Settings/GoogleAuthSettings.cs +++ b/Yavsc/Settings/GoogleAuthSettings.cs @@ -1,5 +1,6 @@ -namespace Yavsc + +namespace Yavsc { public class GoogleAuthSettings { @@ -7,5 +8,19 @@ namespace Yavsc public string ClientSecret { get; set; } public string ClientId { get; set; } public string BrowserApiKey { get; set; } + public class ServiceAccount + { + public string project_id { get; set; } + public string private_key_id { get; set; } + public string private_key { get; set; } + public string client_email { get; set; } + public string client_id { get; set; } + public string auth_uri { get; set; } + public string token_uri { get; set; } + public string auth_provider_x509_cert_url { get; set; } + public string client_x509_cert_url { get; set; } + + } + public ServiceAccount Account { get; set; } } } \ No newline at end of file diff --git a/Yavsc/Startup/Startup.OAuth.cs b/Yavsc/Startup/Startup.OAuth.cs index a8ee5db4..ec4afe32 100644 --- a/Yavsc/Startup/Startup.OAuth.cs +++ b/Yavsc/Startup/Startup.OAuth.cs @@ -86,8 +86,10 @@ namespace Yavsc // .AddTokenProvider(Constants.AppFactor) // } - private void ConfigureOAuthApp(IApplicationBuilder app, SiteSettings settings) + private void ConfigureOAuthApp(IApplicationBuilder app, + SiteSettings settingsOptions) { + app.UseIdentity(); app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), branch => @@ -128,6 +130,9 @@ namespace Yavsc ClientId = Configuration["Authentication:Google:ClientId"], ClientSecret = Configuration["Authentication:Google:ClientSecret"], AccessType = "offline", + Scope = { "profile", "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/admin.directory.resource.calendar", + "https://www.googleapis.com/auth/calendar" }, SaveTokensAsClaims = true, UserInformationEndpoint = "https://www.googleapis.com/plus/v1/people/me", Events = new OAuthEvents @@ -146,19 +151,10 @@ namespace Yavsc } } }; - YavscGoogleAppOptions.Scope.Add("https://www.googleapis.com/auth/calendar"); + branch.UseMiddleware(YavscGoogleAppOptions); - // Facebook - branch.UseFacebookAuthentication(options => - { - FacebookAppOptions = options; - options.AppId = Configuration["Authentication:Facebook:ClientId"]; - options.AppSecret = Configuration["Authentication:Facebook:ClientSecret"]; - options.Scope.Add("email"); - options.UserInformationEndpoint = "https://graph.facebook.com/v2.5/me?fields=id,name,email,first_name,last_name"; - }); - + branch.UseTwitterAuthentication(options=> { TwitterAppOptions = options; diff --git a/Yavsc/Startup/Startup.cs b/Yavsc/Startup/Startup.cs index 2cc8ce61..d44bc3af 100755 --- a/Yavsc/Startup/Startup.cs +++ b/Yavsc/Startup/Startup.cs @@ -32,6 +32,9 @@ namespace Yavsc using PayPal.Manager; using Services; using ViewModels.Auth.Handlers; + using Yavsc.Models.Calendar; + using Yavsc.Models.Google.Calendar; + public partial class Startup { public static string ConnectionString { get; private set; } @@ -226,9 +229,9 @@ namespace Yavsc // Add application services. services.AddTransient(); services.AddTransient(); - services.AddTransient((servs) => - new BillingService(servs.GetRequiredService(), servs.GetService()) - ); + services.AddTransient(); + services.AddTransient(); + // TODO for SMS: services.AddTransient(); services.AddLocalization(options => diff --git a/Yavsc/ViewComponents/CalendarViewComponent.cs b/Yavsc/ViewComponents/CalendarViewComponent.cs new file mode 100644 index 00000000..f015a547 --- /dev/null +++ b/Yavsc/ViewComponents/CalendarViewComponent.cs @@ -0,0 +1,51 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNet.Mvc; +using Yavsc.Models; +using Yavsc.Models.Calendar; +using Yavsc.ViewModels.Calendar; + +namespace Yavsc.ViewComponents +{ + public class CalendarViewComponent : ViewComponent + { + ApplicationDbContext _dbContext; + ICalendarManager _manager; + + public CalendarViewComponent ( + ApplicationDbContext dbContext, + ICalendarManager manager) + { + _manager = manager; + _dbContext = dbContext; + } +/* , +Google.Apis Google.Apis.Core + "Google.Apis.Auth": "1.27.1", + "Google.Apis.Calendar.v3": "1.27.1.878" + + */ + + + public async Task InvokeAsync ( + string templateName, + string htmlFieldName, + string userId, string calId ) + { + var minDate = DateTime.Now; + var maxDate = minDate.AddDays(20); + + var cal = await _manager.GetCalendarAsync( + calId, minDate, maxDate, userId + ); + + ViewData["Calendar"] = cal; + + return View(templateName, new DateTimeChooserViewModel { + InputId = htmlFieldName, + MinDate = minDate, + MaxDate = maxDate + }); + } + } +} \ No newline at end of file diff --git a/Yavsc/ViewModels/Calendar/DateTimeChooserViewModel.cs b/Yavsc/ViewModels/Calendar/DateTimeChooserViewModel.cs new file mode 100644 index 00000000..87d29b77 --- /dev/null +++ b/Yavsc/ViewModels/Calendar/DateTimeChooserViewModel.cs @@ -0,0 +1,14 @@ +using System; +using Yavsc.Models.Calendar; + + +namespace Yavsc.ViewModels.Calendar +{ + public class DateTimeChooserViewModel + { + public string InputId { get; set; } + public DateTime MinDate { get; set; } + public DateTime MaxDate { get; set; } + public Period [] DisabledTimeIntervals { get; set; } + } +} diff --git a/Yavsc/ViewModels/Calendar/UpcomingEventsViewModel.cs b/Yavsc/ViewModels/Calendar/UpcomingEventsViewModel.cs index ea3038bf..00524963 100644 --- a/Yavsc/ViewModels/Calendar/UpcomingEventsViewModel.cs +++ b/Yavsc/ViewModels/Calendar/UpcomingEventsViewModel.cs @@ -1,7 +1,7 @@ namespace Yavsc.ViewModels.Calendar { public class UpcomingEventsViewModel { - + } } \ No newline at end of file diff --git a/Yavsc/Views/BrusherProfile/Index.cshtml b/Yavsc/Views/BrusherProfile/Index.cshtml index 004e67d4..0035ef8c 100644 --- a/Yavsc/Views/BrusherProfile/Index.cshtml +++ b/Yavsc/Views/BrusherProfile/Index.cshtml @@ -15,10 +15,10 @@
- @Html.DisplayNameFor(model => model.Availability) + @Html.DisplayNameFor(model => model.Schedule)
- @Html.DisplayFor(model => model.Availability) + @Html.DisplayFor(model => model.Schedule)
@Html.DisplayNameFor(model => model.ActionDistance) diff --git a/Yavsc/Views/HairCutCommand/HairCut.cshtml b/Yavsc/Views/HairCutCommand/HairCut.cshtml index 9ab96045..7da4e16c 100644 --- a/Yavsc/Views/HairCutCommand/HairCut.cshtml +++ b/Yavsc/Views/HairCutCommand/HairCut.cshtml @@ -156,11 +156,6 @@ + diff --git a/Yavsc/Views/_ViewImports.cshtml b/Yavsc/Views/_ViewImports.cshtml index 4b2f68f3..ae05c24c 100755 --- a/Yavsc/Views/_ViewImports.cshtml +++ b/Yavsc/Views/_ViewImports.cshtml @@ -24,6 +24,7 @@ @using Yavsc.Models.Haircut; @using Yavsc.Models.Payment; @using Yavsc.Models.Calendar; +@using Yavsc.Models.Google.Calendar @using Yavsc.Billing; @using Yavsc.ViewModels; @@ -48,3 +49,4 @@ @inject IOptions GoogleSettings @inject IOptions SiteSettings @inject IHostingEnvironment HostingEnvironment +@inject ICalendarManager CalendarManager; diff --git a/Yavsc/project.json b/Yavsc/project.json index 195fa7c1..31dee38d 100755 --- a/Yavsc/project.json +++ b/Yavsc/project.json @@ -1,169 +1,167 @@ { - "version": "1.0.0-*", - "authors": [ - "Paul Schneider" - ], - "tags": [ - "Blog", - "PoS", - "Chat" - ], - "projectUrl": "http://yavsc.pschneider.fr", - "licenseUrl": "", - "userSecretsId": "aspnet5-YavscWeb-a0dadd21-2ced-43d3-96f9-7e504345102f", - "compilationOptions": { + "version": "1.0.0-*", + "authors": [ + "Paul Schneider" + ], + "tags": [ + "Blog", + "PoS", + "Chat" + ], + "projectUrl": "http://yavsc.pschneider.fr", + "licenseUrl": "", + "userSecretsId": "aspnet5-YavscWeb-a0dadd21-2ced-43d3-96f9-7e504345102f", + "compilationOptions": { + "emitEntryPoint": true, + "debugType": "portable", + "outputName": "Yavsc" + }, + "buildOptions": { + "debugType": "portable", + "emitEntryPoint": true + }, + "compile": [ + "*.cs" + ], + "resource": [ + "Resources/**/*.resx" + ], + "namedResource": {}, + "configurations": { + "Debug": { + "compilationOptions": { "emitEntryPoint": true, - "debugType": "portable", - "outputName": "Yavsc" + "define": [ + "DEBUG", + "TRACE" + ], + "optimize": false, + "debugType": "portable" + } }, - "buildOptions": { - "debugType": "portable", - "emitEntryPoint": true + "Release": { + "compilationOptions": { + "define": [ + "RELEASE", + "TRACE" + ], + "optimize": true + } + } + }, + "webroot": "wwwroot", + "tooling": { + "defaultNamespace": "Yavsc" + }, + "dependencies": { + "EntityFramework.Commands": "7.0.0-rc1-final", + "EntityFramework.Core": "7.0.0-rc1-final", + "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final", + "EntityFramework.Relational": "7.0.0-rc1-final", + "EntityFramework7.Npgsql": "3.1.0-rc1-3", + "EntityFramework7.Npgsql.Design": "3.1.0-rc1-5", + "MailKit": "1.12.0", + "MarkdownDeep-av.NET": "1.5.6", + "Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final", + "Microsoft.AspNet.Authentication.Facebook": "1.0.0-rc1-final", + "Microsoft.AspNet.Authentication.Twitter": "1.0.0-rc1-final", + "Microsoft.AspNet.Authorization": "1.0.0-rc1-final", + "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final", + "Microsoft.AspNet.Http.Abstractions": "1.0.0-rc1-final", + "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-*", + "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-*", + "Microsoft.AspNet.Localization": "1.0.0-rc1-final", + "Microsoft.AspNet.Mvc": "6.0.0-rc1-*", + "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-*", + "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final", + "Microsoft.AspNet.Server.WebListener": "1.0.0-rc1-final", + "Microsoft.AspNet.SignalR.Core": "2.2.1", + "Microsoft.AspNet.SignalR.JS": "2.2.1", + "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-*", + "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-*", + "Microsoft.AspNet.WebSockets.Server": "1.0.0-rc1-*", + "Microsoft.Extensions.Configuration.Abstractions": "1.0.0-rc1-final", + "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final", + "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final", + "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final", + "Microsoft.Extensions.Logging": "1.0.0-rc1-final", + "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final", + "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final", + "Microsoft.Extensions.Logging.TraceSource": "1.0.0-rc1-final", + "Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.0-rc1-final", + "Microsoft.Extensions.Globalization.CultureInfoCache": "1.0.0-rc1-final", + "Microsoft.Extensions.Localization": "1.0.0-rc1-final", + "Microsoft.Extensions.Localization.Abstractions": "1.0.0-rc1-final", + "Microsoft.Extensions.CodeGeneration": "1.0.0-rc1-final", + "Microsoft.Extensions.PlatformAbstractions": "1.0.0-rc1-final", + "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final", + "Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta4", + "Microsoft.Framework.Configuration.Abstractions": "1.0.0-beta8", + "Microsoft.Framework.Configuration.Binder": "1.0.0-beta8", + "Microsoft.Framework.Configuration.Json": "1.0.0-beta8", + "Microsoft.AspNet.Session": "1.0.0-rc1-final", + "Microsoft.AspNet.Web.Optimization": "1.1.3", + "Microsoft.Extensions.WebEncoders.Core": "1.0.0-rc1-final", + "Microsoft.Extensions.Options": "0.0.1-alpha", + "Microsoft.Extensions.WebEncoders": "1.0.0-rc1-final", + "Microsoft.AspNet.DataProtection": "1.0.0-rc1-final", + "Microsoft.AspNet.DataProtection.SystemWeb": "1.0.0-rc1-final", + "Microsoft.AspNet.Authentication.JwtBearer": "1.0.0-rc1-final", + "Microsoft.AspNet.Authentication.OAuth": "1.0.0-rc1-final", + "Microsoft.AspNet.Mvc.Formatters.Json": "6.0.0-rc1-final", + "Microsoft.AspNet.OWin": "1.0.0-rc1-final", + "System.Json": "4.0.20126.16343", + "Yavsc.Abstract": { + "type": "build", + "version": "1.0.0" }, - "compile": [ - "*.cs" - ], - "resource": [ - "Resources/**/*.resx" - ], - "namedResource": {}, - "configurations": { - "Debug": { - "compilationOptions": { - "emitEntryPoint": true, - "define": [ - "DEBUG", - "TRACE" - ], - "optimize": false, - "debugType": "portable" - } - }, - "Release": { - "compilationOptions": { - "define": [ - "RELEASE", - "TRACE" - ], - "optimize": true - } - } - }, - "webroot": "wwwroot", - "tooling": { - "defaultNamespace": "Yavsc" - }, - "dependencies": { - "EntityFramework.Commands": "7.0.0-rc1-final", - "EntityFramework.Core": "7.0.0-rc1-final", - "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final", - "EntityFramework.Relational": "7.0.0-rc1-final", - "EntityFramework7.Npgsql": "3.1.0-rc1-3", - "EntityFramework7.Npgsql.Design": "3.1.0-rc1-5", - "Google.Apis.Core": "1.11.1", - "Google.Apis": "1.11.1", - "MailKit": "1.12.0", - "MarkdownDeep-av.NET": "1.5.6", - "Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final", - "Microsoft.AspNet.Authentication.Facebook": "1.0.0-rc1-final", - "Microsoft.AspNet.Authentication.Twitter": "1.0.0-rc1-final", - "Microsoft.AspNet.Authorization": "1.0.0-rc1-final", - "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final", - "Microsoft.AspNet.Http.Abstractions": "1.0.0-rc1-final", - "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-*", - "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-*", - "Microsoft.AspNet.Localization": "1.0.0-rc1-final", - "Microsoft.AspNet.Mvc": "6.0.0-rc1-*", - "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-*", - "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final", - "Microsoft.AspNet.Server.WebListener": "1.0.0-rc1-final", - "Microsoft.AspNet.SignalR.Core": "2.2.1", - "Microsoft.AspNet.SignalR.JS": "2.2.1", - "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-*", - "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-*", - "Microsoft.AspNet.WebSockets.Server": "1.0.0-rc1-*", - "Microsoft.Extensions.Configuration.Abstractions": "1.0.0-rc1-final", - "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final", - "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final", - "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final", - "Microsoft.Extensions.Logging": "1.0.0-rc1-final", - "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final", - "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final", - "Microsoft.Extensions.Logging.TraceSource": "1.0.0-rc1-final", - "Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.0-rc1-final", - "Microsoft.Extensions.Globalization.CultureInfoCache": "1.0.0-rc1-final", - "Microsoft.Extensions.Localization": "1.0.0-rc1-final", - "Microsoft.Extensions.Localization.Abstractions": "1.0.0-rc1-final", - "Microsoft.Extensions.CodeGeneration": "1.0.0-rc1-final", - "Microsoft.Extensions.PlatformAbstractions": "1.0.0-rc1-final", - "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final", - "Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta4", - "Microsoft.Framework.Configuration.Abstractions": "1.0.0-beta8", - "Microsoft.Framework.Configuration.Binder": "1.0.0-beta8", - "Microsoft.Framework.Configuration.Json": "1.0.0-beta8", - "Microsoft.AspNet.Session": "1.0.0-rc1-final", - "Microsoft.AspNet.Web.Optimization": "1.1.3", - "Microsoft.Extensions.WebEncoders.Core": "1.0.0-rc1-final", - "Microsoft.Extensions.Options": "0.0.1-alpha", - "Microsoft.Extensions.WebEncoders": "1.0.0-rc1-final", - "Microsoft.AspNet.DataProtection": "1.0.0-rc1-final", - "Microsoft.AspNet.DataProtection.SystemWeb": "1.0.0-rc1-final", - "Microsoft.AspNet.Authentication.JwtBearer": "1.0.0-rc1-final", - "Microsoft.AspNet.Authentication.OAuth": "1.0.0-rc1-final", - "Microsoft.AspNet.Mvc.Formatters.Json": "6.0.0-rc1-final", - "Microsoft.AspNet.OWin": "1.0.0-rc1-final", - "System.Json": "4.0.20126.16343", - "Yavsc.Abstract": { - "type": "build", - "version": "1.0.0" - }, - "Extensions.AspNet.Authentication.Instagram": "1.0.0-t150809211713", - "Microsoft.AspNet.Http.Extensions": "1.0.0-rc1-final", - "Microsoft.DiaSymReader.Native": "1.5.0", - "PayPalMerchant-net451": "2.7.109" - }, - "commands": { - "web": "Microsoft.AspNet.Server.Kestrel --server.urls http://*:5000", - "coiffure": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:88", - "lua": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:85", - "luatest": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:5001", - "kestrel": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:5000", - "zicmoove": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:87", - "yavsc": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:86", - "yavscpre": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:84", - "ef": "EntityFramework.Commands", - "gen": "Microsoft.Extensions.CodeGeneration" - }, - "frameworks": { - "dnx451": { - "frameworkAssemblies": { - "System.Drawing": "4.0.0.0", - "System.Net": "4.0.0.0", - "System.Xml": "4.0.0.0", - "System": "4.0.0.0" - } - } - }, - "exclude": [ - "wwwroot", - "node_modules", - "bower_components", - "contrib" - ], - "publishExclude": [ - "**.user", - "**.vspscc", - "contrib/**/*.*" - ], - "scripts": { - "prebuild": "echo before building", - "postbuild": "echo after building", - "prepack": "gulp min", - "postpack": "echo after packing", - "prerestore": "echo before restoring packages", - "postrestore": "echo after restoring packages", - "prepublish": "gulp min", - "postpublish": "echo after publish" - }, - "embed": "Views/**/*.cshtml" -} \ No newline at end of file + "Extensions.AspNet.Authentication.Instagram": "1.0.0-t150809211713", + "Microsoft.AspNet.Http.Extensions": "1.0.0-rc1-final", + "Microsoft.DiaSymReader.Native": "1.5.0", + "PayPalMerchant-net451": "2.7.109" + }, + "commands": { + "web": "Microsoft.AspNet.Server.Kestrel --server.urls http://*:5000", + "coiffure": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:88", + "lua": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:85", + "luatest": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:5001", + "kestrel": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:5000", + "zicmoove": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:87", + "yavsc": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:86", + "yavscpre": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.Kestrel --server.urls http://*:84", + "ef": "EntityFramework.Commands", + "gen": "Microsoft.Extensions.CodeGeneration" + }, + "frameworks": { + "dnx451": { + "frameworkAssemblies": { + "System.Drawing": "4.0.0.0", + "System.Net": "4.0.0.0", + "System.Xml": "4.0.0.0", + "System": "4.0.0.0" + } + } + }, + "exclude": [ + "wwwroot", + "node_modules", + "bower_components", + "contrib" + ], + "publishExclude": [ + "**.user", + "**.vspscc", + "contrib/**/*.*" + ], + "scripts": { + "prebuild": "echo before building", + "postbuild": "echo after building", + "prepack": "gulp min", + "postpack": "echo after packing", + "prerestore": "echo before restoring packages", + "postrestore": "echo after restoring packages", + "prepublish": "gulp min", + "postpublish": "echo after publish" + }, + "embed": "Views/**/*.cshtml" +} diff --git a/Yavsc/project.lock.json b/Yavsc/project.lock.json index b1fb57b0..80f3e6b2 100644 --- a/Yavsc/project.lock.json +++ b/Yavsc/project.lock.json @@ -218,34 +218,6 @@ "lib/dnx451/Extensions.AspNet.Authentication.Instagram.dll": {} } }, - "Google.Apis/1.11.1": { - "type": "package", - "dependencies": { - "Google.Apis.Core": "1.11.1", - "log4net": "2.0.3", - "Zlib.Portable.Signed": "1.11.0" - }, - "compile": { - "lib/net45/Google.Apis.dll": {}, - "lib/net45/Google.Apis.PlatformServices.dll": {} - }, - "runtime": { - "lib/net45/Google.Apis.dll": {}, - "lib/net45/Google.Apis.PlatformServices.dll": {} - } - }, - "Google.Apis.Core/1.11.1": { - "type": "package", - "dependencies": { - "Newtonsoft.Json": "7.0.1" - }, - "compile": { - "lib/net45/Google.Apis.Core.dll": {} - }, - "runtime": { - "lib/net45/Google.Apis.Core.dll": {} - } - }, "Ix-Async/1.2.5": { "type": "package", "frameworkAssemblies": [ @@ -262,15 +234,6 @@ "jQuery/1.6.4": { "type": "package" }, - "log4net/2.0.3": { - "type": "package", - "compile": { - "lib/net40-full/log4net.dll": {} - }, - "runtime": { - "lib/net40-full/log4net.dll": {} - } - }, "MailKit/1.12.0": { "type": "package", "dependencies": { @@ -2860,15 +2823,6 @@ "frameworkAssemblies": [ "System.ComponentModel.DataAnnotations" ] - }, - "Zlib.Portable.Signed/1.11.0": { - "type": "package", - "compile": { - "lib/portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid/Zlib.Portable.dll": {} - }, - "runtime": { - "lib/portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid/Zlib.Portable.dll": {} - } } }, "DNX,Version=v4.5.1/debian.8-x86": { @@ -3087,34 +3041,6 @@ "lib/dnx451/Extensions.AspNet.Authentication.Instagram.dll": {} } }, - "Google.Apis/1.11.1": { - "type": "package", - "dependencies": { - "Google.Apis.Core": "1.11.1", - "log4net": "2.0.3", - "Zlib.Portable.Signed": "1.11.0" - }, - "compile": { - "lib/net45/Google.Apis.dll": {}, - "lib/net45/Google.Apis.PlatformServices.dll": {} - }, - "runtime": { - "lib/net45/Google.Apis.dll": {}, - "lib/net45/Google.Apis.PlatformServices.dll": {} - } - }, - "Google.Apis.Core/1.11.1": { - "type": "package", - "dependencies": { - "Newtonsoft.Json": "7.0.1" - }, - "compile": { - "lib/net45/Google.Apis.Core.dll": {} - }, - "runtime": { - "lib/net45/Google.Apis.Core.dll": {} - } - }, "Ix-Async/1.2.5": { "type": "package", "frameworkAssemblies": [ @@ -3131,15 +3057,6 @@ "jQuery/1.6.4": { "type": "package" }, - "log4net/2.0.3": { - "type": "package", - "compile": { - "lib/net40-full/log4net.dll": {} - }, - "runtime": { - "lib/net40-full/log4net.dll": {} - } - }, "MailKit/1.12.0": { "type": "package", "dependencies": { @@ -5729,15 +5646,6 @@ "frameworkAssemblies": [ "System.ComponentModel.DataAnnotations" ] - }, - "Zlib.Portable.Signed/1.11.0": { - "type": "package", - "compile": { - "lib/portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid/Zlib.Portable.dll": {} - }, - "runtime": { - "lib/portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid/Zlib.Portable.dll": {} - } } }, "DNX,Version=v4.5.1/debian.8-x64": { @@ -5956,34 +5864,6 @@ "lib/dnx451/Extensions.AspNet.Authentication.Instagram.dll": {} } }, - "Google.Apis/1.11.1": { - "type": "package", - "dependencies": { - "Google.Apis.Core": "1.11.1", - "log4net": "2.0.3", - "Zlib.Portable.Signed": "1.11.0" - }, - "compile": { - "lib/net45/Google.Apis.dll": {}, - "lib/net45/Google.Apis.PlatformServices.dll": {} - }, - "runtime": { - "lib/net45/Google.Apis.dll": {}, - "lib/net45/Google.Apis.PlatformServices.dll": {} - } - }, - "Google.Apis.Core/1.11.1": { - "type": "package", - "dependencies": { - "Newtonsoft.Json": "7.0.1" - }, - "compile": { - "lib/net45/Google.Apis.Core.dll": {} - }, - "runtime": { - "lib/net45/Google.Apis.Core.dll": {} - } - }, "Ix-Async/1.2.5": { "type": "package", "frameworkAssemblies": [ @@ -6000,15 +5880,6 @@ "jQuery/1.6.4": { "type": "package" }, - "log4net/2.0.3": { - "type": "package", - "compile": { - "lib/net40-full/log4net.dll": {} - }, - "runtime": { - "lib/net40-full/log4net.dll": {} - } - }, "MailKit/1.12.0": { "type": "package", "dependencies": { @@ -8598,15 +8469,6 @@ "frameworkAssemblies": [ "System.ComponentModel.DataAnnotations" ] - }, - "Zlib.Portable.Signed/1.11.0": { - "type": "package", - "compile": { - "lib/portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid/Zlib.Portable.dll": {} - }, - "runtime": { - "lib/portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid/Zlib.Portable.dll": {} - } } } }, @@ -8771,59 +8633,6 @@ "repo.json" ] }, - "Google.Apis/1.11.1": { - "type": "package", - "sha512": "GyWdeflVhu01TYh/KOoMceFYy4rc3+uGKFFw17PpABfdRM1wqCiO73asytkcMGUS91GjPwcONZF5UIjDKpeUSQ==", - "files": [ - "Google.Apis.1.11.1.nupkg", - "Google.Apis.1.11.1.nupkg.sha512", - "Google.Apis.nuspec", - "lib/net45/Google.Apis.dll", - "lib/net45/Google.Apis.pdb", - "lib/net45/Google.Apis.PlatformServices.dll", - "lib/net45/Google.Apis.PlatformServices.pdb", - "lib/net45/Google.Apis.PlatformServices.xml", - "lib/net45/Google.Apis.xml", - "lib/portable-net45+sl50+netcore45+wpa81+wp8/Google.Apis.dll", - "lib/portable-net45+sl50+netcore45+wpa81+wp8/Google.Apis.pdb", - "lib/portable-net45+sl50+netcore45+wpa81+wp8/Google.Apis.xml", - "lib/win81/Google.Apis.dll", - "lib/win81/Google.Apis.pdb", - "lib/win81/Google.Apis.PlatformServices.dll", - "lib/win81/Google.Apis.PlatformServices.pdb", - "lib/win81/Google.Apis.PlatformServices.xml", - "lib/win81/Google.Apis.xml", - "lib/wp8/Google.Apis.dll", - "lib/wp8/Google.Apis.pdb", - "lib/wp8/Google.Apis.PlatformServices.dll", - "lib/wp8/Google.Apis.PlatformServices.pdb", - "lib/wp8/Google.Apis.PlatformServices.xml", - "lib/wp8/Google.Apis.xml", - "lib/wpa81/Google.Apis.dll", - "lib/wpa81/Google.Apis.pdb", - "lib/wpa81/Google.Apis.PlatformServices.dll", - "lib/wpa81/Google.Apis.PlatformServices.pdb", - "lib/wpa81/Google.Apis.PlatformServices.xml", - "lib/wpa81/Google.Apis.xml", - "License.txt" - ] - }, - "Google.Apis.Core/1.11.1": { - "type": "package", - "sha512": "0Vg/D4BhfPFrlp5iPmp2WxTm3TpgQuwsd9jiYoVXhnbecTnVhRNqY0sJTK8yoMm+otuJ4Dt1C7KSeQ0yWA1d/g==", - "files": [ - "Google.Apis.Core.1.11.1.nupkg", - "Google.Apis.Core.1.11.1.nupkg.sha512", - "Google.Apis.Core.nuspec", - "lib/net45/Google.Apis.Core.dll", - "lib/net45/Google.Apis.Core.pdb", - "lib/net45/Google.Apis.Core.xml", - "lib/portable-net45+sl50+netcore45+wpa81+wp8/Google.Apis.Core.dll", - "lib/portable-net45+sl50+netcore45+wpa81+wp8/Google.Apis.Core.pdb", - "lib/portable-net45+sl50+netcore45+wpa81+wp8/Google.Apis.Core.xml", - "License.txt" - ] - }, "Ix-Async/1.2.5": { "type": "package", "sha512": "8EXO8q7cpDUH9G2q+UOPOO/6uZ9aN7mx/4xjFIfkp+qLWVJiYuglkRhjY8Ggs2CucXzHR8GHnovJKB5yQoYaJg==", @@ -8854,29 +8663,6 @@ "Tools/uninstall.ps1" ] }, - "log4net/2.0.3": { - "type": "package", - "sha512": "rxMHzK5efGPo5XtRnuUGO4tfW5l74Aji6kVmtMAt2SgcB5PHBNtNY7yj2LCI2VtKrLPO7kCKR6kH6lIZggq3Gg==", - "files": [ - "lib/net10-full/log4net.dll", - "lib/net10-full/log4net.xml", - "lib/net11-full/log4net.dll", - "lib/net11-full/log4net.xml", - "lib/net20-full/log4net.dll", - "lib/net20-full/log4net.xml", - "lib/net35-client/log4net.dll", - "lib/net35-client/log4net.xml", - "lib/net35-full/log4net.dll", - "lib/net35-full/log4net.xml", - "lib/net40-client/log4net.dll", - "lib/net40-client/log4net.xml", - "lib/net40-full/log4net.dll", - "lib/net40-full/log4net.xml", - "log4net.2.0.3.nupkg", - "log4net.2.0.3.nupkg.sha512", - "log4net.nuspec" - ] - }, "MailKit/1.12.0": { "type": "package", "sha512": "6h6PkKAuMSaTEjXMVSgBqqMrhcRgtBfFwJwA0qxqpQ32IvtG4v2vphB3IBRa3UjX4g1GaWRC+tHwivXGlZ0CtA==", @@ -11548,17 +11334,6 @@ "WebGrease.1.5.2.nupkg.sha512", "WebGrease.nuspec" ] - }, - "Zlib.Portable.Signed/1.11.0": { - "type": "package", - "sha512": "1f4itCxlSBxU8kf85qUmx1+d0iHKLeZK8S7ilb4w0t+uV+/xtOUUVOEAnFMG5uHVBc7L+ycZjWQoA+a1GZKYjg==", - "files": [ - "lib/portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid/Zlib.Portable.dll", - "lib/portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid/Zlib.Portable.xml", - "Zlib.Portable.Signed.1.11.0.nupkg", - "Zlib.Portable.Signed.1.11.0.nupkg.sha512", - "Zlib.Portable.Signed.nuspec" - ] } }, "projectFileDependencyGroups": { @@ -11569,8 +11344,6 @@ "EntityFramework.Relational >= 7.0.0-rc1-final", "EntityFramework7.Npgsql >= 3.1.0-rc1-3", "EntityFramework7.Npgsql.Design >= 3.1.0-rc1-5", - "Google.Apis.Core >= 1.11.1", - "Google.Apis >= 1.11.1", "MailKit >= 1.12.0", "MarkdownDeep-av.NET >= 1.5.6", "Microsoft.AspNet.Authentication.Cookies >= 1.0.0-rc1-final", diff --git a/Yavsc/wwwroot/images/yavsc.png b/Yavsc/wwwroot/images/yavsc.png new file mode 100644 index 0000000000000000000000000000000000000000..22466b449ffe7fb2a963f82af50d8b6156b7993c GIT binary patch literal 16040 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 0) {  @@ -29,7 +8,4 @@ .always(function() {}); } } - $(document).ready(function() { - $('input.Blogcirle[type=checkbox]').on('change', allowCircleToBlog); - }); })(jQuery); \ No newline at end of file