2024-01-04 02:53:13 +00:00
using System ;
using System.Collections.Generic ;
using Tesses.CMS ;
using Dapper ;
using System.Data.Common ;
using System.Linq ;
using Newtonsoft.Json ;
namespace Tesses.CMS.Providers
{
public class MysqlDapperContentProvider : IContentProvider
{
DbConnection con ;
public MysqlDapperContentProvider ( DbConnection connection )
{
this . con = connection ;
con . Execute ( "CREATE TABLE IF NOT EXISTS Users (Id bigint NOT NULL PRIMARY KEY AUTOINCREMENT,AboutMe text,AccountsToMail text,Email text,IsAdmin bool,IsInvited bool,IsVerified bool,PasswordHash text,ProperName text,Salt text,Username text,Webhooks text);" ) ;
con . Execute ( "CREATE TABLE IF NOT EXISTS Sessions (Id bigint NOT NULL PRIMARY KEY AUTOINCREMENT,Session text,Account bigint);" ) ;
con . Execute ( "CREATE TABLE IF NOT EXISTS VerificationCodes (Id bigint NOT NULL PRIMARY KEY AUTOINCREMENT,Session text,Account bigint,Expires bigint);" ) ;
con . Execute ( "CREATE TABLE IF NOT EXISTS Movies (Id bigint NOT NULL PRIMARY KEY AUTOINCREMENT,UserId bigint,CreationTime bigint,LastUpdated bigint,Description text,Name text,ProperName text);" ) ;
}
public void ChangeSession ( string session , long account )
{
con . Execute ( "UPDATE Sessions set Account = @account WHERE Session = @session;" , new { session , account } ) ;
}
public bool ContainsSession ( string cookie )
{
return con . QueryFirstOrDefault ( "SELECT * FROM Sessions WHERE Session = @cookie;" , new { cookie } ) ! = null ;
}
public bool ContainsVerificationCode ( string code )
{
var res = con . QueryFirstOrDefault ( "SELECT * FROM VerificationCodes WHERE Session = @code;" , new { code } ) ;
if ( res ! = null )
{
long expires = res . Expires ;
if ( DateTimeOffset . Now > = DateTimeOffset . FromUnixTimeSeconds ( expires ) )
{
con . Execute ( "DELETE FROM VerificationCodes WHERE Session = @code;" , new { code } ) ;
return false ;
}
return true ;
}
return false ;
}
2024-07-28 22:59:28 +00:00
public Episode CreateEpisode ( string user , string show , int season , int episode , string episodename , string properName , string description )
{
throw new NotImplementedException ( ) ;
}
2024-01-04 02:53:13 +00:00
public Movie CreateMovie ( string user , string movie , string properName , string description )
{
var userId = GetUserAccount ( user ) . Id ;
Movie movie1 = new Movie ( ) ;
movie1 . UserId = userId ;
movie1 . Name = movie ;
movie1 . ProperName = properName ;
movie1 . Description = description ;
con . Execute ( "INSERT INTO Movies(movie) values (@movie);" , new { movie = new DapperMovie ( movie1 ) } ) ;
return GetMovie ( user , movie ) ;
}
2024-07-28 22:59:28 +00:00
public Season CreateSeason ( string user , string show , int season , string properName , string description )
{
throw new NotImplementedException ( ) ;
}
2024-01-04 02:53:13 +00:00
public void CreateSession ( string session , long account )
{
con . Execute ( "INSERT INTO Sessions(Session,Account) values (@session,@account);" , new { session , account } ) ;
}
2024-07-28 22:59:28 +00:00
public Show CreateShow ( string user , string show , string properName , string description )
{
throw new NotImplementedException ( ) ;
}
2024-01-04 02:53:13 +00:00
public void CreateUser ( CMSConfiguration configuration , string user , string properName , string email , string password )
{
bool first = con . QueryFirstOrDefault < DapperUserAccount > ( "SELECT * FROM Users LIMIT 0, 1;" ) = = null ;
UserAccount account = new UserAccount ( ) ;
account . IsAdmin = first ;
account . IsVerified = first ;
account . Email = email ;
account . ProperName = properName ;
account . Username = user ;
account . NewSalt ( ) ;
account . PasswordHash = account . GetPasswordHash ( password ) ;
DapperUserAccount account1 = new DapperUserAccount ( account ) ;
con . Execute ( "INSERT INTO Users(user) values (@user);" , new { user = account1 } ) ;
}
public void CreateVerificationCode ( string code , long account )
{
long expires = DateTimeOffset . Now . AddDays ( 1 ) . ToUnixTimeSeconds ( ) ;
con . Execute ( "INSERT INTO VerificationCodes(Session,Account,Expires) values (@code,@account,@expires);" , new { code , account , expires } ) ;
}
public void DeleteSession ( string session )
{
con . Execute ( "DELETE FROM Sessions WHERE Session = @session;" , new { session } ) ;
}
public void DeleteVerificationCode ( string code )
{
con . Execute ( "DELETE FROM VerificationCodes WHERE Session = @code;" , new { code } ) ;
}
2024-07-28 22:59:28 +00:00
public int EpisodeCount ( string user , string show , int season )
{
throw new NotImplementedException ( ) ;
}
public Episode GetEpisode ( string user , string show , int season , int episode )
{
throw new NotImplementedException ( ) ;
}
2024-01-04 02:53:13 +00:00
public UserAccount GetFirstUser ( )
{
return con . QueryFirstOrDefault < DapperUserAccount > ( "SELECT * FROM Users LIMIT 0, 1;" ) ? . Account ;
}
public Movie GetMovie ( string user , string movie )
{
long? id = GetUserAccount ( user ) ? . Id ;
if ( ! id . HasValue ) return null ;
return con . QueryFirstOrDefault < DapperMovie > ( "SELECT * FROM Users WHERE UserId=@id; AND Name=@movie" , new { movie , id } ) ? . MovieObject ;
}
public IEnumerable < Movie > GetMovies ( string user )
{
long? id = GetUserAccount ( user ) ? . Id ;
if ( ! id . HasValue ) yield break ;
foreach ( var item in GetMovies ( id . Value ) )
{
yield return item ;
}
}
public IEnumerable < Movie > GetMovies ( long user )
{
foreach ( var item in con . Query < DapperMovie > ( "SELECT * FROM Movies;" ) )
{
yield return item . MovieObject ;
}
}
2024-07-28 22:59:28 +00:00
public Season GetSeason ( string user , string show , int season )
{
throw new NotImplementedException ( ) ;
}
2024-01-04 02:53:13 +00:00
public long? GetSession ( string session )
{
return con . QueryFirstOrDefault ( "SELECT * FROM Sessions WHERE Session = @session;" , new { session } ) ? . Id ;
}
2024-07-28 22:59:28 +00:00
public Show GetShow ( string user , string show )
{
throw new NotImplementedException ( ) ;
}
public IEnumerable < Show > GetShows ( string user )
{
throw new NotImplementedException ( ) ;
}
2024-01-04 02:53:13 +00:00
public UserAccount GetUserAccount ( string user )
{
return con . QueryFirstOrDefault < DapperUserAccount > ( "SELECT * FROM Users WHERE Username=@user;" , new { user } ) ? . Account ;
}
public UserAccount GetUserById ( long account )
{
return con . QueryFirstOrDefault < DapperUserAccount > ( "SELECT * FROM Users WHERE Id=@id;" , new { id = account } ) ? . Account ;
}
public IEnumerable < UserAccount > GetUsers ( )
{
foreach ( var user in con . Query < DapperUserAccount > ( "SELECT * FROM Users;" ) )
{
yield return user . Account ;
}
}
public long? GetVerificationAccount ( string code )
{
var res = con . QueryFirstOrDefault ( "SELECT * FROM VerificationCodes WHERE Session = @code;" , new { code } ) ;
if ( res ! = null )
{
long expires = res . Expires ;
if ( DateTimeOffset . Now > = DateTimeOffset . FromUnixTimeSeconds ( expires ) )
{
con . Execute ( "DELETE FROM VerificationCodes WHERE Session = @code;" , new { code } ) ;
return null ;
}
return res . Account ;
}
return null ;
}
2024-07-28 22:59:28 +00:00
public int SeasonCount ( string user , string show )
{
throw new NotImplementedException ( ) ;
}
public void UpdateEpisode ( Episode episode )
{
throw new NotImplementedException ( ) ;
}
2024-01-04 02:53:13 +00:00
public void UpdateMovie ( Movie movie )
{
DapperMovie dapperMovie = new DapperMovie ( movie ) ;
con . Execute ( "UPDATE Users set movie = @movie WHERE Id = @id;" , new { movie = dapperMovie , id = movie . Id } ) ;
}
2024-07-28 22:59:28 +00:00
public void UpdateSeason ( Season season )
{
throw new NotImplementedException ( ) ;
}
public void UpdateShow ( Show show )
{
throw new NotImplementedException ( ) ;
}
2024-01-04 02:53:13 +00:00
public void UpdateUser ( UserAccount account )
{
DapperUserAccount account1 = new DapperUserAccount ( account ) ;
con . Execute ( "UPDATE Users set user = @user WHERE Id = @id;" , new { user = account1 , id = account1 . Id } ) ;
}
}
internal class DapperMovie
{
public long Id { get ; set ; }
public long UserId { get ; set ; }
public long CreationTime { get ; set ; }
public long LastUpdated { get ; set ; }
public string Description { get ; set ; }
public string Name { get ; set ; }
public string ProperName { get ; set ; }
public Movie MovieObject {
get {
return new Movie ( ) {
UserId = UserId ,
CreationTime = DateTimeOffset . FromUnixTimeSeconds ( CreationTime ) . DateTime ,
LastUpdated = DateTimeOffset . FromUnixTimeSeconds ( LastUpdated ) . DateTime ,
Description = Description ,
Id = Id ,
Name = Name ,
ProperName = ProperName
} ;
}
set {
UserId = value . UserId ;
CreationTime = new DateTimeOffset ( value . CreationTime ) . ToUnixTimeSeconds ( ) ;
LastUpdated = new DateTimeOffset ( value . LastUpdated ) . ToUnixTimeSeconds ( ) ;
Description = value . Description ;
Id = value . Id ;
Name = value . Name ;
ProperName = value . ProperName ;
}
}
public DapperMovie ( Movie movie1 )
{
MovieObject = movie1 ;
}
public DapperMovie ( )
{
}
}
internal class DapperUserAccount
{
public DapperUserAccount ( )
{
}
public DapperUserAccount ( UserAccount account )
{
Account = account ;
}
public long Id { get ; set ; }
public string AboutMe { get ; set ; }
public string AccountsToMail { get ; set ; }
public string Email { get ; set ; }
public bool IsAdmin { get ; set ; }
public bool IsInvited { get ; set ; }
public bool IsVerified { get ; set ; }
public string PasswordHash { get ; set ; }
public string ProperName { get ; set ; }
public string Salt { get ; set ; }
public string Username { get ; set ; }
public string Webhooks { get ; set ; }
public UserAccount Account {
get {
return new UserAccount ( ) {
Id = Id ,
AboutMe = AboutMe ,
AccountsToMail = JsonConvert . DeserializeObject < List < MailEntry > > ( AccountsToMail ) ,
Email = Email ,
IsAdmin = IsAdmin ,
IsInvited = IsInvited ,
IsVerified = IsVerified ,
PasswordHash = PasswordHash ,
ProperName = ProperName ,
Salt = Salt ,
Username = Username ,
Webhooks = JsonConvert . DeserializeObject < List < WebHook > > ( Webhooks )
} ;
}
set {
Id = value . Id ;
AboutMe = value . AboutMe ;
AccountsToMail = JsonConvert . SerializeObject ( value . AccountsToMail ) ;
Email = value . Email ;
IsAdmin = value . IsAdmin ;
IsInvited = value . IsInvited ;
IsVerified = value . IsVerified ;
PasswordHash = value . PasswordHash ;
ProperName = value . ProperName ;
Salt = value . Salt ;
Username = value . Username ;
Webhooks = JsonConvert . SerializeObject ( value . Webhooks ) ;
}
}
}
}