Inital DeepDrftWeb Entity Framework setup
- DeepDrft DbContext - Inital Migration for Track Entity model - Track Repository - Full CRUD
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
using DeepDrftModels.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace DeepDrftWeb.Data.Configurations;
|
||||
|
||||
public class TrackConfiguration : IEntityTypeConfiguration<TrackEntity>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<TrackEntity> builder)
|
||||
{
|
||||
builder.ToTable("track");
|
||||
|
||||
builder.HasKey(x => x.Id);
|
||||
|
||||
builder.Property(x => x.Id)
|
||||
.HasColumnName("id")
|
||||
.IsRequired();
|
||||
|
||||
builder.Property(x => x.MediaPath)
|
||||
.HasColumnName("media_path")
|
||||
.IsRequired()
|
||||
.HasMaxLength(500);
|
||||
|
||||
builder.Property(x => x.TrackName)
|
||||
.HasColumnName("track_name")
|
||||
.IsRequired()
|
||||
.HasMaxLength(200);
|
||||
|
||||
builder.Property(x => x.Artist)
|
||||
.HasColumnName("artist")
|
||||
.IsRequired()
|
||||
.HasMaxLength(200);
|
||||
|
||||
builder.Property(x => x.Album)
|
||||
.HasColumnName("album")
|
||||
.HasMaxLength(200);
|
||||
|
||||
builder.Property(x => x.Genre)
|
||||
.HasColumnName("genre")
|
||||
.HasMaxLength(100);
|
||||
|
||||
builder.Property(x => x.ReleaseDate)
|
||||
.HasColumnName("release_date");
|
||||
|
||||
builder.Property(x => x.ImagePath)
|
||||
.HasColumnName("image_path")
|
||||
.HasMaxLength(500);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
using DeepDrftModels.Entities;
|
||||
using DeepDrftWeb.Data.Configurations;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace DeepDrftWeb.Data;
|
||||
|
||||
public class DeepDrftContext : DbContext
|
||||
{
|
||||
public DeepDrftContext(DbContextOptions<DeepDrftContext> options) : base(options)
|
||||
{
|
||||
}
|
||||
|
||||
public DbSet<TrackEntity> Tracks { get; set; }
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
base.OnModelCreating(modelBuilder);
|
||||
|
||||
modelBuilder.ApplyConfiguration(new TrackConfiguration());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Design;
|
||||
|
||||
namespace DeepDrftWeb.Data;
|
||||
|
||||
public static class DeepDrftContextFactory
|
||||
{
|
||||
public class Factory : IDesignTimeDbContextFactory<DeepDrftContext>
|
||||
{
|
||||
public DeepDrftContext CreateDbContext(string[] args)
|
||||
{
|
||||
var configuration = new ConfigurationBuilder()
|
||||
.SetBasePath(Directory.GetCurrentDirectory())
|
||||
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
|
||||
.AddJsonFile("appsettings.Development.json", optional: true, reloadOnChange: true)
|
||||
.Build();
|
||||
|
||||
var optionsBuilder = new DbContextOptionsBuilder<DeepDrftContext>();
|
||||
optionsBuilder.UseSqlite(configuration.GetConnectionString("DefaultConnection"));
|
||||
|
||||
return new DeepDrftContext(optionsBuilder.Options);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using DeepDrftWeb.Data;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace DeepDrftWeb.Data.Migrations
|
||||
{
|
||||
[DbContext(typeof(DeepDrftContext))]
|
||||
[Migration("20250831000622_Initial")]
|
||||
partial class Initial
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder.HasAnnotation("ProductVersion", "9.0.8");
|
||||
|
||||
modelBuilder.Entity("DeepDrftModels.Entities.TrackEntity", b =>
|
||||
{
|
||||
b.Property<long>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER")
|
||||
.HasColumnName("id");
|
||||
|
||||
b.Property<string>("Album")
|
||||
.HasMaxLength(200)
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("album");
|
||||
|
||||
b.Property<string>("Artist")
|
||||
.IsRequired()
|
||||
.HasMaxLength(200)
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("artist");
|
||||
|
||||
b.Property<string>("Genre")
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("genre");
|
||||
|
||||
b.Property<string>("ImagePath")
|
||||
.HasMaxLength(500)
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("image_path");
|
||||
|
||||
b.Property<string>("MediaPath")
|
||||
.IsRequired()
|
||||
.HasMaxLength(500)
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("media_path");
|
||||
|
||||
b.Property<DateOnly?>("ReleaseDate")
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("release_date");
|
||||
|
||||
b.Property<string>("TrackName")
|
||||
.IsRequired()
|
||||
.HasMaxLength(200)
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("track_name");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("track", (string)null);
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace DeepDrftWeb.Data.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class Initial : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.CreateTable(
|
||||
name: "track",
|
||||
columns: table => new
|
||||
{
|
||||
id = table.Column<long>(type: "INTEGER", nullable: false)
|
||||
.Annotation("Sqlite:Autoincrement", true),
|
||||
media_path = table.Column<string>(type: "TEXT", maxLength: 500, nullable: false),
|
||||
track_name = table.Column<string>(type: "TEXT", maxLength: 200, nullable: false),
|
||||
artist = table.Column<string>(type: "TEXT", maxLength: 200, nullable: false),
|
||||
album = table.Column<string>(type: "TEXT", maxLength: 200, nullable: true),
|
||||
genre = table.Column<string>(type: "TEXT", maxLength: 100, nullable: true),
|
||||
release_date = table.Column<DateOnly>(type: "TEXT", nullable: true),
|
||||
image_path = table.Column<string>(type: "TEXT", maxLength: 500, nullable: true)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_track", x => x.id);
|
||||
});
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "track");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
// <auto-generated />
|
||||
using System;
|
||||
using DeepDrftWeb.Data;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace DeepDrftWeb.Data.Migrations
|
||||
{
|
||||
[DbContext(typeof(DeepDrftContext))]
|
||||
partial class DeepDrftContextModelSnapshot : ModelSnapshot
|
||||
{
|
||||
protected override void BuildModel(ModelBuilder modelBuilder)
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder.HasAnnotation("ProductVersion", "9.0.8");
|
||||
|
||||
modelBuilder.Entity("DeepDrftModels.Entities.TrackEntity", b =>
|
||||
{
|
||||
b.Property<long>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("INTEGER")
|
||||
.HasColumnName("id");
|
||||
|
||||
b.Property<string>("Album")
|
||||
.HasMaxLength(200)
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("album");
|
||||
|
||||
b.Property<string>("Artist")
|
||||
.IsRequired()
|
||||
.HasMaxLength(200)
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("artist");
|
||||
|
||||
b.Property<string>("Genre")
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("genre");
|
||||
|
||||
b.Property<string>("ImagePath")
|
||||
.HasMaxLength(500)
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("image_path");
|
||||
|
||||
b.Property<string>("MediaPath")
|
||||
.IsRequired()
|
||||
.HasMaxLength(500)
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("media_path");
|
||||
|
||||
b.Property<DateOnly?>("ReleaseDate")
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("release_date");
|
||||
|
||||
b.Property<string>("TrackName")
|
||||
.IsRequired()
|
||||
.HasMaxLength(200)
|
||||
.HasColumnType("TEXT")
|
||||
.HasColumnName("track_name");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.ToTable("track", (string)null);
|
||||
});
|
||||
#pragma warning restore 612, 618
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
using DeepDrftModels.Entities;
|
||||
using DeepDrftModels.Models;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace DeepDrftWeb.Data.Repositories;
|
||||
|
||||
public class TrackRepository
|
||||
{
|
||||
private readonly DeepDrftContext _db;
|
||||
|
||||
public TrackRepository(DeepDrftContext db)
|
||||
{
|
||||
_db = db;
|
||||
}
|
||||
|
||||
public async Task<TrackEntity?> GetById(long id)
|
||||
{
|
||||
return await _db.Tracks.FindAsync(id);
|
||||
}
|
||||
|
||||
public async Task<List<TrackEntity>> GetAll()
|
||||
{
|
||||
return await _db.Tracks.ToListAsync();
|
||||
}
|
||||
|
||||
public async Task<PagedResult<TrackEntity>> GetPage(PagingParameters<TrackEntity> pageParameters)
|
||||
{
|
||||
var count = await _db.Tracks.CountAsync();
|
||||
|
||||
var page = await _db.Tracks
|
||||
.OrderBy(pageParameters.OrderBy ?? (t => t.Id))
|
||||
.Skip((pageParameters.Page - 1) * pageParameters.PageSize)
|
||||
.Take(pageParameters.PageSize)
|
||||
.ToListAsync();
|
||||
|
||||
return new PagedResult<TrackEntity>(page, count, pageParameters.Page, pageParameters.PageSize);
|
||||
}
|
||||
|
||||
public async Task<TrackEntity> Create(TrackEntity newTrack)
|
||||
{
|
||||
var track = _db.Tracks.Add(newTrack);
|
||||
await _db.SaveChangesAsync();
|
||||
return track.Entity;
|
||||
}
|
||||
|
||||
public async Task<TrackEntity> Update(TrackEntity track)
|
||||
{
|
||||
var trackEntity = await GetById(track.Id);
|
||||
|
||||
if (trackEntity == null)
|
||||
{
|
||||
return await Create(track);
|
||||
}
|
||||
|
||||
trackEntity.Album = track.Album;
|
||||
trackEntity.Artist = track.Artist;
|
||||
trackEntity.Genre = track.Genre;
|
||||
trackEntity.ImagePath = track.ImagePath;
|
||||
trackEntity.MediaPath = track.MediaPath;
|
||||
trackEntity.ReleaseDate = track.ReleaseDate;
|
||||
trackEntity.TrackName = track.TrackName;
|
||||
|
||||
await _db.SaveChangesAsync();
|
||||
return trackEntity;
|
||||
}
|
||||
|
||||
public async Task Delete(long id)
|
||||
{
|
||||
var track = await GetById(id);
|
||||
if (track != null)
|
||||
{
|
||||
_db.Tracks.Remove(track);
|
||||
await _db.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user