From d7cdf68a86a794e6be9b7680a442c06b97b8ecb7 Mon Sep 17 00:00:00 2001 From: tidusjar Date: Wed, 29 Apr 2020 22:19:17 +0100 Subject: [PATCH] Small changes to the DB migration --- .../OmbiMySql/20200218230644_MobileDevices.cs | 42 ++++++++++++++----- src/Ombi/Controllers/V2/MobileController.cs | 14 ++++++- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/src/Ombi.Store/Migrations/OmbiMySql/20200218230644_MobileDevices.cs b/src/Ombi.Store/Migrations/OmbiMySql/20200218230644_MobileDevices.cs index 9dabefc00..a18e28270 100644 --- a/src/Ombi.Store/Migrations/OmbiMySql/20200218230644_MobileDevices.cs +++ b/src/Ombi.Store/Migrations/OmbiMySql/20200218230644_MobileDevices.cs @@ -1,6 +1,6 @@ -using System; -using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; +using System; namespace Ombi.Store.Migrations.OmbiMySql { @@ -8,15 +8,35 @@ namespace Ombi.Store.Migrations.OmbiMySql { protected override void Up(MigrationBuilder migrationBuilder) { - migrationBuilder.Sql(@"CREATE TABLE `MobileDevices` ( - `Id` int NOT NULL AUTO_INCREMENT, - `Token` longtext CHARACTER SET utf8mb4 NULL, - `UserId` varchar(255) COLLATE utf8mb4_bin NOT NULL, - `AddedAt` datetime(6) NOT NULL, - CONSTRAINT `PK_MobileDevices` PRIMARY KEY (`Id`), - CONSTRAINT `FK_MobileDevices_AspNetUsers_UserId` FOREIGN KEY (`UserId`) REFERENCES `AspNetUsers` (`Id`) ON DELETE RESTRICT -);"); - +// migrationBuilder.Sql(@"CREATE TABLE `MobileDevices` ( +// `Id` int NOT NULL AUTO_INCREMENT, +// `Token` longtext CHARACTER SET utf8mb4 NULL, +// `UserId` varchar(255) COLLATE utf8mb4_bin NOT NULL, +// `AddedAt` datetime(6) NOT NULL, +// CONSTRAINT `PK_MobileDevices` PRIMARY KEY (`Id`), +// CONSTRAINT `FK_MobileDevices_AspNetUsers_UserId` FOREIGN KEY (`UserId`) REFERENCES `AspNetUsers` (`Id`) ON DELETE RESTRICT +//);"); + + migrationBuilder.CreateTable( + name: "MobileDevices", + columns: table => new + { + Id = table.Column(nullable: false).Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + Token = table.Column(maxLength: 256, nullable: true), + UserId = table.Column(maxLength: 256, nullable: false), + AddedAt = table.Column(maxLength: 256, nullable: false), + }, + constraints: table => + { + table.PrimaryKey("PK_MobileDevices", x => x.Id); + table.ForeignKey( + name: "FK_MobileDevices_AspNetUsers_UserId", + column: x => x.UserId, + principalTable: "AspNetUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Restrict); + }); + migrationBuilder.CreateIndex( name: "IX_MobileDevices_UserId", diff --git a/src/Ombi/Controllers/V2/MobileController.cs b/src/Ombi/Controllers/V2/MobileController.cs index 9ee33e857..09595b486 100644 --- a/src/Ombi/Controllers/V2/MobileController.cs +++ b/src/Ombi/Controllers/V2/MobileController.cs @@ -39,6 +39,10 @@ namespace Ombi.Controllers.V2 var username = User.Identity.Name.ToUpper(); var user = await _userManager.Users.FirstOrDefaultAsync(x => x.NormalizedUserName == username); + if (user == null) + { + return Ok(); + } // Check if we already have this notification id var alreadyExists = await _mobileDevices.GetAll().AnyAsync(x => x.Token == body.Token && x.UserId == user.Id); @@ -46,8 +50,14 @@ namespace Ombi.Controllers.V2 { return Ok(); } + // Ensure we don't have too many already for this user + var tokens = await _mobileDevices.GetAll().Where(x => x.UserId == user.Id).OrderBy(x => x.AddedAt).ToListAsync(); + if (tokens.Count() > 5) + { + var toDelete = tokens.Take(tokens.Count() - 5); + await _mobileDevices.DeleteRange(toDelete); + } - // let's add it await _mobileDevices.Add(new MobileDevices { Token = body.Token, @@ -77,7 +87,7 @@ namespace Ombi.Controllers.V2 } await _mobileDevices.DeleteRange(currentDevices); - + return Ok(); } }