@ -6,9 +6,11 @@ using Microsoft.EntityFrameworkCore.ChangeTracking;
namespace Gremlin_BlazorServer.Services ;
public class GenericController {
private static readonly GremlinDb gremlinDb = new ( ) ;
public IList < TResult > ? GetAll < TResult > ( ) where TResult : class , IMetadata {
try {
using ( GremlinDb gremlinDb = new ( ) ) return gremlinDb . Set < TResult > ( ) . ToList ( ) ;
return gremlinDb . Set < TResult > ( ) . ToList ( ) ;
}
catch ( Exception exception ) {
Console . WriteLine ( exception . InnerException ) ;
@ -18,7 +20,7 @@ public class GenericController {
public IList < TResult > ? GetAll < TResult > ( string include ) where TResult : class , IMetadata {
try {
using ( GremlinDb gremlinDb = new ( ) ) return gremlinDb . Set < TResult > ( ) . Include ( include ) . ToList ( ) ;
return gremlinDb . Set < TResult > ( ) . Include ( include ) . ToList ( ) ;
}
catch ( Exception exception ) {
Console . WriteLine ( exception . InnerException ) ;
@ -29,7 +31,7 @@ public class GenericController {
public IList < TResult > ? GetAll < TResult > ( Predicate < TResult > search ) where TResult : class , IMetadata {
ArgumentNullException . ThrowIfNull ( search ) ;
try {
using ( GremlinDb gremlinDb = new ( ) ) return gremlinDb . Set < TResult > ( ) . AsEnumerable ( ) . Where ( t = > search ( t ) ) . ToList ( ) ;
return gremlinDb . Set < TResult > ( ) . AsEnumerable ( ) . Where ( t = > search ( t ) ) . ToList ( ) ;
}
catch ( Exception exception ) {
Console . WriteLine ( exception . InnerException ) ;
@ -39,7 +41,7 @@ public class GenericController {
public async Task < IList < TResult > ? > GetAllAsync < TResult > ( ) where TResult : class , IMetadata {
try {
await using ( GremlinDb gremlinDb = new ( ) ) return await gremlinDb . Set < TResult > ( ) . ToListAsync ( ) ;
return await gremlinDb . Set < TResult > ( ) . ToListAsync ( ) ;
}
catch ( DbUpdateConcurrencyException exception ) {
await HandleDbUpdateConcurrencyException < TResult > ( exception ) ;
@ -50,7 +52,7 @@ public class GenericController {
public async Task < IList < TResult > ? > GetAllAsync < TResult > ( string include ) where TResult : class , IMetadata {
try {
await using ( GremlinDb gremlinDb = new ( ) ) return await gremlinDb . Set < TResult > ( ) . Include ( include ) . ToListAsync ( ) ;
return await gremlinDb . Set < TResult > ( ) . Include ( include ) . ToListAsync ( ) ;
}
catch ( DbUpdateConcurrencyException exception ) {
await HandleDbUpdateConcurrencyException < TResult > ( exception ) ;
@ -61,7 +63,7 @@ public class GenericController {
public async Task < IList < TResult > ? > GetAllAsync < TResult > ( string include1 , string include2 ) where TResult : class , IMetadata {
try {
await using ( GremlinDb gremlinDb = new ( ) ) return await gremlinDb . Set < TResult > ( ) . Include ( include1 ) . Include ( include2 ) . ToListAsync ( ) ;
return await gremlinDb . Set < TResult > ( ) . Include ( include1 ) . Include ( include2 ) . ToListAsync ( ) ;
}
catch ( DbUpdateConcurrencyException exception ) {
await HandleDbUpdateConcurrencyException < TResult > ( exception ) ;
@ -73,7 +75,7 @@ public class GenericController {
public async Task < IList < TResult > ? > GetAllAsync < TResult > ( Predicate < TResult > search ) where TResult : class , IMetadata {
ArgumentNullException . ThrowIfNull ( search ) ;
try {
await using ( GremlinDb gremlinDb = new ( ) ) return await Task . Run ( ( ) = > gremlinDb . Set < TResult > ( ) . AsEnumerable ( ) . Where ( t = > search ( t ) ) . ToList ( ) ) ;
return await Task . Run ( ( ) = > gremlinDb . Set < TResult > ( ) . AsEnumerable ( ) . Where ( t = > search ( t ) ) . ToList ( ) ) ;
}
catch ( DbUpdateConcurrencyException exception ) {
await HandleDbUpdateConcurrencyException < TResult > ( exception ) ;
@ -85,7 +87,7 @@ public class GenericController {
public async Task < IList < TResult > ? > GetAllAsync < TResult > ( Predicate < TResult > search , string include ) where TResult : class , IMetadata {
ArgumentNullException . ThrowIfNull ( search ) ;
try {
await using ( GremlinDb gremlinDb = new ( ) ) return await Task . Run ( ( ) = > gremlinDb . Set < TResult > ( ) . Include ( include ) . AsEnumerable ( ) . Where ( t = > search ( t ) ) . ToList ( ) ) ;
return await Task . Run ( ( ) = > gremlinDb . Set < TResult > ( ) . Include ( include ) . AsEnumerable ( ) . Where ( t = > search ( t ) ) . ToList ( ) ) ;
}
catch ( DbUpdateConcurrencyException exception ) {
await HandleDbUpdateConcurrencyException < TResult > ( exception ) ;
@ -94,118 +96,114 @@ public class GenericController {
}
}
public IList < TResult > ? GetAll < TResult > ( Predicate < TResult > search , string include ) where TResult : class , IMetadata {
ArgumentNullException . ThrowIfNull ( search ) ;
try {
using ( GremlinDb gremlinDb = new ( ) ) return gremlinDb . Set < TResult > ( ) . Include ( include ) . AsEnumerable ( ) . Where ( t = > search ( t ) ) . ToList ( ) ;
}
catch ( Exception exception ) {
Console . WriteLine ( exception . InnerException ) ;
return null ;
}
}
// public IList<TResult>? GetAll<TResult>(Predicate<TResult> search, string include) where TResult : class, IMetadata {
// ArgumentNullException.ThrowIfNull(search) ;
// try {
// return gremlinDb.Set<TResult>().Include(include).AsEnumerable().Where(t => search(t)).ToList() ;
// }
// catch (Exception exception) {
// Console.WriteLine(exception.InnerException) ;
// return null ;
// }
// }
public TResult ? Get < TResult > ( Predicate < TResult > search ) where TResult : class , IMetadata {
ArgumentNullException . ThrowIfNull ( search ) ;
try {
using ( GremlinDb gremlinDb = new ( ) ) return gremlinDb . Set < TResult > ( ) . AsEnumerable ( ) . FirstOrDefault ( t = > search ( t ) ) ;
}
catch ( Exception exception ) {
Console . WriteLine ( exception . InnerException ) ;
return null ;
}
}
// public TResult? Get<TResult>(Predicate<TResult> search) where TResult : class, IMetadata {
// ArgumentNullException.ThrowIfNull(search);
// try {
// using GremlinDb gremlinDb = new();
// return gremlinDb.Set<TResult>().AsEnumerable().FirstOrDefault(t => search(t));
// }
// catch (Exception exception) {
// Console.WriteLine(exception.InnerException);
// return null;
// }
// }
public async Task < TResult ? > GetAsync < TResult > ( Predicate < TResult > search ) where TResult : class , IMetadata {
ArgumentNullException . ThrowIfNull ( search ) ;
public static async Task < TResult > GetAsync < TResult > ( Predicate < TResult > search ) where TResult : class , IMetadata , new ( ) {
try {
await using ( GremlinDb gremlinDb = new ( ) ) return await Task . Run ( ( ) = > gremlinDb . Set < TResult > ( ) . AsEnumerable ( ) . Firs tOrDefaul t( t = > search ( t ) ) ) ;
return await Task . Run ( ( ) = > gremlinDb . Set < TResult > ( ) . AsEnumerable ( ) . Firs t( t = > search ( t ) ) ) ;
}
catch ( DbUpdateConcurrencyException exception ) {
await HandleDbUpdateConcurrencyException < TResult > ( exception ) ;
Console . WriteLine ( exception . InnerException ) ;
return null ;
catch ( Exception e ) {
Console . WriteLine ( e . InnerException ) ;
return new ( ) ;
}
}
public TResult ? Get < TResult > ( Predicate < TResult > search , string include ) where TResult : class , IMetadata {
ArgumentNullException . ThrowIfNull ( search ) ;
try {
using ( GremlinDb gremlinDb = new ( ) ) return gremlinDb . Set < TResult > ( ) . AsNoTracking ( ) . Include ( include ) . AsEnumerable ( ) . FirstOrDefault ( t = > search ( t ) ) ;
}
catch ( Exception exception ) {
Console . WriteLine ( exception . InnerException ) ;
return null ;
}
}
// public TResult? Get<TResult>(Predicate<TResult> search, string include) where TResult : class, IMetadata {
// ArgumentNullException.ThrowIfNull(search);
// try {
// using GremlinDb gremlinDb = new();
// return gremlinDb.Set<TResult>().AsNoTracking().Include(include).AsEnumerable().FirstOrDefault(t => search(t));
// }
// catch (Exception exception) {
// Console.WriteLine(exception.InnerException);
// return null;
// }
// }
public async Task < TResult ? > GetAsync < TResult > ( Predicate < TResult > search , string include1 ) where TResult : class , IMetadata {
public async Task < TResult > GetAsync < TResult > ( Predicate < TResult > search , string include1 ) where TResult : class , IMetadata , new ( ) {
ArgumentNullException . ThrowIfNull ( search ) ;
try {
await using ( GremlinDb gremlinDb = new ( ) ) return await Task . Run ( ( ) = > gremlinDb . Set < TResult > ( ) . Include ( include1 ) . AsEnumerable ( ) . Firs tOrDefaul t( t = > search ( t ) ) ) ;
return await Task . Run ( ( ) = > gremlinDb . Set < TResult > ( ) . Include ( include1 ) . AsEnumerable ( ) . Firs t( t = > search ( t ) ) ) ;
}
catch ( DbUpdateConcurrencyException exception ) {
await HandleDbUpdateConcurrencyException < TResult > ( exception ) ;
Console . WriteLine ( exception . InnerException ) ;
return null ;
return new ( ) ;
}
}
public async Task < TResult ? > GetAsync < TResult > ( Predicate < TResult > search , string include1 , string include2 ) where TResult : class , IMetadata {
public async Task < TResult > GetAsync < TResult > ( Predicate < TResult > search , string include1 , string include2 ) where TResult : class , IMetadata , new ( ) {
ArgumentNullException . ThrowIfNull ( search ) ;
try {
await using ( GremlinDb gremlinDb = new ( ) ) return await Task . Run ( ( ) = > gremlinDb . Set < TResult > ( ) . Include ( include1 ) . Include ( include2 ) . AsEnumerable ( ) . Firs tOrDefaul t( t = > search ( t ) ) ) ;
return await Task . Run ( ( ) = > gremlinDb . Set < TResult > ( ) . Include ( include1 ) . Include ( include2 ) . AsEnumerable ( ) . Firs t( t = > search ( t ) ) ) ;
}
catch ( DbUpdateConcurrencyException exception ) {
await HandleDbUpdateConcurrencyException < TResult > ( exception ) ;
Console . WriteLine ( exception . InnerException ) ;
return null ;
return new ( ) ;
}
}
public TResult ? GetLast < TResult > ( ) where TResult : class , IMetadata {
public static async Task < TResult > GetLastAsync < TResult > ( ) where TResult : class , IMetadata , new ( ) {
try {
using ( GremlinDb gremlinDb = new ( ) ) return gremlinDb . Set < TResult > ( ) . AsEnumerable ( ) . Last ( ) ;
return await Task . Run ( ( ) = > gremlinDb . Set < TResult > ( ) . AsEnumerable ( ) . Last ( ) ) ;
}
catch ( Exception exception ) {
Console . WriteLine ( exception . InnerException ) ;
return null ;
return new ( ) ;
}
}
public int Insert < T > ( T entity ) where T : class , IMetadata {
try {
using ( GremlinDb gremlinDb = new ( ) ) {
gremlinDb . Set < T > ( ) . Add ( entity ) ;
return gremlinDb . SaveChanges ( ) ;
}
}
catch ( Exception exception ) {
Console . WriteLine ( exception . InnerException ) ;
return 0 ;
}
}
// public int Insert<T>(T entity) where T : class, IMetadata {
// try {
// using GremlinDb gremlinDb = new();
// gremlinDb.Set<T>().Add(entity);
// return gremlinDb.SaveChanges();
// }
// catch (Exception exception) {
// Console.WriteLine(exception.InnerException);
// return 0;
// }
// }
public int Insert < T > ( IEnumerable < T > entities ) where T : class , IMetadata {
try {
using ( GremlinDb gremlinDb = new ( ) ) {
gremlinDb . Set < T > ( ) . AddRange ( entities ) ;
return gremlinDb . SaveChanges ( ) ;
}
}
catch ( Exception exception ) {
Console . WriteLine ( exception . InnerException ) ;
return 0 ;
}
}
// public int Insert<T>(IEnumerable<T> entities) where T : class, IMetadata {
// try {
// using GremlinDb gremlinDb = new();
// gremlinDb.Set<T>().AddRange(entities);
// return gremlinDb.SaveChanges();
// }
// catch (Exception exception) {
// Console.WriteLine(exception.InnerException);
// return 0;
// }
// }
public async Task < int > InsertAsync < T > ( T entity ) where T : class , IMetadata {
try {
await using ( GremlinDb gremlinDb = new ( ) ) {
gremlinDb . Set < T > ( ) . Add ( entity ) ;
return await gremlinDb . SaveChangesAsync ( ) ;
}
}
catch ( DbUpdateConcurrencyException exception ) {
await HandleDbUpdateConcurrencyException < T > ( exception ) ;
Console . WriteLine ( exception . InnerException ) ;
@ -215,11 +213,9 @@ public class GenericController {
public async Task < int > InsertAsync < T > ( IEnumerable < T > entities ) where T : class , IMetadata {
try {
await using ( GremlinDb gremlinDb = new ( ) ) {
gremlinDb . Set < T > ( ) . AddRange ( entities ) ;
return await gremlinDb . SaveChangesAsync ( ) ;
}
}
catch ( DbUpdateConcurrencyException exception ) {
await HandleDbUpdateConcurrencyException < T > ( exception ) ;
Console . WriteLine ( exception . InnerException ) ;
@ -227,10 +223,9 @@ public class GenericController {
}
}
public static bool IsExisting < T > ( Predicate < T > search ) where T : class , IMetadata {
ArgumentNullException . ThrowIfNull ( search ) ;
public static async Task < bool > IsExistingAsync < T > ( Predicate < T > search ) where T : class , IMetadata {
try {
using ( GremlinDb gremlinDb = new ( ) ) return gremlinDb . Set < T > ( ) . AsEnumerable ( ) . Any ( t = > search ( t ) ) ;
return await Task . Run ( ( ) = > gremlinDb . Set < T > ( ) . AsEnumerable ( ) . Any ( t = > search ( t ) ) ) ;
}
catch ( Exception exception ) {
Console . WriteLine ( exception . InnerException ) ;
@ -238,21 +233,19 @@ public class GenericController {
}
}
public int Update < T > ( T entity ) where T : class , IMetadata {
try {
using ( GremlinDb gremlinDb = new ( ) ) {
gremlinDb . Set < T > ( ) . Update ( entity ) ;
return gremlinDb . SaveChanges ( ) ;
}
}
catch ( Exception exception ) {
Console . WriteLine ( exception . InnerException ) ;
return 0 ;
}
}
// public int Update<T>(T entity) where T : class, IMetadata {
// try {
// using GremlinDb gremlinDb = new();
// gremlinDb.Set<T>().Update(entity);
// return gremlinDb.SaveChanges();
// }
// catch (Exception exception) {
// Console.WriteLine(exception.InnerException);
// return 0;
// }
// }
public async Task < int > UpdateAsync < T > ( T entity ) where T : class , IMetadata {
await using ( GremlinDb gremlinDb = new ( ) ) {
try {
gremlinDb . Set < T > ( ) . Update ( entity ) ;
return await gremlinDb . SaveChangesAsync ( false ) ;
@ -263,19 +256,17 @@ public class GenericController {
return 0 ;
}
}
}
private async Task HandleDbUpdateConcurrencyException < T > ( DbUpdateConcurrencyException exception ) where T : class , IMetadata {
private static async Task HandleDbUpdateConcurrencyException < T > ( DbUpdateConcurrencyException exception ) where T : class , IMetadata {
// Loop through the entities that caused the concurrency conflict
foreach ( EntityEntry ? entry in exception . Entries ) {
if ( entry . Entity is T ) {
T ? clientValues = ( T ) entry . Entity ;
if ( entry . Entity is not T clientValues ) throw new NotSupportedException ( $"Concurrency conflicts for entities of type {entry.Entity.GetType().Name} are not supported." ) ;
PropertyValues ? databaseEntry = await entry . GetDatabaseValuesAsync ( ) ;
if ( databaseEntry is null )
// The record has been deleted from the database
// Notify the user or handle the error in some other way
throw new ( "The record has been deleted from the database." ) ;
T ? databaseValues = ( T ) databaseEntry . ToObject ( ) ;
T databaseValues = ( T ) databaseEntry . ToObject ( ) ;
// Compare the database values with the client values
if ( databaseValues . DataVersionNumber ! = clientValues . DataVersionNumber )
// The name has been changed by another user
@ -284,60 +275,57 @@ public class GenericController {
// The conflict is caused by a property other than the name
// Notify the user or handle the error in some other way
throw new ( "A concurrency conflict occurred." ) ;
}
// Handle concurrency conflicts for other entity types, if necessary
throw new NotSupportedException ( $"Concurrency conflicts for entities of type {entry.Entity.GetType().Name} are not supported." ) ;
}
}
public int Update < T > ( IEnumerable < T > entities ) where T : class , IMetadata {
try {
using ( GremlinDb gremlinDb = new ( ) ) {
gremlinDb . Set < T > ( ) . UpdateRange ( entities ) ;
return gremlinDb . SaveChanges ( ) ;
}
}
catch ( Exception exception ) {
Console . WriteLine ( exception . InnerException ) ;
return 0 ;
}
}
// public int Update<T>(IEnumerable<T> entities) where T : class, IMetadata {
// try {
// using GremlinDb gremlinDb = new();
// gremlinDb.Set<T>().UpdateRange(entities);
// return gremlinDb.SaveChanges();
// }
// catch (Exception exception) {
// Console.WriteLine(exception.InnerException);
// return 0;
// }
// }
publ ic async Task < int > UpdateAsync < T > ( IEnumerable < T > entities ) where T : class , IMetadata {
public stat ic async Task < int > UpdateAsync < T > ( IEnumerable < T > entities ) where T : class , IMetadata {
try {
await using ( GremlinDb gremlinDb = new ( ) ) {
gremlinDb . Set < T > ( ) . UpdateRange ( entities ) ;
await Task . Run ( ( ) = > gremlinDb . Set < T > ( ) . UpdateRange ( entities ) ) ;
return await gremlinDb . SaveChangesAsync ( ) ;
}
}
catch ( Exception exception ) {
Console . WriteLine ( exception . InnerException ) ;
return 0 ;
}
}
publ ic async Task < int > RemoveAsync < T > ( T entity ) where T : class , IMetadata {
public stat ic async Task < int > RemoveAsync < T > ( T entity ) where T : class , IMetadata {
try {
await using ( GremlinDb gremlinDb = new ( ) ) {
gremlinDb . Set < T > ( ) . Remove ( entity ) ;
await Task . Run ( ( ) = > gremlinDb . Set < T > ( ) . Remove ( entity ) ) ;
return await gremlinDb . SaveChangesAsync ( ) ;
}
}
catch ( Exception exception ) {
Console . WriteLine ( exception . InnerException ) ;
return 0 ;
}
}
public async Task < Account > ResolveAccountById ( uint accountId ) {
try {
await using ( GremlinDb gremlinDb = new ( ) ) {
return gremlinDb . Accounts . First ( a = > a . AccountId . Equals ( accountId ) ) ;
}
}
catch {
return new Account ( ) ;
}
}
// public async Task<Account?> ResolveAccountById(uint accountId){
// try {
//
// if (gremlinDb.Accounts != null)
// return gremlinDb.Accounts.First(a => a.AccountId.Equals(accountId));
// else {
// return null;
// }
// }
// catch (Exception exception){
// Console.WriteLine(exception.InnerException);
// return null;
// }
// }
}