Add files table.

This commit is contained in:
2020-08-21 23:32:44 +01:00
parent e7373d8bb1
commit ce6030c813
7 changed files with 276 additions and 27 deletions

View File

@@ -1,36 +1,30 @@
// /*************************************************************************** /******************************************************************************
// Aaru Data Preservation Suite // RomRepoMgr - ROM repository manager
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// //
// Filename : Context.cs
// Author(s) : Natalia Portillo <claunia@claunia.com> // Author(s) : Natalia Portillo <claunia@claunia.com>
// //
// Component : Database.
//
// --[ Description ] ----------------------------------------------------------
//
// Entity framework database context.
//
// --[ License ] -------------------------------------------------------------- // --[ License ] --------------------------------------------------------------
// //
// This library is free software; you can redistribute it and/or modify // This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as // it under the terms of the GNU General Public License as
// published by the Free Software Foundation; either version 2.1 of the // published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version. // License, or (at your option) any later version.
// //
// This library is distributed in the hope that it will be useful, but // This program is distributed in the hope that it will be useful,
// WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// Lesser General Public License for more details. // GNU General Public License for more details.
// //
// You should have received a copy of the GNU Lesser General Public // You should have received a copy of the GNU General Public License
// License along with this library; if not, see <http://www.gnu.org/licenses/>. // along with this program. If not, see <http://www.gnu.org/licenses/>.
// //
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Copyright © 2011-2020 Natalia Portillo // Copyright © 2020 Natalia Portillo
// ****************************************************************************/ *******************************************************************************/
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using RomRepoMgr.Database.Models;
namespace RomRepoMgr.Database namespace RomRepoMgr.Database
{ {
@@ -38,6 +32,8 @@ namespace RomRepoMgr.Database
{ {
public Context(DbContextOptions options) : base(options) {} public Context(DbContextOptions options) : base(options) {}
public DbSet<DbFile> Files { get; set; }
public static Context Create(string dbPath) public static Context Create(string dbPath)
{ {
var optionsBuilder = new DbContextOptionsBuilder(); var optionsBuilder = new DbContextOptionsBuilder();
@@ -46,11 +42,20 @@ namespace RomRepoMgr.Database
return new Context(optionsBuilder.Options); return new Context(optionsBuilder.Options);
} }
/* protected override void OnModelCreating(ModelBuilder modelBuilder)
protected override void OnModelCreating(ModelBuilder modelBuilder) {
{ base.OnModelCreating(modelBuilder);
base.OnModelCreating(modelBuilder);
} modelBuilder.Entity<DbFile>(entity =>
*/ {
entity.HasIndex(e => e.Crc32);
entity.HasIndex(e => e.Sha1);
entity.HasIndex(e => e.Sha256);
entity.HasIndex(e => e.Size);
});
}
} }
} }

View File

@@ -0,0 +1,69 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using RomRepoMgr.Database;
namespace RomRepoMgr.Database.Migrations
{
[DbContext(typeof(Context))]
[Migration("20200821223117_AddFiles")]
partial class AddFiles
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "3.1.7");
modelBuilder.Entity("RomRepoMgr.Database.Models.DbFile", b =>
{
b.Property<ulong>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("INTEGER");
b.Property<string>("Crc32")
.HasColumnType("TEXT")
.HasMaxLength(8);
b.Property<DateTime>("CreatedOn")
.ValueGeneratedOnAdd()
.HasColumnType("TEXT");
b.Property<string>("Md5")
.HasColumnType("TEXT")
.HasMaxLength(32);
b.Property<string>("Sha1")
.HasColumnType("TEXT")
.HasMaxLength(40);
b.Property<string>("Sha256")
.HasColumnType("TEXT")
.HasMaxLength(64);
b.Property<ulong>("Size")
.HasColumnType("INTEGER");
b.Property<DateTime>("UpdatedOn")
.ValueGeneratedOnAddOrUpdate()
.HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("Crc32");
b.HasIndex("Sha1");
b.HasIndex("Sha256");
b.HasIndex("Size");
b.ToTable("Files");
});
#pragma warning restore 612, 618
}
}
}

View File

@@ -0,0 +1,61 @@
/******************************************************************************
// RomRepoMgr - ROM repository manager
// ----------------------------------------------------------------------------
//
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// --[ License ] --------------------------------------------------------------
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2020 Natalia Portillo
*******************************************************************************/
using System;
using Microsoft.EntityFrameworkCore.Migrations;
namespace RomRepoMgr.Database.Migrations
{
public partial class AddFiles : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable("Files", table => new
{
Id = table.Column<ulong>(nullable: false).Annotation("Sqlite:Autoincrement", true),
CreatedOn = table.Column<DateTime>(nullable: false),
UpdatedOn = table.Column<DateTime>(nullable: false),
Size = table.Column<ulong>(nullable: false),
Crc32 = table.Column<string>(maxLength: 8, nullable: true),
Md5 = table.Column<string>(maxLength: 32, nullable: true),
Sha1 = table.Column<string>(maxLength: 40, nullable: true),
Sha256 = table.Column<string>(maxLength: 64, nullable: true)
}, constraints: table =>
{
table.PrimaryKey("PK_Files", x => x.Id);
});
migrationBuilder.CreateIndex("IX_Files_Crc32", "Files", "Crc32");
migrationBuilder.CreateIndex("IX_Files_Sha1", "Files", "Sha1");
migrationBuilder.CreateIndex("IX_Files_Sha256", "Files", "Sha256");
migrationBuilder.CreateIndex("IX_Files_Size", "Files", "Size");
}
protected override void Down(MigrationBuilder migrationBuilder) => migrationBuilder.DropTable("Files");
}
}

View File

@@ -1,5 +1,6 @@
// <auto-generated /> // <auto-generated />
using System;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Infrastructure;
@@ -12,6 +13,37 @@ namespace RomRepoMgr.Database.Migrations
{ {
#pragma warning disable 612, 618 #pragma warning disable 612, 618
modelBuilder.HasAnnotation("ProductVersion", "3.1.7"); modelBuilder.HasAnnotation("ProductVersion", "3.1.7");
modelBuilder.Entity("RomRepoMgr.Database.Models.DbFile", b =>
{
b.Property<ulong>("Id").ValueGeneratedOnAdd().HasColumnType("INTEGER");
b.Property<string>("Crc32").HasColumnType("TEXT").HasMaxLength(8);
b.Property<DateTime>("CreatedOn").ValueGeneratedOnAdd().HasColumnType("TEXT");
b.Property<string>("Md5").HasColumnType("TEXT").HasMaxLength(32);
b.Property<string>("Sha1").HasColumnType("TEXT").HasMaxLength(40);
b.Property<string>("Sha256").HasColumnType("TEXT").HasMaxLength(64);
b.Property<ulong>("Size").HasColumnType("INTEGER");
b.Property<DateTime>("UpdatedOn").ValueGeneratedOnAddOrUpdate().HasColumnType("TEXT");
b.HasKey("Id");
b.HasIndex("Crc32");
b.HasIndex("Sha1");
b.HasIndex("Sha256");
b.HasIndex("Size");
b.ToTable("Files");
});
#pragma warning restore 612, 618 #pragma warning restore 612, 618
} }
} }

View File

@@ -0,0 +1,40 @@
/******************************************************************************
// RomRepoMgr - ROM repository manager
// ----------------------------------------------------------------------------
//
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// --[ License ] --------------------------------------------------------------
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2020 Natalia Portillo
*******************************************************************************/
using System;
using System.ComponentModel.DataAnnotations.Schema;
namespace RomRepoMgr.Database.Models
{
public abstract class BaseModel<TKey>
{
public TKey Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTime CreatedOn { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime UpdatedOn { get; set; }
}
}

View File

@@ -0,0 +1,43 @@
/******************************************************************************
// RomRepoMgr - ROM repository manager
// ----------------------------------------------------------------------------
//
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// --[ License ] --------------------------------------------------------------
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2020 Natalia Portillo
*******************************************************************************/
using System.ComponentModel.DataAnnotations;
namespace RomRepoMgr.Database.Models
{
public class DbFile : BaseModel<ulong>
{
[Required]
public ulong Size { get; set; }
[StringLength(8, MinimumLength = 8)]
public string Crc32 { get; set; }
[StringLength(32, MinimumLength = 32)]
public string Md5 { get; set; }
[StringLength(40, MinimumLength = 40)]
public string Sha1 { get; set; }
[StringLength(64, MinimumLength = 64)]
public string Sha256 { get; set; }
}
}

View File

@@ -16,7 +16,6 @@
<ItemGroup> <ItemGroup>
<Folder Include="Migrations" /> <Folder Include="Migrations" />
<Folder Include="Models" />
</ItemGroup> </ItemGroup>
</Project> </Project>