#95: Id changes to models (#99)

* #95: Updated Id of the CoverArt model

* Model and migration changes
This commit was merged in pull request #99.
This commit is contained in:
Kun Deng
2024-06-21 20:30:23 -04:00
committed by GitHub
parent 71656aa940
commit 4b3fa78336
32 changed files with 118 additions and 130 deletions
+4 -4
View File
@@ -45,14 +45,14 @@ public class AlbumManager : BaseManager
_albumContext.Add(album);
_albumContext.SaveChanges();
Console.WriteLine($"Album Id {album.AlbumID}");
Console.WriteLine($"Album Id {album.Id}");
}
else
{
album.AlbumID = albumRetrieved.AlbumID;
album.Id = albumRetrieved.Id;
}
song.AlbumID = album.AlbumID;
song.AlbumId = album.Id;
}
@@ -138,7 +138,7 @@ public class AlbumManager : BaseManager
private int SongsInAlbum(Album album)
{
var sngContext = new SongContext(_connectionString);
var songs = sngContext.Songs.Where(sng => sng.AlbumID == album.AlbumID).ToList();
var songs = sngContext.Songs.Where(sng => sng.AlbumId == album.Id).ToList();
return songs.Count;
}
+3 -3
View File
@@ -45,10 +45,10 @@ public class ArtistManager : BaseManager
}
else
{
artist.ArtistID = artistRetrieved.ArtistID;
artist.Id = artistRetrieved.Id;
}
song.ArtistID = artist.ArtistID;
song.ArtistId = artist.Id;
}
public Artist UpdateArtistInDatabase(Song oldSongRecord, Song newSongRecord)
@@ -120,7 +120,7 @@ public class ArtistManager : BaseManager
private int SongsOfArtist(Artist artist)
{
var sngContext = new SongContext(_connectionString);
var songs = sngContext.Songs.Where(sng => sng.ArtistID == artist.ArtistID).ToList();
var songs = sngContext.Songs.Where(sng => sng.ArtistId == artist.Id).ToList();
return songs.Count;
}
-2
View File
@@ -1,5 +1,3 @@
using System;
using Microsoft.Extensions.Configuration;
using NLog;
+1 -2
View File
@@ -2,7 +2,6 @@ using Icarus.Constants;
using Icarus.Controllers.Utilities;
using Icarus.Database.Contexts;
using Icarus.Models;
using Icarus.Types;
namespace Icarus.Controllers.Managers;
@@ -33,7 +32,7 @@ public class CoverArtManager : BaseManager
_coverArtContext.Add(coverArt);
_coverArtContext.SaveChanges();
song.CoverArtID = coverArt.CoverArtID;
song.CoverArtId = coverArt.Id;
}
public void DeleteCoverArtFromDatabase(CoverArt coverArt)
{
-1
View File
@@ -1,4 +1,3 @@
using System.Reflection.PortableExecutable;
using Icarus.Models;
using Icarus.Types;
+3 -3
View File
@@ -45,10 +45,10 @@ public class GenreManager : BaseManager
}
else
{
genre.GenreID = genreRetrieved.GenreID;
genre.Id = genreRetrieved.Id;
}
song.GenreID = genre.GenreID;
song.GenreId = genre.Id;
}
public Genre UpdateGenreInDatabase(Song oldSongRecord, Song newSongRecord)
@@ -120,7 +120,7 @@ public class GenreManager : BaseManager
private int SongsInGenre(Genre genre)
{
var sngContext = new SongContext(_connectionString);
var songs = sngContext.Songs.Where(sng => sng.GenreID == genre.GenreID).ToList();
var songs = sngContext.Songs.Where(sng => sng.GenreId == genre.Id).ToList();
return songs.Count;
}
+3 -3
View File
@@ -77,13 +77,13 @@ public class SongManager : BaseManager
var gnrMgr = new GenreManager(_config);
var artMgr = new ArtistManager(_config);
var updatedAlbum = albMgr.UpdateAlbumInDatabase(oldSongRecord, updatedSong);
oldSongRecord.AlbumID = updatedAlbum.AlbumID;
oldSongRecord.AlbumId = updatedAlbum.Id;
var updatedArtist = artMgr.UpdateArtistInDatabase(oldSongRecord, updatedSong);
oldSongRecord.ArtistID = updatedArtist.ArtistID;
oldSongRecord.ArtistId = updatedArtist.Id;
var updatedGenre = gnrMgr.UpdateGenreInDatabase(oldSongRecord, updatedSong);
oldSongRecord.GenreID = updatedGenre.GenreID;
oldSongRecord.GenreId = updatedGenre.Id;
UpdateSongInDatabase(ref oldSongRecord, ref updatedSong, ref result);
+12 -11
View File
@@ -24,6 +24,7 @@ public class TokenManager : BaseManager
private string _audience;
private string _grantType;
private string _url;
private string SUCCESSFUL_TOKEN_MESSAGE = "Successfully retrieved token";
#endregion
@@ -67,12 +68,7 @@ public class TokenManager : BaseManager
.DeserializeObject<TokenTierOne>(response.Content);
_logger.Info("Response deserialized");
return new LoginResult
{
UserID = user.UserID, Username = user.Username, Token = tokenResult.AccessToken,
TokenType = tokenResult.TokenType, Expiration = tokenResult.Expiration,
Message = "Successfully retrieved token"
};
return this.InitializeLoginResult(user, tokenResult);
}
@@ -81,7 +77,7 @@ public class TokenManager : BaseManager
var tokenResult = new TokenTierOne{ TokenType = "JWT" };
var payload = Payload();
payload.Add(new Claim("user_id", user.UserID.ToString(), ClaimValueTypes.Integer));
payload.Add(new Claim("user_id", user.Id.ToString(), ClaimValueTypes.Integer));
var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(_config["JWT:Secret"]);
@@ -89,7 +85,7 @@ public class TokenManager : BaseManager
{
Subject = new ClaimsIdentity(new Claim[]
{
new Claim("user_id", user.UserID.ToString(), ClaimValueTypes.Integer)
new Claim("user_id", user.Id.ToString(), ClaimValueTypes.Integer)
// Add more claims as needed
}),
Expires = DateTime.UtcNow.AddHours(1),
@@ -109,11 +105,16 @@ public class TokenManager : BaseManager
var exp = Math.Floor((expiredDate - DateTime.UnixEpoch).TotalSeconds);
tokenResult.Expiration = Convert.ToInt32(exp);
return this.InitializeLoginResult(user, tokenResult);
}
private LoginResult InitializeLoginResult(User user, TokenTierOne token)
{
return new LoginResult
{
UserID = user.UserID, Username = user.Username, Token = tokenResult.AccessToken,
TokenType = tokenResult.TokenType, Expiration = tokenResult.Expiration,
Message = "Successfully retrieved token"
UserId = user.Id, Username = user.Username, Token = token.AccessToken,
TokenType = token.TokenType, Expiration = token.Expiration,
Message = SUCCESSFUL_TOKEN_MESSAGE
};
}
+4 -8
View File
@@ -1,7 +1,3 @@
using System;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;
using NLog;
using TagLib;
@@ -46,16 +42,16 @@ public class MetadataRetriever
public static void PrintMetadata(Song song)
{
Console.WriteLine("\n\nMetadata of the song:");
Console.WriteLine($"ID: {song.SongID}");
Console.WriteLine($"ID: {song.Id}");
Console.WriteLine($"Title: {song.Title}");
Console.WriteLine($"Artist: {song.Artist}");
Console.WriteLine($"Album: {song.AlbumTitle}");
Console.WriteLine($"Genre: {song.Genre}");
Console.WriteLine($"Year: {song.Year}");
Console.WriteLine($"Duration: {song.Duration}");
Console.WriteLine($"AlbumID: {song.AlbumID}");
Console.WriteLine($"ArtistID: {song.ArtistID}");
Console.WriteLine($"GenreID: {song.GenreID}");
Console.WriteLine($"AlbumID: {song.AlbumId}");
Console.WriteLine($"ArtistID: {song.ArtistId}");
Console.WriteLine($"GenreID: {song.GenreId}");
Console.WriteLine($"Song Path: {song.SongPath()}");
Console.WriteLine($"Filename: {song.Filename}");
Console.WriteLine("\n");
+1 -1
View File
@@ -48,7 +48,7 @@ public class AlbumController : BaseController
[HttpGet("{id}")]
public IActionResult GetAlbum(int id)
{
Album album = new Album{ AlbumID = id };
Album album = new Album{ Id = id };
var albumContext = new AlbumContext(_connectionString);
+1 -4
View File
@@ -48,10 +48,7 @@ public class ArtistController : BaseController
[HttpGet("{id}")]
public IActionResult GetArtist(int id)
{
Artist artist = new Artist
{
ArtistID = id
};
Artist artist = new Artist { Id = id };
var artistContext = new ArtistContext(_connectionString);
+2 -2
View File
@@ -51,7 +51,7 @@ public class CoverArtController : BaseController
[HttpGet("{id}")]
public IActionResult GetCoverArt(int id)
{
var coverArt = new CoverArt { CoverArtID = id };
var coverArt = new CoverArt { Id = id };
var coverArtContext = new CoverArtContext(_connectionString);
@@ -79,7 +79,7 @@ public class CoverArtController : BaseController
var songContext = new SongContext(_connectionString);
var covMgr = new CoverArtManager(this._config);
var songMetaData = songContext.RetrieveRecord(new Song { SongID = id});
var songMetaData = songContext.RetrieveRecord(new Song { Id = id});
var c = covMgr.GetCoverArt(songMetaData);
var filename = DirectoryManager.GenerateDownloadFilename(10, Constants.FileExtensions.JPG_EXTENSION, songMetaData.Title, randomizeFilename);
+1 -1
View File
@@ -52,7 +52,7 @@ public class GenreController : BaseController
[HttpGet("{id}")]
public IActionResult GetGenre(int id)
{
var genre = new Genre{ GenreID = id };
var genre = new Genre { Id = id };
var genreStore = new GenreContext(_connectionString);
@@ -46,7 +46,7 @@ public class SongCompressedDataController : BaseController
Console.WriteLine($"Archive directory root: {_archiveDir}");
Console.WriteLine("Starting process of retrieving comrpessed song");
var sng = context.RetrieveRecord(new Song{ SongID = id });
var sng = context.RetrieveRecord(new Song{ Id = id });
SongData song = await cmp.RetrieveCompressedSong(sng);
var filename = DirectoryManager.GenerateDownloadFilename(10, Constants.FileExtensions.ZIP_EXTENSION, sng.Title, randomizeFilename);
+3 -3
View File
@@ -61,11 +61,11 @@ public class SongController : BaseController
{
var context = new SongContext(_connectionString);
var song = context.RetrieveRecord(new Song{ SongID = id });
var song = context.RetrieveRecord(new Song{ Id = id });
Console.WriteLine("Here");
if (song.SongID != 0)
if (song.Id != 0)
return Ok(song);
else
return NotFound();
@@ -74,7 +74,7 @@ public class SongController : BaseController
[HttpPut("{id}")]
public IActionResult UpdateSong(int id, [FromBody] Song song)
{
song.SongID = id;
song.Id = id;
Console.WriteLine("Retrieving filepath of song");
_logger.LogInformation("Retrieving filepath of song");
+4 -4
View File
@@ -40,7 +40,7 @@ public class SongDataController : BaseController
public IActionResult Download(int id, [FromQuery] bool? randomizeFilename)
{
var songContext = new SongContext(_connectionString);
var songMetaData = songContext.RetrieveRecord(new Song { SongID = id});
var songMetaData = songContext.RetrieveRecord(new Song { Id = id});
var song = _songMgr.RetrieveSong(songMetaData).Result;
var filename = DirectoryManager.GenerateDownloadFilename(10, Constants.FileExtensions.WAV_EXTENSION, songMetaData.Title, randomizeFilename);
@@ -110,7 +110,7 @@ public class SongDataController : BaseController
if (userId != -1)
{
song.UserID = userId;
song.UserId = userId;
}
_logger.LogInformation($"Song title: {song.Title}");
@@ -131,8 +131,8 @@ public class SongDataController : BaseController
{
var songContext = new SongContext(_connectionString);
var songMetaData = new Song{ SongID = id };
Console.WriteLine($"Id {songMetaData.SongID}");
var songMetaData = new Song{ Id = id };
Console.WriteLine($"Id {songMetaData.Id}");
songMetaData = songContext.RetrieveRecord(songMetaData);
+1 -1
View File
@@ -34,7 +34,7 @@ public class SongStreamController : BaseController
{
var context = new SongContext(_config.GetConnectionString("DefaultConnection"));
var song = context.Songs.FirstOrDefault(sng => sng.SongID == id);
var song = context.Songs.FirstOrDefault(sng => sng.Id == id);
var stream = new FileStream(song.SongPath(), FileMode.Open, FileAccess.Read);
stream.Position = 0;
+2 -2
View File
@@ -22,11 +22,11 @@ public class AlbumContext : DbContext
public Album RetrieveRecord(Album album)
{
return Albums.FirstOrDefault(alb => alb.AlbumID == album.AlbumID);
return Albums.FirstOrDefault(alb => alb.Id == album.Id);
}
public bool DoesRecordExist(Album album)
{
return Albums.FirstOrDefault(alb => alb.AlbumID == album.AlbumID) != null ? true : false;
return Albums.FirstOrDefault(alb => alb.Id == album.Id) != null ? true : false;
}
}
+2 -2
View File
@@ -23,12 +23,12 @@ public class ArtistContext : DbContext
public Artist RetrieveRecord(Artist artist)
{
return Artists.FirstOrDefault(arst => arst.ArtistID == artist.ArtistID);
return Artists.FirstOrDefault(arst => arst.Id == artist.Id);
}
public bool DoesRecordExist(Artist artist)
{
return Artists.FirstOrDefault(arst => arst.ArtistID == artist.ArtistID) != null ? true : false;
return Artists.FirstOrDefault(arst => arst.Id == artist.Id) != null ? true : false;
}
}
+2 -2
View File
@@ -22,11 +22,11 @@ public class CoverArtContext : DbContext
public CoverArt RetrieveRecord(CoverArt cover)
{
return CoverArtImages.FirstOrDefault(cov => cov.CoverArtID == cover.CoverArtID);
return CoverArtImages.FirstOrDefault(cov => cov.Id == cover.Id);
}
public bool DoesRecordExist(CoverArt cover)
{
return CoverArtImages.FirstOrDefault(cov => cov.CoverArtID == cover.CoverArtID) != null ? true : false;
return CoverArtImages.FirstOrDefault(cov => cov.Id == cover.Id) != null ? true : false;
}
}
+2 -2
View File
@@ -22,11 +22,11 @@ public class GenreContext : DbContext
public Genre RetrieveRecord(Genre genre)
{
return Genres.FirstOrDefault(gnr => gnr.GenreID == genre.GenreID);
return Genres.FirstOrDefault(gnr => gnr.Id == genre.Id);
}
public bool DoesRecordExist(Genre genre)
{
return Genres.FirstOrDefault(gnr => gnr.GenreID == genre.GenreID) != null ? true : false;
return Genres.FirstOrDefault(gnr => gnr.Id == genre.Id) != null ? true : false;
}
}
+6 -6
View File
@@ -25,28 +25,28 @@ public class SongContext : DbContext
.Property(s => s.Year)
.IsRequired(false);
modelBuilder.Entity<Song>()
.Property(s => s.GenreID)
.Property(s => s.GenreId)
.IsRequired(false);
modelBuilder.Entity<Song>()
.Property(s => s.ArtistID)
.Property(s => s.ArtistId)
.IsRequired(false);
modelBuilder.Entity<Song>()
.Property(s => s.AlbumID)
.Property(s => s.AlbumId)
.IsRequired(false);
modelBuilder.Entity<Song>()
.Property(s => s.CoverArtID)
.Property(s => s.CoverArtId)
.IsRequired(false);
}
public Song RetrieveRecord(Song song)
{
return Songs.FirstOrDefault(sng => sng.SongID == song.SongID);
return Songs.FirstOrDefault(sng => sng.Id == song.Id);
}
public bool DoesRecordExist(Song song)
{
return Songs.FirstOrDefault(sng => sng.SongID == song.SongID) != null ? true : false;
return Songs.FirstOrDefault(sng => sng.Id == song.Id) != null ? true : false;
}
}
+2 -2
View File
@@ -32,11 +32,11 @@ public class UserContext : DbContext
public User RetrieveRecord(User user)
{
return Users.FirstOrDefault(usr => usr.UserID == user.UserID);
return Users.FirstOrDefault(usr => usr.Id == user.Id);
}
public bool DoesRecordExist(User user)
{
return Users.FirstOrDefault(usr => usr.UserID == user.UserID) != null ? true : false;
return Users.FirstOrDefault(usr => usr.Id == user.Id) != null ? true : false;
}
}
+2 -2
View File
@@ -6,8 +6,8 @@ namespace Icarus.Models;
public class Album
{
[JsonProperty("album_id")]
public int AlbumID { get; set; }
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("title")]
public string Title { get; set; }
[JsonProperty("album_artist")]
+2 -2
View File
@@ -6,8 +6,8 @@ namespace Icarus.Models;
public class Artist
{
[JsonProperty("artist_id")]
public int ArtistID { get; set; }
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("name")]
[Column("Artist")]
public string Name { get; set; }
+2 -2
View File
@@ -5,8 +5,8 @@ namespace Icarus.Models;
public class CoverArt
{
#region Properties
[JsonProperty("cover_art_id")]
public int CoverArtID { get; set; }
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("title")]
public string SongTitle { get; set; }
[JsonIgnore]
+2 -2
View File
@@ -6,8 +6,8 @@ namespace Icarus.Models;
public class Genre
{
[JsonProperty("genre_id")]
public int GenreID { get; set; }
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("genre")]
[Column("Category")]
public string GenreName { get; set; }
+1 -1
View File
@@ -5,7 +5,7 @@ namespace Icarus.Models;
public class LoginResult : BaseResult
{
[JsonProperty("user_id")]
public int UserID { get; set; }
public int UserId { get; set; }
[JsonProperty("username")]
public string Username { get; set; }
[JsonProperty("token")]
+7 -7
View File
@@ -7,8 +7,8 @@ namespace Icarus.Models;
public class Song
{
#region Properties
[JsonProperty("song_id")]
public int SongID { get; set; }
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("title")]
public string Title { get; set; }
[JsonProperty("album")]
@@ -37,17 +37,17 @@ public class Song
[JsonProperty("disc_count")]
public int DiscCount { get; set; } = 0;
[JsonIgnore]
public int? AlbumID { get; set; }
public int? AlbumId { get; set; }
[JsonIgnore]
public int? ArtistID { get; set; }
public int? ArtistId { get; set; }
[JsonIgnore]
public int? GenreID { get; set; }
public int? GenreId { get; set; }
[JsonIgnore]
public int? CoverArtID { get; set; }
public int? CoverArtId { get; set; }
[JsonProperty("date_created")]
public DateTime DateCreated { get; set; }
[JsonProperty("user_id")]
public int UserID { get; set; }
public int UserId { get; set; }
#endregion
+3 -3
View File
@@ -9,10 +9,10 @@ namespace Icarus.Models;
public class User
{
#region Properties
[JsonProperty("user_id")]
[Column("UserID")]
[JsonProperty("id")]
[Column("Id")]
[Key]
public int UserID { get; set; }
public int Id { get; set; }
[JsonProperty("username")]
public string Username { get; set; }
[JsonProperty("password")]
+20 -41
View File
@@ -3,39 +3,39 @@ CREATE DATABASE Icarus;
USE Icarus;
CREATE TABLE CoverArt (
CoverArtID INT NOT NULL AUTO_INCREMENT,
Id INT NOT NULL AUTO_INCREMENT,
SongTitle TEXT NOT NULL,
ImagePath TEXT NOT NULL,
PRIMARY KEY (CoverArtID)
PRIMARY KEY (Id)
);
CREATE TABLE Album (
AlbumID INT NOT NULL AUTO_INCREMENT,
Id INT NOT NULL AUTO_INCREMENT,
Title TEXT NOT NULL,
Artist TEXT NOT NULL,
Year INT NOT NULL,
PRIMARY KEY (AlbumID)
PRIMARY KEY (Id)
);
CREATE TABLE Artist (
ArtistID INT NOT NULL AUTO_INCREMENT,
Id INT NOT NULL AUTO_INCREMENT,
Artist TEXT NOT NULL,
PRIMARY KEY (ArtistID)
PRIMARY KEY (Id)
);
CREATE TABLE Genre (
GenreID INT NOT NULL AUTO_INCREMENT,
Id INT NOT NULL AUTO_INCREMENT,
Category TEXT NOT NULL,
PRIMARY KEY (GenreID)
PRIMARY KEY (Id)
);
CREATE TABLE Song (
SongID INT NOT NULL AUTO_INCREMENT,
Id INT NOT NULL AUTO_INCREMENT,
Title TEXT NOT NULL,
Artist TEXT NOT NULL,
Album TEXT NOT NULL,
@@ -49,21 +49,21 @@ CREATE TABLE Song (
DiscCount INT NOT NULL,
SongDirectory TEXT NOT NULL,
Filename TEXT NOT NULL,
CoverArtID INT NOT NULL,
ArtistID INT NOT NULL,
AlbumID INT NOT NULL,
GenreID INT NOT NULL,
CoverArtId INT NOT NULL,
ArtistId INT NOT NULL,
AlbumId INT NOT NULL,
GenreId INT NOT NULL,
DateCreated DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (SongID),
CONSTRAINT FK_Song_CoverArtID FOREIGN KEY (CoverArtID) REFERENCES CoverArt (CoverArtID),
CONSTRAINT FK_Song_ArtistID FOREIGN KEY (ArtistID) REFERENCES Artist (ArtistID),
CONSTRAINT FK_Song_AlbumID FOREIGN KEY (AlbumID) REFERENCES Album (AlbumID),
CONSTRAINT FK_Song_GenreID FOREIGN KEY (GenreID) REFERENCES Genre (GenreID)
PRIMARY KEY (Id),
CONSTRAINT FK_Song_CoverArtId FOREIGN KEY (CoverArtId) REFERENCES CoverArt (Id),
CONSTRAINT FK_Song_ArtistId FOREIGN KEY (ArtistId) REFERENCES Artist (Id),
CONSTRAINT FK_Song_AlbumId FOREIGN KEY (AlbumId) REFERENCES Album (Id),
CONSTRAINT FK_Song_GenreId FOREIGN KEY (GenreId) REFERENCES Genre (Id)
);
CREATE TABLE User (
UserID INT NOT NULL AUTO_INCREMENT,
Id INT NOT NULL AUTO_INCREMENT,
Firstname TEXT NOT NULL,
Lastname TEXT NOT NULL,
Email TEXT NOT NULL,
@@ -74,26 +74,5 @@ CREATE TABLE User (
Status TEXT DEFAULT 'Active',
LastLogin DATETIME NULL,
PRIMARY KEY (UserID)
);
CREATE TABLE Salt (
SaltID INT NOT NULL AUTO_INCREMENT,
Salt TEXT NOT NULL,
UserID INT NOT NULL,
PRIMARY KEY (SaltID),
CONSTRAINT FK_Salt_UserID FOREIGN KEY (UserID) REFERENCES User (UserID)
);
CREATE TABLE Token (
TokenID INT NOT NULL AUTO_INCREMENT,
AccessToken TEXT NOT NULL,
TokenType TEXT NOT NULL,
Expires DATETIME DEFAULT CURRENT_TIMESTAMP,
Issued DATETIME DEFAULT CURRENT_TIMESTAMP,
UserID INT NOT NULL,
PRIMARY KEY (TokenID),
CONSTRAINT FK_Token_UserID FOREIGN KEY (UserID) REFERENCES User (UserID)
PRIMARY KEY (Id)
);
+19
View File
@@ -0,0 +1,19 @@
CREATE TABLE IF NOT EXISTS `__EFMigrationsHistory` (
`MigrationId` varchar(150) NOT NULL,
`ProductVersion` varchar(32) NOT NULL,
PRIMARY KEY (`MigrationId`)
);
START TRANSACTION;
CREATE TABLE `Artist` (
`Id` int NOT NULL AUTO_INCREMENT,
`Artist` longtext NULL,
PRIMARY KEY (`Id`)
);
INSERT INTO `__EFMigrationsHistory` (`MigrationId`, `ProductVersion`)
VALUES ('20240620205519_ModelIdChanges', '8.0.6');
COMMIT;